From bea420f8a11ca7dbb7f5ea2664ea2ce41fc61b84 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Tue, 20 Jun 2023 00:50:15 -0700 Subject: [PATCH 001/121] Create an enum for the various `face_reaction` reaction sets (#1299) * Create an enum for the various `face_reaction` reaction sets * Respond to reviews * Add blank line --- include/functions.h | 2 -- include/z64message.h | 14 ++++++++++++++ src/code/z_face_reaction.c | 18 +++++++++--------- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 ++-- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 6 +++--- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 12 ++++++------ src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 4 ++-- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 4 ++-- 8 files changed, 38 insertions(+), 26 deletions(-) diff --git a/include/functions.h b/include/functions.h index 36459ecbd..b6d6964bc 100644 --- a/include/functions.h +++ b/include/functions.h @@ -802,8 +802,6 @@ void GetItem_Draw(PlayState* play, s16 drawId); u16 QuestHint_GetTatlTextId(PlayState* play); -u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); - void func_800F4A10(PlayState* play); void KaleidoSetup_Update(PlayState* play); void KaleidoSetup_Init(PlayState* play); diff --git a/include/z64message.h b/include/z64message.h index 09c9c4e04..2a3810ff1 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -8,10 +8,24 @@ struct Actor; struct MessageTableEntry; struct OcarinaStaff; +struct PlayState; extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; +typedef enum FaceReactionSet { + /* 0x11 */ FACE_REACTION_SET_JIM = 0x11, + /* 0x12 */ FACE_REACTION_SET_BOMBERS, + /* 0x15 */ FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD = 0x15, + /* 0x2D */ FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL = 0x2D, + /* 0x2F */ FACE_REACTION_SET_CURIOSITY_SHOP_MAN = 0x2F, + /* 0x30 */ FACE_REACTION_SET_TOWN_SHOOTING_GALLERY_MAN, + /* 0x31 */ FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN, + /* 0x36 */ FACE_REACTION_SET_PART_TIMER = 0x36 +} FaceReactionSet; + +u16 Text_GetFaceReaction(struct PlayState* play, FaceReactionSet reactionSet); + typedef enum TextState { /* 0 */ TEXT_STATE_NONE, /* 1 */ TEXT_STATE_1, diff --git a/src/code/z_face_reaction.c b/src/code/z_face_reaction.c index e6d985d65..0d2d632ab 100644 --- a/src/code/z_face_reaction.c +++ b/src/code/z_face_reaction.c @@ -43,15 +43,15 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = { /* 0x10 */ { 0 }, /* 0x11 */ { 0x0000, 0x236B, 0x0000, 0x0000, 0x236C, 0x0000, 0x0000, 0x236D, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x236E, 0x0000, 0x0000, 0x0000 }, + 0x0000, 0x0000, 0x0000, 0x236E, 0x0000, 0x0000, 0x0000 }, // FACE_REACTION_SET_JIM /* 0x12 */ { 0x2348, 0x2349, 0x234A, 0x0000, 0x234B, 0x2348, 0x234C, 0x2348, 0x234D, 0x234E, 0x2348, 0x2348, - 0x2348, 0x2348, 0x2348, 0x234F, 0x2348, 0x2348, 0x2350 }, + 0x2348, 0x2348, 0x2348, 0x234F, 0x2348, 0x2348, 0x2350 }, // FACE_REACTION_SET_BOMBERS /* 0x13 */ { 0 }, /* 0x14 */ { 0 }, /* 0x15 */ { 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2356, 0x2358, 0x2359, 0x2356, 0x235A, - 0x2353, 0x235A, 0x235A, 0x235B, 0x2354, 0x2351, 0x235C }, + 0x2353, 0x235A, 0x235A, 0x235B, 0x2354, 0x2351, 0x235C }, // FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD /* 0x16 */ { 0 }, /* 0x17 */ { 0 }, /* 0x18 */ { 0 }, @@ -77,24 +77,24 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = { /* 0x2C */ { 0 }, /* 0x2D */ { 0x233B, 0x233C, 0x233D, 0x233E, 0x233F, 0x233B, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, - 0x2346, 0x233B, 0x2345, 0x2347, 0x233D, 0x233B, 0x233D }, + 0x2346, 0x233B, 0x2345, 0x2347, 0x233D, 0x233B, 0x233D }, // FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL /* 0x2E */ { 0 }, /* 0x2F */ { 0x2328, 0x2329, 0x232A, 0x232B, 0x2328, 0x2328, 0x232C, 0x2328, 0x232D, 0x232E, 0x2328, 0x2328, - 0x2328, 0x232F, 0x2330, 0x2331, 0x2332, 0x2333, 0x2328 }, + 0x2328, 0x232F, 0x2330, 0x2331, 0x2332, 0x2333, 0x2328 }, // FACE_REACTION_SET_CURIOSITY_SHOP_MAN /* 0x30 */ { 0x236F, 0x2370, 0x236F, 0x0000, 0x236F, 0x236F, 0x236F, 0x236F, 0x0000, 0x236F, 0x236F, 0x236F, - 0x236F, 0x236F, 0x2371, 0x2372, 0x236F, 0x236F, 0x236F }, + 0x236F, 0x236F, 0x2371, 0x2372, 0x236F, 0x236F, 0x236F }, // FACE_REACTION_SET_TOWN_SHOOTING_GALLERY_MAN /* 0x31 */ { 0x2373, 0x2374, 0x2373, 0x0000, 0x2373, 0x2373, 0x2373, 0x2373, 0x0000, 0x2375, 0x2376, 0x2373, - 0x2373, 0x2373, 0x2377, 0x2378, 0x2373, 0x2373, 0x2373 }, + 0x2373, 0x2373, 0x2377, 0x2378, 0x2373, 0x2373, 0x2373 }, // FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN /* 0x32 */ { 0 }, /* 0x33 */ { 0 }, /* 0x34 */ { 0 }, /* 0x35 */ { 0 }, /* 0x36 */ { 0x0000, 0x2334, 0x0000, 0x0000, 0x0000, 0x0000, 0x2335, 0x0000, 0x2336, 0x2337, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2338, 0x2339, 0x0000, 0x233A, 0x0000 }, + 0x0000, 0x0000, 0x2338, 0x2339, 0x0000, 0x233A, 0x0000 }, // FACE_REACTION_SET_PART_TIMER /* 0x37 */ { 0 }, /* 0x38 */ { 0 }, /* 0x39 */ { 0 }, @@ -178,7 +178,7 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = { }; // clang-format on -u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet) { +u16 Text_GetFaceReaction(PlayState* play, FaceReactionSet reactionSet) { if ((Player_GetMask(play) > PLAYER_MASK_NONE) && (Player_GetMask(play) < PLAYER_MASK_GIANT)) { return sReactionTextIds[reactionSet][Player_GetMask(play) - 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 55f7ff281..a600df6d2 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -295,11 +295,11 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { break; } - if (!Text_GetFaceReaction(play, 0x12)) { + if (Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS) == 0) { func_80C039A8(this, play); } else { this->unk_2A6 = TEXT_STATE_5; - this->actor.textId = Text_GetFaceReaction(play, 0x12); + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { 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 81e8723e0..c29916d3a 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -160,8 +160,8 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { } this->actor.textId = sTextIds[this->textIdIndex]; - if (Text_GetFaceReaction(play, 0x15) != 0) { - this->actor.textId = Text_GetFaceReaction(play, 0x15); + if (Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD) != 0) { + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -240,7 +240,7 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { return; } } - if (Text_GetFaceReaction(play, 0x15) != 0) { + if (Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD) != 0) { this->unk_28E = 0; Message_CloseTextbox(play); func_80C04B40(this); 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 229a1e695..ea5feeacd 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -379,8 +379,8 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { } } - if (Text_GetFaceReaction(play, 0x11) != 0) { - this->actor.textId = Text_GetFaceReaction(play, 0x11); + if (Text_GetFaceReaction(play, FACE_REACTION_SET_JIM) != 0) { + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_JIM); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -498,8 +498,8 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { this->cutsceneEnded = true; } - if (Text_GetFaceReaction(play, 0x11) != 0) { - this->actor.textId = Text_GetFaceReaction(play, 0x11); + if (Text_GetFaceReaction(play, FACE_REACTION_SET_JIM) != 0) { + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_JIM); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -881,8 +881,8 @@ void func_80C00168(EnBomjima* this, PlayState* play) { func_80BFE32C(this, play, 0); func_80BFE67C(this, play); - if (Text_GetFaceReaction(play, 0x11) != 0) { - this->actor.textId = Text_GetFaceReaction(play, 0x11); + if (Text_GetFaceReaction(play, FACE_REACTION_SET_JIM) != 0) { + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_JIM); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 7ada3a223..24c16ad20 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1402,7 +1402,7 @@ void EnOssan_PartTimer_Init(EnOssan* this, PlayState* play) { u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { Player* player = GET_PLAYER(play); - u16 textId = Text_GetFaceReaction(play, 0x2F); + u16 textId = Text_GetFaceReaction(play, FACE_REACTION_SET_CURIOSITY_SHOP_MAN); if (textId != 0) { this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START; @@ -1440,7 +1440,7 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { Player* player = GET_PLAYER(play); - u16 textId = Text_GetFaceReaction(play, 0x36); + u16 textId = Text_GetFaceReaction(play, FACE_REACTION_SET_PART_TIMER); if (textId != 0) { this->flags |= END_INTERACTION; 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 a5c4ad4e2..150aa6da7 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 @@ -266,7 +266,7 @@ void EnSyatekiMan_Swamp_Idle(EnSyatekiMan* this, PlayState* play) { u16 faceReactionTextId; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END); - faceReactionTextId = Text_GetFaceReaction(play, 0x31); + faceReactionTextId = Text_GetFaceReaction(play, FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN); if (faceReactionTextId != 0) { Message_StartTextbox(play, faceReactionTextId, &this->actor); this->prevTextId = faceReactionTextId; @@ -592,7 +592,7 @@ void EnSyatekiMan_Town_StartIntroTextbox(EnSyatekiMan* this, PlayState* play) { void EnSyatekiMan_Town_Idle(EnSyatekiMan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - u16 faceReactionTextId = Text_GetFaceReaction(play, 0x30); + u16 faceReactionTextId = Text_GetFaceReaction(play, FACE_REACTION_SET_TOWN_SHOOTING_GALLERY_MAN); if (faceReactionTextId != 0) { Message_StartTextbox(play, faceReactionTextId, &this->actor); From 7194936203917389a013c35be24d1675d8044a0f Mon Sep 17 00:00:00 2001 From: SeDan01 <135468170+SeDan01@users.noreply.github.com> Date: Tue, 20 Jun 2023 04:09:50 -0400 Subject: [PATCH 002/121] object_firefly Decomp (#1285) * object_firefly dLists and skel * most limbs, textures * more limbs, comments, outnames. * fixed d list name in z_en_firefly * enum name fix, limbIndex numbers fix, root name fix * llvm changes because of format.py * deleted llvms and max limbs number fixed * z_en_firefly changes after clang format * error in the build because of these two * fixed limbIndex issue and added enum names instead * equal sign that was missing * limbIndex number was wrong * z_en_firefly.h include changes and morph/joint table changes * build retry * format.py again and build retry --- assets/xml/objects/object_firefly.xml | 129 +++++++++++------- .../actors/ovl_En_Firefly/z_en_firefly.c | 23 ++-- .../actors/ovl_En_Firefly/z_en_firefly.h | 5 +- 3 files changed, 93 insertions(+), 64 deletions(-) diff --git a/assets/xml/objects/object_firefly.xml b/assets/xml/objects/object_firefly.xml index acdcedb1d..93e5640b6 100644 --- a/assets/xml/objects/object_firefly.xml +++ b/assets/xml/objects/object_firefly.xml @@ -1,54 +1,83 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 fd3b723d8..131b714d1 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -6,7 +6,6 @@ #include "z_en_firefly.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" -#include "objects/object_firefly/object_firefly.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) @@ -134,8 +133,8 @@ void EnFirefly_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_Init(play, &this->skelAnime, &object_firefly_Skel_0018B8, &object_firefly_Anim_00017C, this->jointTable, - this->morphTable, 28); + SkelAnime_Init(play, &this->skelAnime, &gFireKeeseSkel, &gFireKeeseFlyAnim, this->jointTable, this->morphTable, + FIRE_KEESE_LIMB_MAX); Collider_InitAndSetSphere(play, &this->collider, &this->actor, &sSphereInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -340,7 +339,7 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { void EnFirefly_SetupFall(EnFirefly* this, PlayState* play) { this->timer = 40; this->actor.velocity.y = 0.0f; - Animation_Change(&this->skelAnime, &object_firefly_Anim_00017C, 0.0f, 6.0f, 6.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gFireKeeseFlyAnim, 0.0f, 6.0f, 6.0f, ANIMMODE_ONCE, 0.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_DEAD); this->actor.flags |= ACTOR_FLAG_10; @@ -747,7 +746,7 @@ s32 EnFirefly_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 if (this->isInvisible && (play->actorCtx.lensMaskSize != LENS_MASK_ACTIVE_SIZE)) { *dList = NULL; - } else if (limbIndex == 1) { + } else if (limbIndex == FIRE_KEESE_LIMB_ROOT) { pos->y += 2300.0f; } return false; @@ -768,11 +767,11 @@ void EnFirefly_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* s32 pad; EnFirefly* this = THIS; - if ((this->currentType != KEESE_FIRE) && (limbIndex == 27)) { - gSPDisplayList((*gfx)++, object_firefly_DL_001678); + if ((this->currentType != KEESE_FIRE) && (limbIndex == FIRE_KEESE_LIMB_HEAD)) { + gSPDisplayList((*gfx)++, gKeeseRedEyesDL); } else if ((this->lastDrawnFrame != play->gameplayFrames) && ((this->auraType == KEESE_AURA_FIRE) || (this->auraType == KEESE_AURA_ICE)) && - ((limbIndex == 15) || (limbIndex == 21))) { + ((limbIndex == FIRE_KEESE_LIMB_LEFT_WING_END) || (limbIndex == FIRE_KEESE_LIMB_RIGHT_WING_END_ROOT))) { if (this->actionFunc != EnFirefly_Die) { Matrix_MultZero(&auraPos); auraPos.x += Rand_ZeroFloat(5.0f); @@ -781,7 +780,7 @@ void EnFirefly_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* auraScaleStep = -40; auraLife = 3; } else { - if (limbIndex == 15) { + if (limbIndex == FIRE_KEESE_LIMB_LEFT_WING_END) { auraPos.x = Math_SinS(9100 * this->timer) * this->timer + this->actor.world.pos.x; auraPos.z = Math_CosS(9100 * this->timer) * this->timer + this->actor.world.pos.z; } else { @@ -806,11 +805,11 @@ void EnFirefly_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* auraLife); } - if (limbIndex == 15) { + if (limbIndex == FIRE_KEESE_LIMB_LEFT_WING_END) { Matrix_MultZero(&this->limbPos[0]); - } else if (limbIndex == 21) { + } else if (limbIndex == FIRE_KEESE_LIMB_RIGHT_WING_END_ROOT) { Matrix_MultZero(&this->limbPos[1]); - } else if (limbIndex == 10) { + } else if (limbIndex == FIRE_KEESE_LIMB_BODY) { Matrix_MultZero(&this->limbPos[2]); } } diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h index 6ac9fb008..429cec7c3 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h @@ -2,6 +2,7 @@ #define Z_EN_FIREFLY_H #include "global.h" +#include "objects/object_firefly/object_firefly.h" struct EnFirefly; @@ -27,8 +28,8 @@ typedef struct EnFirefly { /* 0x18F */ u8 drawDmgEffType; /* 0x190 */ s16 timer; /* 0x192 */ s16 pitchTarget; - /* 0x194 */ Vec3s jointTable[28]; - /* 0x23C */ Vec3s morphTable[28]; + /* 0x194 */ Vec3s jointTable[FIRE_KEESE_LIMB_MAX]; + /* 0x23C */ Vec3s morphTable[FIRE_KEESE_LIMB_MAX]; /* 0x2E4 */ f32 maxAltitude; /* 0x2E8 */ f32 drawDmgEffAlpha; /* 0x2E8 */ f32 drawDmgEffScale; From 9c0fc94fe3c331fb125a4e4c23409f527f35c023 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:13:51 +1000 Subject: [PATCH 003/121] Audio Sfx Functions Decompiled and Documented (code_8019AF00.c) (#1242) * sfx decomp and docs * function headers * namefixer * oops * better sfx name * PR review * namefixer * PR review * float * namefixer * namefixer * namefixer * PR Suggestions --- docs/tutorial/advanced_control_flow.md | 78 +-- include/functions.h | 72 +-- include/sfx.h | 42 ++ src/audio/code_8019AF00.c | 481 ++++++++++++++++-- src/audio/sfx.c | 4 +- src/code/z_actor.c | 117 +++-- src/code/z_camera.c | 12 +- src/code/z_collision_check.c | 32 +- src/code/z_demo.c | 20 +- src/code/z_en_item00.c | 4 +- src/code/z_eventmgr.c | 4 +- src/code/z_kaleido_setup.c | 2 +- src/code/z_lib.c | 13 +- src/code/z_lifemeter.c | 2 +- src/code/z_map_exp.c | 4 +- src/code/z_message.c | 12 +- src/code/z_parameter.c | 46 +- src/code/z_play.c | 6 +- src/code/z_play_hireso.c | 16 +- src/code/z_player_lib.c | 2 +- src/code/z_sound_source.c | 4 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 8 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 2 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c | 6 +- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 2 +- .../ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c | 4 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 5 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 18 +- .../z_bg_dblue_waterfall.c | 4 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 6 +- .../actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c | 2 +- .../actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c | 2 +- .../actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c | 4 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 2 +- .../ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c | 2 +- .../z_bg_hakugin_elvpole.c | 2 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 14 +- .../z_bg_hakugin_switch.c | 4 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 2 +- .../z_bg_ikana_rotaryroom.c | 8 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 4 +- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c | 2 +- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c | 8 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 8 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 4 +- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c | 2 +- .../ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c | 4 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 8 +- .../ovl_Bg_Spout_Fire/z_bg_spout_fire.c | 2 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 16 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 10 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 4 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 8 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 4 +- .../actors/ovl_Demo_Moonend/z_demo_moonend.c | 4 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 4 +- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 2 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 2 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 26 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 4 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 4 +- .../actors/ovl_Eff_Zoraband/z_eff_zoraband.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 60 +-- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 10 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 4 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 40 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 2 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 2 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 4 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 16 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 4 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 8 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 4 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 8 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 2 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 6 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 10 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 2 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 2 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 2 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 6 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 6 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 6 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 8 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 8 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 6 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 10 +- src/overlays/actors/ovl_En_Fall2/z_en_fall2.c | 2 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 16 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 38 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 6 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 42 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 12 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 4 +- .../actors/ovl_En_Gakufu/z_en_gakufu.c | 2 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 16 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 4 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 2 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 6 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 26 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 14 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 8 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 12 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 4 +- .../actors/ovl_En_Hit_Tag/z_en_hit_tag.c | 2 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 194 +++---- .../z_en_horse_game_check.c | 8 +- .../z_en_horse_link_child.c | 10 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 34 +- .../z_en_invisible_ruppe.c | 6 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 6 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 12 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 8 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 2 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 16 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 10 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 10 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 8 +- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 6 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 34 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 8 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 6 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 6 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 2 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 24 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 8 +- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 8 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 2 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 2 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 2 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 8 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 38 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 8 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 2 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 12 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 4 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 10 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 4 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 4 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 4 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 2 +- .../ovl_En_River_Sound/z_en_river_sound.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 10 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 8 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 6 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 36 +- .../actors/ovl_En_Stream/z_en_stream.c | 2 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 8 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 2 +- .../z_en_syateki_dekunuts.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 16 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 4 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 14 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 6 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 12 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 10 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 4 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 38 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 8 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 4 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 4 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 2 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 4 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 8 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 4 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 4 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 4 +- src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c | 2 +- src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c | 2 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 10 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c | 4 +- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 2 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 4 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 2 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 10 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.c | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 4 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 4 +- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 4 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 4 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 2 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.c | 2 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 2 +- .../ovl_Obj_Snowball2/z_obj_snowball2.c | 2 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 4 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 16 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 2 +- .../actors/ovl_Obj_Y2lift/z_obj_y2lift.c | 2 +- .../ovl_Obj_Y2shutter/z_obj_y2shutter.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 4 +- .../actors/ovl_player_actor/z_player.c | 114 +++-- .../fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c | 4 +- .../gamestates/ovl_daytelop/z_daytelop.c | 2 +- .../ovl_file_choose/z_file_choose_NES.c | 22 +- .../ovl_file_choose/z_file_copy_erase.c | 56 +- .../ovl_file_choose/z_file_nameset_NES.c | 44 +- src/overlays/gamestates/ovl_select/z_select.c | 12 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 4 +- .../ovl_kaleido_scope/z_kaleido_item.c | 20 +- .../ovl_kaleido_scope/z_kaleido_map.c | 10 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 14 +- .../ovl_kaleido_scope/z_kaleido_prompt.c | 4 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 52 +- tools/disasm/functions.txt | 112 ++-- tools/disasm/variables.txt | 2 +- tools/namefixer.py | 44 +- tools/sizes/code_functions.csv | 112 ++-- 256 files changed, 1837 insertions(+), 1401 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index aa4ba3621..0217cdde2 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -181,23 +181,23 @@ void func_809527F8(EnMs* this, PlayState* play) { if (temp_v0_2 != 1) { } - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); // Duplicate return node #17. Try simplifying control flow for better match return; } Message_CloseTextbox(play); if ((s32) gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); return; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -277,24 +277,24 @@ block_11: if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) { goto block_13; } - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; block_13: if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] < 0x14) { goto block_15; } - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); return; block_15: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; return; block_16: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); block_17: return; @@ -315,17 +315,17 @@ The simplest sort of block label to eliminate is one that is only used once, and if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) { goto block_13; } - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; 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: +Currently, this says to jump over the code block `Audio_PlaySfx...` 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.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } @@ -379,23 +379,23 @@ block_11: Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); return; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; return; block_16: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); block_17: return; @@ -448,23 +448,23 @@ block_11: Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); return; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; return; block_16: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); } ``` @@ -498,17 +498,17 @@ So let us rewrite the entire second half as a switch: Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); return; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -517,7 +517,7 @@ So let us rewrite the entire second half as a switch: case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); break; } @@ -534,13 +534,13 @@ There's a couple of other obvious things here: Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -549,7 +549,7 @@ There's a couple of other obvious things here: case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); break; } @@ -599,13 +599,13 @@ block_7: Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -614,7 +614,7 @@ block_7: case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); break; } @@ -664,13 +664,13 @@ void func_809527F8(EnMs* this, PlayState* play) { Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -679,7 +679,7 @@ void func_809527F8(EnMs* this, PlayState* play) { case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); break; } @@ -716,13 +716,13 @@ void func_809527F8(EnMs* this, PlayState* play) { Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x935U); } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { - play_sound(0x4806U); + Audio_PlaySfx(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f); Rupees_ChangeBy(-0xA); this->actionFunc = func_809529AC; @@ -731,7 +731,7 @@ void func_809527F8(EnMs* this, PlayState* play) { case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934U); break; } diff --git a/include/functions.h b/include/functions.h index b6d6964bc..c64fd607d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -649,14 +649,14 @@ void func_800B8DD4(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4, void func_800B8E1C(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4); void Player_PlaySfx(Player* player, u16 sfxId); void Actor_PlaySfx(Actor* actor, u16 sfxId); -void func_800B8EF4(PlayState* play, Actor* actor); -void func_800B8F98(Actor* actor, u16 sfxId); -void func_800B8FC0(Actor* actor, u16 sfxId); -void func_800B8FE8(Actor* actor, u16 sfxId); -void func_800B9010(Actor* actor, u16 sfxId); -void func_800B9038(Actor* actor, s32 timer); -void func_800B9084(Actor* actor); -void func_800B9098(Actor* actor); +void Actor_PlaySfx_SurfaceBomb(PlayState* play, Actor* actor); +void Actor_PlaySfx_FlaggedCentered1(Actor* actor, u16 sfxId); +void Actor_PlaySfx_FlaggedCentered2(Actor* actor, u16 sfxId); +void Actor_PlaySfx_FlaggedCentered3(Actor* actor, u16 sfxId); +void Actor_PlaySfx_Flagged(Actor* actor, u16 sfxId); +void Actor_PlaySfx_FlaggedTimer(Actor* actor, s32 timer); +void Actor_PlaySeq_FlaggedKamaroDance(Actor* actor); +void Actor_PlaySeq_FlaggedMusicBoxHouse(Actor* actor); s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4); void Actor_DeactivateLens(PlayState* play); void Actor_InitHalfDaysBit(ActorContext* actorCtx); @@ -900,9 +900,9 @@ void* Lib_MemSet(void* buffer, s32 value, size_t size); void func_800FF3A0(f32* distOut, s16* angleOut, Input* input); void Actor_ProcessInitChain(Actor* actor, InitChainEntry* ichain); void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src); -void func_801000A4(u16 sfxId); -void func_801000CC(u16 sfxId); -void Lib_PlaySfxAtPos(Vec3f* pos, u16 sfxId); +void Lib_PlaySfx(u16 sfxId); +void Lib_PlaySfx_2(u16 sfxId); +void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId); void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst); void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); void Lib_Nop801004FC(void); @@ -1873,53 +1873,12 @@ void AudioOcarina_PlayLongScarecrowSong(void); void Audio_Update(void); void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex); -void play_sound(u16 sfxId); -void func_8019F128(u16 sfxId); -void func_8019F170(Vec3f* pos, u16 sfxId); -void Audio_PlaySfxAtPos(Vec3f* pos, u16 sfxId); -void func_8019F208(void); // decide sfx -void func_8019F230(void); // cancel sfx -void func_8019F420(Vec3f* pos, u16 sfxId); -void func_8019F4AC(Vec3f* pos, u16 sfxId); -void func_8019F540(s8 arg0); void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered); -f32 func_8019F5AC(f32 arg0); -void func_8019F638(Vec3f* arg0, u16 sfxId, f32 arg2); -void func_8019F780(Vec3f* arg0, u16 sfxId, f32 arg2); -// void func_8019F7D8(void); -void func_8019F830(Vec3f* arg0, u16 arg1); -void func_8019F88C(Vec3f* arg0, u16 sfxId, UNK_TYPE arg2); -void func_8019F900(Vec3f* pos, u8 chargeLevel); -// void func_8019FA18(void); -void func_8019FAD8(Vec3f* param_1, u16 sfxId, f32 param_3); -void func_8019FB0C(Vec3f* arg0, u16 sfxId, f32 arg2, s32 arg3); -void func_8019FC20(Vec3f* pos, u16 sfxId); -void func_8019FCB8(Vec3f* arg0, u16 arg1, f32 arg2); -void func_8019FD90(s8 arg0, s8 arg1); -void func_8019FDC8(UNK_PTR arg0, u16 sfxId, UNK_TYPE arg2); -// void func_8019FE1C(void); -void func_8019FE74(f32* arg0, f32 arg1, s32 arg2); -// void func_8019FEDC(void); -// void func_8019FF38(void); -void Audio_PlaySfxForRiver(Vec3f* pos, f32 freqScale); -// void Audio_PlaySfxForWaterfall(void); -// void Audio_StepFreqLerp(void); -void func_801A0124(Vec3f* pos, u8 arg1); void Audio_SetBgmVolumeOff(void); void Audio_SetBgmVolumeOn(void); void func_801A0204(s8 seqId); void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer); -// void Audio_SetGanonsTowerBgmVolumeLevel(void); -// void Audio_SetGanonsTowerBgmVolume(void); -// void Audio_UpdateRiverSoundVolumes(void); -// void func_801A0554(void); -// void func_801A05F0(void); void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData); -void func_801A0810(Vec3f* arg0, u16 sfxId, u8 arg2); -void func_801A0868(Vec3f* pos, u16 sfxId, u8 val); -// void func_801A09D4(void); -// void Audio_SplitBgmChannels(void); -// void func_801A0E44(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); // void func_801A1290(void); // void func_801A1348(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); // void func_801A13BC(void); @@ -1958,7 +1917,6 @@ u8 func_801A3950(s32 playerIndex, s32 isChannelIOSet); u8 func_801A39F8(void); void func_801A3A7C(s32 arg0); // void func_801A3AC0(void); -void func_801A3AEC(s32 arg0); void func_801A3B48(UNK_TYPE arg0); // void func_801A3B90(void); void func_801A3CD8(s8 param_1); @@ -1967,23 +1925,15 @@ void func_801A3D98(s8 audioSetting); void func_801A3E38(u8 arg0); void func_801A3EC0(u8 arg0); void Audio_SetCutsceneFlag(s8 flag); -// void func_801A3F6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void func_801A3FB4(void); -// void func_801A3FFC(UNK_TYPE1 param_1); void Audio_SetSpec(u32 specId); void func_801A4058(UNK_TYPE arg0); void func_801A41C8(s32 arg0); void func_801A41F8(UNK_TYPE arg0); -// void func_801A429C(void); // void func_801A42C8(void); // void func_801A4324(void); // void func_801A4348(void); -void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 arg0); -void func_801A4428(u8 reverbIndex); void Audio_PreNMI(void); s32 func_801A46F8(void); -void func_801A4748(Vec3f* pos, u16 sfxId); -void func_801A479C(Vec3f* arg0, u16 sfxId, s32 arg2); void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData); void Audio_PlayAmbience(u8 ambienceId); void Audio_Init(void); diff --git a/include/sfx.h b/include/sfx.h index b55fbb357..98192ec58 100644 --- a/include/sfx.h +++ b/include/sfx.h @@ -1,6 +1,8 @@ #ifndef SFX_H #define SFX_H +#include "z64math.h" + /** * With `SFX_FLAG` on, play the entire sfx audio clip. * Requesting the sfx while playing will restart the sfx from the beginning. @@ -2354,4 +2356,44 @@ typedef enum { #undef DEFINE_SFX */ +typedef enum SfxPauseMenu { + /* 0 */ SFX_PAUSE_MENU_CLOSE, + /* 1 */ SFX_PAUSE_MENU_OPEN +} SfxPauseMenu; + +// Various wrappers to AudioSfx_PlaySfx +void Audio_PlaySfx(u16 sfxId); +void Audio_PlaySfx_2(u16 sfxId); +void Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_AtPos(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_MessageDecide(void); +void Audio_PlaySfx_MessageCancel(void); +void Audio_PlaySfx_Underwater(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_WithSfxSettingsReverb(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume(Vec3f* pos, u16 sfxId, f32 freqVolParam); +void Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(Vec3f* pos, u16 sfxId, f32 freqVolParam); +void Audio_PlaySfx_GiantsMask(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_Randomized(Vec3f* pos, u16 baseSfxId, u8 randLim); +void Audio_PlaySfx_SwordCharge(Vec3f* pos, u8 chargeLevel); +void Audio_PlaySfx_AtPosWithFreq(Vec3f* pos, u16 sfxId, f32 freqScale); +void Audio_PlaySfx_AtPosWithFreqAndChannelIO(Vec3f* pos, u16 sfxId, f32 freqScale, u8 arg3); +void Audio_PlaySfx_WaterWheel(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_AtPosWithTimer(Vec3f* pos, u16 sfxId, f32 timerShiftedLerp); +void Audio_PlaySfx_AtPosWithReverb(Vec3f* pos, u16 sfxId, s8 reverbAdd); +void Audio_PlaySfx_AtPosWithVolume(Vec3f* pos, u16 sfxId, f32 volume); +void Audio_PlaySfx_River(Vec3f* pos, f32 freqScale); +void Audio_PlaySfx_BigBells(Vec3f* pos, u8 volumeIndex); +void Audio_PlaySfx_AtPosWithChannelIO(Vec3f* pos, u16 sfxId, u8 ioData); +void Audio_PlaySfx_AtPosWithAllChannelsIO(Vec3f* pos, u16 sfxId, u8 ioData); +void Audio_PlaySfx_PauseMenuOpenOrClose(u8 pauseMenuOpenOrClose); +void Audio_PlaySfx_IfNotInCutscene(u16 sfxId); +void Audio_PlaySfx_AtFixedPos(Vec3f* pos, u16 sfxId); +void Audio_PlaySfx_AtPosWithVolumeTransition(Vec3f* pos, u16 sfxId, u16 duration); + +// Sfx helper functions +void Audio_SetSfxUnderwaterReverb(s8 isUnderwaterReverbActivated); +void Audio_SetSfxTimerLerpInterval(s8 timerLerpRange1, s8 timerLerpRange2); +void Audio_SetSfxVolumeTransition(f32* volume, f32 volumeTarget, u16 duration); +void Audio_SetSfxReverbIndexExceptOcarinaBank(u8 reverbIndex); + #endif diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index 40c457cb3..8b13e0030 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -63,7 +63,7 @@ typedef struct { s32 AudioOcarina_MemoryGameNextNote(void); void AudioSfx_ProcessSfxSettings(void); -void func_8019FEDC(void); +void Audio_UpdateSfxVolumeTransition(void); void Audio_StepFreqLerp(FreqLerp* lerp); s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume); @@ -71,7 +71,7 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume); void Audio_StartMorningSceneSequence(u16 seqId); void Audio_StartSceneSequence(u16 seqId); void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData); -void func_801A4428(u8 reverbIndex); +void Audio_SetSfxReverbIndexExceptOcarinaBank(u8 reverbIndex); void func_801A3038(void); void Audio_PlayAmbience(u8 ambienceId); void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 volume); @@ -210,7 +210,7 @@ u16 sSfxVolumeDuration = 0; // System Data s8 sSoundMode = SOUNDMODE_STEREO; -s8 sAudioIsWindowOpen = false; +s8 sAudioPauseMenuOpenOrClose = SFX_PAUSE_MENU_CLOSE; s8 sAudioCutsceneFlag = false; s8 sSpecReverb = 0; s8 sAudioEnvReverb = 0; @@ -3638,7 +3638,7 @@ void Audio_Update(void) { Audio_UpdateRiverSoundVolumes(); Audio_UpdateSceneSequenceResumePoint(); func_801A312C(); - func_8019FEDC(); + Audio_UpdateSfxVolumeTransition(); func_801A1E0C(); func_801A1904(); func_801A2090(); @@ -3654,10 +3654,10 @@ void Audio_Update(void) { } } -void Audio_Noop4(s32 arg0) { +void Audio_Noop4(UNK_TYPE arg0) { } -void Audio_Noop5(s32 arg0, s32 arg1) { +void Audio_Noop5(UNK_TYPE arg0, UNK_TYPE arg1) { } /** @@ -4111,17 +4111,39 @@ void AudioSfx_ResetSfxChannelState(void) { sAudioCodeReverb = 0; } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/play_sound.s") +void Audio_PlaySfx(u16 sfxId) { + AudioSfx_PlaySfx(sfxId, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + if (sfxId == NA_SE_OC_TELOP_IMPACT) { + Audio_SetSequenceMode(SEQ_MODE_DEFAULT); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F128.s") +void Audio_PlaySfx_2(u16 sfxId) { + AudioSfx_PlaySfx(sfxId, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F170.s") +/** + * Bends the pitch of the sfx by a little under two semitones and adds reverb + */ +void Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb(Vec3f* pos, u16 sfxId) { + AudioSfx_PlaySfx(sfxId, pos, 4, &sTwoSemitonesLoweredFreq, &gSfxDefaultFreqAndVolScale, &sSfxIncreasedReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_PlaySfxAtPos.s") +void Audio_PlaySfx_AtPos(Vec3f* pos, u16 sfxId) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F208.s") +void Audio_PlaySfx_MessageDecide(void) { + Audio_PlaySfx(NA_SE_SY_DECIDE); + AudioSfx_StopById(NA_SE_SY_MESSAGE_PASS); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F230.s") +void Audio_PlaySfx_MessageCancel(void) { + Audio_PlaySfx(NA_SE_SY_CANCEL); + AudioSfx_StopById(NA_SE_SY_MESSAGE_PASS); +} SfxSettings* AudioSfx_AddSfxSetting(Vec3f* pos) { SfxSettings* sfxSettings; @@ -4163,8 +4185,8 @@ void AudioSfx_ProcessSfxSettings(void) { while (sfxSettingsFlags != 0) { bankId = BANK_ENV; - if ((sfxSettingsFlags & (1 << sfxSettingIndex))) { + if ((sfxSettingsFlags & (1 << sfxSettingIndex))) { found = false; while ((bankId <= BANK_ENEMY) && !found) { entryIndex = gSfxBanks[bankId]->next; @@ -4193,11 +4215,43 @@ void AudioSfx_ProcessSfxSettings(void) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F420.s") +/** + * Used for Gyorg and Bigslime + */ +void Audio_PlaySfx_Underwater(Vec3f* pos, u16 sfxId) { + if ((sfxId == NA_SE_EN_KONB_JUMP_OLD) || (sfxId == NA_SE_EN_KONB_SINK_OLD)) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else { + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gUnderwaterSfxReverbAdd); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F4AC.s") +/** + * Used only for eating the goron sirloin by the goron with Don Gero's Mask + */ +void Audio_PlaySfx_WithSfxSettingsReverb(Vec3f* pos, u16 sfxId) { + SfxSettings* sfxSettings; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F540.s") + if ((sfxId == NA_SE_EN_KONB_JUMP_OLD) || (sfxId == NA_SE_EN_KONB_SINK_OLD)) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else { + sfxSettings = AudioSfx_AddSfxSetting(pos); + + if (sfxSettings != NULL) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &sfxSettings->reverbAdd); + } + } +} + +void Audio_SetSfxUnderwaterReverb(s8 isUnderwaterReverbActivated) { + if (isUnderwaterReverbActivated) { + gUnderwaterSfxReverbAdd = -0x80; + } else { + gUnderwaterSfxReverbAdd = 0; + } +} void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered) { SfxSettings* sfxSettings = AudioSfx_AddSfxSetting(pos); @@ -4211,46 +4265,246 @@ void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F5AC.s") +f32 Audio_SetSyncedSfxFreqAndVolume(f32 freqVolParam) { + f32 ret = 1.0f; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F638.s") + if (freqVolParam > 6.0f) { + sSfxSyncedVolume = 1.0f; + sSfxSyncedFreq = 1.1f; + } else { + ret = freqVolParam / 6.0f; + sSfxSyncedVolume = ret * (1.0f - 0.775f) + 0.775f; + sSfxSyncedFreq = (ret * 0.2f) + 0.9f; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F780.s") + return ret; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F7D8.s") +/** + * Adjusts both frequency and volume based on a single parameter "freqVolParam" + * When freqVolParam >= 6.0f, frequency is increased to 1.1f and volume remains fixed at 1.0f + * For every -1.0f taken from freqVolParam (eg. 5.0f, 4.0f, 3.0f...): + * - volume will decrease by 0.0375f + * - frequency will decrease by 0.0333333f + */ +void Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume(Vec3f* pos, u16 sfxId, f32 freqVolParam) { + f32 sp2C; + f32 phi_f0; + u8 phi_v0; + u16 metalSfxId = NA_SE_NONE; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F830.s") + sp2C = Audio_SetSyncedSfxFreqAndVolume(freqVolParam); + AudioSfx_PlaySfx(sfxId, pos, 4, &sSfxSyncedFreq, &sSfxSyncedVolume, &gSfxDefaultReverb); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F88C.s") + if ((sfxId & 0xF0) == 0xB0) { + // Crawlspaces (unused remnant of OoT) + phi_f0 = 0.3f; + phi_v0 = true; + sp2C = 1.0f; + } else { + phi_f0 = 1.1f; + phi_v0 = gAudioCtx.audioRandom & 1; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019F900.s") + if (phi_f0 < freqVolParam) { + if (phi_v0) { + if ((sfxId & 0x1FF) < 0x80) { + metalSfxId = NA_SE_PL_METALEFFECT_KID; + } else if ((sfxId & 0x1FF) < 0xF0) { + metalSfxId = NA_SE_PL_METALEFFECT_ADULT; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FA18.s") + if (metalSfxId != NA_SE_NONE) { + sSfxSyncedVolumeForMetalEffects = (sp2C * 0.7) + 0.3; + AudioSfx_PlaySfx(metalSfxId, pos, 4, &sSfxSyncedFreq, &sSfxSyncedVolumeForMetalEffects, + &gSfxDefaultReverb); + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FAD8.s") +/** + * Adjusts both frequency and volume based on a single parameter "freqVolParam" + * When freqVolParam >= 6.0f, frequency is increased to 1.1f and volume remains fixed at 1.0f + * For every -1.0f taken from freqVolParam (eg. 5.0f, 4.0f, 3.0f...): + * - volume will decrease by 0.0375f + * - frequency will decrease by 0.0333333f + */ +void Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(Vec3f* pos, u16 sfxId, f32 freqVolParam) { + Audio_SetSyncedSfxFreqAndVolume(freqVolParam); + AudioSfx_PlaySfx(sfxId, pos, 4, &sSfxSyncedFreq, &sSfxSyncedVolume, &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FB0C.s") +void Audio_PlaySfx_GiantsMaskUnused(Vec3f* pos, u16 sfxId) { + AudioSfx_PlaySfx(sfxId | 0xE0, pos, 4, &sGiantsMaskFreq, &gSfxDefaultFreqAndVolScale, &sGiantsMaskReverbAdd); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FC20.s") +void Audio_PlaySfx_GiantsMask(Vec3f* pos, u16 sfxId) { + AudioSfx_PlaySfx((sfxId & 0x681F) + 0x20, pos, 4, &sGiantsMaskFreq, &gSfxDefaultFreqAndVolScale, + &sGiantsMaskReverbAdd); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FCB8.s") +void Audio_PlaySfx_Randomized(Vec3f* pos, u16 baseSfxId, u8 randLim) { + u8 offset = AudioThread_NextRandom() % randLim; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FD90.s") + AudioSfx_PlaySfx(baseSfxId + offset, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FDC8.s") +/** + * Plays increasingly high-pitched sword charging sfx as Player charges up the sword + */ +void Audio_PlaySfx_SwordCharge(Vec3f* pos, u8 chargeLevel) { + chargeLevel %= 4U; + if (chargeLevel != sPrevChargeLevel) { + sCurChargeLevelSfxFreq = sChargeLevelsSfxFreq[chargeLevel]; + switch (chargeLevel) { + case 1: + AudioSfx_PlaySfx(NA_SE_PL_SWORD_CHARGE, pos, 4, &sCurChargeLevelSfxFreq, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FE1C.s") + case 2: + AudioSfx_PlaySfx(NA_SE_PL_SWORD_CHARGE, pos, 4, &sCurChargeLevelSfxFreq, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FE74.s") + default: + break; + } + sPrevChargeLevel = chargeLevel; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FEDC.s") + if (chargeLevel != 0) { + AudioSfx_PlaySfx(NA_SE_IT_SWORD_CHARGE - SFX_FLAG, pos, 4, &sCurChargeLevelSfxFreq, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019FF38.s") +void Audio_PlaySfx_AtPosWithFreqAndVolume(Vec3f* pos, u16 sfxId, f32 freqScale, f32* volume) { + SfxSettings* sfxSettings = AudioSfx_AddSfxSetting(pos); + f32* freqScaleAdj; + + if (sfxSettings != NULL) { + freqScaleAdj = &sfxSettings->freqScale; + if (freqScale < 0.75f) { + *freqScaleAdj = ((freqScale / 0.75f) * 0.25f) + 0.5f; + } else { + *freqScaleAdj = freqScale; + } + + if (*freqScaleAdj > 0.5f) { + AudioSfx_PlaySfx(sfxId, pos, 4, freqScaleAdj, volume, &gSfxDefaultReverb); + } + } +} + +void Audio_PlaySfx_AtPosWithFreq(Vec3f* pos, u16 sfxId, f32 freqScale) { + Audio_PlaySfx_AtPosWithFreqAndVolume(pos, sfxId, freqScale, &gSfxDefaultFreqAndVolScale); +} + +void Audio_PlaySfx_AtPosWithFreqAndChannelIO(Vec3f* pos, u16 sfxId, f32 freqScale, u8 arg3) { + if (freqScale > 1.0f) { + freqScale = 1.0f; + } + + AudioSfx_SetChannelIO(pos, sfxId, (arg3 - (u32)(freqScale * arg3)) & 0xFF); + Audio_PlaySfx_AtPosWithFreq(pos, sfxId, freqScale); +} + +void Audio_PlaySfx_WaterWheel(Vec3f* pos, u16 sfxId) { + u8 isWaterWheelSfxNotPlaying = false; + + switch (sfxId) { + case NA_SE_EV_DUMMY_WATER_WHEEL_LR - SFX_FLAG: + if (!AudioSfx_IsPlaying(NA_SE_EV_BIG_WATER_WHEEL_LR - SFX_FLAG)) { + isWaterWheelSfxNotPlaying = true; + } + break; + + case NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG: + if (!AudioSfx_IsPlaying(NA_SE_EV_BIG_WATER_WHEEL_RR - SFX_FLAG)) { + isWaterWheelSfxNotPlaying = true; + } + break; + + default: + break; + } + + if (isWaterWheelSfxNotPlaying) { + AudioSfx_SetChannelIO(pos, sfxId, 0); + Audio_PlaySfx_AtPosWithFreqAndVolume(pos, sfxId, 1.0f, &sWaterWheelVolume); + } +} + +/** + * at timerShiftedLerp == 1: use sSfxTimerLerpRange1 + * at timerShiftedLerp == 2: use sSfxTimerLerpRange2 + * + * sSfxAdjustedFreq was modified in OoT, but remains 1.0f in MM + * + * Used for "NA_SE_IT_DEKUNUTS_FLOWER_ROLL" and "NA_SE_IT_FISHING_REEL_SLOW" + */ +void Audio_PlaySfx_AtPosWithTimer(Vec3f* pos, u16 sfxId, f32 timerShiftedLerp) { + sSfxTimer--; + if (sSfxTimer == 0) { + AudioSfx_PlaySfx(sfxId, pos, 4, &sSfxAdjustedFreq, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + + if (timerShiftedLerp > 2.0f) { + timerShiftedLerp = 2.0f; + } + + // Linear interpolation between "sSfxTimerLerpRange1" and "sSfxTimerLerpRange2" from lerp factor + // (timerShiftedLerp - 1.0f) + sSfxTimer = (s8)((sSfxTimerLerpRange1 - sSfxTimerLerpRange2) * (1.0f - timerShiftedLerp)) + sSfxTimerLerpRange1; + } +} + +void Audio_SetSfxTimerLerpInterval(s8 timerLerpRange1, s8 timerLerpRange2) { + sSfxTimer = 1; + sSfxTimerLerpRange2 = timerLerpRange2; + sSfxTimerLerpRange1 = timerLerpRange1; +} + +void Audio_PlaySfx_AtPosWithReverb(Vec3f* pos, u16 sfxId, s8 reverbAdd) { + sSfxCustomReverb = reverbAdd; + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &sSfxCustomReverb); +} + +void Audio_PlaySfx_AtPosWithVolume(Vec3f* pos, u16 sfxId, f32 volume) { + gSfxVolume = volume; + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxVolume, &gSfxDefaultReverb); +} + +void Audio_SetSfxVolumeTransition(f32* volume, f32 volumeTarget, u16 duration) { + sSfxVolumeCur = volume; + sSfxVolumeTarget = volumeTarget; + sSfxVolumeDuration = duration; + sSfxVolumeRate = (*sSfxVolumeCur - sSfxVolumeTarget) / sSfxVolumeDuration; +} + +// Part of audio update (runs every frame) +void Audio_UpdateSfxVolumeTransition(void) { + if (sSfxVolumeDuration != 0) { + sSfxVolumeDuration--; + if (sSfxVolumeDuration == 0) { + *sSfxVolumeCur = sSfxVolumeTarget; + } else { + *sSfxVolumeCur -= sSfxVolumeRate; + } + } +} + +void Audio_PlaySfx_FishingReel(f32 timerShiftedLerp) { + Audio_PlaySfx_AtPosWithTimer(&gSfxDefaultPos, NA_SE_IT_FISHING_REEL_SLOW - SFX_FLAG, timerShiftedLerp); + Audio_PlaySfx_AtPosWithFreq(&gSfxDefaultPos, 0, (0.15f * timerShiftedLerp) + 1.4f); +} /** * Used for EnRiverSound */ -void Audio_PlaySfxForRiver(Vec3f* pos, f32 freqScale) { +void Audio_PlaySfx_River(Vec3f* pos, f32 freqScale) { if (!AudioSfx_IsPlaying(NA_SE_EV_RIVER_STREAM - SFX_FLAG)) { sRiverFreqScaleLerp.value = freqScale; } else if (freqScale != sRiverFreqScaleLerp.value) { @@ -4266,7 +4520,7 @@ void Audio_PlaySfxForRiver(Vec3f* pos, f32 freqScale) { * Unused remnant of OoT's EnRiverSound * Used for Zora's River Waterfall */ -void Audio_PlaySfxForWaterfall(Vec3f* pos, f32 freqScale) { +void Audio_PlaySfx_Waterfall(Vec3f* pos, f32 freqScale) { if (!AudioSfx_IsPlaying(NA_SE_EV_WATER_WALL_BIG - SFX_FLAG)) { sWaterfallFreqScaleLerp.value = freqScale; } else if (freqScale != sWaterfallFreqScaleLerp.value) { @@ -4292,10 +4546,14 @@ void Audio_StepFreqLerp(FreqLerp* lerp) { } } -f32 sBigBellsVolume[8] = { +f32 sBigBellsVolume[] = { 1.0f, 0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0124.s") + +void Audio_PlaySfx_BigBells(Vec3f* pos, u8 volumeIndex) { + AudioSfx_PlaySfx(NA_SE_EV_SIGNAL_BIGBELL, pos, 4, &gSfxDefaultFreqAndVolScale, &sBigBellsVolume[volumeIndex & 7], + &gSfxDefaultReverb); +} void Audio_SetBgmVolumeOff(void) { AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0, 10); @@ -4420,7 +4678,7 @@ void Audio_UpdateRiverSoundVolumes(void) { sRiverSoundMainBgmRestore = true; } sRiverSoundMainBgmLower = false; - } else if ((sRiverSoundMainBgmRestore == true) && !sAudioIsWindowOpen) { + } else if ((sRiverSoundMainBgmRestore == true) && (sAudioPauseMenuOpenOrClose == SFX_PAUSE_MENU_CLOSE)) { // restores the volume every frame AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, 0x7F, 10); sRiverSoundMainBgmCurrentVol = 0x7F; @@ -4436,11 +4694,24 @@ void Audio_UpdateRiverSoundVolumes(void) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0554.s") +// Unused remnant of OoT +void Audio_PlaySfx_IncreasinglyTransposed(Vec3f* pos, s16 sfxId, u8* semitones) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gPitchFrequencies[semitones[sAudioIncreasingTranspose] + 39], + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + if (sAudioIncreasingTranspose < 15) { + sAudioIncreasingTranspose++; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A05E4.s") +// Unused remnant of OoT +void Audio_ResetIncreasingTranspose(void) { + sAudioIncreasingTranspose = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A05F0.s") +// Unused remnant of OoT +void Audio_PlaySfx_Transposed(Vec3f* pos, u16 sfxId, s8 semitone) { + AudioSfx_PlaySfx(sfxId, pos, 4, &gPitchFrequencies[semitone + 39], &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); +} void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData) { u8 channelIndex = 0; @@ -4464,9 +4735,32 @@ void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0810.s") +/** + * Plays sfx and sets ioData to io port 6 if the sfx is active + */ +void Audio_PlaySfx_AtPosWithChannelIO(Vec3f* pos, u16 sfxId, u8 ioData) { + AudioSfx_SetChannelIO(pos, sfxId, ioData); + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0868.s") +/** + * Plays sfx and sets ioData to io port 6 + */ +void Audio_PlaySfx_AtPosWithAllChannelsIO(Vec3f* pos, u16 sfxId, u8 ioData) { + u8 channelIndex = 0; + u8 i; + u8 bankId = SFX_BANK_SHIFT(sfxId); + + for (i = 0; i < bankId; i++) { + channelIndex += gChannelsPerBank[gSfxChannelLayout][i]; + } + + for (i = 0; i < gChannelsPerBank[gSfxChannelLayout][bankId]; i++) { + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, channelIndex++, 6, ioData); + } + + AudioSfx_PlaySfx(sfxId, pos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); +} /** * Unused remnant of OoT's EnRiverSound (func_800F4E30) @@ -5030,7 +5324,16 @@ void Audio_UpdateEnemyBgmVolume(f32 dist) { #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3AC0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3AEC.s") +void Audio_PlaySfx_PauseMenuOpenOrClose(u8 pauseMenuOpenOrClose) { + sAudioPauseMenuOpenOrClose = pauseMenuOpenOrClose; + if (pauseMenuOpenOrClose != SFX_PAUSE_MENU_CLOSE) { + Audio_PlaySfx(NA_SE_SY_WIN_OPEN); + AUDIOCMD_GLOBAL_MUTE(AUDIOCMD_ALL_SEQPLAYERS); + } else { + Audio_PlaySfx(NA_SE_SY_WIN_CLOSE); + AUDIOCMD_GLOBAL_UNMUTE(AUDIOCMD_ALL_SEQPLAYERS, false); + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3B48.s") @@ -5040,7 +5343,19 @@ void Audio_UpdateEnemyBgmVolume(f32 dist) { #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3CF4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3D54.s") +/** + * Possibly a test for surround sound + * Unused + */ +void Audio_PlaySfx_SurroundSoundTest(void) { + s32 val = 0; + + if (sSoundMode == SOUNDMODE_SURROUND_EXTERNAL) { + val = 2; + } + + Audio_PlaySfx_AtPosWithAllChannelsIO(&gSfxDefaultPos, NA_SE_SY_SOUT_DEMO, val); +} #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3D98.s") @@ -5052,11 +5367,21 @@ void Audio_SetCutsceneFlag(s8 flag) { sAudioCutsceneFlag = flag; } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3F6C.s") +void Audio_PlaySfx_IfNotInCutsceneImpl(u16 sfxId, Vec3f* pos, u8 token, f32* freqScale, f32* volume, s8* reverbAdd) { + if (!sAudioCutsceneFlag) { + AudioSfx_PlaySfx(sfxId, pos, token, freqScale, volume, reverbAdd); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3FB4.s") +void Audio_PlaySfx_IfNotInCutscene(u16 sfxId) { + Audio_PlaySfx_IfNotInCutsceneImpl(sfxId, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A3FFC.s") +// Unused +void Audio_MuteSfxAndAmbienceSeqExceptOcarinaAndSystem(u8 muteOnlySfxAndAmbienceSeq) { + sMuteOnlySfxAndAmbienceSeq = muteOnlySfxAndAmbienceSeq; +} #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SetSpec.s") @@ -5066,7 +5391,13 @@ void Audio_SetCutsceneFlag(s8 flag) { #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A41F8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A429C.s") +/** + * The flag 0xFF makes the sequence process SkipTicks and SkipForwardSequence + * Unused + */ +void Audio_StartSfxPlayer(void) { + AudioSeq_StartSequence(SEQ_PLAYER_SFX, NA_BGM_GENERAL_SFX, 0xFF, 5); +} #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A42C8.s") @@ -5074,9 +5405,34 @@ void Audio_SetCutsceneFlag(s8 flag) { #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4348.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_SetSfxVolumeExceptSystemAndOcarinaBanks.s") +void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 volume) { + u8 channelIndex; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4428.s") + if (!sAllPlayersMutedExceptOcaAndSys) { + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + switch (channelIndex) { + case SFX_CHANNEL_SYSTEM0: + case SFX_CHANNEL_SYSTEM1: + case SFX_CHANNEL_OCARINA: + break; + + default: + SEQCMD_SET_CHANNEL_VOLUME(SEQ_PLAYER_SFX, channelIndex, 10, volume); + break; + } + } + } +} + +void Audio_SetSfxReverbIndexExceptOcarinaBank(u8 reverbIndex) { + u8 channelIndex; + + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + if (channelIndex != SFX_CHANNEL_OCARINA) { + AUDIOCMD_CHANNEL_SET_REVERB_INDEX(SEQ_PLAYER_SFX, channelIndex, reverbIndex); + } + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_PreNMI.s") @@ -5089,10 +5445,25 @@ void Audio_ResetData(void); #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A46F8.s") -f32 sSfxOriginalPos[] = { 0.0f, 0.0f, 0.0f }; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4748.s") +// used for z_obj_sound and z_en_gk +void Audio_PlaySfx_AtFixedPos(Vec3f* pos, u16 sfxId) { + static Vec3f sSfxOriginalPos[] = { 0.0f, 0.0f, 0.0f }; + s32 i; + f32* dstPos = (f32*)&sSfxOriginalPos; + f32* srcPos = (f32*)pos; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A479C.s") + // Vec3f copy + for (i = 0; i < 3; i++) { + dstPos[i] = srcPos[i]; + } + + Audio_PlaySfx_AtPos(sSfxOriginalPos, sfxId); +} + +void Audio_PlaySfx_AtPosWithVolumeTransition(Vec3f* pos, u16 sfxId, u16 duration) { + Audio_PlaySfx_AtPosWithVolume(pos, sfxId, 0.0f); + Audio_SetSfxVolumeTransition(&gSfxVolume, 1.0f, duration); +} void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData) { u8 firstChannelIndex; diff --git a/src/audio/sfx.c b/src/audio/sfx.c index 537a9f394..f66747999 100644 --- a/src/audio/sfx.c +++ b/src/audio/sfx.c @@ -198,7 +198,7 @@ void AudioSfx_RemoveMatchingRequests(u8 aspect, SfxBankEntry* entry) { } if (remove) { - req->sfxId = 0; + req->sfxId = NA_SE_NONE; } } } @@ -214,7 +214,7 @@ void AudioSfx_ProcessRequest(void) { u8 evictImportance; u8 evictIndex = 0x80; - if (req->sfxId == 0) { + if (req->sfxId == NA_SE_NONE) { return; } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index e7bc92a26..ac014e5ca 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -32,6 +32,20 @@ extern s16 D_801ED8DC; // 2 funcs extern Mtx D_801ED8E0; // 1 func extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor +#define ACTOR_AUDIO_FLAG_SFX_ACTOR_POS (1 << 0) +#define ACTOR_AUDIO_FLAG_SFX_CENTERED_1 (1 << 1) +#define ACTOR_AUDIO_FLAG_SFX_CENTERED_2 (1 << 2) +#define ACTOR_AUDIO_FLAG_SFX_CENTERED_3 (1 << 3) +#define ACTOR_AUDIO_FLAG_SFX_TIMER (1 << 4) +#define ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE (1 << 5) +#define ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE (1 << 6) + +#define ACTOR_AUDIO_FLAG_SFX_ALL \ + (ACTOR_AUDIO_FLAG_SFX_TIMER | ACTOR_AUDIO_FLAG_SFX_CENTERED_3 | ACTOR_AUDIO_FLAG_SFX_CENTERED_2 | \ + ACTOR_AUDIO_FLAG_SFX_CENTERED_1 | ACTOR_AUDIO_FLAG_SFX_ACTOR_POS) +#define ACTOR_AUDIO_FLAG_SEQ_ALL (ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE | ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE) +#define ACTOR_AUDIO_FLAG_ALL (ACTOR_AUDIO_FLAG_SFX_ALL | ACTOR_AUDIO_FLAG_SEQ_ALL) + // Internal forward declarations void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx); Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play); @@ -663,7 +677,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS sfxId = CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1) ? NA_SE_SY_LOCK_ON : NA_SE_SY_LOCK_ON_HUMAN; - play_sound(sfxId); + Audio_PlaySfx(sfxId); } targetCtx->targetCenterPos.x = actor->world.pos.x; @@ -2164,7 +2178,7 @@ void func_800B8E1C(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4) */ void Player_PlaySfx(Player* player, u16 sfxId) { if (player->currentMask == PLAYER_MASK_GIANT) { - func_8019F170(&player->actor.projectedPos, sfxId); + Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb(&player->actor.projectedPos, sfxId); } else { AudioSfx_PlaySfx(sfxId, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); @@ -2175,10 +2189,10 @@ void Player_PlaySfx(Player* player, u16 sfxId) { * Play a sound effect at the actor's position */ void Actor_PlaySfx(Actor* actor, u16 sfxId) { - Audio_PlaySfxAtPos(&actor->projectedPos, sfxId); + Audio_PlaySfx_AtPos(&actor->projectedPos, sfxId); } -void func_800B8EF4(PlayState* play, Actor* actor) { +void Actor_PlaySfx_SurfaceBomb(PlayState* play, Actor* actor) { SurfaceSfxOffset surfaceSfxOffset; if (actor->bgCheckFlags & BGCHECKFLAG_WATER) { @@ -2191,41 +2205,53 @@ void func_800B8EF4(PlayState* play, Actor* actor) { surfaceSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, actor->floorPoly, actor->floorBgId); } - Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND); - Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset); + Audio_PlaySfx_AtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND); + Audio_PlaySfx_AtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset); } -void func_800B8F98(Actor* actor, u16 sfxId) { +/** + * Play a sfx at the center of the screen using the shared audioFlag system + */ +void Actor_PlaySfx_FlaggedCentered1(Actor* actor, u16 sfxId) { actor->sfxId = sfxId; - actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01); - actor->audioFlags |= 0x02; + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL; + actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_1; } -void func_800B8FC0(Actor* actor, u16 sfxId) { +/** + * Play a sfx at the center of the screen using the shared audioFlag system + */ +void Actor_PlaySfx_FlaggedCentered2(Actor* actor, u16 sfxId) { actor->sfxId = sfxId; - actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01); - actor->audioFlags |= 4; + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL; + actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_2; } -void func_800B8FE8(Actor* actor, u16 sfxId) { +/** + * Play a sfx at the center of the screen using the shared audioFlag system + */ +void Actor_PlaySfx_FlaggedCentered3(Actor* actor, u16 sfxId) { actor->sfxId = sfxId; - actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01); - actor->audioFlags |= 0x08; + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL; + actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_3; } -void func_800B9010(Actor* actor, u16 sfxId) { +/** + * Play a sfx at the actor's position using the shared audioFlag system + */ +void Actor_PlaySfx_Flagged(Actor* actor, u16 sfxId) { actor->sfxId = sfxId; - actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01); - actor->audioFlags |= 0x01; + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL; + actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_ACTOR_POS; } -void func_800B9038(Actor* actor, s32 timer) { - actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01); - actor->audioFlags |= 0x10; +void Actor_PlaySfx_FlaggedTimer(Actor* actor, s32 timer) { + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL; + actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_TIMER; // The sfxId here are not actually sound effects, but instead this is data that gets sent into - // the io ports of the music macro language (func_801A0810 / Audio_PlaySfxAtPosWithSoundScriptIO is - // the function that it's used for) + // the io ports of the music macro language (Audio_PlaySfx_AtPosWithChannelIO / Audio_PlaySfxAtPosWithSoundScriptIO + // is the function that it's used for) if (timer < 40) { actor->sfxId = 3; } else if (timer < 100) { @@ -2235,12 +2261,12 @@ void func_800B9038(Actor* actor, s32 timer) { } } -void func_800B9084(Actor* actor) { - actor->audioFlags |= 0x20; +void Actor_PlaySeq_FlaggedKamaroDance(Actor* actor) { + actor->audioFlags |= ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE; } -void func_800B9098(Actor* actor) { - actor->audioFlags |= 0x40; +void Actor_PlaySeq_FlaggedMusicBoxHouse(Actor* actor) { + actor->audioFlags |= ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE; } s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4) { @@ -2368,7 +2394,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { } actor->sfxId = 0; - actor->audioFlags &= ~0x7F; + actor->audioFlags &= ~ACTOR_AUDIO_FLAG_ALL; if (actor->init != NULL) { if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { @@ -2545,7 +2571,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { actor = NULL; if (actorCtx->targetContext.unk4B != 0) { actorCtx->targetContext.unk4B = 0; - play_sound(NA_SE_SY_LOCK_OFF); + Audio_PlaySfx(NA_SE_SY_LOCK_OFF); } } @@ -2630,31 +2656,32 @@ void Actor_Draw(PlayState* play, Actor* actor) { CLOSE_DISPS(play->state.gfxCtx); } -void func_800B9D1C(Actor* actor) { +void Actor_UpdateFlaggedAudio(Actor* actor) { s32 sfxId = actor->sfxId; - if (sfxId != 0) { - if (actor->audioFlags & 2) { + if (sfxId != NA_SE_NONE) { + if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_1) { AudioSfx_PlaySfx(sfxId, &actor->projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - } else if (actor->audioFlags & 4) { - play_sound(sfxId); - } else if (actor->audioFlags & 8) { - func_8019F128(sfxId); - } else if (actor->audioFlags & 0x10) { - func_801A0810(&gSfxDefaultPos, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1)); - } else if (actor->audioFlags & 1) { - Audio_PlaySfxAtPos(&actor->projectedPos, sfxId); + } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_2) { + Audio_PlaySfx(sfxId); + } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_3) { + Audio_PlaySfx_2(sfxId); + } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_TIMER) { + Audio_PlaySfx_AtPosWithChannelIO(&gSfxDefaultPos, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1)); + } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_ACTOR_POS) { + Audio_PlaySfx_AtPos(&actor->projectedPos, sfxId); } } - if (sfxId) {} + //! FAKE: + if (sfxId != NA_SE_NONE) {} - if (actor->audioFlags & 0x40) { + if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE) { func_801A1FB4(SEQ_PLAYER_BGM_SUB, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f); } - if (actor->audioFlags & 0x20) { + if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE) { func_801A1FB4(SEQ_PLAYER_BGM_MAIN, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f); } } @@ -2866,8 +2893,8 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->world.pos, &actor->projectedPos, &actor->projectedW); - if (actor->audioFlags & 0x7F) { - func_800B9D1C(actor); + if (actor->audioFlags & ACTOR_AUDIO_FLAG_ALL) { + Actor_UpdateFlaggedAudio(actor); } if (func_800BA2D8(play, actor)) { diff --git a/src/code/z_camera.c b/src/code/z_camera.c index acb4af20a..3703eda0f 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -7403,7 +7403,7 @@ void Camera_EarthquakeDay3(Camera* camera) { if (sEarthquakeTimer != 0) { sEarthquakeTimer--; - func_8019F128(NA_SE_SY_EARTHQUAKE_OUTDOOR - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_SY_EARTHQUAKE_OUTDOOR - SFX_FLAG); } } } @@ -7869,24 +7869,24 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { if (camera->status == CAM_STATUS_ACTIVE) { switch (sModeChangeFlags) { case CAM_CHANGE_MODE_0: - play_sound(0); + Audio_PlaySfx(0); break; case CAM_CHANGE_MODE_1: if (camera->play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) { - play_sound(NA_SE_SY_ATTENTION_URGENCY); + Audio_PlaySfx(NA_SE_SY_ATTENTION_URGENCY); } else { - play_sound(NA_SE_SY_ATTENTION_ON); + Audio_PlaySfx(NA_SE_SY_ATTENTION_ON); } break; case CAM_CHANGE_MODE_BATTLE: - play_sound(NA_SE_SY_ATTENTION_URGENCY); + Audio_PlaySfx(NA_SE_SY_ATTENTION_URGENCY); break; case CAM_CHANGE_MODE_FOLLOW_TARGET: - play_sound(NA_SE_SY_ATTENTION_ON); + Audio_PlaySfx(NA_SE_SY_ATTENTION_ON); break; default: diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index f3f4043dd..39b57cbd0 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1534,9 +1534,9 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll if ((flags == TOUCH_SFX_NORMAL) && (collider->colType != COLTYPE_METAL)) { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); if (collider->actor == NULL) { - play_sound(NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND); } else { - Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); } } else if (flags == TOUCH_SFX_NORMAL) { EffectSsHitmark_SpawnFixedScale(play, 3, hitPos); @@ -1548,16 +1548,16 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll } else if (flags == TOUCH_SFX_HARD) { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); if (collider->actor == NULL) { - play_sound(NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND); } else { - Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); } } else if (flags == TOUCH_SFX_WOOD) { EffectSsHitmark_SpawnFixedScale(play, 1, hitPos); if (collider->actor == NULL) { - play_sound(NA_SE_IT_REFLECTION_WOOD); + Audio_PlaySfx(NA_SE_IT_REFLECTION_WOOD); } else { - Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_REFLECTION_WOOD); + Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_REFLECTION_WOOD); } } } @@ -1568,13 +1568,13 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) { if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) { if (acInfo->elemType == ELEMTYPE_UNK0) { - Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE); + Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE); } else if (acInfo->elemType == ELEMTYPE_UNK1) { - Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE_HARD); + Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE_HARD); } else if (acInfo->elemType == ELEMTYPE_UNK2) { - Audio_PlaySfxAtPos(&at->actor->projectedPos, 0); + Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0); } else if (acInfo->elemType == ELEMTYPE_UNK3) { - Audio_PlaySfxAtPos(&at->actor->projectedPos, 0); + Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0); } } return 1; @@ -1614,7 +1614,7 @@ void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atIn } else if (sHitInfo[ac->colType].effect == HIT_WOOD) { if (at->actor == NULL) { CollisionCheck_SpawnShieldParticles(play, hitPos); - play_sound(NA_SE_IT_REFLECTION_WOOD); + Audio_PlaySfx(NA_SE_IT_REFLECTION_WOOD); } else { CollisionCheck_SpawnShieldParticlesWood(play, hitPos, &at->actor->projectedPos); } @@ -1627,9 +1627,9 @@ void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atIn } else { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); if (ac->actor == NULL) { - play_sound(NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND); } else { - Audio_PlaySfxAtPos(&ac->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); + Audio_PlaySfx_AtPos(&ac->actor->projectedPos, NA_SE_IT_SHIELD_BOUND); } } } @@ -3873,7 +3873,7 @@ void CollisionCheck_SpawnShieldParticles(PlayState* play, Vec3f* v) { */ void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v) { CollisionCheck_SpawnShieldParticles(play, v); - play_sound(NA_SE_IT_SHIELD_REFLECT_SW); + Audio_PlaySfx(NA_SE_IT_SHIELD_REFLECT_SW); } /** @@ -3881,7 +3881,7 @@ void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v) { */ void CollisionCheck_SpawnShieldParticlesMetalSound(PlayState* play, Vec3f* v, Vec3f* pos) { CollisionCheck_SpawnShieldParticles(play, v); - Audio_PlaySfxAtPos(pos, NA_SE_IT_SHIELD_REFLECT_SW); + Audio_PlaySfx_AtPos(pos, NA_SE_IT_SHIELD_REFLECT_SW); } /** @@ -3921,7 +3921,7 @@ void CollisionCheck_SpawnShieldParticlesWood(PlayState* play, Vec3f* v, Vec3f* p shieldParticleInitWood.lightPoint.z = shieldParticleInitWood.position.z; Effect_Add(play, &effectIndex, EFFECT_SHIELD_PARTICLE, 0, 1, &shieldParticleInitWood); - Audio_PlaySfxAtPos(pos, NA_SE_IT_REFLECTION_WOOD); + Audio_PlaySfx_AtPos(pos, NA_SE_IT_REFLECTION_WOOD); } /** diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 00ee877e9..aafb26cb6 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -199,7 +199,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { break; case CS_MISC_EARTHQUAKE_MEDIUM: - func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); @@ -260,7 +260,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { if (isFirstFrame) { play->envCtx.sandstormState = 1; } - func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG); break; case CS_MISC_SUNSSONG_START: @@ -307,7 +307,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { break; case CS_MISC_EARTHQUAKE_STRONG: - func_8019F128(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 30000); @@ -368,7 +368,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { break; case CS_MISC_EARTHQUAKE_WEAK: - func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); if (isFirstFrame) { sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6); Quake_SetSpeed(sCutsceneQuakeIndex, 22000); @@ -442,15 +442,13 @@ void CutsceneCmd_StartAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdSta void Cutscene_SetSfxReverbIndexTo2(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo2* cmd) { if (csCtx->curFrame == cmd->startFrame) { - // Audio_SetSfxReverbIndexExceptOcarinaBank - func_801A4428(2); + Audio_SetSfxReverbIndexExceptOcarinaBank(2); } } void Cutscene_SetSfxReverbIndexTo1(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo1* cmd) { if (csCtx->curFrame == cmd->startFrame) { - // Audio_SetSfxReverbIndexExceptOcarinaBank - func_801A4428(1); + Audio_SetSfxReverbIndexExceptOcarinaBank(1); } } @@ -840,7 +838,7 @@ void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransi if (cmd->type == CS_TRANS_GRAY_FILL_IN) { play->envCtx.screenFillColor[3] = 255.0f * lerp; if (lerp == 0.0f) { - func_8019F128(NA_SE_EV_S_STONE_FLASH); + Audio_PlaySfx_2(NA_SE_EV_S_STONE_FLASH); } } else { play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f; @@ -1064,7 +1062,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { if (play->msgCtx.choiceIndex == 0) { if (cmd->textId == 0x33BD) { // Gorman Track: do you understand? - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } if (cmd->altTextId1 != 0xFFFF) { @@ -1082,7 +1080,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { } else { if (cmd->textId == 0x33BD) { // Gorman Track: do you understand? - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } if (cmd->altTextId2 != 0xFFFF) { diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 886c3c942..69fe16fdc 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -670,7 +670,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) { } if ((this->actor.params <= ITEM00_RUPEE_RED) || (this->actor.params == ITEM00_RUPEE_HUGE)) { - play_sound(NA_SE_SY_GET_RUPY); + Audio_PlaySfx(NA_SE_SY_GET_RUPY); } else if (getItemId != GI_NONE) { if (Actor_HasParent(&this->actor, play)) { Flags_SetCollectible(play, this->collectibleFlag); @@ -678,7 +678,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) { } return; } else { - play_sound(NA_SE_SY_GET_ITEM); + Audio_PlaySfx(NA_SE_SY_GET_ITEM); } Flags_SetCollectible(play, this->collectibleFlag); diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 121957396..fce034e65 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -216,11 +216,11 @@ void CutsceneManager_End(void) { switch (csEntry->endSfx) { case CS_END_SFX_TRE_BOX_APPEAR: - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); break; case CS_END_SFX_CORRECT_CHIME: - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); break; default: // CS_END_SFX_NONE diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 130fa88db..91c0b4a7c 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -114,7 +114,7 @@ void KaleidoSetup_Update(PlayState* play) { if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) { ShrinkWindow_Letterbox_SetSizeTarget(0); } - func_801A3AEC(1); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_OPEN); } } } diff --git a/src/code/z_lib.c b/src/code/z_lib.c index f3e67e5f3..553c5d133 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -639,16 +639,17 @@ void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src) { dst->a = src->a; } -void func_801000A4(u16 sfxId) { - play_sound(sfxId); +void Lib_PlaySfx(u16 sfxId) { + Audio_PlaySfx(sfxId); } -void func_801000CC(u16 sfxId) { - func_8019F128(sfxId); +void Lib_PlaySfx_2(u16 sfxId) { + Audio_PlaySfx_2(sfxId); } -void Lib_PlaySfxAtPos(Vec3f* pos, u16 sfxId) { - Audio_PlaySfxAtPos(pos, sfxId); +// Unused +void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId) { + Audio_PlaySfx_AtPos(pos, sfxId); } void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst) { diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index 7226a6719..5d1299bbf 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -407,7 +407,7 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) { interfaceCtx->lifeSizeChangeDirection = 0; if (!Player_InCsMode(play) && (play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && LifeMeter_IsCritical() && !Play_InCsMode(play)) { - play_sound(NA_SE_SY_HITPOINT_ALARM); + Audio_PlaySfx(NA_SE_SY_HITPOINT_ALARM); } } } else { diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index 912926cbb..c087fe059 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -230,9 +230,9 @@ void Map_Update(PlayState* play) { if ((play->pauseCtx.state <= PAUSE_STATE_OPENING_2) && (CHECK_BTN_ALL(controller->press.button, BTN_L)) && !Play_InCsMode(play) && !func_80106530(play)) { if (!R_MINIMAP_DISABLED) { - play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } else { - play_sound(NA_SE_SY_CAMERA_ZOOM_DOWN); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_DOWN); } R_MINIMAP_DISABLED ^= 1; diff --git a/src/code/z_message.c b/src/code/z_message.c index 03fadc9c9..cf88c60df 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -93,13 +93,13 @@ s32 Message_ShouldAdvance(PlayState* play) { if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { if (CHECK_BTN_ALL(controller->press.button, BTN_A)) { - play_sound(NA_SE_SY_MESSAGE_PASS); + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } return CHECK_BTN_ALL(controller->press.button, BTN_A); } else { if (CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) || CHECK_BTN_ALL(controller->press.button, BTN_CUP)) { - play_sound(NA_SE_SY_MESSAGE_PASS); + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } return CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) || CHECK_BTN_ALL(controller->press.button, BTN_CUP); @@ -125,7 +125,7 @@ void Message_CloseTextbox(PlayState* play) { msgCtx->stateTimer = 2; msgCtx->msgMode = 0x43; msgCtx->unk12020 = 0; - play_sound(NA_SE_NONE); + Audio_PlaySfx(NA_SE_NONE); } } @@ -147,7 +147,7 @@ void func_80148B98(PlayState* play, u8 arg1) { if (msgCtx->choiceIndex > 128) { msgCtx->choiceIndex = 0; } else { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } return; } else if ((curInput->rel.stick_y < -29) && held == 0) { @@ -156,7 +156,7 @@ void func_80148B98(PlayState* play, u8 arg1) { if (msgCtx->choiceIndex > arg1) { msgCtx->choiceIndex = arg1; } else { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } return; } else { @@ -422,7 +422,7 @@ u32 func_80151C9C(PlayState* play) { Message_ContinueTextbox( play, sBombersNotebookEventMessages [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]); - play_sound(NA_SE_SY_SCHEDULE_WRITE); + Audio_PlaySfx(NA_SE_SY_SCHEDULE_WRITE); return true; } } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index ae535dc9b..fe5ade1d2 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2331,7 +2331,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || (func_801A5100() == 1)) { if (!(CHECK_EVENTINF(EVENTINF_41)) || ((CHECK_EVENTINF(EVENTINF_41)) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { - play_sound(NA_SE_SY_CAMERA_SHUTTER); + Audio_PlaySfx(NA_SE_SY_CAMERA_SHUTTER); SREG(89) = 1; play->haltAllActors = true; sPictoState = PICTO_BOX_STATE_SETUP_PHOTO; @@ -2344,13 +2344,13 @@ void Interface_UpdateButtonsPart1(PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_200; Message_CloseTextbox(play); if (play->msgCtx.choiceIndex != 0) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_80115844(play, DO_ACTION_STOP); Interface_SetHudVisibility(HUD_VISIBILITY_A_B); sPictoState = PICTO_BOX_STATE_LENS; REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; restoreHudVisibility = true; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -3250,7 +3250,7 @@ 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); + Audio_PlaySfx(NA_SE_SY_HP_RECOVER); } else if (gSaveContext.save.saveInfo.playerData.doubleDefense && (healthChange < 0)) { healthChange >>= 1; } @@ -3369,7 +3369,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { // Not enough magic available to consume if ((gSaveContext.save.saveInfo.playerData.magic - magicToConsume) < 0) { if (gSaveContext.magicCapacity != 0) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return false; } @@ -3390,7 +3390,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP; return true; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return false; } @@ -3409,7 +3409,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3; return true; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return false; } @@ -3440,7 +3440,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2; return true; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return false; } @@ -3484,7 +3484,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { gSaveContext.save.saveInfo.playerData.magic -= magicToConsume; return true; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return false; } } @@ -3495,7 +3495,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { void Magic_UpdateAddRequest(void) { if (gSaveContext.isMagicRequested) { gSaveContext.save.saveInfo.playerData.magic += 4; - play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); + Audio_PlaySfx(NA_SE_SY_GAUGE_UP - SFX_FLAG); if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) { gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicCapacity; @@ -3599,7 +3599,7 @@ void Magic_Update(PlayState* play) { gSaveContext.save.saveInfo.playerData.magic += 0x10; if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.sceneLayer < 4)) { - play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); + Audio_PlaySfx(NA_SE_SY_GAUGE_UP - SFX_FLAG); } if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) { @@ -3655,7 +3655,7 @@ void Magic_Update(PlayState* play) { !play->actorCtx.lensActive) { // Deactivate Lens of Truth and set magic state to idle play->actorCtx.lensActive = false; - play_sound(NA_SE_SY_GLASSMODE_OFF); + Audio_PlaySfx(NA_SE_SY_GLASSMODE_OFF); gSaveContext.magicState = MAGIC_STATE_IDLE; sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255; break; @@ -5761,16 +5761,16 @@ void Interface_DrawTimers(PlayState* play) { // Use seconds to determine when to beep if (gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(60)) { if ((sTimerBeepSfxSeconds != sTimerDigits[4]) && (sTimerDigits[4] == 1)) { - play_sound(NA_SE_SY_MESSAGE_WOMAN); + Audio_PlaySfx(NA_SE_SY_MESSAGE_WOMAN); sTimerBeepSfxSeconds = sTimerDigits[4]; } } else if (gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(10)) { if ((sTimerBeepSfxSeconds != sTimerDigits[4]) && ((sTimerDigits[4] % 2) != 0)) { - play_sound(NA_SE_SY_WARNING_COUNT_N); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N); sTimerBeepSfxSeconds = sTimerDigits[4]; } } else if (sTimerBeepSfxSeconds != sTimerDigits[4]) { - play_sound(NA_SE_SY_WARNING_COUNT_E); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); sTimerBeepSfxSeconds = sTimerDigits[4]; } } else { // TIMER_COUNT_UP @@ -5814,7 +5814,7 @@ void Interface_DrawTimers(PlayState* play) { (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { if ((gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(110)) && (sTimerBeepSfxSeconds != sTimerDigits[4])) { - play_sound(NA_SE_SY_WARNING_COUNT_E); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); sTimerBeepSfxSeconds = sTimerDigits[4]; } } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) { @@ -5822,7 +5822,7 @@ void Interface_DrawTimers(PlayState* play) { (gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] - SECONDS_TO_TIMER(9))) && (sTimerBeepSfxSeconds != sTimerDigits[4])) { - play_sound(NA_SE_SY_WARNING_COUNT_E); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); sTimerBeepSfxSeconds = sTimerDigits[4]; } } @@ -6716,7 +6716,7 @@ void Interface_Update(PlayState* play) { gSaveContext.save.saveInfo.playerData.health += 4; if ((gSaveContext.save.saveInfo.playerData.health & 0xF) < 4) { - play_sound(NA_SE_SY_HP_RECOVER); + Audio_PlaySfx(NA_SE_SY_HP_RECOVER); } if (((void)0, gSaveContext.save.saveInfo.playerData.health) >= @@ -6749,7 +6749,7 @@ void Interface_Update(PlayState* play) { if (gSaveContext.save.saveInfo.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) { gSaveContext.rupeeAccumulator--; gSaveContext.save.saveInfo.playerData.rupees++; - play_sound(NA_SE_SY_RUPY_COUNT); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); } else { // Max rupees gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET); @@ -6762,11 +6762,11 @@ void Interface_Update(PlayState* play) { if (gSaveContext.save.saveInfo.playerData.rupees < 0) { gSaveContext.save.saveInfo.playerData.rupees = 0; } - play_sound(NA_SE_SY_RUPY_COUNT); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); } else { gSaveContext.rupeeAccumulator++; gSaveContext.save.saveInfo.playerData.rupees--; - play_sound(NA_SE_SY_RUPY_COUNT); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); } } else { gSaveContext.rupeeAccumulator = 0; @@ -6799,9 +6799,9 @@ void Interface_Update(PlayState* play) { interfaceCtx->minigameState++; if (interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) { interfaceCtx->minigameCountdownScale = 160; - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); } else { - play_sound(NA_SE_SY_WARNING_COUNT_E); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); } break; diff --git a/src/code/z_play.c b/src/code/z_play.c index d86fd90d6..c19b3c277 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -824,7 +824,7 @@ void Play_UpdateTransition(PlayState* this) { break; case TRANS_MODE_SANDSTORM: - func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG); if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA < 110) { gTransitionTileState = TRANS_TILE_OFF; @@ -859,7 +859,7 @@ void Play_UpdateTransition(PlayState* this) { break; case TRANS_MODE_SANDSTORM_END: - func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG); if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA <= 0) { @@ -1064,7 +1064,7 @@ void Play_Update(PlayState* this) { this->msgCtx.msgMode = 0; this->msgCtx.currentTextId = 0; this->msgCtx.stateTimer = 0; - play_sound(NA_SE_SY_CANCEL); + Audio_PlaySfx(NA_SE_SY_CANCEL); } if (sBombersNotebookOpen) { BombersNotebook_Update(this, &sBombersNotebook, this->state.input); diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 24dcaca55..76fb71192 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -1223,13 +1223,13 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input while (true) { cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE; if (cursorEntryScan == 0) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); break; } if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( this->cursorPageRow + this->cursorPage, cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); break; } } @@ -1238,7 +1238,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( this->cursorPageRow + this->cursorPage, cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); break; } } @@ -1250,7 +1250,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( this->cursorPageRow + this->cursorPage, cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); break; } } while (cursorEntryScan != 0); @@ -1276,7 +1276,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input if (stickAdjY < -30) { if (this->cursorPageRow < 3) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->cursorEntry = 0; this->cursorPageRow++; } else if (this->cursorPage < (BOMBERS_NOTEBOOK_PERSON_MAX - 4)) { @@ -1290,11 +1290,11 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input } } else if (stickAdjY > 30) { if (this->cursorPageRow > 0) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->cursorEntry = 0; this->cursorPageRow--; } else if (this->cursorPage != 0) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->cursorPage--; if (sStickYRepeatState == 1) { this->scrollAmount = 24; @@ -1308,7 +1308,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input } else if (this->scrollAmount < 0) { this->scrollOffset += this->scrollAmount; if (ABS_ALT(this->scrollOffset) >= 48) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->scrollOffset = 0; this->scrollAmount = 0; this->cursorPage++; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2e2d2222d..4654158f9 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -637,7 +637,7 @@ PlayerItemAction func_80123810(PlayState* play) { Interface_SetHudVisibility(play->msgCtx.unk_120BC); if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return PLAYER_IA_MINUS1; } else { s32 pad; diff --git a/src/code/z_sound_source.c b/src/code/z_sound_source.c index 4962f7072..3a5a31c59 100644 --- a/src/code/z_sound_source.c +++ b/src/code/z_sound_source.c @@ -21,7 +21,7 @@ void SoundSource_UpdateAll(PlayState* play) { } else { SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &source->worldPos, &source->projectedPos); if (source->playSfxEachFrame) { - Audio_PlaySfxAtPos(&source->projectedPos, source->sfxId); + Audio_PlaySfx_AtPos(&source->projectedPos, source->sfxId); } } } @@ -64,7 +64,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId, source->sfxId = sfxId; SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &source->worldPos, &source->projectedPos); - Audio_PlaySfxAtPos(&source->projectedPos, sfxId); + Audio_PlaySfx_AtPos(&source->projectedPos, sfxId); } void SoundSource_PlaySfxAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId) { diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index c7bff97f2..ba91165c8 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -135,7 +135,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { return; } - func_800B8F98(&player->actor, NA_SE_IT_HOOKSHOT_CHAIN - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&player->actor, NA_SE_IT_HOOKSHOT_CHAIN - SFX_FLAG); ArmsHook_CheckForCancel(this); if ((this->timer != 0) && (this->collider.base.atFlags & AT_HIT) && @@ -151,7 +151,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { } } this->timer = 0; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_STICK_CRE); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_STICK_CRE); return; } @@ -260,10 +260,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { ArmsHook_AttachHookToActor(this, &dynaPolyActor->actor); } func_808C1154(this); - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_STICK_OBJ); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_STICK_OBJ); } else { CollisionCheck_SpawnShieldParticlesMetal(play, &this->actor.world.pos); - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_REFLECT); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_REFLECT); } } else if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) { diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index efa7f04c4..09b34792b 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -100,7 +100,7 @@ void FireArrow_ChargeAndWait(ArrowFire* this, PlayState* play) { this->actor.world.pos = arrow->actor.world.pos; this->actor.shape.rot = arrow->actor.shape.rot; - func_800B9010(&this->actor, NA_SE_PL_ARROW_CHARGE_FIRE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_ARROW_CHARGE_FIRE - SFX_FLAG); // if arrow has no parent, player has fired the arrow if (arrow->actor.parent == NULL) { diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index 83c37fa6c..acfe454b8 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -76,7 +76,7 @@ void ArrowIce_Charge(ArrowIce* this, PlayState* play) { this->actor.world.pos = arrow->actor.world.pos; this->actor.shape.rot = arrow->actor.shape.rot; - func_800B9010(&this->actor, NA_SE_PL_ARROW_CHARGE_ICE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_ARROW_CHARGE_ICE - SFX_FLAG); // if arrow has no parent, player has fired the arrow if (arrow->actor.parent == NULL) { diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index b650533da..d0b9ce3ba 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -75,7 +75,7 @@ void ArrowLight_Charge(ArrowLight* this, PlayState* play) { this->actor.world.pos = arrow->actor.world.pos; this->actor.shape.rot = arrow->actor.shape.rot; - func_800B9010(&this->actor, NA_SE_PL_ARROW_CHARGE_LIGHT - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_ARROW_CHARGE_LIGHT - SFX_FLAG); if (arrow->actor.parent == NULL) { this->firedPos = this->actor.world.pos; this->radius = 10; diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index efe92eebc..ea2fe2c90 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -291,7 +291,7 @@ void func_808B78A4(BgBreakwall* this, PlayState* play) { void func_808B78DC(BgBreakwall* this, PlayState* play) { Actor_SetScale(&this->dyna.actor, 3.5f); - func_800B9010(&this->dyna.actor, NA_SE_EV_TORNADE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_TORNADE - SFX_FLAG); } void func_808B7914(BgBreakwall* this, PlayState* play) { 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 2a1a7dce8..687dc3c88 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 @@ -171,7 +171,7 @@ void BgCraceMovebg_OpeningDoor_SetupOpen(BgCraceMovebg* this, PlayState* play) { * Silde open, then do nothing. */ void BgCraceMovebg_OpeningDoor_Open(BgCraceMovebg* this, PlayState* play) { - func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); Math_SmoothStepToF(&this->doorHeight, this->targetDoorHeight, 2.0f, this->openSpeed, 0.01f); this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + this->doorHeight; if (this->doorHeight == this->targetDoorHeight) { @@ -330,12 +330,12 @@ void BgCraceMovebg_ClosingDoor_Close(BgCraceMovebg* this, PlayState* play) { !Flags_GetSwitch(play, BG_CRACE_MOVEBG_GET_SWITCH_FLAG(&this->dyna.actor) + 1)) { play->haltAllActors = true; func_80169FDC(&play->state); - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); } BgCraceMovebg_ClosingDoor_SetupDoNothing(this, play); } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_CLOSE_S - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_STONEDOOR_CLOSE_S - SFX_FLAG); } } 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 d8c39a098..688349742 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 @@ -153,7 +153,7 @@ void BgCtowerGear_Update(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.x -= 0x1F4; } else if (type == BGCTOWERGEAR_CENTER_COG) { this->dyna.actor.shape.rot.y += 0x1F4; - func_800B9010(&this->dyna.actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); } else if (type == BGCTOWERGEAR_WATER_WHEEL) { this->dyna.actor.shape.rot.z -= 0x1F4; BgCtowerGear_Splash(this, play); 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 571523fcb..d30f15308 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 @@ -89,7 +89,7 @@ void BgCtowerRot_CorridorRotate(BgCtowerRot* this, PlayState* play) { this->dyna.actor.shape.rot.z = rotZ * 16.384f; if (play->csCtx.curFrame == 132) { - play_sound(NA_SE_SY_SPIRAL_DASH); + Audio_PlaySfx(NA_SE_SY_SPIRAL_DASH); } } @@ -104,7 +104,7 @@ void BgCtowerRot_DoorClose(BgCtowerRot* this, PlayState* play) { } this->actionFunc = BgCtowerRot_DoorDoNothing; } else if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) { - func_800B9010(&this->dyna.actor, NA_SE_EV_STONE_STATUE_OPEN - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_STONE_STATUE_OPEN - SFX_FLAG); } this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (Math_SinS(this->dyna.actor.world.rot.y) * this->timer); 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 79ed63188..47f0dec92 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 @@ -476,7 +476,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) { phi_f2 = 1.0f; } - func_8019FAD8(&this->dyna.actor.projectedPos, NA_SE_EV_SEESAW_INCLINE - SFX_FLAG, phi_f2 + 1.0f); + Audio_PlaySfx_AtPosWithFreq(&this->dyna.actor.projectedPos, NA_SE_EV_SEESAW_INCLINE - SFX_FLAG, phi_f2 + 1.0f); actor->shape.rot.z += this->unk_178; if (this->dyna.actor.shape.rot.z > 0x1C71) { @@ -691,7 +691,8 @@ void func_80B83758(Actor* thisx, PlayState* play) { temp_f0 = this->unk_178 * 0.002f; temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f); } - func_8019FB0C(&this->dyna.actor.projectedPos, NA_SE_EV_SMALL_WATER_WHEEL - SFX_FLAG, temp_f0, 0x20); + Audio_PlaySfx_AtPosWithFreqAndChannelIO(&this->dyna.actor.projectedPos, NA_SE_EV_SMALL_WATER_WHEEL - SFX_FLAG, + temp_f0, 0x20); } if (this->dyna.actor.flags & ACTOR_FLAG_40) { 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 6d13f4ac3..6562c4738 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 @@ -432,11 +432,11 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) { } if (!(this->unk_174 & 1) && (this->unk_172 & 1)) { - func_801000CC(NA_SE_EV_PIPE_STREAM_START); + Lib_PlaySfx_2(NA_SE_EV_PIPE_STREAM_START); } func_80A2A670(this, play); } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_COCK_SWITCH_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_COCK_SWITCH_ROLL - SFX_FLAG); } } @@ -533,14 +533,14 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) { } if (!(this->unk_174 & 1) && (this->unk_172 & 1)) { - func_801000CC(NA_SE_EV_PIPE_STREAM_START); + Lib_PlaySfx_2(NA_SE_EV_PIPE_STREAM_START); } this->unk_174 = this->unk_172; this->unk_1D0 = 17; this->actionFunc = func_80A2AAB8; } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_COCK_SWITCH_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_COCK_SWITCH_ROLL - SFX_FLAG); } } @@ -739,9 +739,9 @@ void func_80A2B274(Actor* thisx, PlayState* play) { temp_v1 = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)]; if (temp_v1 != 0) { if (temp_v1 > 0) { - func_8019FC20(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG); + Audio_PlaySfx_WaterWheel(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG); } else { - func_8019FC20(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_LR - SFX_FLAG); + Audio_PlaySfx_WaterWheel(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_LR - SFX_FLAG); } } } @@ -856,9 +856,11 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { if ((this->unk_160 == 9) || (this->unk_160 == 8)) { if (this->unk_1CC >= 0) { - func_8019FB0C(&this->unk_1A8, NA_SE_EV_BIG_WATER_WHEEL_RR - SFX_FLAG, this->unk_1D4, 32); + Audio_PlaySfx_AtPosWithFreqAndChannelIO(&this->unk_1A8, NA_SE_EV_BIG_WATER_WHEEL_RR - SFX_FLAG, + this->unk_1D4, 32); } else { - func_8019FB0C(&this->unk_1A8, NA_SE_EV_BIG_WATER_WHEEL_LR - SFX_FLAG, this->unk_1D4, 32); + Audio_PlaySfx_AtPosWithFreqAndChannelIO(&this->unk_1A8, NA_SE_EV_BIG_WATER_WHEEL_LR - SFX_FLAG, + this->unk_1D4, 32); } } } diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c index 10ad49d9b..44acf9343 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c @@ -531,7 +531,7 @@ void func_80B84BCC(BgDblueWaterfall* this, PlayState* play) { } } - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } else { if (this->unk_1A3) { CutsceneManager_Stop(this->csId); @@ -570,7 +570,7 @@ void func_80B84F20(BgDblueWaterfall* this, PlayState* play) { this->unk_19F = 0; } - func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); } else { if (this->unk_1A3) { CutsceneManager_Stop(this->csId); 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 97ccc907a..6a4c44b65 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 @@ -292,17 +292,17 @@ void func_80BC4228(BgF40Block* this, PlayState* play) { switch (this->unk_168) { case 0: case 3: - func_800B9010(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_X - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_X - SFX_FLAG); break; case 1: case 4: - func_800B9010(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_Y - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_Y - SFX_FLAG); break; case 2: case 5: - func_800B9010(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_Z - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_MOVE_Z - SFX_FLAG); break; } } diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c index e15c87f42..86edcbee6 100644 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c +++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c @@ -182,7 +182,7 @@ void BgFireWall_Update(Actor* thisx, PlayState* play2) { } } if (this->actionFunc == func_809AC6C0) { - func_800B9010(&this->actor, NA_SE_EV_FIRE_PLATE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PLATE - SFX_FLAG); if ((this->unk_14C == 0) || ((this->unk_14C != 0) && (this->actor.xzDistToPlayer < 240.0f))) { func_809AC7F8(this, play); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); 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 7b63081c0..ecfe2c910 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 @@ -56,7 +56,7 @@ void BgFuKaiten_UpdateRotation(BgFuKaiten* this) { this->dyna.actor.shape.rot.y += this->rotationSpeed; if (this->rotationSpeed > 0) { f0 = this->rotationSpeed * 0.002f; - func_8019FAD8(&this->dyna.actor.projectedPos, NA_SE_EV_WOOD_GEAR - SFX_FLAG, f0); + Audio_PlaySfx_AtPosWithFreq(&this->dyna.actor.projectedPos, NA_SE_EV_WOOD_GEAR - SFX_FLAG, f0); } } 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 9da3cc5f6..3da89164d 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 @@ -75,9 +75,9 @@ void BgFuMizu_Update(Actor* thisx, PlayState* play) { } if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, heightTarget, 0.05f, 1.0f, 0.5f) > 1.0f) { if (this->unk_160 == 1) { - func_800B9010(&this->dyna.actor, NA_SE_EV_WATER_LEVEL_DOWN_FIX - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WATER_LEVEL_DOWN_FIX - SFX_FLAG); } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_WATER_LEVEL_DOWN_FIX - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WATER_LEVEL_DOWN_FIX - SFX_FLAG); } } } 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 fd46e16e5..27023756b 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 @@ -74,7 +74,7 @@ void func_80B40160(BgGoronOyu* this, PlayState* play) { func_80B40080(this); } - Audio_PlaySfxAtPos(&D_80B40780, NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG); + Audio_PlaySfx_AtPos(&D_80B40780, NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG); } void func_80B401F8(BgGoronOyu* this, PlayState* play) { 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 dfc176eff..f9ed1d0c9 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 @@ -110,7 +110,7 @@ void func_80B6DD9C(BgHakaCurtain* this, PlayState* play) { func_80B6DE80(this); return; } - func_800B9010(&this->dyna.actor, NA_SE_EV_CURTAIN_DOWN - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_CURTAIN_DOWN - SFX_FLAG); } void func_80B6DE80(BgHakaCurtain* this) { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c index 10f045617..b4c653b99 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c @@ -99,7 +99,7 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) { this->unk_15C++; this->dyna.actor.world.pos.x = (Math_SinS(this->unk_15C * 0x2000) * var_fv1) + this->dyna.actor.home.pos.x; this->dyna.actor.world.pos.z = (Math_CosS(this->unk_15C * 0x2000) * var_fv1) + this->dyna.actor.home.pos.z; - func_800B9010(&this->dyna.actor, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); } else { this->unk_15C = 0; } 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 f85015ea9..2a79bfd08 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 @@ -492,7 +492,7 @@ void func_80A9BD24(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* } else if (unkStruct->unk_0000[i].unk_34 == 3) { if (Math3D_XZLengthSquared(unkStruct->unk_0000[i].unk_14.x, unkStruct->unk_0000[i].unk_14.z) > 278784.03f) { func_80A9B554(this, play, unkStruct, &unkStruct->unk_0000[i]); - func_8019F128(NA_SE_EV_GLASSBROKEN_IMPACT); + Audio_PlaySfx_2(NA_SE_EV_GLASSBROKEN_IMPACT); unkStruct->unk_0000[i].unk_34 = 4; unkStruct->unk_0000[i].unk_30 = 30; } @@ -528,7 +528,7 @@ void func_80A9C058(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* Quake_SetDuration(quakeIndex, 12); if (this->unk_179 <= 0) { - func_8019F128(NA_SE_EV_STONEDOOR_STOP); + Audio_PlaySfx_2(NA_SE_EV_STONEDOOR_STOP); this->unk_179 = 40; } break; @@ -799,10 +799,10 @@ void func_80A9CD14(BgHakuginPost* this, PlayState* play) { this->unk_16C += temp_f12; if (this->unk_168 <= this->unk_16C) { BgHakuginPost_RequestQuakeAndRumble(this, play); - func_8019F128(NA_SE_EV_STONEDOOR_STOP); + Audio_PlaySfx_2(NA_SE_EV_STONEDOOR_STOP); func_80A9CE00(this); } else { - func_800B8FE8(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG); } } @@ -840,7 +840,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { D_80A9E028.unk_0000[i].unk_28 = ((s16)(player->actor.shape.rot.y - temp) / 3) + temp; D_80A9E028.unk_0000[i].unk_34 = 2; Player_PlaySfx(player, NA_SE_IT_HAMMER_HIT); - func_8019F128(NA_SE_EV_SLIDE_DOOR_OPEN); + Audio_PlaySfx_2(NA_SE_EV_SLIDE_DOOR_OPEN); Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E); this->unk_178 = 20; func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, D_80A9E028.unk_0000[i].csId, @@ -877,10 +877,10 @@ void func_80A9D0B4(BgHakuginPost* this, PlayState* play) { func_80A9B160(&D_80A9E028, play); this->unk_16C = this->unk_164; BgHakuginPost_RequestQuakeAndRumble(this, play); - func_8019F128(NA_SE_EV_STONEDOOR_STOP); + Audio_PlaySfx_2(NA_SE_EV_STONEDOOR_STOP); func_80A9CC84(this); } else { - func_800B8FE8(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_FALL - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_FALL - SFX_FLAG); } } 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 2d8fc2683..583384c7d 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 @@ -109,7 +109,7 @@ void func_80B15790(BgHakuginSwitch* this, u16 sfxId) { void func_80B157C4(BgHakuginSwitch* this, u16 arg1) { if (this->unk_1B2 <= 0) { - func_800B9010(&this->dyna.actor, arg1); + Actor_PlaySfx_Flagged(&this->dyna.actor, arg1); } } @@ -254,7 +254,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { if (this->unk_1B0 > 0) { this->unk_1B0--; if (sp38->unk_14 & 8) { - func_800B9038(&this->dyna.actor, this->unk_1B0); + Actor_PlaySfx_FlaggedTimer(&this->dyna.actor, this->unk_1B0); if (this->unk_1B0 == 0) { sp24 = true; sp20 = sp28; 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 93d605320..27375d4dd 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 @@ -306,7 +306,7 @@ void func_80B7F290(BgIkanaBlock* this, PlayState* play) { func_80B7F360(this); } } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); } } 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 ad2d9fbdd..23e707d7b 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 @@ -652,7 +652,7 @@ void func_80B814B8(BgIkanaRotaryroom* this, PlayState* play) { func_80169EFC(&play->state); Player_PlaySfx(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->voiceSfxIdOffset); play->haltAllActors = true; - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); this->actionFunc = NULL; } } else { @@ -813,7 +813,7 @@ void func_80B81A80(Actor* thisx, PlayState* play) { s32 i; BgIkanaRotaryroomStruct1* ptr; - func_800B9010(thisx, NA_SE_EV_EARTHQUAKE - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_EARTHQUAKE - SFX_FLAG); this->unk_584--; if (this->unk_584 <= 0) { @@ -850,7 +850,7 @@ void func_80B81BA0(Actor* thisx, PlayState* play) { s32 sp30 = 0; s32 i; - func_800B9010(&this->dyna.actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); if (this->unk_584 > 0) { this->unk_584--; @@ -921,7 +921,7 @@ void func_80B81DC8(Actor* thisx, PlayState* play) { BgIkanaRotaryroom* this = THIS; if (this->unk_584 > 10) { - func_800B9010(&this->dyna.actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); } this->unk_584--; 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 6ce5f7d81..4e4b9b9bc 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 @@ -163,7 +163,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); func_80C0AC74(this); } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_FALL - SFX_FLAG); } } @@ -205,7 +205,7 @@ void func_80C0AD64(BgIkninSusceil* this, PlayState* play) { CutsceneManager_Stop(this->dyna.actor.csId); func_80C0AB14(this); } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c index 84bdc4169..71fbb8d2f 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c @@ -131,7 +131,7 @@ void func_80BD7250(BgIknvDoukutu* this, PlayState* play) { this->dyna.actor.world.pos.y = temp_fv0; this->actionFunc = func_80BD73D0; } - func_8019F128(NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_WATER_LEVEL_DOWN - SFX_FLAG); } void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index de6be9266..540c393c6 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -127,13 +127,13 @@ s32 func_80BD7CEC(BgIknvObj* this) { void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { this->dyna.actor.shape.rot.z -= 0x64; - func_800B9098(&this->dyna.actor); - func_800B9010(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG); + Actor_PlaySeq_FlaggedMusicBoxHouse(&this->dyna.actor); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG); } if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 4) && (play->csCtx.curFrame == 1495)) { - func_8019F128(NA_SE_EV_DOOR_UNLOCK); + Audio_PlaySfx_2(NA_SE_EV_DOOR_UNLOCK); } } @@ -146,7 +146,7 @@ s32 func_80BD7E0C(BgIknvObj* this, s16 targetRotation, PlayState* play) { if ((play->gameplayFrames % 2) != 0) { this->dyna.actor.shape.yOffset = 5.0f; } - func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); return false; } Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); 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 2796aed7e..05d4a27bf 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -284,14 +284,14 @@ void func_809543D4(BgIngate* this, PlayState* play) { this->unk160 &= ~0x4; this->actionFunc = func_809541B8; Environment_StartTime(); - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } else { if (this->timePath != NULL) { this->timePath = &play->setupPathList[this->timePath->additionalPathIndex]; } func_80953F14(this, play); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } Message_CloseTextbox(play); break; @@ -299,13 +299,13 @@ void func_809543D4(BgIngate* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { func_80953EA4(this, play); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } else { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->unk160 &= ~0x4; this->actionFunc = func_809541B8; Environment_StartTime(); - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } Message_CloseTextbox(play); break; 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 66ac02634..37ac6c2ac 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 @@ -189,11 +189,11 @@ void BgKin2Fence_HandleMaskCode(BgKin2Fence* this, PlayState* play) { if (hitMask >= 0) { nextMask = (s8)gSaveContext.save.saveInfo.spiderHouseMaskOrder[this->masksHit]; if (hitMask == nextMask) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->masksHit += 1; BgKin2Fence_SpawnEyeSparkles(this, play, nextMask); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->masksHit = 0; } } 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 7da9237bc..87a946964 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 @@ -105,7 +105,7 @@ void BgKin2Picture_SpawnSkulltula(BgKin2Picture* this, PlayState* play2) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->dyna.actor.home.pos.x, this->dyna.actor.home.pos.y + 23.0f, this->dyna.actor.home.pos.z, 0, this->dyna.actor.home.rot.y, 0, skulltulaSpawnParams)) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } } } 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 f36944db6..980b0fa01 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 @@ -307,7 +307,7 @@ void func_80B70230(BgKin2Shelf* this, PlayState* play) { this->dyna.actor.world.pos.z = ((Math_CosS(sp36) * phi_f20) * D_80B70750[sp40]) + this->dyna.actor.home.pos.z; if (this->unk_166 != 0) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } func_80B700A8(this); } else { @@ -353,7 +353,7 @@ void func_80B704B4(BgKin2Shelf* this, PlayState* play) { this->dyna.actor.world.pos.z = ((Math_CosS(sp36) * temp_f20) * D_80B70758[sp40]) + this->dyna.actor.home.pos.z; if (this->unk_167 != 0) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } func_80B700A8(this); } else { 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 2e924efd3..11db327fa 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 @@ -252,7 +252,7 @@ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) { this->transitionTimer++; } } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 20.0f); @@ -284,7 +284,7 @@ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) { this->transitionTimer++; } } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 7.0f); @@ -332,7 +332,7 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { } BgNumaHana_UpdatePetalPosRots(this); - func_800B9010(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); } void BgNumaHana_SetupOpenedIdle(BgNumaHana* this) { @@ -346,7 +346,7 @@ void BgNumaHana_OpenedIdle(BgNumaHana* this, PlayState* play) { this->dyna.actor.shape.rot.y += this->flowerRotationalVelocity; this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; BgNumaHana_UpdatePetalPosRots(this); - func_800B9010(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); } void BgNumaHana_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c index 9349b8188..796f66d3f 100644 --- a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c +++ b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c @@ -179,7 +179,7 @@ void BgSpoutFire_Update(Actor* thisx, PlayState* play) { func_80A60E08(this, play); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - func_800B9010(&this->actor, NA_SE_EV_FIRE_PLATE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PLATE - SFX_FLAG); } } 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 132f8f13f..16e068156 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -49,7 +49,7 @@ void func_80919F30(BgUmajump* this, PlayState* play) { void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) { if ((play->csCtx.curFrame >= 6) && !this->hasSoundPlayed) { this->hasSoundPlayed = true; - play_sound(NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx(NA_SE_EV_KID_HORSE_NEIGH); } if (play->csCtx.state == CS_STATE_IDLE) { 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 5b19594fb..bf40d4480 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -938,7 +938,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0152 = 0; sTwinmoldStatic->unk_1D20 = 102; sTwinmoldStatic->subCamAtVel = 0.0f; - play_sound(NA_SE_EN_INBOSS_DEAD_PRE2_OLD); + Audio_PlaySfx(NA_SE_EN_INBOSS_DEAD_PRE2_OLD); } else if (!(this->unk_0146[1] & 0xF) && (Rand_ZeroOne() < 0.5f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD); } @@ -955,7 +955,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { } Boss02_SpawnEffectFlash(play->specialEffects, &this->unk_147C[this->unk_1678]); - play_sound(NA_SE_EV_EXPLOSION); + Audio_PlaySfx(NA_SE_EV_EXPLOSION); this->unk_1678--; if (this->unk_1678 <= 0) { @@ -1005,7 +1005,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { sTwinmoldStatic->unk_1D1C = 0; sTwinmoldStatic->unk_0146[0] = 15; sTwinmoldStatic->unk_0150 = 0; - play_sound(NA_SE_EV_LIGHTNING); + Audio_PlaySfx(NA_SE_EV_LIGHTNING); for (i = 0; i < 30; i++) { Boss02_SpawnEffectFragment(play->specialEffects, &this->unk_0170); @@ -1077,7 +1077,7 @@ void func_809DBFB4(Boss02* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD); this->unk_015C = 1; } else { - Audio_PlaySfxAtPos(&this->unk_167C, NA_SE_EN_INBOSS_DAMAGE_OLD); + Audio_PlaySfx_AtPos(&this->unk_167C, NA_SE_EN_INBOSS_DAMAGE_OLD); this->unk_015C = 10; } @@ -1671,7 +1671,7 @@ void func_809DD934(Boss02* this, PlayState* play) { label1: if (this->unk_1D14 >= 50) { if (this->unk_1D14 == (u32)(BREG(43) + 60)) { - play_sound(NA_SE_PL_TRANSFORM_GIANT); + Audio_PlaySfx(NA_SE_PL_TRANSFORM_GIANT); } Math_ApproachF(&this->unk_1D64, 200.0f, 0.1f, this->subCamAtVel * 640.0f); Math_ApproachF(&this->unk_1D6C, 273.0f, 0.1f, this->subCamAtVel * 150.0f); @@ -1722,7 +1722,7 @@ void func_809DD934(Boss02* this, PlayState* play) { label2: if (this->unk_1D14 != 0) { if (this->unk_1D14 == (u32)(BREG(44) + 10)) { - play_sound(NA_SE_PL_TRANSFORM_NORAML); + Audio_PlaySfx(NA_SE_PL_TRANSFORM_NORAML); } Math_ApproachF(&this->unk_1D64, 60.0f, 0.1f, this->subCamAtVel * 640.0f); Math_ApproachF(&this->unk_1D6C, 23.0f, 0.1f, this->subCamAtVel * 150.0f); @@ -1986,7 +1986,7 @@ void func_809DD934(Boss02* this, PlayState* play) { this->unk_1D7A = 0; func_809DA1D0(play, 255, 255, 255, 0); this->unk_1D78 = 2; - play_sound(NA_SE_SY_TRANSFORM_MASK_FLASH); + Audio_PlaySfx(NA_SE_SY_TRANSFORM_MASK_FLASH); case 2: this->unk_1D7A += 40; @@ -2079,7 +2079,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { sp58 = (Math_SinS(this->unk_0150) * (BREG(19) + 5)) * 0.1f; Matrix_RotateZF(Math_SinS(this->unk_1D1C * 0x3000) * ((KREG(28) * 0.001f) + 0.017f), MTXMODE_NEW); Matrix_MultVecY(1.0f, &this->subCamUp); - func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); } if (this->unk_1D1C == 20) { 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 d44c961e9..af79315db 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -121,7 +121,7 @@ GyorgEffect sGyorgEffects[GYORG_EFFECT_COUNT]; Boss03* sGyorgBossInstance; void Boss03_PlayUnderwaterSfx(Vec3f* projectedPos, u16 sfxId) { - func_8019F420(projectedPos, sfxId); + Audio_PlaySfx_Underwater(projectedPos, sfxId); } /* Start of SpawnEffect section */ @@ -1051,7 +1051,7 @@ void Boss03_Charge(Boss03* this, PlayState* play) { // Attack platform if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION); + Audio_PlaySfx(NA_SE_IT_BIG_BOMB_EXPLOSION); Actor_RequestQuakeAndRumble(&this->actor, play, 20, 15); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WATER_EFFECT, 0.0f, this->waterHeight, 0.0f, 0, 0, 0x96, ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE); @@ -1772,7 +1772,7 @@ void Boss03_Stunned(Boss03* this, PlayState* play) { this->actor.gravity = -2.0f; Actor_MoveWithGravity(&this->actor); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - play_sound(NA_SE_IT_WALL_HIT_HARD); + Audio_PlaySfx(NA_SE_IT_WALL_HIT_HARD); Actor_RequestQuakeAndRumble(&this->actor, play, 10, 10); } } else { @@ -2114,9 +2114,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { this->prevPlayerPos = player->actor.world.pos; if (this->waterHeight < this->actor.world.pos.y) { - func_8019F540(0); + Audio_SetSfxUnderwaterReverb(false); } else { - func_8019F540(1); + Audio_SetSfxUnderwaterReverb(true); } if (this->unk_280 != 0) { 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 4e22822a4..43a910e19 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -324,7 +324,7 @@ void func_809EC568(Boss04* this, PlayState* play) { Math_ApproachF(&this->subCamAt.y, this->actor.world.pos.y, 0.5f, 1000.0f); Math_ApproachF(&this->subCamAt.z, this->actor.world.pos.z, 0.5f, 1000.0f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION); + Audio_PlaySfx(NA_SE_IT_BIG_BOMB_EXPLOSION); this->unk_6F4 = 15; this->unk_708 = 13; this->unk_704 = 0; @@ -480,7 +480,7 @@ void func_809ECF58(Boss04* this, PlayState* play) { this->actor.speed = 0.0f; if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION); + Audio_PlaySfx(NA_SE_IT_BIG_BOMB_EXPLOSION); Actor_RequestQuakeAndRumble(&this->actor, play, 15, 10); this->unk_6F4 = 15; sp3C.x = this->actor.focus.pos.x; diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index aa2929f28..04c432dfd 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -163,7 +163,7 @@ void func_809F23CC(Boss06* this) { if ((this->unk_1C9 == 0) && (D_809F4970->unk_68A == 0)) { if (this->actor.colChkInfo.damageEffect == 2) { func_809F24A8(this); - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->unk_1B0 = -(this->actor.world.pos.x - this->collider.info.bumper.hitPos.x); this->unk_1BC = this->unk_1B0 * 0.35f; @@ -229,7 +229,7 @@ void func_809F24C8(Boss06* this, PlayState* play) { } if (this->unk_1CA >= 30) { - play_sound(NA_SE_EV_S_STONE_FLASH); + Audio_PlaySfx(NA_SE_EV_S_STONE_FLASH); } if (this->unk_1CA >= 60) { @@ -376,7 +376,7 @@ void func_809F2C44(Boss06* this, PlayState* play) { } if ((this->unk_1E4 > 0.1f) && ENBOSS06_GET_PARAMS(&this->actor) == 0) { - play_sound(NA_SE_EV_CURTAIN_DOWN - SFX_FLAG); + Audio_PlaySfx(NA_SE_EV_CURTAIN_DOWN - SFX_FLAG); } } @@ -453,7 +453,7 @@ void Boss06_Update(Actor* thisx, PlayState* play) { } if ((this->unk_1C8 != 0) && (this->unk_1C8 != 0)) { - play_sound(NA_SE_EV_FIRE_PLATE - SFX_FLAG); + Audio_PlaySfx(NA_SE_EV_FIRE_PLATE - SFX_FLAG); this->unk_1CC += 0.6f; this->unk_1D0 += 0.1f; this->unk_1D4 += 0.0200000014156f; diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index cba240947..ca472ccc3 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -210,7 +210,7 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { this->actor.scale.x = scale; this->actor.scale.z = scale; func_808CDAD0(alphaScale); - func_800B8FE8(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); } else { func_808CDAD0(1.0f); Actor_Kill(&this->actor); @@ -218,7 +218,7 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { } void func_808CDCEC(DemoEffect* this, PlayState* play) { - func_800B8FE8(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); if (SkelCurve_Update(play, &this->skelCurve)) { SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 60.0f, 59.0f, 0.0f); diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c index ec33a8a94..11fafb5f1 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c @@ -89,7 +89,7 @@ void func_80C17B60(DemoMoonend* this, PlayState* play) { } } if (this->cueId == 2) { - func_800B9010(&this->actor, NA_SE_EV_RAINBOW - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_RAINBOW - SFX_FLAG); } } else { this->actor.draw = NULL; @@ -127,7 +127,7 @@ void func_80C17C48(DemoMoonend* this, PlayState* play) { } } if (this->actor.home.rot.z != 0) { - func_800B9010(&this->actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); } } else { this->actor.draw = NULL; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c index 2d0aa27cd..2341b3a64 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -224,7 +224,7 @@ void func_80C16A74(DemoSyoten* this, PlayState* play) { func_80183DE0(&this->unk_144); if (Cutscene_IsCueInChannel(play, this->cueType)) { if ((play->csCtx.curFrame >= 160) && (play->csCtx.curFrame < 322)) { - func_800B9010(&this->actor, NA_SE_EV_IKANA_SOUL_LV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_IKANA_SOUL_LV - SFX_FLAG); } else if (play->csCtx.curFrame == 322) { Actor_PlaySfx(&this->actor, NA_SE_EV_IKANA_SOUL_TRANSFORM); } @@ -392,7 +392,7 @@ void func_80C16EAC(DemoSyoten* this, PlayState* play) { if (this->unk_3D8 > 1.0f) { this->unk_3D8 = 1.0f; } - func_800B9010(&this->actor, NA_SE_EV_IKANA_PURIFICATION - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_IKANA_PURIFICATION - SFX_FLAG); } } else { this->actor.draw = NULL; diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index 2db282367..ae9016ad7 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -127,7 +127,7 @@ void DemoTreLgt_Animate(DemoTreLgt* this, PlayState* play) { if (curFrame > 30.0f) { if (!(this->status & 1)) { this->status |= 1; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_FLASH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_FLASH); } } if (SkelCurve_Update(play, &this->skelCurve)) { 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 33c6eed8f..96941b8cc 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -168,7 +168,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) { (player2->actor.world.pos.x < 40.0f) && (player2->actor.world.pos.z > 1000.0f) && (player2->actor.world.pos.z < 1078.0f)) { if (!D_80AAAAB4) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); D_80AAAAB4 = true; } } else { 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 9f5d18967..b5a19670d 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -258,7 +258,7 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) { ((player2->actor.world.pos.x > -5780.0f) && (player2->actor.world.pos.x < -5385.0f) && (player2->actor.world.pos.z > 1120.0f) && (player2->actor.world.pos.z < 2100.0f))) { if (!sSuccessSoundAlreadyPlayed) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); sSuccessSoundAlreadyPlayed = true; } } else { diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c index e0d2fc2a3..0f6334db3 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -98,7 +98,7 @@ void DmOpstage_Update(Actor* thisx, PlayState* play) { if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0) && (play->csCtx.curFrame == 480)) { // This actor is responsible for playing the fairy sound during the exposition in the intro, // during the transition to Lost Woods, before Ocarina gets stolen. - func_8019F128(NA_SE_EV_NAVY_FLY_REBIRTH); + Audio_PlaySfx_2(NA_SE_EV_NAVY_FLY_REBIRTH); } } 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 1787bcf6f..b9bf702b2 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -428,7 +428,7 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) { */ void DmStk_PlaySfxForTitleCutscene(DmStk* this, PlayState* play) { if (play->csCtx.curFrame == 535) { - func_8019F128(NA_SE_EV_CLOCK_TOWER_BELL); + Audio_PlaySfx_2(NA_SE_EV_CLOCK_TOWER_BELL); } } @@ -492,12 +492,12 @@ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play) void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) { switch (play->csCtx.curFrame) { case 415: - func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 100); + Audio_PlaySfx_AtPosWithVolumeTransition(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 100); break; case 785: - func_8019F128(NA_SE_SY_STALKIDS_PSYCHO); - func_8019FE74(&gSfxVolume, 0.0f, 150); + Audio_PlaySfx_2(NA_SE_SY_STALKIDS_PSYCHO); + Audio_SetSfxVolumeTransition(&gSfxVolume, 0.0f, 150); break; case 560: @@ -520,7 +520,7 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { switch (play->csCtx.curFrame) { case 10: - func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 50); + Audio_PlaySfx_AtPosWithVolumeTransition(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 50); break; case 71: @@ -532,7 +532,7 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { break; case 650: - func_8019FE74(&gSfxVolume, 0.0f, 80); + Audio_SetSfxVolumeTransition(&gSfxVolume, 0.0f, 80); break; case 265: @@ -573,7 +573,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla switch (play->csCtx.curFrame) { case 140: - func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); + Audio_PlaySfx_AtPosWithVolumeTransition(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); break; case 258: @@ -762,7 +762,7 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* pla switch (play->csCtx.curFrame) { case 40: - func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); + Audio_PlaySfx_AtPosWithVolumeTransition(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80); break; case 234: @@ -805,7 +805,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla switch (play->csCtx.curFrame) { case 64: - Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL06_SURPRISED); + Audio_PlaySfx_AtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL06_SURPRISED); break; case 327: @@ -825,11 +825,11 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla case 486: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF); - Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL08_CRY_BIG); + Audio_PlaySfx_AtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL08_CRY_BIG); break; case 496: - Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL09_SCREAM); + Audio_PlaySfx_AtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL09_SCREAM); break; case 590: @@ -841,7 +841,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla break; case 594: - Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL24_SCREAM2); + Audio_PlaySfx_AtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL24_SCREAM2); break; default: @@ -865,7 +865,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla } if (play->csCtx.curFrame >= 290) { - func_8019F128(NA_SE_EV_KYOJIN_VOICE_SUCCESS - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_KYOJIN_VOICE_SUCCESS - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index c889de158..586704c3b 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -119,7 +119,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play) { if (grottoIsOpen) { DOORANA_SET_TYPE(&this->actor, DOORANA_TYPE_VISIBLE); DoorAna_SetupAction(this, DoorAna_WaitOpen); - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); } Actor_SetClosestSecretDistance(&this->actor, play); 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 7e202b0af..b6f8198c1 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -429,7 +429,7 @@ s32 func_808A1340(DoorShutter* this, PlayState* play) { s32 pad; if (this->unk_163 == 7) { - func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); } Lib_Vec3f_TranslateAndRotateY(&this->slidingDoor.dyna.actor.home.pos, this->slidingDoor.dyna.actor.shape.rot.y, @@ -589,7 +589,7 @@ void func_808A1884(DoorShutter* this, PlayState* play) { s32 func_808A1A70(DoorShutter* this) { if (this->unk_163 == 7) { if (this->unk_163 == 7) { - func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); } Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f); 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 de20e6f63..798edb09d 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -360,14 +360,14 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9); player->unk_3A0.x = this->dyna.actor.world.pos.x; player->unk_3A0.z = this->dyna.actor.world.pos.z; this->unk_1CA = 1; DoorWarp1_SetupAction(this, func_808B9524); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); DoorWarp1_SetupAction(this, func_808B94A4); } diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c index 3a57149a7..c8127a98f 100644 --- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c +++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c @@ -55,7 +55,7 @@ void EffZoraband_MikauFadeOut(EffZoraband* this, PlayState* play) { } } if ((this->actor.home.rot.z != 0) && (this->actor.draw != NULL)) { - func_800B9010(&this->actor, NA_SE_EV_UFO_LIGHT_BEAM - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_UFO_LIGHT_BEAM - SFX_FLAG); } if (this->stateFlags & 2) { if (this->alpha < 240) { 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 6e56cc609..a5900670d 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -411,22 +411,22 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { switch (func_80BED208(this)) { case 0: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15EC; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15EE; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C &= ~0x1; this->unk_32C |= 0x40; play->msgCtx.msgMode = 0x43; @@ -494,22 +494,22 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) { switch (func_80BED208(this)) { case 0: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15EC; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15EE; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -589,22 +589,22 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { switch (func_80BED27C(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1601; break; case 0: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1602; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1603; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -672,22 +672,22 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { switch (func_80BED27C(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1601; break; case 0: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1602; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1603; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -767,17 +767,17 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { switch (func_80BED2FC(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1613; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -845,17 +845,17 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { switch (func_80BED2FC(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1613; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -928,17 +928,17 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { switch (func_80BED35C(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1613; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -1006,17 +1006,17 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { switch (func_80BED35C(this)) { case 2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1613; break; case 1: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x15ED; break; case 3: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; play->msgCtx.msgMode = 0x43; @@ -1277,7 +1277,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->unk_32C |= 0x10; this->unk_2DC(this, play); break; @@ -1642,7 +1642,7 @@ void EnAkindonuts_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_32C & 0x80) { - func_800B9010(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); } func_80BECC7C(this, play); } 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 dcd380256..f289a49f9 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 @@ -496,11 +496,11 @@ void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* pla switch (play->msgCtx.choiceIndex) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < 10) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->textId = 0x3524; // You can't play if you can't pay! Message_StartTextbox(play, this->textId, &this->actor); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->stateFlags |= ENAOB01_FLAG_PLAYER_TOLD_TO_PICK_A_DOG; this->stateFlags |= ENAOB01_FLAG_CONVERSATION_OVER; this->textId = 0x3522; // Bring me the fastest dog! @@ -510,7 +510,7 @@ void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* pla break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->textId = 0x3535; // Really? Message_StartTextbox(play, this->textId, &this->actor); break; @@ -655,13 +655,13 @@ void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_LAUGH; switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->stateFlags |= ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; EnAob01_BeforeRace_HandleConversation(this, play); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnAob01_BeforeRace_HandleConversation(this, play); break; } 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 75f95cfe6..eb9662f89 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -155,7 +155,7 @@ void func_8088A594(EnArrow* this, PlayState* play) { if (this->actor.parent != NULL) { if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (Math_SmoothStepToF(&this->bubble.unk_144, 16.0f, 0.07f, 1.8f, 0.0f) > 0.5f) { - func_800B9010(&this->actor, NA_SE_PL_DEKUNUTS_BUBLE_BREATH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_DEKUNUTS_BUBLE_BREATH - SFX_FLAG); return; } @@ -449,7 +449,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { func_8088A514(this); } - func_800B9010(&this->actor, NA_SE_IT_DEKUNUTS_BUBLE_SHOT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_DEKUNUTS_BUBLE_SHOT_LEVEL - SFX_FLAG); } else if (this->unk_260 < 7) { this->actor.gravity = -0.4f; } 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 f4a9005f6..a5fdfe0a1 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -590,7 +590,7 @@ void func_80A95CEC(EnAz* this, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.draw = EnAz_Draw; Actor_MoveWithGravity(&this->actor); - func_800B9010(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); } else { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN); @@ -628,7 +628,7 @@ void func_80A95E88(EnAz* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND); } } else { - func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); } } if (!(this->unk_374 & 0x2000)) { @@ -655,7 +655,7 @@ void func_80A95FE8(EnAz* this, PlayState* play) { CutsceneManager_Queue(this->csIdList[0]); } if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) > 20.0f) { - func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); func_800BE33C(&this->actor.world.pos, &this->actor.home.pos, &this->actor.world.rot, false); Math_SmoothStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x, 3, 0xE38, 0x38E); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0xE38, 0x38E); @@ -726,12 +726,12 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10D2: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x10D6; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10D3; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, &this->animIndex); @@ -760,7 +760,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10D8: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); switch (this->unk_2FA) { case 2: this->unk_2FA = 1; @@ -777,7 +777,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } ret = 0; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10D9; } break; @@ -796,12 +796,12 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10DB: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x44; this->unk_2FA = 1; ret = 0; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10DC; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, &this->animIndex); @@ -850,10 +850,10 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10E5: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x10E8; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10E6; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_TO_LEFT, &this->animIndex); @@ -895,7 +895,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10EB: if (play->msgCtx.choiceIndex == 0) { play->msgCtx.msgMode = 0x44; - func_8019F208(); + Audio_PlaySfx_MessageDecide(); switch (this->unk_2FA) { case 4: this->unk_2FA = 3; @@ -911,7 +911,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } ret = 0; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10EC; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_LAUGH_LEFT, &this->animIndex); @@ -992,7 +992,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10F8: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->actor.textId = 0x1107; } else { @@ -1001,7 +1001,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10F9; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, &this->animIndex); @@ -1044,7 +1044,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10FE: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->actor.textId = 0x1108; } else { @@ -1053,7 +1053,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, &this->animIndex); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10FF; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_TO_LEFT, &this->animIndex); @@ -1425,13 +1425,13 @@ void func_80A97AB4(EnAz* this, PlayState* play) { break; case 0x10D8: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x44; func_800FD750(NA_BGM_TIMED_MINI_GAME); func_80A94AB8(this, play, 1); func_80A979DC(this, play); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); } @@ -1578,7 +1578,7 @@ void func_80A97F9C(EnAz* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND); } } else { - func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG); } } SkelAnime_Update(&this->skelAnime); 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 acb47b743..e082c2b0e 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -514,7 +514,7 @@ void EnBat_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.225f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.45f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.45f, 0.45f / 40.0f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 63fb13292..d33a122f3 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -615,7 +615,7 @@ void EnBb_Update(Actor* thisx, PlayState* play) { 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(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 d52f12ccf..8298703bc 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -226,7 +226,7 @@ void EnBbfall_PlaySfx(EnBbfall* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_MOUTH); } - func_800B9010(&this->actor, NA_SE_EN_BUBLEFALL_FIRE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_BUBLEFALL_FIRE - SFX_FLAG); } /** @@ -648,7 +648,7 @@ void EnBbfall_Update(Actor* thisx, PlayState* play) { 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(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 1b849799a..7be6316c7 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -552,7 +552,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.6f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.2f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 0.030000001f)) { - func_800B9010(&this->picto.actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->picto.actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 3daaf1f85..e74c4c24e 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -492,7 +492,7 @@ void func_80A286C0(EnBigpamet* this) { void func_80A28708(EnBigpamet* this, PlayState* play) { this->unk_29E--; this->actor.shape.rot.y += 0x3B00; - func_800B9010(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG); if (this->unk_29E == 0) { func_80A28760(this); } @@ -523,7 +523,7 @@ void func_80A287E8(EnBigpamet* this, PlayState* play) { s16 quakeIndex; this->actor.shape.rot.y += 0x3B00; - func_800B9010(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_B_PAMET_ROLL - SFX_FLAG); this->unk_29E++; this->unk_29E = CLAMP_MAX(this->unk_29E, 20); if (this->collider.base.atFlags & AT_HIT) { 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 056ca97d5..12bc8cf6c 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -556,7 +556,7 @@ void EnBigpo_IdleFlying(EnBigpo* this, PlayState* play) { Math_StepToF(&this->savedHeight, player->actor.world.pos.y + 100.0f, 1.5f); this->actor.world.pos.y = (Math_SinF(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight; Math_StepToF(&this->actor.speed, 3.0f, 0.2f); - func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) { this->unk208 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } @@ -720,7 +720,7 @@ void EnBigpo_BurnAwayDeath(EnBigpo* this, PlayState* play) { } if (this->idleTimer < 18) { - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // burning sfx + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // burning sfx } if (this->idleTimer == 18) { Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR); 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 695ac9153..946f1a03a 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -895,14 +895,14 @@ void EnBigslime_SetTargetVtxFromPreFrozen(EnBigslime* this) { * Plays the standard Gekko sound effects without reverb */ void EnBigslime_GekkoSfxOutsideBigslime(EnBigslime* this, u16 sfxId) { - Audio_PlaySfxAtPos(&this->gekkoProjectedPos, sfxId); + Audio_PlaySfx_AtPos(&this->gekkoProjectedPos, sfxId); } /** * Adds reverb to Gekko sound effects when enclosed by bigslime */ void EnBigslime_GekkoSfxInsideBigslime(EnBigslime* this, u16 sfxId) { - func_8019F420(&this->gekkoProjectedPos, sfxId); + Audio_PlaySfx_Underwater(&this->gekkoProjectedPos, sfxId); } void EnBigslime_GekkoFreeze(EnBigslime* this) { @@ -1633,7 +1633,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { Animation_PlayOnce(&this->skelAnime, sGekkoAttackAnimations[((s32)Rand_ZeroFloat(3.0f) % 3)]); } - func_800B9010(&this->actor, NA_SE_EN_B_SLIME_PUNCH_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_B_SLIME_PUNCH_MOVE - SFX_FLAG); } /** @@ -1897,7 +1897,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) { sBigslimeTargetVtx[vtxIceUpdate - 4].n.a = sBigslimeTargetVtx[vtxIceUpdate].n.a; } - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { if (this->freezeTimer == 0) { EnBigslime_BreakIntoMinislime(this, play); @@ -1980,7 +1980,7 @@ void EnBigslime_Melt(EnBigslime* this, PlayState* play) { EffectSsIceSmoke_Spawn(play, &iceSmokePos, &iceSmokeVelocity, &gZeroVec3f, 600); } - func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); for (i = 159; i >= 0; i--) { sBigslimeTargetVtx[i + 2].n.a = sBigslimeTargetVtx[i].n.a; } @@ -2764,7 +2764,7 @@ void EnBigslime_UpdateEffects(EnBigslime* this) { this->gekkoDrawDmgEffScale = 0.375f * (this->gekkoDrawDmgEffAlpha + 1.0f); this->gekkoDrawDmgEffScale = CLAMP_MAX(this->gekkoDrawDmgEffScale, 0.75f); } else if (!Math_StepToF(&this->gekkoDrawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } @@ -2779,7 +2779,7 @@ void EnBigslime_UpdateBigslime(Actor* thisx, PlayState* play) { play->envCtx.lightSettingOverride = 0xFF; } - func_8019F540(1); + Audio_SetSfxUnderwaterReverb(true); this->dynamicVtxState ^= 1; EnBigslime_DynamicVtxCopyState(this); this->isAnimUpdate = SkelAnime_Update(&this->skelAnime); @@ -2824,7 +2824,7 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) { play->envCtx.lightSettingOverride = 0xFF; } - func_8019F540(0); + Audio_SetSfxUnderwaterReverb(false); this->isAnimUpdate = SkelAnime_Update(&this->skelAnime); if (this->actionFunc != EnBigslime_PlayCutscene) { EnBigslime_ApplyDamageEffectGekko(this, play); 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 745e3b3e7..86bb60431 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 @@ -207,12 +207,12 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { this->actor.params = SHIKASHI_TYPE_FINISHED_CONVERSATION; switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_CloseTextbox(play); func_809CD634(this, play); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); switch (gSaveContext.save.playerForm) { case PLAYER_FORM_DEKU: Message_ContinueTextbox(play, 0x5F0); 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 b388421b7..e6c6b0538 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -493,10 +493,10 @@ void EnBom_Update(Actor* thisx, PlayState* play) { EffectSsGSpk_SpawnFuse(play, thisx, &effPos, &effVelocity, &effAccel); } if (this->isPowderKeg) { - func_801A0810(&thisx->projectedPos, NA_SE_IT_BIG_BOMB_IGNIT - SFX_FLAG, - (this->flashSpeedScale == 7) ? 0 - : (this->flashSpeedScale == 3) ? 1 - : 2); + Audio_PlaySfx_AtPosWithChannelIO(&thisx->projectedPos, NA_SE_IT_BIG_BOMB_IGNIT - SFX_FLAG, + (this->flashSpeedScale == 7) ? 0 + : (this->flashSpeedScale == 3) ? 1 + : 2); } else { Actor_PlaySfx(thisx, NA_SE_IT_BOMB_IGNIT - SFX_FLAG); } 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 ee00081db..6ef27baca 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 @@ -181,7 +181,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) { this->actor.shape.rot.y = player->actor.shape.rot.y; this->actor.flags |= ACTOR_FLAG_1; - func_800B8EF4(play, &this->actor); + Actor_PlaySfx_SurfaceBomb(play, &this->actor); this->isMoving = true; this->actor.speed = 8.0f; @@ -313,7 +313,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) { } if (this->isMoving) { - func_800B8F98(&this->actor, NA_SE_IT_BOMBCHU_MOVE - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_IT_BOMBCHU_MOVE - SFX_FLAG); } if (this->actor.speed != 0.0f) { 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 a600df6d2..a1c0810ce 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -347,11 +347,11 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { sp2A = 1; } else if (this->actor.textId == 0x740) { if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x742; sp2A = 1; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x741; sp2A = 1; } @@ -367,11 +367,11 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { sp2A = 1; } else if (this->actor.textId == 0x74C) { if (play->msgCtx.choiceIndex == 1) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x737; sp2A = 1; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x74D; func_80C03824(this, 14, 1.0f); sp2A = 1; 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 cc9ac1e2c..51025b530 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -239,7 +239,7 @@ void func_808AEE3C(EnBombf* this, PlayState* play) { Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 1.5f, 0.0f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - func_800B8EF4(play, &this->actor); + Actor_PlaySfx_SurfaceBomb(play, &this->actor); if (this->actor.velocity.y < -6.0f) { this->actor.velocity.y *= -0.3f; this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; 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 ea5feeacd..548091daa 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -598,7 +598,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { Player* player = GET_PLAYER(play); - func_8019F208(); + Audio_PlaySfx_MessageDecide(); func_80BFE65C(this); this->unk_28E = 0; this->unk_29A = 0; @@ -609,14 +609,14 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) { this->actor.textId = D_80C00A70[this->unk_2C8]; } Message_ContinueTextbox(play, this->actor.textId); - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); func_80BFE494(this, 15, 1.0f); this->action = EN_BOMJIMA_ACTION_5; this->actionFunc = func_80BFF6CC; } else { Player* player = GET_PLAYER(play); - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_80BFE65C(this); this->unk_2C8 = 10; if (player->transformation == PLAYER_FORM_DEKU) { diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index f9b5b3d41..8c6f58850 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -213,7 +213,7 @@ void func_808A2918(EnBoom* this, PlayState* play) { Actor_SetSpeeds(&this->actor, 12.0f); Actor_MoveWithGravity(&this->actor); func_808A24DC(this, play); - func_800B9010(&this->actor, NA_SE_IT_BOOMERANG_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_BOOMERANG_FLY - SFX_FLAG); if ((this->collider.base.atFlags & AT_HIT) && (((this->collider.base.at->id == ACTOR_EN_ITEM00) && (this->collider.base.at->params != ITEM00_HEART_CONTAINER) && 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 044f54334..40a63050b 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -364,7 +364,7 @@ void EnBox_Fall(EnBox* this, PlayState* play) { this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight; EnBox_SetupAction(this, EnBox_WaitOpen); } - Audio_PlaySfxAtPos(&this->dyna.actor.projectedPos, NA_SE_EV_TRE_BOX_BOUND); + Audio_PlaySfx_AtPos(&this->dyna.actor.projectedPos, NA_SE_EV_TRE_BOX_BOUND); EnBox_SpawnDust(this, play); } yDiff = this->dyna.actor.world.pos.y - this->dyna.actor.floorHeight; @@ -419,7 +419,7 @@ void func_80868AFC(EnBox* this, PlayState* play) { EnBox_SetupAction(this, func_80868B74); this->unk_1A0 = 0; func_80867FBC(&this->unk_1F4, play, (this->movementFlags & ENBOX_MOVE_0x80) != 0); - Audio_PlaySfxAtPos(&this->dyna.actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); + Audio_PlaySfx_AtPos(&this->dyna.actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); } } @@ -556,8 +556,8 @@ void EnBox_Open(EnBox* this, PlayState* play) { gSaveContext.save.playerForm == PLAYER_FORM_DEKU ? 15.0f : 90.0f)) { sfxId = NA_SE_EV_TBOX_OPEN; } - if (sfxId != 0) { - Audio_PlaySfxAtPos(&this->dyna.actor.projectedPos, sfxId); + if (sfxId != NA_SE_NONE) { + Audio_PlaySfx_AtPos(&this->dyna.actor.projectedPos, sfxId); } if (this->skelAnime.jointTable[3].z > 0) { this->unk_1A8 = (0x7D00 - this->skelAnime.jointTable[3].z) * 0.00006f; @@ -583,7 +583,7 @@ void EnBox_SpawnIceSmoke(EnBox* this, PlayState* play) { this->iceSmokeTimer++; //! @bug sfxId should be NA_SE_EN_MIMICK_BREATH, but uses OoT's sfxId value - func_800B9010(&this->dyna.actor, NA_SE_EN_LAST3_COIL_ATTACK_OLD - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EN_LAST3_COIL_ATTACK_OLD - SFX_FLAG); if (Rand_ZeroOne() < 0.3f) { randomf = 2.0f * Rand_ZeroOne() - 1.0f; pos = this->dyna.actor.world.pos; 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 8e3e907bb..e23fba0d8 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 @@ -570,7 +570,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) { this->subCamAt.z = mainCam->at.z; Message_StartTextbox(play, 0xF, NULL); this->cameraState = 2; - func_8019FDC8(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20); + Audio_PlaySfx_AtPosWithReverb(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20); case 2: if (player->actor.world.pos.z > 0.0f) { player->actor.world.pos.z = 290.0f; 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 bad5f5e0f..23d4f1018 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -542,7 +542,7 @@ void EnCrow_Update(Actor* thisx, PlayState* play) { this->drawDmgEffFrozenSteamScale = this->drawDmgEffFrozenSteamScale; } } else if (!Math_StepToF(&this->drawDmgEffScale, 0.5f, 0.5f * 0.025f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 25013327a..434cb07cf 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -422,7 +422,7 @@ void func_80B3EEDC(EnDai* this, PlayState* play) { func_80B3E96C(this, play); this->unk_A6C = 0; } else if (this->unk_A6C == 0) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->unk_A6C = 1; } } 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 422b35e87..3df11604e 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -1214,7 +1214,7 @@ void EnDekubaba_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.75f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.75f / 40)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 cef97a8b0..73d03a7e9 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -660,7 +660,7 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); } else if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) && !Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, (33.0f / 1600.0f))) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 e24e2691b..9d368d68b 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -559,7 +559,7 @@ void func_8089B580(EnDinofos* this, PlayState* play) { Math_Vec3f_StepTo(&subCam->eye, &this->unk_2BC, 10.0f); Play_SetCameraAtEye(play, this->subCamId, &this->actor.focus.pos, &subCam->eye); if (this->skelAnime.curFrame <= 55.0f) { - func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); } } @@ -1086,7 +1086,7 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { sp7C.x = 0.9f * temp_f20; sp7C.y = Rand_CenteredFloat(0.6f) + 1.4f; sp7C.z = 0.9f * temp_f22; - func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); EffectSsDFire_Spawn(play, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8); for (end = 6, i = 3; i > 0; i--) { @@ -1398,7 +1398,7 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * (11.0f / 40.0f); this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 216ca0031..041eb54b0 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -425,11 +425,11 @@ void func_80A52018(Actor* thisx, PlayState* play) { void func_80A52074(EnDnk* this, PlayState* play) { switch (play->csCtx.curFrame) { case 80: - func_8019F128(NA_SE_EN_DEKNUTS_DANCE1); + Audio_PlaySfx_2(NA_SE_EN_DEKNUTS_DANCE1); break; case 123: - func_8019F128(NA_SE_EN_DEKNUTS_DANCE2); + Audio_PlaySfx_2(NA_SE_EN_DEKNUTS_DANCE2); break; case 438: @@ -442,7 +442,7 @@ void func_80A52074(EnDnk* this, PlayState* play) { } if ((play->csCtx.curFrame >= 198) && (play->csCtx.curFrame < 438)) { - func_8019F128(NA_SE_EN_DEKNUTS_DANCE - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EN_DEKNUTS_DANCE - SFX_FLAG); } } 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 e80bbe019..56a2b9379 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -861,7 +861,7 @@ void func_80A730A0(EnDno* this, PlayState* play) { this->unk_3AE += 1000; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; func_80A715DC(this, play); - func_800B9010(&this->actor, NA_SE_EV_BUTLER_FRY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BUTLER_FRY - SFX_FLAG); if (this->actorPath.flags & ACTOR_PATHING_REACHED_END_PERMANENT) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actorPath.curPoint); this->actor.speed = 0.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 d662e7e55..a9552c73e 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -402,7 +402,7 @@ void func_8092D1B8(EnDns* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; this->unk_2C6 |= 0x100; SubS_UpdateFlags(&this->unk_2C6, 4, 7); - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); SET_EVENTINF(EVENTINF_15); this->unk_2F4 = func_8092CCEC; func_8092C63C(this, EN_DNS_ANIM_WALK_1); 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 6149a7360..b3bd310b6 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -645,7 +645,7 @@ void func_8087784C(EnDodongo* this, PlayState* play) { } if (func_8087721C(this)) { - func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); frame = this->skelAnime.curFrame - 29.0f; end = frame >> 1; if (end > 3) { @@ -671,7 +671,7 @@ void func_8087784C(EnDodongo* this, PlayState* play) { EffectSsDFire_Spawn(play, &this->limbPos[0], &D_80879354, &D_80879348, this->unk_334 * 100.0f, this->unk_334 * 35.0f, 0xFF - (frame * 10), 5, 0, 8); } else if ((this->skelAnime.curFrame >= 2.0f) && (this->skelAnime.curFrame <= 20.0f)) { - func_800B9010(&this->actor, NA_SE_EN_DODO_J_BREATH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_BREATH - SFX_FLAG); } if (SkelAnime_Update(&this->skelAnime)) { @@ -1053,7 +1053,7 @@ void EnDodongo_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f; this->drawDmgEffScale = (this->drawDmgEffScale > 0.75f) ? 0.75f : this->drawDmgEffScale; } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 3dc6e4a72..11719bd43 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1132,7 +1132,7 @@ void func_8088F214(EnElf* this, PlayState* play) { } } else if (this->unk_264 & 8) { sp34 = 1; - func_800B9010(&this->actor, NA_SE_EV_BELL_ANGER - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BELL_ANGER - SFX_FLAG); } else { arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; if (player->stateFlags1 & PLAYER_STATE1_400) { @@ -1367,11 +1367,11 @@ void func_8088FE64(Actor* thisx, PlayState* play2) { if (play->msgCtx.currentTextId == 0x202) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); break; case 1: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); break; } } @@ -1472,7 +1472,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { } if (Actor_ProcessTalkRequest(thisx, &play->state)) { - func_8019FDC8(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20); + Audio_PlaySfx_AtPosWithReverb(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20); thisx->focus.pos = thisx->world.pos; if (thisx->textId == QuestHint_GetTatlTextId(play)) { 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 cacef3f4d..f75661471 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -353,7 +353,7 @@ void func_80A3A0AC(EnElfgrp* this, PlayState* play) { void func_80A3A0F4(EnElfgrp* this, PlayState* play) { if (this->unk_144 == 10) { - play_sound(NA_SE_SY_WHITE_OUT_T); + Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); if (ENELFGRP_GET(&this->actor) < ENELFGRP_4) { Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, @@ -365,7 +365,7 @@ void func_80A3A0F4(EnElfgrp* this, PlayState* play) { } if ((this->unk_144 > 10) && (this->unk_14A & 1)) { - func_800B9010(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } if (this->unk_144 == 0) { @@ -381,14 +381,14 @@ void func_80A3A210(EnElfgrp* this, PlayState* play) { } if (this->unk_14A & 1) { - func_800B9010(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } } void func_80A3A274(EnElfgrp* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { if (this->unk_14A & 1) { - func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); } switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id) { 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 5c3e33550..3145e10aa 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -404,7 +404,7 @@ void EnElforg_FairyCollected(EnElforg* this, PlayState* play) { return; } - func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); } void EnElforg_SetupFairyCollected(EnElforg* this, PlayState* play) { @@ -435,7 +435,7 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) { return; } - func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_TALK) { if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { CutsceneManager_Start(CS_ID_GLOBAL_TALK, &this->actor); @@ -504,7 +504,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { func_80ACCBB8(this, play); if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { if (!(this->strayFairyFlags & STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED)) { - play_sound(NA_SE_SY_FAIRY_MASK_SUCCESS); + Audio_PlaySfx(NA_SE_SY_FAIRY_MASK_SUCCESS); } this->strayFairyFlags |= STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED; diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 03989b01f..600793149 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -425,7 +425,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat break; } if (play->csCtx.curFrame >= 1145) { - func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); } break; @@ -444,7 +444,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat break; } if (play->csCtx.curFrame >= 650) { - func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); } break; } @@ -453,7 +453,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat void EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions(EnFall* this, PlayState* play) { if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_OKUJOU)) { - func_800B9010(&this->actor, NA_SE_EV_MOON_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_MOON_FALL - SFX_FLAG); } } @@ -528,7 +528,7 @@ void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) { this->actor.draw = NULL; this->actionFunc = EnFall_MoonsTear_DoNothing; } else { - func_800B9010(&this->actor, NA_SE_EV_MOONSTONE_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_MOONSTONE_FALL - SFX_FLAG); } } } @@ -627,7 +627,7 @@ void EnFall_Fireball_Update(Actor* thisx, PlayState* play) { } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450) && (this->fireballAlpha > 0)) { - func_8019F128(NA_SE_EV_MOON_FALL_LAST - SFX_FLAG); + Audio_PlaySfx_2(NA_SE_EV_MOON_FALL_LAST - SFX_FLAG); } Actor_SetScale(&this->actor, this->scale * 1.74f); } diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index bdf742ec3..7ff59c572 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -133,7 +133,7 @@ void func_80C1B9D4(EnFall2* this, PlayState* play) { } func_80C1B8F0(this); if (this->alphaLevel > 0.0f) { - func_800B9010(&this->actor, NA_SE_EV_MOON_LIGHT_PILLAR - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_MOON_LIGHT_PILLAR - SFX_FLAG); } } else { this->actor.draw = NULL; 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 efccfb9d9..eb73aecfb 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -290,9 +290,9 @@ void EnFamos_UpdateBobbingHeight(EnFamos* this) { this->actor.world.pos.y = (Math_SinS(this->hoverTimer * 0x888) * 10.0f) + this->baseHeight; if (ABS_ALT(this->flipRot) > 0x4000) { // is famos upside down - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); } } @@ -463,9 +463,9 @@ void EnFamos_SetupAlert(EnFamos* this) { void EnFamos_Alert(EnFamos* this, PlayState* play) { if (ABS_ALT(this->flipRot) > 0x4000) { - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); } this->stateTimer--; @@ -520,7 +520,7 @@ void EnFamos_SetupAttackAim(EnFamos* this) { } void EnFamos_AttackAim(EnFamos* this, PlayState* play) { - func_800B9010(&this->actor, NA_SE_EN_LAST1_FALL_OLD - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_LAST1_FALL_OLD - SFX_FLAG); if (SkelAnime_Update(&this->skelAnime)) { EnFamos_SetupAttack(this); } @@ -574,7 +574,7 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) { EnFamos_SetupAttackRebound(this); } } else { - func_800B9010(&this->actor, NA_SE_EN_LAST1_FALL_OLD - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_LAST1_FALL_OLD - SFX_FLAG); } } @@ -612,9 +612,9 @@ void EnFamos_AttackRebound(EnFamos* this, PlayState* play) { Math_StepToF(&this->actor.speed, 5.0f, 0.3f); if (this->actor.speed > 1.0f) { if (ABS_ALT(this->flipRot) > 0x4000) { - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FAMOS_FLOAT - SFX_FLAG); } } 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 131b714d1..43d05c8aa 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -729,7 +729,7 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.55f / 40.0f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } 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 20edbcbc2..a9eb004a9 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -2181,7 +2181,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { D_8091726C = 0.5f; D_80917268 = Rand_ZeroFloat(1.9f); sFishMouthOffset.y = 500.0f; - Audio_PlaySfxAtPos(&D_8090D614, NA_SE_IT_SWORD_SWING_HARD); + Audio_PlaySfx_AtPos(&D_8090D614, NA_SE_IT_SWORD_SWING_HARD); } } break; @@ -2201,7 +2201,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { D_80917238.x *= 0.9f; D_80917238.z *= 0.9f; if (D_8090CD0C == 0) { - play_sound(NA_SE_IT_FISHING_REEL_HIGH - SFX_FLAG); + Audio_PlaySfx(NA_SE_IT_FISHING_REEL_HIGH - SFX_FLAG); } } @@ -2258,8 +2258,8 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { D_809101D0 = 0.0; } else { Math_ApproachF(&D_809101C4, 0.0f, 1.0f, 0.05f); - Audio_PlaySfxAtPos(&D_8090D614, - NA_SE_EN_WIZ_UNARI - SFX_FLAG); // changed from NA_SE_EN_FANTOM_FLOAT in OoT + Audio_PlaySfx_AtPos(&D_8090D614, + NA_SE_EN_WIZ_UNARI - SFX_FLAG); // changed from NA_SE_EN_FANTOM_FLOAT in OoT } } else { f32 sp7C = WATER_SURFACE_Y(play); @@ -2278,7 +2278,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { if ((sLurePos.y <= sp7C) && (sp7C < spE0) && (sp7C == WATER_SURFACE_Y(play))) { D_80917264 = 10; - Audio_PlaySfxAtPos(&D_8090D614, NA_SE_EV_BOMB_DROP_WATER); + Audio_PlaySfx_AtPos(&D_8090D614, NA_SE_EV_BOMB_DROP_WATER); D_80917248.y = 0.0f; D_80917238.y *= 0.2f; @@ -2304,8 +2304,8 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { } } else { Math_ApproachZeroF(&D_809101C4, 1.0f, 0.05f); - Audio_PlaySfxAtPos(&D_8090D614, - NA_SE_EN_WIZ_UNARI - SFX_FLAG); // changed from NA_SE_EN_FANTOM_FLOAT in OoT + Audio_PlaySfx_AtPos(&D_8090D614, + NA_SE_EN_WIZ_UNARI - SFX_FLAG); // changed from NA_SE_EN_FANTOM_FLOAT in OoT } } @@ -2409,7 +2409,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { D_8091725C = 0.5f; D_809101C0 += (fabsf(sp70) * 7.5f); - func_8019FAD8(&D_8090D614, NA_SE_EV_LURE_MOVE_W, (sp70 * 1.999f * 0.25f) + 0.75f); + Audio_PlaySfx_AtPosWithFreq(&D_8090D614, NA_SE_EV_LURE_MOVE_W, (sp70 * 1.999f * 0.25f) + 0.75f); if (D_80917206 == 2) { D_80917278.y = 5.0f * sp70; @@ -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_GROUND + SURFACE_SFX_OFFSET_SAND); + Audio_PlaySfx_AtPos(&D_8090D614, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SAND); } } else { if (D_809101C0 > 150.0f) { @@ -2531,11 +2531,11 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { if (CHECK_BTN_ALL(input->cur.button, BTN_A)) { if (CHECK_BTN_ALL(input->cur.button, BTN_R)) { D_809101C0 += 1.5f; - play_sound(NA_SE_IT_FISHING_REEL_HIGH - SFX_FLAG); + Audio_PlaySfx(NA_SE_IT_FISHING_REEL_HIGH - SFX_FLAG); Math_ApproachF(&D_809101D0, 1000.0f, 1.0f, 2.0f); } else { D_809101C0 += D_8091726C; - play_sound(NA_SE_IT_FISHING_REEL_SLOW - SFX_FLAG); + Audio_PlaySfx(NA_SE_IT_FISHING_REEL_SLOW - SFX_FLAG); Math_ApproachF(&D_809101D0, 1000.0f, 1.0f, 0.2f); } @@ -2592,7 +2592,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { } else { D_809101C0 += D_8091726C; } - play_sound(NA_SE_IT_FISHING_REEL_SLOW - SFX_FLAG); + Audio_PlaySfx(NA_SE_IT_FISHING_REEL_SLOW - SFX_FLAG); } if ((D_809171FE & 0x1F) == 0) { @@ -3480,7 +3480,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } else if (sp124 < 10.0f) { if (sLurePos.y > (WATER_SURFACE_Y(play) - 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_JUMP_OUT_WATER); - play_sound(NA_SE_PL_CATCH_BOOMERANG); + Audio_PlaySfx(NA_SE_PL_CATCH_BOOMERANG); } func_809033F0(this, play, false); @@ -3556,7 +3556,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { Rumble_Override(0.0f, temp2, 120, 5); D_809171F4 = 40; D_80911E28 = 10; - play_sound(NA_SE_IT_FISHING_HIT); + Audio_PlaySfx(NA_SE_IT_FISHING_HIT); } } @@ -5149,7 +5149,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { sSinkingLureLocation = 0; D_8090CD4C = 20; Rumble_Override(0.0f, 150, 10, 10); - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20); } @@ -5223,9 +5223,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { } if ((D_809171DC == 0) || (D_809171DC == 3)) { - play_sound(NA_SE_SY_CAMERA_ZOOM_DOWN); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_DOWN); } else { - play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } } } @@ -5526,7 +5526,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Math_ApproachF(&D_8090CCDC.z, target, 1.0f, 5.0f); if (D_8090CCDC.z < 1500.0f) { - func_8019FAD8(&D_8090CCDC, NA_SE_EV_RAIN - SFX_FLAG, D_8090CCE8); + Audio_PlaySfx_AtPosWithFreq(&D_8090CCDC, NA_SE_EV_RAIN - SFX_FLAG, D_8090CCE8); } if (D_8090CCD4 != 0) { @@ -5570,7 +5570,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &sStreamSoundPos, &sStreamSoundProjectedPos, &sProjectedW); - Audio_PlaySfxAtPos(&sStreamSoundProjectedPos, NA_SE_EV_WATER_WALL - SFX_FLAG); + Audio_PlaySfx_AtPos(&sStreamSoundProjectedPos, NA_SE_EV_WATER_WALL - SFX_FLAG); if (gSaveContext.options.language == 0) { // Added in MM gSaveContext.minigameScore = D_8090CCF8; 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 3cf6385e0..6aaeb679b 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -454,7 +454,7 @@ void func_808D14DC(EnFloormas* this, PlayState* play) { sp28.x = Math_SinS(this->actor.shape.rot.y - 0x6000) * 7.0f; sp28.z = Math_CosS(this->actor.shape.rot.y - 0x6000) * 7.0f; func_800B1210(play, &sp34, &sp28, &gZeroVec3f, 0x1C2, 0x64); - func_800B9010(&this->actor, NA_SE_EN_FLOORMASTER_SLIDING - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FLOORMASTER_SLIDING - SFX_FLAG); } void func_808D161C(EnFloormas* this) { @@ -886,7 +886,7 @@ void func_808D2764(EnFloormas* this, PlayState* play) { } } - func_800B9010(&this->actor, NA_SE_EN_FLOORMASTER_RESTORE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FLOORMASTER_RESTORE - SFX_FLAG); } void func_808D2A20(EnFloormas* this) { @@ -1141,7 +1141,7 @@ void EnFloormas_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 89bf08d7b..02630ed6d 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -295,14 +295,14 @@ void EnFsn_CursorLeftRight(EnFsn* this) { this->cursorIndex = cursorScan; break; } else if (cursorScan == 0) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->drawCursor = 0; this->actionFunc = EnFsn_LookToShopkeeperFromShelf; break; } } } else { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->drawCursor = 0; this->actionFunc = EnFsn_LookToShopkeeperFromShelf; if (this->itemIds[cursorScan] != -1) { @@ -456,7 +456,7 @@ void EnFsn_UpdateCursorPos(EnFsn* this, PlayState* play) { s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (CURRENT_DAY != 3) { this->actor.textId = 0x29FB; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { @@ -470,7 +470,7 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { return true; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); @@ -490,13 +490,13 @@ s32 EnFsn_HasPlayerSelectedItem(EnFsn* this, PlayState* play, Input* input) { if (!this->items[this->cursorIndex]->isOutOfStock) { this->prevActionFunc = this->actionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId); - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; this->drawCursor = 0; this->actionFunc = EnFsn_SelectItem; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return true; } @@ -916,7 +916,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { if (!EnFsn_TestEndInteraction(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->isSelling = true; this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; @@ -926,7 +926,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { break; case 1: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->isSelling = false; this->actor.textId = 0x29CE; EnFsn_HandleLookToShopkeeperBuyingCutscene(this); @@ -990,7 +990,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { if (talkState == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { @@ -1025,7 +1025,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); player->exchangeItemId = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; @@ -1151,7 +1151,7 @@ void EnFsn_BrowseShelf(EnFsn* this, PlayState* play) { if (!EnFsn_HasPlayerSelectedItem(this, play, CONTROLLER1(&play->state))) { EnFsn_CursorLeftRight(this); if (this->cursorIndex != prevCursorIdx) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); } } @@ -1188,7 +1188,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_2: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); SET_WEEKEVENTREG(WEEKEVENTREG_33_04); // fallthrough case CANBUY_RESULT_SUCCESS_1: @@ -1196,7 +1196,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item = this->items[this->cursorIndex]; item->buyFanfareFunc(play, item); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); @@ -1218,13 +1218,13 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { break; case CANBUY_RESULT_NEED_RUPEES: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29F0); this->actionFunc = EnFsn_PlayerCannotBuy; break; case CANBUY_RESULT_CANNOT_GET_NOW: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29DD); this->actionFunc = EnFsn_PlayerCannotBuy; break; @@ -1263,7 +1263,7 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); break; @@ -1301,14 +1301,14 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actor.textId = 0xFF; Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_DeterminePrice; break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); @@ -1351,7 +1351,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->isSelling = false; this->actor.textId = 0x29CE; Message_StartTextbox(play, this->actor.textId, &this->actor); @@ -1359,7 +1359,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); @@ -1398,7 +1398,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_LookToShelf; func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { 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 bfc157fcb..34e2c9dc0 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -432,16 +432,16 @@ void func_80962588(EnFu* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-10); func_80963DE4(this, play); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2873, &this->actor); this->unk_552 = 0x2873; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x2872, &this->actor); this->unk_552 = 0x2872; } @@ -644,7 +644,7 @@ void func_80962A10(EnFu* this, PlayState* play) { return; } - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); player->stateFlags1 &= ~PLAYER_STATE1_20; Interface_StartTimer(TIMER_ID_MINIGAME_2, 60); if (this->unk_546 == 1) { @@ -680,7 +680,7 @@ void func_80962BCC(EnFu* this, PlayState* play) { return; } - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); player->stateFlags1 &= ~PLAYER_STATE1_20; player->stateFlags3 |= PLAYER_STATE3_400000; Interface_StartTimer(TIMER_ID_MINIGAME_2, 60); @@ -711,7 +711,7 @@ void func_80962D60(EnFu* this, PlayState* play) { return; } - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); player->stateFlags1 &= ~PLAYER_STATE1_20; player->stateFlags3 |= PLAYER_STATE3_400000; Interface_StartTimer(TIMER_ID_MINIGAME_2, 60); 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 00b54400d..0a78bdab8 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -607,7 +607,7 @@ void func_809334B8(EnFz* this, PlayState* play) { if (this->unk_BCA > 10) { sp3F = 0; sp3C = 150; - func_800B9010(&this->actor, NA_SE_EN_FREEZAD_BREATH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FREEZAD_BREATH - SFX_FLAG); if ((this->unk_BCA - 10) < 16) { sp3C = (this->unk_BCA * 10) - 100; } @@ -723,7 +723,7 @@ void func_809338E0(EnFz* this, PlayState* play) { sp3F = 0; sp3C = 150; - func_800B9010(&this->actor, NA_SE_EN_FREEZAD_BREATH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_FREEZAD_BREATH - SFX_FLAG); if ((this->unk_BC6 & 0x3F) >= 0x30) { sp3C = 630 - ((this->unk_BC6 & 0x3F) * 10); diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c index add0814bd..481c155b4 100644 --- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c +++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c @@ -208,7 +208,7 @@ void EnGakufu_GiveReward(EnGakufu* this, PlayState* play) { s32 hour; s32 i; - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); hour = TIME_TO_HOURS_F(gSaveContext.save.time); for (i = 0; i < 3; i++) { 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 11fa876d4..11ba7a8b0 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -408,19 +408,19 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_26E = 0x14D7; this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_26E = 0x14D8; Message_StartTextbox(play, this->unk_26E, &this->actor); } break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->unk_26E = 0x14D6; this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); @@ -429,7 +429,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { } else if (this->unk_26E == 0x14DA) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; @@ -438,7 +438,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->unk_26E = 0x14DB; this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); @@ -576,12 +576,12 @@ void func_80B10634(EnGb2* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_26E = 0x14D7; this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; @@ -591,7 +591,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->unk_26E = 0x14E3; this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); 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 facc4def2..8af068753 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -494,7 +494,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { this->picto.actor.speed = 0.0f; func_800B7298(play, &this->picto.actor, 0x1A); - func_801000A4(NA_SE_SY_FOUND); + Lib_PlaySfx(NA_SE_SY_FOUND); Message_StartTextbox(play, 0x1194, &this->picto.actor); this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, @@ -679,7 +679,7 @@ void EnGe2_GuardStationary(EnGe2* this, PlayState* play) { 0x4000, 720.0f, this->verticalDetectRange)) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { func_800B7298(play, &this->picto.actor, 0x1A); - func_801000A4(NA_SE_SY_FOUND); + Lib_PlaySfx(NA_SE_SY_FOUND); Message_StartTextbox(play, 0x1194, &this->picto.actor); this->timer = 50; EnGe2_SetupCapturePlayer(this); 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 6621ecc93..bf5fddfef 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -700,7 +700,7 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { this->unk_4E0--; } AudioSfx_LowerSfxSettingsReverb(&this->actor.projectedPos, true); - func_8019F4AC(&this->actor.projectedPos, NA_SE_EN_GOLON_SIRLOIN_EAT - SFX_FLAG); + Audio_PlaySfx_WithSfxSettingsReverb(&this->actor.projectedPos, NA_SE_EN_GOLON_SIRLOIN_EAT - SFX_FLAG); } void func_80BB2E00(EnGeg* this, PlayState* play) { @@ -753,7 +753,7 @@ void func_80BB2F7C(EnGeg* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { if (this->unk_230 & 0x80) { - func_800B9010(&this->actor, NA_SE_EN_GOLON_SIRLOIN_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_GOLON_SIRLOIN_ROLL - SFX_FLAG); } else { this->unk_230 |= 0x80; Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK); @@ -845,7 +845,7 @@ void func_80BB3318(EnGeg* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); } - func_800B9010(&this->actor, NA_SE_EN_GOLON_SIRLOIN_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_GOLON_SIRLOIN_ROLL - SFX_FLAG); } void func_80BB347C(EnGeg* this, PlayState* play) { 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 e9e37ddb4..ac09c3714 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -393,7 +393,7 @@ void func_80B359DC(EnGg* this, PlayState* play) { if (this->unk_306 == 0) { if (player->stateFlags2 & PLAYER_STATE2_8000000) { this->unk_306 = 1; - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { this->unk_306 = 0; 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 3540b1a24..eb0e5bfd4 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -442,7 +442,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { Actor_TrackPlayer(play, &this->actor, &this->unk_1E0, &this->unk_1E6, this->actor.focus.pos); if ((this->unk_2EE == 5) || (this->unk_2EE == 7)) { - func_800B9010(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG); if ((play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) && ((play->state.frames % 4) == 0)) { func_80B3B4B0(this, play); } 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 29f7059a5..8d244c09c 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -415,11 +415,11 @@ void EnGiant_PlaySound(EnGiant* this) { if ((this->sfxId != 0xFFFF) && (((this->animIndex == GIANT_ANIM_BIG_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || (this->animIndex == GIANT_ANIM_BIG_CALL_LOOP))) { - func_800B9010(&this->actor, this->sfxId); + Actor_PlaySfx_Flagged(&this->actor, this->sfxId); } if (((this->animIndex == GIANT_ANIM_SMALL_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || (this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP)) { - func_800B9010(&this->actor, NA_SE_EV_KYOJIN_SIGN - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_KYOJIN_SIGN - SFX_FLAG); } } } @@ -446,7 +446,7 @@ void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) { EnGiant_PlaySound(this); if (this->cueId == GIANT_CUE_ID_STRUGGLING) { - func_800B9010(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG); } EnGiant_PlayAndUpdateAnimation(this); } 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 b40c2287a..8f343a270 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 @@ -320,22 +320,22 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { case 0x44E: // "...So, what'll it be? if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; // bank full, cannot accept more } else { if (gSaveContext.save.saveInfo.playerData.rupees > 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x44F, &this->actor); this->curTextId = 0x44F; // "All right! so..." } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x458, &this->actor); this->curTextId = 0x458; // you haven't even gotten a single rup } } } else { // GINKOMAN_CHOICE_NO - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x451, &this->actor); this->curTextId = 0x451; // dont say that, come on, trust me! } @@ -343,12 +343,12 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { case 0x452: // Really? are you really depositing rupees? if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.bankRupeesSelected) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x459, &this->actor); this->curTextId = 0x459; // HEY you dont have that much } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (play->msgCtx.bankRupeesSelected >= 100) { Message_StartTextbox(play, 0x455, &this->actor); this->curTextId = 0x455; // You're really going to be give me that much? Rich little guy! @@ -372,7 +372,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); } } else { // GINKOMAN_CHOICE_NO - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { Message_StartTextbox(play, 0x456, &this->actor); @@ -385,11 +385,11 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { break; case 0x468: // Deposit OR withdrawl OR cancel screen if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_CANCEL) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x470, &this->actor); this->curTextId = 0x470; // "Is that so? Come back and deposit some after saving up a bunch!" } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->choiceDepositWithdrawl = play->msgCtx.choiceIndex; if (!this->isStampChecked) { this->isStampChecked = true; @@ -405,18 +405,18 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) < ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(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.saveInfo.playerData.rupees)) { // check if wallet is big enough - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x475, &this->actor); this->curTextId = 0x475; // You can't hold that many in your wallet } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (play->msgCtx.bankRupeesSelected >= 100) { Message_StartTextbox(play, 0x474, &this->actor); this->curTextId = 0x474; // Aw, you're taking out all that? @@ -436,7 +436,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { Rupees_ChangeBy(play->msgCtx.bankRupeesSelected); } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x47C, &this->actor); this->curTextId = 0x47C; // "Is that so? Think it over, little guy! So what are you gonna do?" } 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 8697f5d74..8fc4c9852 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -250,7 +250,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) { if (!(this->unk_1E4 & 0x40)) { if (player->stateFlags2 & PLAYER_STATE2_8000000) { this->unk_1E4 |= 0x40; - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { this->unk_1E4 &= ~0x40; @@ -690,7 +690,7 @@ void func_80B51970(EnGk* this, PlayState* play) { } if (this->unk_1E4 & 2) { - func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); + Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); if (this->unk_2E4 != 10) { if (this->unk_2E4 != 9) { this->unk_2E4 = 9; @@ -742,13 +742,13 @@ void func_80B51B40(EnGk* this, PlayState* play) { } else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_31C = 0xE8E; Message_StartTextbox(play, this->unk_31C, &this->actor); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->unk_31C = 0xE8A; Message_StartTextbox(play, this->unk_31C, &this->actor); break; @@ -756,7 +756,7 @@ void func_80B51B40(EnGk* this, PlayState* play) { } if (this->unk_1E4 & 2) { - func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); + Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); if (this->unk_2E4 != 10) { if (this->unk_2E4 != 9) { this->unk_2E4 = 9; @@ -833,7 +833,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) { void func_80B51FD0(EnGk* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (this->unk_1E4 & 2) { - func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); + Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } else { this->unk_1E4 |= 2; } @@ -863,7 +863,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { if (this->unk_1E4 & 2) { if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && (play->csCtx.state == CS_STATE_IDLE)) { - func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); + Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } } else { this->unk_1E4 |= 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 6f6f2cad9..cc0f6d500 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -788,13 +788,13 @@ s32 func_809995A4(EnGs* this, PlayState* play) { if ((this->unk_1D4 % 20) == 7) { func_80999584(&this->unk_1FA, &flashColours[0]); this->unk_1F4 = this->unk_1FA; - play_sound(NA_SE_SY_WARNING_COUNT_E); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); this->unk_200 = 0.0f; } } else if ((this->unk_1D4 % 20) == 7) { func_80999584(&this->unk_1FA, &flashColours[1]); this->unk_1F4 = this->unk_1FA; - play_sound(NA_SE_SY_WARNING_COUNT_N); + Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N); this->unk_200 = 0.0f; } } @@ -826,7 +826,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { func_800B0EB0(play, &sp6C, &sp60, &dustAccel, &dustPrim, &dustEnv, Rand_ZeroFloat(50.0f) + 200.0f, 40, 15); } - func_800B9010(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG); if (this->unk_1D4++ >= 40) { this->unk_19A |= 0x10; @@ -859,7 +859,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { this->unk_216 = 0; this->actionFunc = func_80999A8C; } else { - func_800B9010(&this->actor, NA_SE_EV_STONE_LAUNCH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_STONE_LAUNCH - SFX_FLAG); } Actor_MoveWithGravity(&this->actor); diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c index 091525ce0..841e6f539 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -327,7 +327,7 @@ void func_80B23934(EnHanabi* this, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(TERMINA_FIELD, 1)) && (gSaveContext.sceneLayer == 7)) { if (play->csCtx.curFrame > 1650) { func_80B236C8(this, play); - func_800B8FE8(&this->actor, NA_SE_EV_FIREWORKS_LAUNCH - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_FIREWORKS_LAUNCH - SFX_FLAG); } } 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 180bf8cab..98ac6348b 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -245,7 +245,7 @@ void EnHg_PlayRedeadSfx(EnHg* this, PlayState* play) { if (this->actor.colChkInfo.health == 1) { if ((this->actionFunc == EnHg_ChasePlayer) || (this->actionFunc == EnHg_ReactToHit) || (this->actionFunc == EnHg_ChasePlayerWait)) { - func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG); } } } @@ -315,7 +315,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { this->csIdList[2] = 0; this->animIndex = HG_ANIM_PANIC; if ((this->csIdIndex == HG_CS_GET_MASK) || (this->csIdIndex == HG_CS_SONG_OF_HEALING)) { - func_8019F128(NA_SE_EN_HALF_REDEAD_TRANS); + Audio_PlaySfx_2(NA_SE_EN_HALF_REDEAD_TRANS); } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_PANIC); break; @@ -347,17 +347,17 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { switch (this->animIndex) { case HG_ANIM_LEAN_FORWARD: case HG_ANIM_REACH_FORWARD: - func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG); break; case HG_ANIM_CURL_UP: case HG_ANIM_CROUCHED_PANIC: - func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); break; case HG_ANIM_PANIC: if ((this->csIdIndex == HG_CS_FIRST_ENCOUNTER) || (this->csIdIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) { - func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); } break; } @@ -382,7 +382,7 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_8000000) { if (!sHasSoundPlayed) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } sHasSoundPlayed = true; } else { 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 8ad694a11..d0e965936 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 @@ -149,7 +149,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_8000000) { if (this->unk_20A == 0) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->unk_20A = 1; } } else { 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 1a0105788..9ce9e8eac 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 @@ -521,12 +521,12 @@ void func_80C20A74(EnHintSkb* this, PlayState* play) { void func_80C20B88(EnHintSkb* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->unk_3E8 |= 0x10; Message_StartTextbox(play, 0x1150, &this->actor); this->unk_3E6 = 0x1150; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x1152, &this->actor); this->unk_3E6 = 0x1152; } diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c index c76d92106..95cc793ac 100644 --- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c +++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c @@ -72,7 +72,7 @@ void EnHitTag_WaitForHit(EnHitTag* this, PlayState* play) { s32 i; if (this->collider.base.acFlags & AC_HIT) { - play_sound(NA_SE_SY_GET_RUPY); + Audio_PlaySfx(NA_SE_SY_GET_RUPY); Actor_Kill(&this->actor); dropLocation.x = this->actor.world.pos.x; dropLocation.y = this->actor.world.pos.y; diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index ed3fe65b9..d715e4c7d 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -161,7 +161,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { } if (this == sInstancePlayingSound) { - func_800B9010(&this->actor, NA_SE_EV_INVISIBLE_MONKEY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_INVISIBLE_MONKEY - SFX_FLAG); } } if ((play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF)) { 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 787a40da7..340d57cf1 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -478,9 +478,9 @@ void EnHorse_PlayWalkingSound(EnHorse* this) { } if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_WALK); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_WALK); } this->soundTimer++; @@ -492,17 +492,17 @@ void EnHorse_PlayWalkingSound(EnHorse* this) { void func_8087C178(EnHorse* this) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } void func_8087C1C0(EnHorse* this) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } @@ -561,16 +561,16 @@ void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) { !(this->stateFlags & ENHORSE_SANDDUST_SOUND)) { this->stateFlags |= ENHORSE_SANDDUST_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } } else if ((this->animIndex == 3) && (this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } } } @@ -1114,9 +1114,9 @@ void EnHorse_StartMountedIdle(EnHorse* this) { if (!(this->stateFlags & ENHORSE_SANDDUST_SOUND)) { this->stateFlags |= ENHORSE_SANDDUST_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } } } @@ -1166,9 +1166,9 @@ void EnHorse_MountedIdleWhinny(EnHorse* this) { Animation_GetLastFrame(sAnimationHeaders[this->type][1]), ANIMMODE_ONCE, -3.0f); if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); } } } @@ -1451,9 +1451,9 @@ void EnHorse_StartRearing(EnHorse* this) { if (Rand_ZeroOne() > 0.5f) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } Rumble_Request(0.0f, 180, 20, 100); @@ -1465,9 +1465,9 @@ void EnHorse_StartRearing(EnHorse* this) { this->stateFlags &= ~ENHORSE_LAND2_SOUND; if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } @@ -1485,9 +1485,9 @@ void EnHorse_MountedRearing(EnHorse* this, PlayState* play) { if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } Rumble_Request(0.0f, 180, 20, 100); } @@ -1525,9 +1525,9 @@ void EnHorse_StartBraking(EnHorse* this, PlayState* play) { if (Rand_ZeroOne() > 0.5f) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } Rumble_Request(0.0f, 180, 20, 100); @@ -1537,9 +1537,9 @@ void EnHorse_StartBraking(EnHorse* this, PlayState* play) { } if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_SLIP); } Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.5f, 0.0f, @@ -1562,9 +1562,9 @@ void EnHorse_Stopping(EnHorse* this, PlayState* play) { ((gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0)) || (Cutscene_GetSceneLayer(play) == 0))) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } Rumble_Request(0.0f, 180, 20, 100); @@ -1695,9 +1695,9 @@ void EnHorse_StartLowJump(EnHorse* this, PlayState* play) { this->riderPos.y -= ((y * 0.01f) * this->unk_528) * 0.01f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } Rumble_Request(0.0f, 170, 10, 10); } @@ -1754,9 +1754,9 @@ void EnHorse_LowJump(EnHorse* this, PlayState* play) { ((curFrame > 17.0f) && (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } Rumble_Request(0.0f, 255, 10, 80); this->stateFlags &= ~ENHORSE_JUMPING; @@ -1793,9 +1793,9 @@ void EnHorse_StartHighJump(EnHorse* this, PlayState* play) { this->stateFlags |= ENHORSE_CALC_RIDER_POS; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } Rumble_Request(0.0f, 170, 10, 10); } @@ -1851,9 +1851,9 @@ void EnHorse_HighJump(EnHorse* this, PlayState* play) { ((curFrame > 23.0f) && (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } Rumble_Request(0.0f, 255, 10, 80); this->stateFlags &= ~ENHORSE_JUMPING; @@ -1879,7 +1879,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play) { gHorsePlayedEponasSong = false; if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); } this->stateFlags &= ~ENHORSE_INACTIVE; } @@ -1915,17 +1915,17 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta if (this->animIndex == ENHORSE_ANIM_WHINNY) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); } } } else if (this->animIndex == ENHORSE_ANIM_REARING) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } this->stateFlags &= ~ENHORSE_LAND2_SOUND; @@ -1960,18 +1960,18 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) { if (!func_8087C38C(play, this, &this->actor.world.pos)) { if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); } this->followTimer = 0; EnHorse_SetFollowAnimation(this, play); } } else { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); } this->followTimer = 0; EnHorse_StartMovingAnimation(this, 6, -3.0f, 0.0f); @@ -2081,9 +2081,9 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { if ((this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } } } else { @@ -2113,9 +2113,9 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { EnHorse_StartIdleRidable(this); if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } } @@ -2144,7 +2144,7 @@ void EnHorse_InitIngoHorse(EnHorse* this) { this->actor.speed = 0.0f; EnHorse_UpdateIngoHorseAnim(this); if (this->stateFlags & ENHORSE_DRAW) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH); } } @@ -2193,16 +2193,16 @@ void EnHorse_UpdateIngoHorseAnim(EnHorse* this) { } else if (this->animIndex == ENHORSE_ANIM_TROT) { animSpeed = this->actor.speed * 0.25f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } else if (this->animIndex == ENHORSE_ANIM_GALLOP) { animSpeed = this->actor.speed * 0.2f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } else { animSpeed = 1.0f; @@ -2271,9 +2271,9 @@ void func_80881290(EnHorse* this, PlayState* play) { this->actor.velocity.y = 0.0f; this->jumpStartY = this->actor.world.pos.y; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } Rumble_Request(0.0f, 170, 10, 10); } @@ -2311,9 +2311,9 @@ void func_80881398(EnHorse* this, PlayState* play) { if (animeUpdated || ((curFrame > 17.0f) && (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } Rumble_Request(0.0f, 255, 10, 80); this->stateFlags &= ~ENHORSE_JUMPING; @@ -2344,7 +2344,7 @@ void func_80881634(EnHorse* this) { this->actor.speed = 0.0f; func_8088168C(this); if (this->stateFlags & ENHORSE_DRAW) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH); } } @@ -2383,16 +2383,16 @@ void func_8088168C(EnHorse* this) { } else if (this->animIndex == ENHORSE_ANIM_TROT) { animSpeed = this->actor.speed * 0.25f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } else if (this->animIndex == ENHORSE_ANIM_GALLOP) { animSpeed = this->actor.speed * 0.2f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } } else { animSpeed = 1.0f; @@ -2526,9 +2526,9 @@ void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play) { this->stateFlags |= ENHORSE_ANIM_HIGH_JUMP; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_JUMP); } Rumble_Request(0.0f, 170, 10, 10); } @@ -2576,9 +2576,9 @@ void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { this->cutsceneFlags |= 1; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } Rumble_Request(0.0f, 255, 10, 80); this->stateFlags &= ~ENHORSE_JUMPING; @@ -2605,9 +2605,9 @@ void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->stateFlags &= ~ENHORSE_LAND2_SOUND; if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, @@ -2620,9 +2620,9 @@ void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } } } @@ -2698,9 +2698,9 @@ void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cu if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f, @@ -2713,9 +2713,9 @@ void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } } } @@ -2870,17 +2870,17 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) { } else if (this->animIndex == ENHORSE_ANIM_TROT) { animSpeed = this->actor.speed * 0.25f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } Rumble_Request(0.0f, 60, 8, 255); } else if (this->animIndex == ENHORSE_ANIM_GALLOP) { animSpeed = this->actor.speed * 0.2f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } Rumble_Request(0.0f, 120, 8, 255); } else { @@ -2963,9 +2963,9 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) { EnHorse_StartIdleRidable(this); if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_NEIGH); } } @@ -3070,9 +3070,9 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { this->animIndex = ENHORSE_ANIM_WHINNY; if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_GROAN); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_GROAN); } } } @@ -3144,7 +3144,7 @@ void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->cueId = 3; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00A8DC, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00A8DC), ANIMMODE_ONCE, -3.0f); - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { @@ -3163,7 +3163,7 @@ void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { if (Animation_OnFrame(&this->skin.skelAnime, Animation_GetLastFrame(&object_horse_link_child_Anim_00AD08) - 1.0f)) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); } SkelAnime_Update(&this->skin.skelAnime); } @@ -3209,7 +3209,7 @@ void func_80884314(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { this->cueId = 7; Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D178, 1.0f, 0.0f, Animation_GetLastFrame(&object_horse_link_child_Anim_00D178), ANIMMODE_ONCE, 0.0f); - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) { @@ -3409,7 +3409,7 @@ void func_80884E0C(EnHorse* this, PlayState* play) { Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], sPlaybackSpeeds[this->animIndex] * playSpeed * 2.5f, 0.0f, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f); - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN); } this->unk_57C = this->actor.world.pos; @@ -3742,9 +3742,9 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) { if (this->actor.speed > 4.0f) { this->actor.speed -= 1.0f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } } } @@ -3759,9 +3759,9 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) { if (this->actor.speed > 2.0f) { this->actor.speed -= 1.0f; if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } } } else { @@ -4011,9 +4011,9 @@ void func_80886C00(EnHorse* this, PlayState* play) { } } else if ((this->stateFlags & ENHORSE_DRAW) && (Rand_ZeroOne() < 0.1f)) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } } @@ -4027,7 +4027,7 @@ void EnHorse_RegenBoost(EnHorse* this, PlayState* play) { this->numBoosts++; if (!EN_HORSE_CHECK_4(this)) { - play_sound(NA_SE_SY_CARROT_RECOVER); + Audio_PlaySfx(NA_SE_SY_CARROT_RECOVER); } if (this->numBoosts < 6) { @@ -4042,7 +4042,7 @@ void EnHorse_RegenBoost(EnHorse* this, PlayState* play) { this->numBoosts = 6; if (!EN_HORSE_CHECK_4(this)) { - play_sound(NA_SE_SY_CARROT_RECOVER); + Audio_PlaySfx(NA_SE_SY_CARROT_RECOVER); } } } @@ -4050,9 +4050,9 @@ void EnHorse_RegenBoost(EnHorse* this, PlayState* play) { if (this->boostTimer == 8) { if ((Rand_ZeroOne() < 0.25f) && (this->stateFlags & ENHORSE_DRAW)) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } } @@ -4253,9 +4253,9 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) { if ((this->colliderJntSph.base.acFlags & AC_HIT) && (this->stateFlags & ENHORSE_DRAW)) { if (this->type == HORSE_TYPE_2) { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); } else { - Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->unk_218, NA_SE_EV_HORSE_NEIGH); } } diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index c7a2edaaa..7aae1c742 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -250,7 +250,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(180)) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_4); @@ -283,7 +283,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { (horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) && (horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x40000)) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_3); @@ -316,7 +316,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { (horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) && (horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x02000000)) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); this->unk_164 |= 0x02000000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_3); @@ -345,7 +345,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { (horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) && (horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x800)) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); this->unk_164 |= 0x800; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_2); 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 5079e1a57..13812397b 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 @@ -93,7 +93,7 @@ s8 D_808DFF54[] = { 0, 1, 2, 1 }; void func_808DE5C0(EnHorseLinkChild* this) { if ((D_808DFF10[this->unk_1E8] < this->skin.skelAnime.curFrame) && ((this->unk_1E8 != 0) || !(D_808DFF10[1] < this->skin.skelAnime.curFrame))) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK); this->unk_1E8++; if (this->unk_1E8 >= 2) { this->unk_1E8 = 0; @@ -106,12 +106,12 @@ void func_808DE660(EnHorseLinkChild* this) { func_808DE5C0(this); } else if (this->skin.skelAnime.curFrame == 0.0f) { if ((this->unk_148 == 3) || (this->unk_148 == 4)) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); } else if (this->unk_148 == 1) { if (Rand_ZeroOne() > 0.5f) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_GROAN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_GROAN); } else { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); } } } @@ -428,7 +428,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) { if (gHorsePlayedEponasSong) { gHorsePlayedEponasSong = false; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); func_808DF788(this); return; } 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 02e5004f2..c6aa79f55 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -921,7 +921,7 @@ void EnIk_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = this->drawDmgEffScale; } } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.65f, 0.01625f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } EnIk_UpdateArmor(this, play); 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 ca764b134..89d9b093f 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -306,11 +306,11 @@ void func_808F374C(EnIn* this, PlayState* play) { if (this->skelAnime.animation == &object_in_Anim_016484 || this->skelAnime.animation == &object_in_Anim_0170DC) { if (Animation_OnFrame(&this->skelAnime, 8.0f)) { - func_8019F88C(&this->actor.projectedPos, NA_SE_VO_IN_LASH_0, 2); + Audio_PlaySfx_Randomized(&this->actor.projectedPos, NA_SE_VO_IN_LASH_0, 2); if (Rand_ZeroOne() < 0.3f) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_INGO_HORSE_NEIGH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_INGO_HORSE_NEIGH); } - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_LASH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_LASH); } } if (this->skelAnime.animation == &object_in_Anim_0198A8 && Animation_OnFrame(&this->skelAnime, 20.0f)) { @@ -597,7 +597,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) Actor* thisx = &this->actor; if (msgCtx->choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { Rupees_ChangeBy(-play->msgCtx.unk1206C); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { @@ -608,11 +608,11 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) Actor_ContinueText(play, thisx, 0x3475); } } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ContinueText(play, thisx, 0x3473); } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ContinueText(play, thisx, 0x3472); } return 0; @@ -623,7 +623,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 fee = (play->msgCtx.unk1206C != 0xFFFF) ? play->msgCtx.unk1206C : 10; if (msgCtx->choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (gSaveContext.save.saveInfo.playerData.rupees >= fee) { Rupees_ChangeBy(-fee); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { @@ -640,7 +640,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, } } } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); if (arg4 != 0) { Actor_ContinueText(play, &this->actor, 0x3473); } else { @@ -648,7 +648,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, } } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ContinueText(play, &this->actor, 0x3472); } return 0; @@ -792,7 +792,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3466: if (msgCtx->choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { if (Inventory_HasEmptyBottle()) { this->actionFunc = func_808F3C40; @@ -804,12 +804,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ContinueText(play, &this->actor, 0x3468); ret = false; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ContinueText(play, &this->actor, 0x3467); ret = false; } @@ -887,7 +887,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_808F4150(play, this, arg2, msgCtx); ret = false; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x3479); ret = false; @@ -1094,7 +1094,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3490: if (msgCtx->choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { if (Inventory_HasEmptyBottle()) { this->actionFunc = func_808F3C40; @@ -1106,12 +1106,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ContinueText(play, &this->actor, 0x3468); ret = false; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ContinueText(play, &this->actor, 0x3491); ret = false; } @@ -1246,7 +1246,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_808F4270(play, this, arg2, msgCtx, 1); ret = false; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ContinueText(play, &this->actor, 0x349C); ret = false; } 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 d2aceba29..ef64e3954 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 @@ -62,17 +62,17 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { if (this->collider.base.ocFlags1 & OC1_HIT) { switch (INVISIBLERUPPE_GET_3(&this->actor)) { case 0: - play_sound(NA_SE_SY_GET_RUPY); + Audio_PlaySfx(NA_SE_SY_GET_RUPY); Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_GREEN); break; case 1: - play_sound(NA_SE_SY_GET_RUPY); + Audio_PlaySfx(NA_SE_SY_GET_RUPY); Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_BLUE); break; case 2: - play_sound(NA_SE_SY_GET_RUPY); + Audio_PlaySfx(NA_SE_SY_GET_RUPY); Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_RED); break; } 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 449acf212..abb1f1438 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -693,9 +693,9 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { if (Animation_OnFrame(&this->skelAnime, 23.0f)) { - Audio_PlaySfxAtPos(&sSfxPos, NA_SE_EV_WOOD_BOUND_S); + Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_WOOD_BOUND_S); } else if (Animation_OnFrame(&this->skelAnime, 38.0f)) { - Audio_PlaySfxAtPos(&sSfxPos, NA_SE_EV_OBJECT_SLIDE); + Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_OBJECT_SLIDE); } } } else { @@ -928,7 +928,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play if ((this->freezeTimer <= 0) && (currentFrame == lastFrame)) { this->animIndex = EN_JG_ANIM_FROZEN_START; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); - Audio_PlaySfxAtPos(&sSfxPos, NA_SE_EV_FREEZE_S); + Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S); this->actionFunc = EnJg_Freeze; } } 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 350f4ae82..568724237 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -576,11 +576,11 @@ void func_80969898(EnJs* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x2215)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x2217); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x2216); break; } @@ -726,14 +726,14 @@ void func_80969DA4(EnJs* this, PlayState* play) { ((play->msgCtx.currentTextId == 0x2219) || (play->msgCtx.currentTextId == 0x221E))) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (!func_809695FC(this, play)) { func_809694E8(this, play); break; } break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; } @@ -886,11 +886,11 @@ void func_8096A38C(EnJs* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); break; } 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 70570ed96..93bf9a81b 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -512,7 +512,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { this->talkState = TEXT_STATE_5; if (play->msgCtx.choiceIndex == 1) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (this->picto.actor.textId == 0x1656) { this->picto.actor.textId = 0x1658; } else if (this->picto.actor.textId == 0x165C) { @@ -524,7 +524,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); if (this->picto.actor.textId == 0x1656) { // would you like to learn a song? yes/no this->picto.actor.textId = 0x1657; } else if (this->picto.actor.textId == 0x165C) { // would you like to learn a song? yes/no @@ -771,10 +771,10 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } else { this->talkState = TEXT_STATE_5; if (play->msgCtx.choiceIndex == 1) { - func_8019F208(); // play 0x4808 sfx (decide) and calls AudioSfx_StopById + Audio_PlaySfx_MessageDecide(); this->picto.actor.textId = 0x164A; } else { - func_8019F230(); // play 0x480A sfx (cancel) and calls AudioSfx_StopById + Audio_PlaySfx_MessageCancel(); this->picto.actor.textId = 0x1661; } } 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 820dd1f4e..66209ae76 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -302,7 +302,7 @@ void func_80AD75A8(EnKame* this, PlayState* play) { } if (this->unk_2A6 > 0x1200) { - func_800B9010(&this->actor, NA_SE_EN_PAMET_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PAMET_ROLL - SFX_FLAG); } } @@ -746,7 +746,7 @@ void EnKame_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = this->drawDmgEffScale; } } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 0.015000001f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 b0efd61e8..07892f9f0 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -833,7 +833,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { if ((play->msgCtx.ocarinaMode == 4) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { this->actionState = ENKANBAN_REPAIR; this->bounceX = 1; - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } break; 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 34b3d6405..b9d226e01 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -595,7 +595,7 @@ void EnKarebaba_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = this->drawDmgEffScale; } } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.75f / 40)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } 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 fbb8346e5..c0063896a 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 @@ -220,16 +220,16 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); this->unk_288 = 0x2718; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-play->msgCtx.unk1206C); Message_StartTextbox(play, 0x2719, &this->actor); this->unk_288 = 0x2719; @@ -238,16 +238,16 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { case 1: if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); this->unk_288 = 0x2718; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-play->msgCtx.unk12070); Message_StartTextbox(play, 0x273A, &this->actor); this->unk_288 = 0x273A; @@ -255,7 +255,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { break; case 2: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x2717, &this->actor); this->unk_288 = 0x2717; } @@ -612,7 +612,7 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) { return; } - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); func_80B279F0(this, play, ((u8)Rand_Next() % 3) + 1); func_80B279F0(this, play, ((u8)Rand_Next() % 3) + 4); this->unk_290 = 0; 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 e80807b08..38a870a14 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -623,17 +623,17 @@ void func_80B41E18(EnKgy* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); func_80B40E74(this, play, 0xC3F); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); func_80B40E74(this, play, 0xC42); Rupees_ChangeBy(-play->msgCtx.unk1206C); } break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_80B40EBC(this, play, textId); break; } @@ -642,12 +642,12 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC3E: switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); func_80B40E74(this, play, func_80B41460()); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_80B40E74(this, play, 0xC3C); break; } 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 77c7e1dc9..1800a3042 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -112,17 +112,17 @@ void EnKujiya_HandlePlayerChoice(EnKujiya* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { // Buy if (gSaveContext.save.saveInfo.playerData.rupees < 10) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2B62, &this->actor); this->textId = 0x2B62; // Not enough Rupees } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-10); Message_StartTextbox(play, 0x2B5F, &this->actor); this->textId = 0x2B5F; // Enter number } } else { // Don't buy - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x2B5E, &this->actor); this->textId = 0x2B5E; // Too bad } @@ -314,7 +314,7 @@ void EnKujiya_TurnToOpen(EnKujiya* this, PlayState* play) { this->timer++; } } else { - func_800B9010(&this->actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); } } @@ -342,7 +342,7 @@ void EnKujiya_TurnToClosed(EnKujiya* this, PlayState* play) { this->timer++; } } else { - func_800B9010(&this->actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_WINDMILL_LEVEL - SFX_FLAG); } } 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 fd7795f7c..b89b085c5 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 @@ -459,18 +459,18 @@ void func_80AEA7A4(EnLiftNuts* this, PlayState* play) { case 0x27E2: if (play->msgCtx.choiceIndex == 0) { // Yes if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x27E5, &this->actor); this->textId = 0x27E5; Rupees_ChangeBy(-10); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); Message_StartTextbox(play, 0x27E4, &this->actor); this->textId = 0x27E4; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); Message_StartTextbox(play, 0x27E3, &this->actor); this->textId = 0x27E3; @@ -811,7 +811,7 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { } void func_80AEB3E0(EnLiftNuts* this, PlayState* play) { - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); this->unk_354 = 0; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; this->actionFunc = func_80AEB428; diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 908bbf374..2eafabd8f 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -358,7 +358,7 @@ void EnLookNuts_Update(Actor* thisx, PlayState* play) { if (!(player->stateFlags3 & PLAYER_STATE3_100) && !Play_InCsMode(play)) { Math_Vec3f_Copy(&this->headRotTarget, &gZeroVec3f); this->state = PALACE_GUARD_RUNNING_TO_PLAYER; - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); func_800B7298(play, &this->actor, PLAYER_CSMODE_26); D_80A6862C = 1; this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); 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 463c5b327..1b9c1cc99 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 @@ -336,11 +336,11 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { } if (player->unk_B08 > 0.85f) { - func_8019F900(&player->actor.projectedPos, 2); + Audio_PlaySfx_SwordCharge(&player->actor.projectedPos, 2); } else if (player->unk_B08 > 0.15f) { - func_8019F900(&player->actor.projectedPos, 1); + Audio_PlaySfx_SwordCharge(&player->actor.projectedPos, 1); } else if (player->unk_B08 > 0.1f) { - func_8019F900(&player->actor.projectedPos, 0); + Audio_PlaySfx_SwordCharge(&player->actor.projectedPos, 0); } if (Play_InCsMode(play)) { 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 29a09cd90..9adf841f7 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -361,11 +361,11 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { switch (this->textId) { case 0x3339: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x333A, &this->actor); this->textId = 0x333A; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x333B, &this->actor); this->textId = 0x333B; } @@ -373,12 +373,12 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3341: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x3342, &this->actor); this->textId = 0x3342; @@ -389,12 +389,12 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3346: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x3342, &this->actor); this->textId = 0x3342; @@ -403,11 +403,11 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3347: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x3349, &this->actor); this->textId = 0x3349; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x3348, &this->actor); this->textId = 0x3348; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); @@ -418,7 +418,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { // Yes s32 aux; - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x334E, &this->actor); this->textId = 0x334E; if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { @@ -426,7 +426,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { } Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { // No. - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x334C, &this->actor); this->textId = 0x334C; @@ -435,11 +435,11 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3354: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x3349, &this->actor); this->textId = 0x3349; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 1, 0); Message_StartTextbox(play, 0x3355, &this->actor); this->textId = 0x3355; @@ -450,18 +450,18 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3356: // "Try again?" if (play->msgCtx.choiceIndex == 0) { // Yes - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_CloseTextbox(play); EnMa4_SetupBeginHorsebackGame(this); } else { // No if (this->type == MA4_TYPE_ALIENS_DEFEATED) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3357, &this->actor); this->textId = 0x3357; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335B, &this->actor); this->textId = 0x335B; @@ -472,11 +472,11 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3359: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x3349, &this->actor); this->textId = 0x3349; } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335A, &this->actor); this->textId = 0x335A; 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 5dd713019..5e63c7990 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 @@ -449,13 +449,13 @@ void EnMaYto_DefaultDialogueHandler(EnMaYto* this, PlayState* play) { void EnMaYto_DefaultHandlePlayerChoice(EnMaYto* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { // Yes - func_8019F208(); + Audio_PlaySfx_MessageDecide(); EnMaYto_SetFaceExpression(this, 0, 3); // "Milk Road is fixed!" Message_StartTextbox(play, 0x3392, &this->actor); this->textId = 0x3392; } else { // No - func_8019F230(); + Audio_PlaySfx_MessageCancel(); // "Don't lie!" Message_StartTextbox(play, 0x3391, &this->actor); this->textId = 0x3391; @@ -577,13 +577,13 @@ void EnMaYto_DinnerDialogueHandler(EnMaYto* this, PlayState* play) { void EnMaYto_DinnerHandlePlayerChoice(EnMaYto* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { // Yes - func_8019F208(); + Audio_PlaySfx_MessageDecide(); EnMaYto_SetFaceExpression(this, 0, 3); // "Milk Road is fixed!" Message_StartTextbox(play, 0x3399, &this->actor); this->textId = 0x3399; } else { // No - func_8019F230(); + Audio_PlaySfx_MessageCancel(); // "Don't lie!" Message_StartTextbox(play, 0x3398, &this->actor); this->textId = 0x3398; diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 0cce91c73..215c2146c 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -240,7 +240,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) { CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) { if (!CutsceneFlags_Get(play, 4)) { - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); this->state = MAG_STATE_CALLED; this->unk11F00 = 0; this->unk11F02 = 30; @@ -387,7 +387,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) { if (gOpeningEntranceIndex >= 2) { gOpeningEntranceIndex = 0; } - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); gSaveContext.gameMode = GAMEMODE_FILE_SELECT; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_BLACK; @@ -430,7 +430,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) { if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_START) || CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) { - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); this->state = MAG_STATE_CALLED; } } 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 94590f5b6..339fe91e4 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -489,12 +489,12 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // Yes - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->actionFunc = EnMinifrog_BeginChoirCutscene; play->msgCtx.msgLength = 0; break; case 1: // No - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0xD7E); break; } diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index 68d08b223..5a99149e9 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -313,7 +313,7 @@ void EnMinislime_IceArrowDamage(EnMinislime* this, PlayState* play) { if (this->frozenTimer == 80) { this->frozenAlpha += 10; - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); if (this->frozenAlpha >= 200) { this->frozenAlpha = 200; this->frozenTimer--; @@ -371,7 +371,7 @@ void EnMinislime_FireArrowDamage(EnMinislime* this, PlayState* play) { this->frozenAlpha = 10 * this->meltTimer; } - func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); if (this->meltTimer == 0) { EnMinislime_SetupIdle(this); } @@ -605,7 +605,7 @@ void EnMinislime_DefeatMelt(EnMinislime* this, PlayState* play) { EnMinislime_AddIceSmokeEffect(this, play); } - func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); if (Math_StepToF(&this->actor.scale.y, 0.001f, 0.00075f)) { if ((this->actor.shape.shadowAlpha - 4) <= 0) { this->actor.shape.shadowAlpha = 0; 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 16e0acbe1..0e347acb4 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -275,7 +275,7 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) { } this->actor.shape.rot.y = (s32)(Math_SinF(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150; - func_800B9010(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG); if (sp20) { this->unk_14B &= ~2; func_80A4E190(this); 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 ab387771c..1edfbe2ed 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -149,23 +149,23 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { if (this->unk_2B2 & 0x20) { if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x2790, &this->actor); this->unk_2B4 = 0x2790; Rupees_ChangeBy(-play->msgCtx.unk1206C); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x2790, &this->actor); this->unk_2B4 = 0x2790; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x278F, &this->actor); this->unk_2B4 = 0x278F; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); @@ -175,18 +175,18 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { case 0x279A: if (play->msgCtx.choiceIndex == 0) { if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x2790, &this->actor); this->unk_2B4 = 0x2790; Rupees_ChangeBy(-play->msgCtx.unk1206C); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); @@ -305,7 +305,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { if (gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] == SECONDS_TO_TIMER(10)) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } } } @@ -348,7 +348,7 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) { Interface_StartPostmanTimer(0, POSTMAN_MINIGAME_BUNNY_HOOD_OFF); } Message_CloseTextbox(play); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); func_80A6FBA0(this); } else { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); @@ -406,15 +406,15 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) { this->unk_2AC = 7; gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_OFF; this->actor.flags &= ~ACTOR_FLAG_10000; - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); func_80A6F9C8(this); } else { func_800B8614(&this->actor, play, this->actor.xzDistToPlayer + 10.0f); func_80123E90(play, &this->actor); if (Player_GetMask(play) == PLAYER_MASK_BUNNY) { - play_sound(NA_SE_SY_STOPWATCH_TIMER_INF - SFX_FLAG); + Audio_PlaySfx(NA_SE_SY_STOPWATCH_TIMER_INF - SFX_FLAG); } else { - play_sound(NA_SE_SY_STOPWATCH_TIMER_3 - SFX_FLAG); + Audio_PlaySfx(NA_SE_SY_STOPWATCH_TIMER_3 - SFX_FLAG); } } } 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 732fc9b3b..c8c6975a7 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -119,13 +119,13 @@ void EnMs_Talk(EnMs* this, PlayState* play) { case 0: // yes Message_CloseTextbox(play); if (gSaveContext.save.saveInfo.playerData.rupees < 10) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x935); // "[...] You don't have enough Rupees." } else if (AMMO(ITEM_MAGIC_BEANS) >= 20) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x937); // "[...] You can't carry anymore." } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Actor_OfferGetItem(&this->actor, play, GI_MAGIC_BEANS, 90.0f, 10.0f); Rupees_ChangeBy(-10); this->actionFunc = EnMs_Sell; @@ -134,7 +134,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) { case 1: // no default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x934); // "[...] Well, if your mood changes [...]" break; } diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index db05f0d61..49d10a518 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -361,14 +361,14 @@ void EnMttag_Race(EnMttag* this, PlayState* play) { if (EnMttag_IsInFinishLine(playerPos)) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_GOAL | SEQ_FLAG_ASYNC); this->timer = 55; SET_EVENTINF(EVENTINF_11); this->actionFunc = EnMttag_RaceFinish; } else if (EnMttag_IsAnyRaceGoronOverFinishLine(this)) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_GOAL | SEQ_FLAG_ASYNC); this->timer = 55; SET_EVENTINF(EVENTINF_12); @@ -456,7 +456,7 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { // Exit the race - func_8019F230(); + Audio_PlaySfx_MessageCancel(); gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF; EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK); CLEAR_EVENTINF(EVENTINF_13); @@ -466,7 +466,7 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { } // Keep racing - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_CloseTextbox(play); func_800B7298(play, &this->actor, PLAYER_CSMODE_END); CLEAR_EVENTINF(EVENTINF_13); 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 ab77eb2a3..2a6a7ea1b 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -242,7 +242,7 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) { } EnNwc_ChangeState(this, NWC_STATE_FOLLOWING); - func_801A0868(&gSfxDefaultPos, NA_SE_SY_CHICK_JOIN_CHIME, currentChickCount); + Audio_PlaySfx_AtPosWithAllChannelsIO(&gSfxDefaultPos, NA_SE_SY_CHICK_JOIN_CHIME, currentChickCount); } } 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 01cbb5dda..7344e07d0 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 @@ -137,7 +137,7 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { } } play->msgCtx.ocarinaMode = 4; - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); this->actionFunc = func_8093E518; } } 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 cd20f489c..58b9dc88f 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -90,7 +90,7 @@ void func_80B11F78(EnOnpuman* this, PlayState* play) { CutsceneManager_Stop(this->actor.csId); } } else if (play->msgCtx.ocarinaMode == 3) { - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); play->msgCtx.ocarinaMode = 4; if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Stop(this->actor.csId); diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index 9867cb963..426a93e16 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -221,7 +221,7 @@ void func_80BF61EC(EnOsk* this, PlayState* play) { this->actor.scale.x -= 0.85f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); func_80BF5EBC(this, play); - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } else { this->actor.draw = NULL; } @@ -298,7 +298,7 @@ void func_80BF6478(EnOsk* this) { case 10: case 11: - func_800B9010(&this->actor, NA_SE_EN_YASE_LAUGH_K - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_YASE_LAUGH_K - SFX_FLAG); break; } } @@ -350,7 +350,7 @@ void func_80BF656C(EnOsk* this, PlayState* play) { this->actor.scale.x -= 0.65f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); func_80BF5EBC(this, play); - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } else { this->actor.draw = NULL; } @@ -482,7 +482,7 @@ void func_80BF6A20(EnOsk* this, PlayState* play) { this->actor.scale.x -= 0.65f * 0.001f; Actor_SetScale(&this->actor, this->actor.scale.x); func_80BF5EBC(this, play); - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } else { this->actor.draw = NULL; } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 24c16ad20..80310d332 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -360,7 +360,7 @@ void EnOssan_StartShopping(PlayState* play, EnOssan* this) { } void EnOssan_SetupLookToShopkeeperFromShelf(PlayState* play, EnOssan* this) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->drawCursor = 0; EnOssan_SetupAction(this, EnOssan_LookToShopkeeperFromShelf); } @@ -605,7 +605,7 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if ((this->actor.params == ENOSSAN_PART_TIME_WORKER) && (player->transformation == PLAYER_FORM_ZORA)) { this->animIndex = ANI_ANIM_APOLOGY_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, 9); @@ -618,7 +618,7 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) { return true; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnOssan_EndInteraction(play, this); return true; @@ -652,7 +652,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { EnOssan_SetupAction(this, EnOssan_LookToLeftShelf); func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } else if (this->stickAccumX > 0) { cursorIndex = EnOssan_SetCursorIndexFromNeutral(this, 0); @@ -661,7 +661,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { EnOssan_SetupAction(this, EnOssan_LookToRightShelf); func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } else { @@ -839,11 +839,11 @@ s32 EnOssan_HasPlayerSelectedItem(PlayState* play, EnOssan* this, Input* input) Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); this->drawCursor = 0; EnOssan_SetupAction(this, EnOssan_SelectItem); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return true; } @@ -901,7 +901,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { EnOssan_CursorUpDown(this); if (this->cursorIndex != prevCursorIndex) { Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -959,7 +959,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { EnOssan_CursorUpDown(this); if (this->cursorIndex != prevCursorIndex) { Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -1021,7 +1021,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item->buyFanfareFunc(play, item); EnOssan_SetupBuyItemWithFanfare(play, this); this->drawCursor = 0; @@ -1030,7 +1030,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { break; case CANBUY_RESULT_SUCCESS_2: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item->buyFunc(play, item); EnOssan_SetupBuy(play, this, sBuySuccessTextIds[this->actor.params]); this->drawCursor = 0; @@ -1040,27 +1040,27 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { case CANBUY_RESULT_NO_ROOM: case CANBUY_RESULT_NO_ROOM_2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; case CANBUY_RESULT_NEED_EMPTY_BOTTLE: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->actor.params]); break; case CANBUY_RESULT_NEED_RUPEES: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->actor.params]); break; case CANBUY_RESULT_CANNOT_GET_NOW_2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->actor.params]); break; case CANBUY_RESULT_CANNOT_GET_NOW: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; @@ -1081,7 +1081,7 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); break; @@ -1152,7 +1152,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { if (!EnOssan_TestEndInteraction(this, play, CONTROLLER1(&play->state))) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); player->actor.shape.rot.y = BINANG_ROT180(player->actor.shape.rot.y); player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); @@ -1162,7 +1162,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnOssan_EndInteraction(play, this); break; } 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 c23fb3148..2fef8b0eb 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -621,7 +621,7 @@ void func_8095BA84(EnOwl* this, PlayState* play) { case 0xBEC: switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_40)) { Message_ContinueTextbox(play, 0xBF4); } else { @@ -631,7 +631,7 @@ void func_8095BA84(EnOwl* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0xBEF); break; @@ -643,12 +643,12 @@ void func_8095BA84(EnOwl* this, PlayState* play) { case 0xBF2: switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0xBF4); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0xBF3); break; 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 4c75fac65..d1949b848 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -1372,7 +1372,7 @@ void EnPametfrog_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = unk2C4; this->drawDmgEffScale = unk2C4 > 0.75f ? 0.75f : this->drawDmgEffScale; } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, (3.0f / 160.0f))) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 645b7edf5..c21972c7d 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -390,7 +390,7 @@ void func_80897910(EnPeehat* this, PlayState* play) { Math_ScaledStepToS(&this->unk_2B2, 4000, 500); this->unk_2B4 += this->unk_2B2; Math_StepToF(&this->unk_2C4, 0.075f, 0.005f); - func_800B9010(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); } void func_80897A34(EnPeehat* this) { @@ -426,7 +426,7 @@ void func_80897A94(EnPeehat* this, PlayState* play) { Math_ScaledStepToS(&this->unk_2B2, 4000, 500); this->unk_2B4 += this->unk_2B2; Math_StepToF(&this->unk_2C4, 0.075f, 0.005f); - func_800B9010(&this->actor, NA_SE_EN_PIHAT_SM_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PIHAT_SM_FLY - SFX_FLAG); if (this->colliderTris.base.atFlags & AT_BOUNCED) { this->colliderTris.base.atFlags &= ~(AT_BOUNCED | AT_ON); @@ -531,7 +531,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) { Math_ScaledStepToS(&this->unk_2B2, 4000, 500); this->unk_2B4 += this->unk_2B2; Math_StepToF(&this->unk_2C4, 0.075f, 0.005f); - func_800B9010(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); } void func_80898124(EnPeehat* this) { @@ -569,7 +569,7 @@ void func_80898144(EnPeehat* this, PlayState* play) { if (!gSaveContext.save.isNight && (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 1200.0f)) { func_80897864(this); } - func_800B9010(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); } void func_808982E0(EnPeehat* this) { @@ -593,7 +593,7 @@ void func_80898338(EnPeehat* this, PlayState* play) { func_80897864(this); } } - func_800B9010(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PIHAT_FLY - SFX_FLAG); } void func_80898414(EnPeehat* this) { @@ -827,7 +827,7 @@ void EnPeehat_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.1f); } } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.1f, 0.0275f)) { - func_800B9010(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 357b08bdd..11ab66ad8 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 @@ -280,9 +280,9 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) { if ((this->color.a == 255) && (this->actionFunc != EnPoSisters_SpinAttack) && (this->actionFunc != EnPoSisters_SpinUp)) { if (this->actionFunc == EnPoSisters_Flee) { - func_800B9010(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); } } } 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 4669b1916..30d625351 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -235,7 +235,7 @@ void func_80B2CAA4(EnPoh* this, PlayState* play) { } if (this->unk_197 == 255) { - func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); } } @@ -270,7 +270,7 @@ void func_80B2CBBC(EnPoh* this, PlayState* play) { } if (this->unk_197 == 255) { - func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); } } @@ -309,7 +309,7 @@ void func_80B2CD64(EnPoh* this, PlayState* play) { } if (this->unk_197 == 255) { - func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); } } @@ -435,7 +435,7 @@ void func_80B2D300(EnPoh* this, PlayState* play) { } if (this->unk_18E < 18) { - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } if (this->unk_18E == 18) { @@ -561,7 +561,7 @@ void func_80B2DB44(EnPoh* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; func_80B2CB60(this); } - func_800B9010(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); } void func_80B2DC50(EnPoh* this, 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 6b0dcd60a..a1df0f8ad 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -374,7 +374,7 @@ void EnRacedog_RaceStart(EnRacedog* this, PlayState* play) { if (DECR(this->raceStartTimer) == 0) { this->raceStartTimer = Rand_S16Offset(50, 50); if (this->extraTimeBeforeRaceStart == 0) { - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); } EnRacedog_ChangeAnim(&this->skelAnime, sAnimationInfo, RACEDOG_ANIM_RUN); @@ -580,7 +580,7 @@ void EnRacedog_CheckForFinish(EnRacedog* this) { sNumberOfDogsFinished++; if (sNumberOfDogsFinished == 1) { SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC); - play_sound(NA_SE_SY_START_SHOT); + Audio_PlaySfx(NA_SE_SY_START_SHOT); } this->raceStatus = RACEDOG_RACE_STATUS_FINISHED; 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 a280e9bfa..bb8f9b9cf 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 @@ -754,11 +754,11 @@ void func_80B71F3C(EnRailSkb* this, PlayState* play) { void func_80B72100(EnRailSkb* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x13F1, &this->actor); this->unk_400 = 0x13F1; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x13F3, &this->actor); this->unk_400 = 0x13F3; } 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 9a0e1864e..099d92166 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1225,9 +1225,9 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { case 3: case 4: if (this->actionFunc == EnRailgibud_SinkIntoGround) { - func_800B9010(&this->actor, NA_SE_EN_REDEAD_WEAKENED_L2 - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_REDEAD_WEAKENED_L2 - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_REDEAD_WEAKENED_L1 - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_REDEAD_WEAKENED_L1 - SFX_FLAG); } break; 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 e08cb5574..d61da6f4d 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -709,7 +709,7 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) { this->animLoopCounter = 5; } - func_800B9010(&this->actor, NA_SE_EN_BOMCHU_RUN - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_BOMCHU_RUN - SFX_FLAG); EnRat_UpdateSparkOffsets(this); } diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c index 6ea51586a..cfb8f82ea 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c @@ -88,6 +88,6 @@ void EnRiverSound_Draw(Actor* thisx, PlayState* play) { if (params < RS_RIVER_DEFAULT_LOW_FREQ) { Actor_PlaySfx(&this->actor, gAudioEnvironmentalSfx[params]); } else { - Audio_PlaySfxForRiver(&this->actor.projectedPos, freqScale[this->soundFreqIndex]); + Audio_PlaySfx_River(&this->actor.projectedPos, freqScale[this->soundFreqIndex]); } } 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 cb16e5f39..71efe8cf9 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -868,7 +868,7 @@ void EnRr_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.425f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.85f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.85f, 0.02125f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 dfff2735c..62db8ff6f 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -611,7 +611,7 @@ void EnRuppecrow_FallToDespawn(EnRuppecrow* this, PlayState* play) { this->unk_2CC = (this->unk_2C8 + 1.0f) * 0.25f; this->unk_2CC = CLAMP_MAX(this->unk_2CC, 0.5f); } else if (!Math_StepToF(&this->iceSfxTimer, 0.5f, 0.0125f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } this->actor.colorFilterTimer = 40; 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 e980d1cb5..52b2ac296 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -362,7 +362,7 @@ s32 func_80BFBE70(EnRz* this, PlayState* play) { u16 cueId; if ((EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) && (this->animIndex == EN_RZ_ANIM_APPLAUDING)) { - func_800B9010(&this->actor, NA_SE_EV_CLAPPING_2P - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_CLAPPING_2P - SFX_FLAG); } if (Cutscene_IsCueInChannel(play, this->cueType)) { 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 cd3e1f65f..96b4edea0 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 @@ -697,23 +697,23 @@ u16 EnSGoro_BombshopGoron_NextTextId(EnSGoro* this, PlayState* play) { if (this->bombbuyFlags & EN_S_GORO_BOMBBUYFLAG_YESBUY) { if (AMMO(ITEM_POWDER_KEG) != 0) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return 0x673; } this->powderKegPrice = play->msgCtx.unk1206C; 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); + Audio_PlaySfx(NA_SE_SY_ERROR); return 0x674; } if ((gSaveContext.save.day == 3) && gSaveContext.save.isNight) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; - func_8019F208(); + Audio_PlaySfx_MessageDecide(); return 0x676; } this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; - func_8019F208(); + Audio_PlaySfx_MessageDecide(); return 0x675; } if ((gSaveContext.save.day == 3) && gSaveContext.save.isNight) { @@ -1236,7 +1236,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) { this->bombbuyFlags |= EN_S_GORO_BOMBBUYFLAG_YESBUY; break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->bombbuyFlags &= ~EN_S_GORO_BOMBBUYFLAG_YESBUY; break; } 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 cf634321e..fcce6b288 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -335,12 +335,12 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_358) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_33C = 0x1636; this->unk_328 |= 1; Message_StartTextbox(play, this->unk_33C, &this->actor); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; Rupees_ChangeBy(-this->unk_358); @@ -348,7 +348,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { } break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); if (this->unk_358 == 150) { this->unk_33C = 0x1633; } else { @@ -757,7 +757,7 @@ void EnScopenuts_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_328 & 8) { - func_800B9010(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); } func_80BCAE78(this, play); } 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 1e1f19d70..b6717aac0 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -119,15 +119,15 @@ void func_80A44F40(EnSekihi* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1019)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x101A); break; case 1: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x101B); break; case 2: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_CloseTextbox(play); this->actionFunc = func_80A450B0; break; 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 73edc4267..7210e453b 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -1051,7 +1051,7 @@ void EnSellnuts_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); this->actionFunc(this, play); if (this->unk_338 & 8) { - func_800B9010(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_AKINDO_FLY - SFX_FLAG); } func_80ADADD0(this, play); } 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 6675f6b45..5cb8f6ddc 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -1154,7 +1154,7 @@ void EnSlime_Update(Actor* thisx, PlayState* play) { 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); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 e22a5a73b..e86c8f7ad 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -356,9 +356,9 @@ void EnSnowman_MoveSnowPile(EnSnowman* this, PlayState* play) { SkelAnime_Update(&this->snowPileSkelAnime); if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) { - func_800B9010(&this->actor, NA_SE_EN_YMAJIN_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_YMAJIN_MOVE - SFX_FLAG); } else { - func_800B9010(&this->actor, NA_SE_EN_YMAJIN_MINI_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_YMAJIN_MINI_MOVE - SFX_FLAG); } if (this->work.timer > 0) { 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 3cd33653b..b7aa74f90 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -526,7 +526,7 @@ void EnSob1_TalkToShopkeeper(PlayState* play, EnSob1* this) { } void EnSob1_SetupLookToShopkeeperFromShelf(PlayState* play, EnSob1* this) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->drawCursor = 0; EnSob1_SetupAction(this, EnSob1_LookToShopkeeperFromShelf); } @@ -649,12 +649,12 @@ void EnSob1_Hello(EnSob1* this, PlayState* play) { s32 EnSob1_FacingShopkeeperDialogResult(EnSob1* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); EnSob1_TalkToShopkeeper(play, this); return true; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); if (this->shopType == BOMB_SHOP) { EnSob1_BombShopkeeper_EndInteraction(this, play); } else { @@ -697,7 +697,7 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) { EnSob1_SetupAction(this, EnSob1_LookToShelf); func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -912,13 +912,13 @@ s32 EnSob1_HasPlayerSelectedItem(PlayState* play, EnSob1* this, Input* input) { if (!item->isOutOfStock) { this->prevActionFunc = this->actionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId); - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; this->drawCursor = 0; EnSob1_SetupAction(this, EnSob1_SelectItem); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return true; } @@ -946,7 +946,7 @@ void EnSob1_BrowseShelf(EnSob1* this, PlayState* play) { cursorIndex = this->cursorIndex; if (cursorIndex != prevCursorIndex) { Message_ContinueTextbox(play, this->items[cursorIndex]->actor.textId); - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -985,7 +985,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item2 = this->items[this->cursorIndex]; item2->buyFanfareFunc(play, item2); EnSob1_SetupBuyItemWithFanfare(play, this); @@ -995,7 +995,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { break; case CANBUY_RESULT_SUCCESS_2: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item->buyFunc(play, item); if ((this->shopType == GORON_SHOP) && (item->actor.params == SI_POTION_RED_5)) { EnSob1_SetupCanBuy(play, this, 0xBD7); @@ -1012,42 +1012,42 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { break; case CANBUY_RESULT_NO_ROOM: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoomTextIds[this->shopType]); break; case CANBUY_RESULT_NEED_EMPTY_BOTTLE: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->shopType]); break; case CANBUY_RESULT_NEED_RUPEES: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->shopType]); break; case CANBUY_RESULT_CANNOT_GET_NOW: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->shopType]); break; case CANBUY_RESULT_CANNOT_GET_NOW_2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNow2TextIds[this->shopType]); break; case CANBUY_RESULT_NO_ROOM_2: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoom2TextIds[this->shopType]); break; case CANBUY_RESULT_ALREADY_HAVE: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x658); break; case CANBUY_RESULT_HAVE_BETTER: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x659); break; @@ -1068,7 +1068,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); break; diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c index 3bc1f55fd..a5cb80095 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -127,7 +127,7 @@ void EnStream_Update(Actor* thisx, PlayState* play) { EnStream* this = THIS; this->actionFunc(this, play); - func_800B8FE8(&this->actor, NA_SE_EV_WHIRLPOOL - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_WHIRLPOOL - SFX_FLAG); } void EnStream_Draw(Actor* thisx, PlayState* play) { 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 12d8d22a8..2dc3ca94e 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -483,7 +483,7 @@ void func_80BAAFDC(EnSuttari* this, PlayState* play) { SOLDERSRCHBALL_INVISIBLE); } if (this->playerDetected == true) { - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); this->playerDetected = false; this->actor.speed = 0.0f; if (this->unk1F4[0] != 0) { @@ -516,7 +516,7 @@ void func_80BAB1A0(EnSuttari* this, PlayState* play) { SOLDERSRCHBALL_INVISIBLE); } if (this->playerDetected == true) { - play_sound(NA_SE_SY_FOUND); + Audio_PlaySfx(NA_SE_SY_FOUND); this->playerDetected = false; this->actor.speed = 0.0f; if (this->unk1F4[0] != 0) { @@ -1417,13 +1417,13 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { } else if ((talkstate == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->flags1 |= 0x800; func_80BAAB78(this, play); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); func_80BAAB78(this, play); break; 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 2f32734a4..383f1c165 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -1034,7 +1034,7 @@ void func_808DAEB4(EnSw* this, PlayState* play) { sp5C.z += this->unk_368.z * 10.0f; if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SI, sp5C.x, sp5C.y, sp5C.z, 0, 0, 0, this->actor.params) != NULL) { - play_sound(NA_SE_SY_KINSTA_MARK_APPEAR); + Audio_PlaySfx(NA_SE_SY_KINSTA_MARK_APPEAR); } Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index af419ba23..7972bed61 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -259,7 +259,7 @@ static Vec3f sAccel = { 0.0f, 0.0f, 0.0f }; void EnSyatekiCrow_UpdateDamage(EnSyatekiCrow* this, PlayState* play) { if (this->actionFunc == EnSyatekiCrow_Fly) { if (this->collider.base.acFlags & AC_HIT) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->deathTimer = 0; this->collider.base.acFlags &= ~AC_HIT; EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 1); diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index ee9c63536..ae04a3401 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -430,7 +430,7 @@ void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play) { if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } else { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } this->collider.base.acFlags &= ~AC_HIT; 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 150aa6da7..3e9ac9a40 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 @@ -318,13 +318,13 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { if (CUR_UPG_VALUE(UPG_QUIVER) == 0) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); // You don't have a bow! Message_StartTextbox(play, 0xA30, &this->actor); this->prevTextId = 0xA30; } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); // You don't have enough rupees! Message_StartTextbox(play, 0xA31, &this->actor); @@ -335,7 +335,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-20); SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); @@ -346,7 +346,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Swamp_MovePlayerAndExplainRules; } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); switch (CURRENT_DAY) { case 1: @@ -613,7 +613,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { if (CUR_UPG_VALUE(UPG_QUIVER) == 0) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); if (CURRENT_DAY != 3) { // You don't have a bow? Then you can't play. Message_StartTextbox(play, 0x3F9, &this->actor); @@ -624,7 +624,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0x3FA; } } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); if (CURRENT_DAY != 3) { // You don't have a enough rupees! Message_StartTextbox(play, 0x3FB, &this->actor); @@ -642,7 +642,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-20); this->shootingGameState = SG_GAME_STATE_EXPLAINING_RULES; if (!(this->talkFlags & TALK_FLAG_TOWN_HAS_EXPLAINED_THE_RULES)) { @@ -660,7 +660,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); } } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); if (CURRENT_DAY != 3) { // Well, be that way! Message_StartTextbox(play, 0x3F7, &this->actor); 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 347d78088..8a9696767 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 @@ -452,7 +452,7 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); EnSyatekiWf_SetupDead(this, play); } else { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, 0); } } 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 84d0b7dd1..c06486417 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 @@ -879,7 +879,7 @@ void EnTalkGibud_Disappear(EnTalkGibud* this, PlayState* play) { velocity.z += Rand_Centered() * 1.5f; func_800B3030(play, &pos, &velocity, &accel, 100, 0, 1); } - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); player->stateFlags1 |= PLAYER_STATE1_20000000; this->disappearanceTimer--; } else { diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index c71676061..2999899b9 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -354,9 +354,9 @@ void func_80BB5318(EnTanron1* this, PlayState* play) { if (spB4 != NULL) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, spB4, &this->unk_3360, &spB0); if (spB8 >= (s16)(KREG(39) + 20)) { - Audio_PlaySfxAtPos(&this->unk_3360, NA_SE_EN_MB_MOTH_DEAD); + Audio_PlaySfx_AtPos(&this->unk_3360, NA_SE_EN_MB_MOTH_DEAD); } else if (spBA >= 20) { - Audio_PlaySfxAtPos(&this->unk_3360, NA_SE_EN_MB_MOTH_FLY - SFX_FLAG); + Audio_PlaySfx_AtPos(&this->unk_3360, NA_SE_EN_MB_MOTH_FLY - SFX_FLAG); } } } 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 a56b01c3b..290bb2775 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -465,7 +465,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) { Item_Give(play, ITEM_MAGIC_LARGE); } Actor_Kill(&this->actor); - play_sound(NA_SE_SY_GET_ITEM); + Audio_PlaySfx(NA_SE_SY_GET_ITEM); } else { this->unk_1A1 = 20; func_800B8D50(play, NULL, 5.0f, this->actor.world.rot.y, 0.0f, 8); 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 2000e0e53..82ee7c7fa 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -412,9 +412,9 @@ s32 func_80A3EC30(EnTest3* this, PlayState* play) { s32 func_80A3EC44(EnTest3* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } if (play->msgCtx.choiceIndex != 0) { return 1; 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 233ecc9ec..3c1a5958d 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -73,9 +73,9 @@ void func_80A41D70(EnTest4* this, PlayState* play) { this->transitionCsTimer = 0; SET_EVENTINF(EVENTINF_17); } else if (this->csIdIndex == 0) { - play_sound(NA_SE_EV_CHICKEN_CRY_M); + Audio_PlaySfx(NA_SE_EV_CHICKEN_CRY_M); } else { - func_8019F128(NA_SE_EV_DOG_CRY_EVENING); + Audio_PlaySfx_2(NA_SE_EV_DOG_CRY_EVENING); } } else { this->actionFunc = func_80A42AB8; @@ -110,9 +110,9 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { this->transitionCsTimer = 0; SET_EVENTINF(EVENTINF_17); } else if (this->csIdIndex == 0) { - play_sound(NA_SE_EV_CHICKEN_CRY_M); + Audio_PlaySfx(NA_SE_EV_CHICKEN_CRY_M); } else { - func_8019F128(NA_SE_EV_DOG_CRY_EVENING); + Audio_PlaySfx_2(NA_SE_EV_DOG_CRY_EVENING); } } else { this->actionFunc = func_80A42AB8; @@ -431,7 +431,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; } } else if ((new_var * bellDiff) <= 0) { - func_801A0124(&this->actor.projectedPos, (this->actor.params >> 5) & 0xF); + Audio_PlaySfx_BigBells(&this->actor.projectedPos, (this->actor.params >> 5) & 0xF); this->lastBellTime = gSaveContext.save.time; if (CURRENT_DAY == 3) { @@ -484,9 +484,9 @@ void func_80A42F20(EnTest4* this, PlayState* play) { this->transitionCsTimer++; if (this->transitionCsTimer == 10) { if (this->csIdIndex == 0) { - play_sound(NA_SE_EV_CHICKEN_CRY_M); + Audio_PlaySfx(NA_SE_EV_CHICKEN_CRY_M); } else { - func_8019F128(NA_SE_EV_DOG_CRY_EVENING); + Audio_PlaySfx_2(NA_SE_EV_DOG_CRY_EVENING); } } if (this->transitionCsTimer == 60) { diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index 185e11dbd..462e1e784 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -439,9 +439,9 @@ void EnTest6_SetupInvertedSoTCutscene(EnTest6* this, PlayState* play) { this->screenFillAlpha = 0; if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) { - play_sound(NA_SE_SY_TIME_CONTROL_SLOW); + Audio_PlaySfx(NA_SE_SY_TIME_CONTROL_SLOW); } else if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { - play_sound(NA_SE_SY_TIME_CONTROL_NORMAL); + Audio_PlaySfx(NA_SE_SY_TIME_CONTROL_NORMAL); } } @@ -773,7 +773,7 @@ void EnTest6_DoubleSoTCutscene(EnTest6* this, PlayState* play) { play->unk_18844 = false; } - func_800B8F98(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); switch (this->timer) { case 119: diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index fefe92672..df0e829d4 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -461,7 +461,7 @@ void func_80AF1A2C(EnTest7* this, PlayState* play) { func_80AF082C(this, func_80AF1CA0); this->unk_144 |= 0x20; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_OPEN); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_OPEN); Play_EnableMotionBlur(120); } } @@ -505,13 +505,13 @@ void func_80AF1CA0(EnTest7* this, PlayState* play) { if ((this->unk_18CC.frameCtrl.unk_10 > 20.0f) && !(this->unk_144 & 0x40)) { this->unk_144 |= 0x40; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_CLOSE); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_CLOSE); } if (this->unk_18CC.frameCtrl.unk_10 > 42.0f) { if (!(this->unk_144 & 0x80)) { this->unk_144 |= 0x80; - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_ROLL); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_ROLL); } if (Rand_ZeroOne() < 0.3f) { @@ -615,7 +615,7 @@ void func_80AF21E8(EnTest7* this, PlayState* play) { Color_RGB8 ambientColor = { 220, 220, 255 }; if (R_PLAY_FILL_SCREEN_ON) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_VANISH); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_VANISH); R_PLAY_FILL_SCREEN_ON = false; R_PLAY_FILL_SCREEN_R = 0; R_PLAY_FILL_SCREEN_G = 0; @@ -849,7 +849,7 @@ void func_80AF2C48(EnTest7* this, PlayState* play) { subCam->at.y = this->actor.world.pos.y + 40.0f; subCam->at.z = this->actor.world.pos.z; - func_800B9010(&this->actor, NA_SE_PL_WARP_WING_ROLL_2 - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_WARP_WING_ROLL_2 - SFX_FLAG); if (this->unk_1E54 >= 40) { this->unk_144 &= ~4; func_80AF082C(this, func_80AF2F98); @@ -895,7 +895,7 @@ void func_80AF2F98(EnTest7* this, PlayState* play) { Player* player2 = GET_PLAYER(play); Vec3f sp2C; - func_800B9010(&this->actor, NA_SE_PL_WARP_WING_ROLL_2 - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_WARP_WING_ROLL_2 - SFX_FLAG); sp2C = this->actor.world.pos; 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 87589ae8c..6b708a036 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -1037,7 +1037,7 @@ void EnThiefbird_Update(Actor* thisx, PlayState* play2) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.25f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.5f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.5f, 0.0125f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } 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 1ae0e073b..08c64f591 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -1097,7 +1097,7 @@ void EnTite_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.25f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.5f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.5f, 0.0125f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 469e07e6d..71e344683 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -846,10 +846,10 @@ void func_80AEDF5C(EnTk* this, PlayState* play) { case 0x1407: if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x1409); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1408); } break; @@ -872,11 +872,11 @@ void func_80AEDF5C(EnTk* this, PlayState* play) { case 0x140D: this->unk_2CA |= 2; if (play->msgCtx.choiceIndex == 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x44; func_80AEE2A8(this, play); } else { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x140E); } break; @@ -1323,7 +1323,7 @@ void EnTk_Update(Actor* thisx, PlayState* play) { if (!(this->unk_2CA & 0x200)) { if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - func_800B9010(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND); } diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 2177742dc..bfc3ae55b 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -423,9 +423,9 @@ s32 func_80BA4128(EnToto* this, PlayState* play) { s32 func_80BA415C(EnToto* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } else { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } return ((play->msgCtx.choiceIndex != 0) ? 0 : this->text->unk1) + 1; } 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 ee9c5aaae..e4df6cf20 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -326,7 +326,7 @@ void EnTrt_Hello(EnTrt* this, PlayState* play) { } } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play_sound(NA_SE_SY_MESSAGE_PASS); + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); if (!EnTrt_TestEndInteraction(this, play, CONTROLLER1(&play->state))) { EnTrt_StartShopping(play, this); } @@ -508,12 +508,12 @@ void EnTrt_EndConversation(EnTrt* this, PlayState* play) { s32 EnTrt_FacingShopkeeperDialogResult(EnTrt* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); EnTrt_SetupTalkToShopkeeper(play, this); return true; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnTrt_EndInteraction(play, this); return true; @@ -552,7 +552,7 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_LookToShelf; func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -616,13 +616,13 @@ s32 EnTrt_HasPlayerSelectedItem(PlayState* play, EnTrt* this, Input* input) { if ((item->actor.params != SI_POTION_BLUE) || (this->flags & ENTRT_GIVEN_MUSHROOM)) { this->prevActionFunc = this->actionFunc; Message_ContinueTextbox(play, EnTrt_GetItemChoiceTextId(this)); - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; this->drawCursor = 0; this->actionFunc = EnTrt_SelectItem; } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return true; } @@ -649,7 +649,7 @@ void EnTrt_BrowseShelf(EnTrt* this, PlayState* play) { EnTrt_CursorLeftRight(play, this); if (this->cursorIndex != prevCursorIdx) { Message_ContinueTextbox(play, EnTrt_GetItemTextId(this)); - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -688,7 +688,7 @@ void EnTrt_HandleCanBuyItem(PlayState* play, EnTrt* this) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item2 = this->items[this->cursorIndex]; item2->buyFanfareFunc(play, item2); EnTrt_SetupBuyItemWithFanfare(play, this); @@ -698,7 +698,7 @@ void EnTrt_HandleCanBuyItem(PlayState* play, EnTrt* this) { break; case CANBUY_RESULT_SUCCESS_2: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); item->buyFunc(play, item); EnTrt_SetupCanBuy(play, this, 0x848); this->drawCursor = 0; @@ -707,22 +707,22 @@ void EnTrt_HandleCanBuyItem(PlayState* play, EnTrt* this) { break; case CANBUY_RESULT_NO_ROOM: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnTrt_SetupCannotBuy(play, this, 0x641); break; case CANBUY_RESULT_NEED_EMPTY_BOTTLE: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnTrt_SetupCannotBuy(play, this, 0x846); break; case CANBUY_RESULT_NEED_RUPEES: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnTrt_SetupCannotBuy(play, this, 0x847); break; case CANBUY_RESULT_CANNOT_GET_NOW: - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnTrt_SetupCannotBuy(play, this, 0x643); break; @@ -745,7 +745,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, EnTrt_GetItemTextId(this)); break; @@ -756,7 +756,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (!Inventory_HasEmptyBottle()) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); EnTrt_SetupCannotBuy(play, this, 0x846); } else { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { @@ -826,7 +826,7 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { this->blinkFunc = EnTrt_OpenThenCloseEyes; } if (DECR(this->sleepSoundTimer) == 0) { - func_800B9010(&this->actor, NA_SE_EN_KOTAKE_SLEEP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_KOTAKE_SLEEP - SFX_FLAG); } } @@ -1146,7 +1146,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { if (!EnTrt_TestEndInteraction(this, play, CONTROLLER1(&play->state))) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); player->actor.shape.rot.y = BINANG_ROT180(player->actor.shape.rot.y); player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); @@ -1156,7 +1156,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { case 1: default: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); EnTrt_EndInteraction(play, this); break; } @@ -1458,7 +1458,7 @@ void EnTrt_SetupTalkToShopkeeper(PlayState* play, EnTrt* this) { } void EnTrt_SetupLookToShopkeeperFromShelf(PlayState* play, EnTrt* this) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); this->drawCursor = 0; this->actionFunc = EnTrt_LookToShopkeeperFromShelf; } 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 29560fdce..5570e4130 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -200,7 +200,7 @@ void func_80AD3664(EnTrt2* this, PlayState* play) { CutsceneManager_Queue(this->csId); return; } - func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); } void func_80AD36EC(EnTrt2* this, PlayState* play) { @@ -227,7 +227,7 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) { } } Actor_MoveWithGravity(&this->actor); - func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); if ((this->actor.shape.rot.y >= 0x2800) && (this->actor.shape.rot.y < 0x3800)) { Actor_PlaySfx(&this->actor, NA_SE_EN_KOTAKE_ROLL); } @@ -281,7 +281,7 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) { } Actor_MoveWithoutGravity(&this->actor); - func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG); } void func_80AD3A24(EnTrt2* this, PlayState* play) { @@ -505,7 +505,7 @@ void func_80AD434C(EnTrt2* this, PlayState* play) { func_800B3030(play, &sp68, &sp5C, &sp5C, 100, 0, 3); } - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } } else if (this->actor.world.pos.y < 5.0f) { func_80AD4A78(this, play); 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 a86359610..aefc6385b 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -202,7 +202,7 @@ void func_80AC0D2C(EnTwig* this, PlayState* play) { EffectSsKirakira_SpawnDispersed(play, &sp6C, &sKiraVel, &sKiraAccel, &sColorWhite, &sColorYellow, 1000, (s32)(Rand_ZeroOne() * 10.0f) + 20); } - play_sound(NA_SE_SY_GET_ITEM); + Audio_PlaySfx(NA_SE_SY_GET_ITEM); play->interfaceCtx.minigamePoints--; sRingNotCollected[RACERING_GET_PARAM_FE0(&this->dyna.actor)] = true; if (sCurrentRing == RACERING_GET_PARAM_FE0(&this->dyna.actor)) { 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 2f68391b1..dc2e89a6e 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -212,7 +212,7 @@ void func_808CC490(EnVm* this, PlayState* play) { Math_ApproachS(&this->unk_216, 0, 0xA, 0x5DC); this->unk_218 -= 0x1F4; - func_800B9010(&this->actor, NA_SE_EN_BIMOS_ROLL_HEAD - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_BIMOS_ROLL_HEAD - SFX_FLAG); if (this->actor.xzDistToPlayer <= this->unk_21C) { if ((this->actor.playerHeightRel <= 80.0f) && (this->actor.playerHeightRel >= -160.0f)) { @@ -446,7 +446,7 @@ void EnVm_Update(Actor* thisx, PlayState* play) { } if (this->unk_224 > 0.0f) { - func_800B9010(&this->actor, NA_SE_EN_BIMOS_LAZER - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_BIMOS_LAZER - SFX_FLAG); } this->actionFunc(this, play); 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 c8ef2638e..398da4925 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -498,7 +498,7 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { Math_StepToF(&this->actor.world.pos.z, player->actor.world.pos.z, 3.0f); if (this->timer == 30) { - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); func_80169FDC(&play->state); } } @@ -651,7 +651,7 @@ void EnWallmas_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 dd1fa60e1..e4cb566ab 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 @@ -243,7 +243,7 @@ void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) { play->nextEntrance = play->setupExitList[WARPTAG_GET_EXIT_INDEX(&this->dyna.actor)]; Scene_SetExitFade(play); play->transitionTrigger = TRANS_TRIGGER_START; - func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); + Audio_PlaySfx_2(NA_SE_OC_SECRET_HOLE_OUT); func_801A4058(5); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; 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 26301730f..d42cb32b3 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -1205,7 +1205,7 @@ void func_80992E0C(EnWf* this, PlayState* play) { func_800B3030(play, &sp60, &D_809942F0, &D_809942F0, 100, 0, 2); } - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } } @@ -1534,7 +1534,7 @@ void EnWf_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = this->drawDmgEffScale; } } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) { - func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } 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 94d64903a..f61a7a201 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -234,7 +234,7 @@ void EnYb_ChangeCutscene(EnYb* this, s16 csIdIndex) { * Sets a flag that enables the Kamaro dancing proximity music at night. */ void EnYb_EnableProximityMusic(EnYb* this) { - func_800B9084(&this->actor); + Actor_PlaySeq_FlaggedKamaroDance(&this->actor); } void EnYb_Disappear(EnYb* this, PlayState* 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 cdf6b1766..30d159435 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -371,14 +371,14 @@ void func_80BA00BC(EnZob* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1212)) { switch (play->msgCtx.choiceIndex) { case 1: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x1209); this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); break; case 0: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1213); break; } @@ -456,13 +456,13 @@ void func_80BA0374(EnZob* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1205)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x1207); func_80B9F7E4(this, 2, ANIMMODE_ONCE); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1206); break; } 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 d032b6579..9ac11523c 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -315,12 +315,12 @@ void func_80BAF7CC(EnZod* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x121F)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x1220); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1223); break; } 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 96de52b88..0517159d4 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -667,14 +667,14 @@ void func_80B946FC(EnZog* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgLength = 0; this->actionFunc = func_80B946B4; func_80B93BA8(this, 1); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1014); break; } 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 98adea93a..5ffccb77b 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -988,12 +988,12 @@ void func_80B98728(EnZot* this, PlayState* play) { if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1293)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x1294); break; case 1: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x1298); break; } diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c index 61b172ea7..412687b7f 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c @@ -383,7 +383,7 @@ void MirRay_Update(Actor* thisx, PlayState* play) { MirRay_MakeShieldLight(this, play); if (this->reflectIntensity > 0.0f) { - func_800B8F98(&player->actor, NA_SE_IT_SHIELD_BEAM - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&player->actor, NA_SE_IT_SHIELD_BEAM - SFX_FLAG); } } } diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c index ae8c81f26..520684fb7 100644 --- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c +++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c @@ -139,7 +139,7 @@ void MirRay3_Update(Actor* thisx, PlayState* play) { } if (this->unk_214 > 0.1f) { - func_800B8F98(&player->actor, NA_SE_IT_SHIELD_BEAM - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&player->actor, NA_SE_IT_SHIELD_BEAM - SFX_FLAG); } Math_ApproachZeroF(&this->unk_214, 1.0f, 0.1f); 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 f41b8057c..cec65a32c 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -298,7 +298,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) { func_809A57D8(this); } } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); } } 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 003b94932..7d1f748f3 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -597,7 +597,7 @@ void func_809381C4(ObjBean* this, PlayState* play) { func_80938284(this); } else if (this->unk_1E4 == 4) { CutsceneManager_Stop(this->dyna.actor.csId); - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_1E4 = 0; func_80937FB0(this); } else { @@ -619,7 +619,7 @@ void func_80938298(ObjBean* this, PlayState* play) { func_8093833C(this); } else if (this->unk_1E4 == 4) { CutsceneManager_Stop(this->dyna.actor.csId); - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); this->unk_1E4 = 0; func_80937FB0(this); } @@ -670,7 +670,7 @@ void func_80938444(ObjBean* this, PlayState* play) { } else { this->unk_1B2 = 1; } - func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_GROW_UP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_PL_PLANT_GROW_UP - SFX_FLAG); } void func_809384E8(ObjBean* this) { @@ -785,7 +785,7 @@ void func_809388A8(ObjBean* this, PlayState* play) { func_809372A8(this); func_8093892C(this); } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { - func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_MOVE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_PL_PLANT_MOVE - SFX_FLAG); } func_80936F24(this); } @@ -889,7 +889,7 @@ void func_80938C1C(Actor* thisx, PlayState* play) { if (this->unk_1DF > 0) { this->unk_1DF--; if (this->unk_1DF == 0) { - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } } 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 6c81e8de6..cf2ef3ded 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -140,7 +140,7 @@ void ObjBoat_Update(Actor* thisx, PlayState* play) { Math_StepToF(&this->dyna.actor.speed, speedTarget, 0.05f); Actor_MoveWithGravity(&this->dyna.actor); if (this->dyna.actor.speed != 0.0f) { - func_800B9010(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG); } } ObjBoat_SetRotations(this); @@ -188,7 +188,7 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) { if (cue->id != 3) { ObjBoat_SetRotations(this); if (cue->id == 2) { - func_800B9010(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG); } } else { // Tumble in the air diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c index c8eed614b..a2ecc448e 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -345,7 +345,7 @@ void func_80939EF4(ObjBombiwa* this, PlayState* play) { Flags_SetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN); if (OBJBOMBIWA_GET_8000(&this->actor)) { - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); } if (params == OBJBOMBIWA_100_0) { 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 d1f19032f..1f20f2136 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -282,7 +282,7 @@ void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) { Math_StepToF(&this->flameSize, 1.0f, 0.05f); this->rotation += this->rotationSpeed; Math_StepToS(&this->rotationSpeed, OBJCHAN_ROTATION_SPEED, 5); - func_800B9010(&this->actor, NA_SE_EV_CHANDELIER_ROLL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_CHANDELIER_ROLL - SFX_FLAG); } } } 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 1f3f7f902..946791a8b 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -309,7 +309,7 @@ void func_8098D99C(ObjComb* this, PlayState* play) { temp_v0->speed = 2.0f; } this->unk_1B6 = 1; - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); } } } @@ -469,7 +469,7 @@ void func_8098DEA0(ObjComb* this, PlayState* play) { if (this->unk_1B0 > 0x258) { this->unk_1B0 = 0x258; } - func_800B9010(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); } Actor_MoveWithGravity(&this->actor); diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index e672780de..771833c58 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -362,7 +362,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.dim.yShift = thisx->home.pos.y - thisx->world.pos.y; } - func_800B9010(thisx, NA_SE_EV_BURNING - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_BURNING - SFX_FLAG); if (player->transformation == PLAYER_FORM_GORON) { this->collider.info.toucher.damage = 0; 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 85e628359..b7fc601e3 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -107,19 +107,19 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->dyna.actor.textId = 0xCF5; Message_StartTextbox(play, this->dyna.actor.textId, &this->dyna.actor); break; case 1: - func_8019F208(); + Audio_PlaySfx_MessageDecide(); this->dyna.actor.textId = 0xCF7; Message_StartTextbox(play, this->dyna.actor.textId, &this->dyna.actor); break; case 2: - func_8019F230(); + Audio_PlaySfx_MessageCancel(); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; func_80B3C260(this); @@ -141,9 +141,9 @@ void func_80B3C624(ObjGhaka* this, PlayState* play) { func_80B3C2C4(this, play); SET_WEEKEVENTREG(WEEKEVENTREG_20_20); func_80B3C260(this); - Audio_PlaySfxAtPos(&D_80B3C960, NA_SE_EV_BLOCK_BOUND); + Audio_PlaySfx_AtPos(&D_80B3C960, NA_SE_EV_BLOCK_BOUND); } else { - Audio_PlaySfxAtPos(&D_80B3C960, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); + Audio_PlaySfx_AtPos(&D_80B3C960, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); } } 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 ffc3558e6..5c63e0561 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c @@ -81,7 +81,7 @@ void ObjHsStump_SetupAppear(ObjHsStump* this, PlayState* play) { this->framesAppeared = 0; this->rotAngle = 0; this->rotFactor = 3640.0f; - func_8019F128(NA_SE_EN_NPC_APPEAR); + Audio_PlaySfx_2(NA_SE_EN_NPC_APPEAR); this->actionFunc = ObjHsStump_Appear; } 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 7559c4db7..64dbaa034 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -634,7 +634,7 @@ void ObjHunsui_Draw(Actor* thisx, PlayState* play) { if (this->unk_172 & 0x10) { f32 temp_f8 = (this->dyna.actor.world.pos.y - this->dyna.actor.home.pos.y) / 800.0f; - func_8019FAD8(&this->dyna.actor.projectedPos, NA_SE_EV_WATER_PILLAR - SFX_FLAG, 1.0f + temp_f8); + Audio_PlaySfx_AtPosWithFreq(&this->dyna.actor.projectedPos, NA_SE_EV_WATER_PILLAR - SFX_FLAG, 1.0f + temp_f8); } if (!(this->unk_172 & 2)) { @@ -650,7 +650,7 @@ void func_80B9DA60(Actor* thisx, PlayState* play) { if (this->unk_172 & 0x10) { temp = 1.0f + ((this->unk_178 - 240.0f) / 270.0f); - func_8019FAD8(&this->dyna.actor.projectedPos, NA_SE_EV_WATER_PILLAR - SFX_FLAG, 1.0f + temp); + Audio_PlaySfx_AtPosWithFreq(&this->dyna.actor.projectedPos, NA_SE_EV_WATER_PILLAR - SFX_FLAG, 1.0f + temp); } if ((this->dyna.actor.flags & ACTOR_FLAG_40) && !(this->unk_172 & 2)) { 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 0ae8abe18..edeb9e269 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -1181,7 +1181,7 @@ void func_80A25E50(ObjIceblock* this, PlayState* play) { func_80A2541C(this, play); func_80A25CF4(this); } else { - func_800B9010(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); } } @@ -1267,7 +1267,7 @@ void func_80A26144(ObjIceblock* this, PlayState* play) { func_80A23B88(this); func_80A25FA0(this); } else { - func_800B9010(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); } func_80A24DD0(this, play); diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index 608dde82a..e69995ed2 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -123,7 +123,7 @@ void func_80C15474(ObjJgameLight* this, PlayState* play) { } } if (this->flameScaleProportion > 0.1f) { - func_800B9010(&this->actor, NA_SE_EV_TORCH - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_TORCH - SFX_FLAG); } temp_a1 = (s32)(Rand_ZeroOne() * 127.0f) + 128; Lights_PointSetColorAndRadius(&this->lightInfo, temp_a1, temp_a1 * 0.7f, 0, this->lightRadius); @@ -138,7 +138,7 @@ void ObjJgameLight_UpdateCollision(ObjJgameLight* this, PlayState* play) { void func_80C15718(ObjJgameLight* this, PlayState* play) { if ((this->actor.colChkInfo.health & OBJLUPYGAMELIFT_IGNITE_FIRE) && !(this->prevHealth & OBJLUPYGAMELIFT_IGNITE_FIRE)) { - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_FLAME_IGNITION); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_FLAME_IGNITION); this->prevHealth = this->actor.colChkInfo.health; } if (this->actor.colChkInfo.health & OBJLUPYGAMELIFT_DISPLAY_CORRECT) { 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 ee8536caa..1ca298f79 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -86,7 +86,7 @@ void ObjKzsaku_Rise(ObjKzsaku* this, PlayState* play) { } } if (this->raisedAmount < 450.0f) { - func_800B9010(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG); this->raisedAmount += 15.0f; } else { func_80C08C84(this); diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c index 408668ecb..39cb3abd2 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -319,7 +319,7 @@ void ObjLightSwitch_Fade(ObjLightswitch* this, PlayState* play) { return; } - func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // "burn into ashes" + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // "burn into ashes" } void ObjLightswitch_Update(Actor* thisx, PlayState* play) { 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 fb219bfee..81bbb8ebb 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -183,7 +183,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) { func_80BA2790(this); if (D_80BA36B0 == 0) { this->unk_15E = 25; - play_sound(NA_SE_SY_SECOM_WARNING); + Audio_PlaySfx(NA_SE_SY_SECOM_WARNING); } else { this->unk_15E = CutsceneManager_GetLength(this->csId); if (this->unk_15E < 0) { @@ -362,7 +362,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) { play->roomCtx.unk7A[0] = this->dyna.actor.velocity.x; - func_8019FAD8(&gSfxDefaultPos, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speed); + Audio_PlaySfx_AtPosWithFreq(&gSfxDefaultPos, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speed); } void func_80BA3044(ObjNozoki* this, PlayState* play) { 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 168168f41..2a2d3a611 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -112,7 +112,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { s32 sp34; Vec3s* temp_v1_2; - func_800B9010(thisx, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); Math_Vec3s_ToVec3f(&sp48, this->unk170 + this->unk168 + this->unk16C); Math_Vec3f_Diff(&sp48, &thisx->world.pos, &thisx->velocity); magnitude = Math3D_Vec3fMagnitude(&thisx->velocity); 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 8a124b0ab..3bedc3ea4 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -307,7 +307,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) { func_809A3D1C(this); } } else { - func_800B9010(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); } } 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 1a63e89cb..234337d9d 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -126,7 +126,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) { } if (OBJRAILLIFT_GET_TYPE(thisx) == DEKU_FLOWER_PLATFORM) { - func_800B9010(thisx, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c index 3871508ba..158d8f874 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -67,7 +67,7 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) { CutsceneManager_Queue(this->actor.csId); this->actionFunc = func_80973DE0; } else if ((this->actor.params != 0x1FF) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF)) { - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); func_80169EFC(&play->state); Actor_Kill(&this->actor); } 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 28ce8cda8..09dd82441 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -567,7 +567,7 @@ void func_80A224A4(ObjSkateblock* this, PlayState* play) { func_80A21D1C(this); sp28 = true; } else { - func_800B9010(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_PL_SLIP_ICE_LEVEL - SFX_FLAG); } func_80A21CD8(this); 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 ec05294d1..c19c537ce 100644 --- a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c +++ b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c @@ -594,7 +594,7 @@ void func_80B3A500(ObjSnowball2* this, PlayState* play) { func_80B38E88(this, play); } - func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); } else { func_80B38E20(this); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index 1b1ca74a0..bb92d3465 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -211,7 +211,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { if (interaction <= OBJ_SYOKUDAI_INTERACTION_STICK) { if (player->unk_B28 == 0) { player->unk_B28 = 0xD2; - Audio_PlaySfxAtPos(&thisx->projectedPos, NA_SE_EV_FLAME_IGNITION); + Audio_PlaySfx_AtPos(&thisx->projectedPos, NA_SE_EV_FLAME_IGNITION); } else if (player->unk_B28 < 0xC8) { player->unk_B28 = 0xC8; } @@ -280,7 +280,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { } lightIntensity = Rand_ZeroOne() * 127; lightIntensity += 128; - func_800B9010(thisx, NA_SE_EV_TORCH - SFX_FLAG); + Actor_PlaySfx_Flagged(thisx, NA_SE_EV_TORCH - SFX_FLAG); } Lights_PointSetColorAndRadius(&this->lightInfo, lightIntensity, lightIntensity * 0.7f, 0, lightRadius); this->flameTexScroll++; 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 61fa2376f..170eb35ce 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -575,7 +575,7 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) { this->yTranslation += 25; if ((type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_CLOCK_TOWN) || (type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD)) { - func_800B9010(&this->actor, NA_SE_EV_CLOCK_TOWER_UP - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_CLOCK_TOWER_UP - SFX_FLAG); } } else { type = OBJ_TOKEIDAI_TYPE(&this->actor); 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 a6085ef51..c571b87ea 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -469,9 +469,9 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi if (this->potsLife[potIndex] != 1) { this->wasPotHit[potIndex] = true; if (this->potsLife[potIndex] == 2) { - Audio_PlaySfxAtPos(&this->potPos[potIndex], NA_SE_EV_MILK_POT_BROKEN); + Audio_PlaySfx_AtPos(&this->potPos[potIndex], NA_SE_EV_MILK_POT_BROKEN); } else { - Audio_PlaySfxAtPos(&this->potPos[potIndex], NA_SE_EV_MILK_POT_DAMAGE); + Audio_PlaySfx_AtPos(&this->potPos[potIndex], NA_SE_EV_MILK_POT_DAMAGE); } this->potsLife[potIndex]--; @@ -517,7 +517,7 @@ s32 func_80B78A54(ObjUm* this, PlayState* play, s32 arg2, EnHorse* arg3, EnHorse Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &arg3->actor.world.pos) - this->dyna.actor.shape.rot.y; this->banditsCollisions[arg2].base.acFlags &= ~AC_HIT; - Audio_PlaySfxAtPos(&arg3->actor.projectedPos, NA_SE_EN_CUTBODY); + Audio_PlaySfx_AtPos(&arg3->actor.projectedPos, NA_SE_EN_CUTBODY); arg3->unk_54C = 0xF; if (Math_SinS(sp36) > 0.0f) { @@ -541,7 +541,7 @@ s32 func_80B78A54(ObjUm* this, PlayState* play, s32 arg2, EnHorse* arg3, EnHorse arg3->rider->actor.colorFilterTimer = 20; Actor_SetColorFilter(&arg3->rider->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40); } - Audio_PlaySfxAtPos(&arg3->actor.projectedPos, NA_SE_EN_CUTBODY); + Audio_PlaySfx_AtPos(&arg3->actor.projectedPos, NA_SE_EN_CUTBODY); } } @@ -830,7 +830,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_31_40); if (play->msgCtx.choiceIndex == 0) { player = GET_PLAYER(play); - func_8019F208(); + Audio_PlaySfx_MessageDecide(); SET_WEEKEVENTREG(WEEKEVENTREG_31_80); play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11); if (player->stateFlags1 & PLAYER_STATE1_800000) { @@ -842,7 +842,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { phi_v1 = true; } else { Actor_ContinueText(play, &this->dyna.actor, 0x33B5); - func_8019F230(); + Audio_PlaySfx_MessageCancel(); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); phi_v1 = false; } @@ -864,10 +864,10 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { case 0x33BD: if (play->msgCtx.choiceIndex == 0) { Actor_ContinueText(play, &this->dyna.actor, 0x33BE); - func_8019F230(); + Audio_PlaySfx_MessageCancel(); } else { Actor_ContinueText(play, &this->dyna.actor, 0x33BF); - func_8019F208(); + Audio_PlaySfx_MessageDecide(); } phi_v1 = false; break; 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 cc47113a5..5a67aa663 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -140,7 +140,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) { this->isTalking = false; } else if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { - func_8019F208(); + Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = 0x4D; play->msgCtx.unk120D6 = 0; play->msgCtx.unk120D4 = 0; diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c index 54ebe8cc7..6f361294e 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -87,7 +87,7 @@ void func_808A7BA0(ObjWturn* this, PlayState* play) { if (Math_ScaledStepToS(&this->actor.shape.rot.z, -0x8000, 0x0200)) { func_808A7C04(this, play); } - func_800B8FE8(&this->actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_EARTHQUAKE - SFX_FLAG); Play_SetCameraRoll(play, this->subCamId, this->actor.shape.rot.z); } 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 96de17fb0..791afcd6a 100644 --- a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c +++ b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c @@ -83,7 +83,7 @@ void ObjY2lift_Update(Actor* thisx, PlayState* play) { } } else { this->unk15E = false; - func_800B9010(&this->dyna.actor, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_PLATE_LIFT_LEVEL - SFX_FLAG); } if (DECR(this->unk15F) != 0) { this->dyna.actor.shape.yOffset = (2.0f * (this->unk15F & 1)) * this->unk15F; diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c index cea1a4e71..f2085694a 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c @@ -159,7 +159,7 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { } else { this->isStationary = false; if (shutterType != SHUTTER_BARRED) { - func_800B9010(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG); + Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 69f56ef2d..89c9477e0 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -111,7 +111,7 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { this->timer = 50; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, 0, 0, 0, 0x11); - Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); } else { CutsceneManager_Queue(this->actor.csId); } @@ -149,7 +149,7 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { if (1) {} if (this->collider.base.acFlags & AC_HIT) { - play_sound(NA_SE_SY_CORRECT_CHIME); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); if (INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE) { Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_ETCETERA, 700.0f, -800.0f, 7261.0f, 0, 0, 0, ITEM_ETC_ARROW_FIRE); diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index c0e0e4a1c..1b73e8c7f 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -1744,7 +1744,7 @@ void Player_AnimSfx_PlayVoice(Player* this, u16 sfxId) { u16 sfxOffset; if (this->currentMask == PLAYER_MASK_GIANT) { - func_8019F830(&this->actor.projectedPos, sfxId); + Audio_PlaySfx_GiantsMask(&this->actor.projectedPos, sfxId); } else if (this->actor.id == ACTOR_PLAYER) { if (this->currentMask == PLAYER_MASK_SCENTS) { sfxOffset = SFX_VOICE_BANK_SIZE * 7; @@ -1802,7 +1802,7 @@ void Player_AnimSfx_PlayFloorWalk(Player* this, f32 freqVolumeLerp) { } // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume - func_8019F638(&this->actor.projectedPos, sfxId, freqVolumeLerp); + Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume(&this->actor.projectedPos, sfxId, freqVolumeLerp); } // ANIMSFX_TYPE_FLOOR_JUMP @@ -1846,8 +1846,8 @@ void Player_PlayAnimSfx(Player* this, AnimSfxEntry* entry) { Player_AnimSfx_PlayFloorWalk(this, 0.0f); } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_9)) { // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume - func_8019F638(&this->actor.projectedPos, this->ageProperties->surfaceSfxIdOffset + NA_SE_PL_WALK_LADDER, - 0.0f); + Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume( + &this->actor.projectedPos, this->ageProperties->surfaceSfxIdOffset + NA_SE_PL_WALK_LADDER, 0.0f); } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_SURFACE)) { Player_PlaySfx(this, entry->sfxId + this->ageProperties->surfaceSfxIdOffset); } @@ -3764,7 +3764,7 @@ u8 sMagicArrowCosts[] = { s32 func_808306F8(Player* this, PlayState* play) { if ((this->heldItemAction >= PLAYER_IA_BOW_FIRE) && (this->heldItemAction <= PLAYER_IA_BOW_LIGHT) && (gSaveContext.magicState != MAGIC_STATE_IDLE)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } else { func_8082F43C(play, this, func_80848BF4); @@ -4248,9 +4248,9 @@ void func_808318C0(PlayState* play) { play->actorCtx.lensActive = true; } - play_sound(play->actorCtx.lensActive ? NA_SE_SY_GLASSMODE_ON : NA_SE_SY_GLASSMODE_OFF); + Audio_PlaySfx(play->actorCtx.lensActive ? NA_SE_SY_GLASSMODE_ON : NA_SE_SY_GLASSMODE_OFF); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } } @@ -4297,12 +4297,12 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (!(this->stateFlags1 & PLAYER_STATE1_8000000) && BgCheck_EntityCheckCeiling(&play->colCtx, &sp54, &this->actor.world.pos, sPlayerAgeProperties[playerForm].unk_00, &sp5C, &sp58, &this->actor))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } if ((itemAction == PLAYER_IA_MAGIC_BEANS) && (AMMO(ITEM_MAGIC_BEANS) == 0)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } else { this->itemAction = itemAction; this->unk_AA5 = PLAYER_UNKAA5_5; @@ -4314,19 +4314,19 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) && ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } else if (itemAction == PLAYER_IA_LENS) { func_808318C0(play); } else if (itemAction == PLAYER_IA_PICTO_BOX) { if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } } else if ((itemAction == PLAYER_IA_NUT) && ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { if (AMMO(ITEM_NUT) != 0) { func_8083A658(play, this); } else { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } } else if ((this->transformation == PLAYER_FORM_HUMAN) && (itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_GIANT)) { @@ -5416,7 +5416,7 @@ s32 func_80834600(Player* this, PlayState* play) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_TAKEN_AWAY); play->haltAllActors = true; - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); } else if ((this->unk_B75 != 0) && ((this->unk_B75 >= 3) || (this->invincibilityTimer == 0))) { u8 sp6C[] = { 0, 2, 1, 1 }; @@ -5685,7 +5685,7 @@ s32 func_80835428(PlayState* play, Player* this) { func_80834104(play, this); Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_S); - func_8019F128(NA_SE_OC_SECRET_WARP_IN); + Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_IN); return true; } return false; @@ -5786,13 +5786,13 @@ s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) func_808354A4(play, var_a3 - 1, SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2); if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) { - func_8019F128(NA_SE_OC_TUNAMI); + Audio_PlaySfx_2(NA_SE_OC_TUNAMI); func_801A4058(5); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->floorProperty == FLOOR_PROPERTY_12)) { - func_8019F128(NA_SE_OC_SECRET_WARP_IN); + Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_IN); } if (this->stateFlags1 & PLAYER_STATE1_800000) { @@ -5808,7 +5808,7 @@ s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) && ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { if (floorType == FLOOR_TYPE_11) { - func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); + Audio_PlaySfx_2(NA_SE_OC_SECRET_HOLE_OUT); func_801A4058(5); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; @@ -5852,7 +5852,7 @@ s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) } play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); } else { if (this->stateFlags3 & PLAYER_STATE3_1000000) { func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); @@ -7263,12 +7263,12 @@ s32 func_80838A90(Player* this, PlayState* play) { } } this->stateFlags1 |= PLAYER_STATE1_100000; - play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); Player_StopHorizontalMovement(this); return true; } this->unk_AA5 = PLAYER_UNKAA5_0; - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return false; } this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000); @@ -7376,7 +7376,7 @@ s32 func_80839518(Player* this, PlayState* play) { } else if ((this->tatlTextId == 0) && !func_80123420(this) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) && !func_80831814(this, play, PLAYER_UNKAA5_1)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } return false; } @@ -7864,8 +7864,8 @@ void func_8083A98C(Actor* thisx, PlayState* play2) { f32 focusDeltaX = (s16)(thisx->focus.rot.x - prevFocusX); f32 focusDeltaY = (s16)(thisx->focus.rot.y - prevFocusY); - func_8019FAD8(&gSfxDefaultPos, NA_SE_PL_TELESCOPE_MOVEMENT - SFX_FLAG, - sqrtf(SQ(focusDeltaX) + SQ(focusDeltaY)) / 300.0f); + Audio_PlaySfx_AtPosWithFreq(&gSfxDefaultPos, NA_SE_PL_TELESCOPE_MOVEMENT - SFX_FLAG, + sqrtf(SQ(focusDeltaX) + SQ(focusDeltaY)) / 300.0f); } } @@ -8238,7 +8238,7 @@ void func_8083BB4C(PlayState* play, Player* this) { play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; this->stateFlags1 |= PLAYER_STATE1_200; - play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + Audio_PlaySfx(NA_SE_SY_DEKUNUTS_JUMP_FAILED); } else if ((this->unk_3CF == 0) && ((play->sceneId == SCENE_30GYOSON) || (play->sceneId == SCENE_31MISAKI) || (play->sceneId == SCENE_TORIDE))) { @@ -8329,7 +8329,7 @@ void func_8083BF54(PlayState* play, Player* this) { this->unk_AB8 = CLAMP(this->unk_AB8, 0.0f, var_fa1); if ((this->linearVelocity == 0.0f) && (fabsf(this->unk_AB8 - temp_fv1_2) > 2.0f)) { - func_800B8F98(&this->actor, sfxId); + Actor_PlaySfx_FlaggedCentered1(&this->actor, sfxId); } this->actor.gravity -= this->unk_AB8 * 0.004f; @@ -8691,7 +8691,7 @@ void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) { } Item_Give(play, giEntry->itemId); - play_sound((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); + Audio_PlaySfx((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); } s32 func_8083D23C(Player* this, PlayState* play) { @@ -11243,7 +11243,7 @@ void func_808445C4(PlayState* play, Player* this) { pos.y = (Rand_CenteredFloat(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; pos.z = (Rand_CenteredFloat(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); - func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); } } @@ -11406,8 +11406,8 @@ void func_80844784(PlayState* play, Player* this) { Math_ScaledStepToS(&this->actor.world.rot.y, var_a3, temp_ft2); } if ((this->linearVelocity == 0.0f) && (this->actor.speed != 0.0f)) { - func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), - this->actor.speed); + Audio_PlaySfx_AtPosWithSyncedFreqAndVolume( + &this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), this->actor.speed); } } else { this->actor.speed = this->linearVelocity; @@ -11438,7 +11438,7 @@ void func_80844784(PlayState* play, Player* this) { if (Player_SetAction(play, this, func_80856918, 1)) { this->stateFlags3 |= PLAYER_STATE3_2000 | PLAYER_STATE3_1000000; func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); - func_8019FD90(4, 2); + Audio_SetSfxTimerLerpInterval(4, 2); } this->unk_AE8 = 0x270F; @@ -11474,8 +11474,9 @@ void func_80844784(PlayState* play, Player* this) { func_8083FBC4(play, this); } - func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), - fabsf(D_80862B3C)); + Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, + Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + fabsf(D_80862B3C)); } this->actor.velocity.x += sp48; @@ -11533,7 +11534,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->unk_D6A++; if (this->unk_D6A == 0) { this->unk_D6A = 1; - play_sound(NA_SE_OC_REVENGE); + Audio_PlaySfx(NA_SE_OC_REVENGE); } } @@ -12763,7 +12764,7 @@ s32 func_808482E0(PlayState* play, Player* this) { Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); } else if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_10)) || (this->getItemId == GI_RECOVERY_HEART)) { - play_sound(NA_SE_SY_GET_BOXITEM); + Audio_PlaySfx(NA_SE_SY_GET_BOXITEM); } else { s32 seqId; @@ -13273,7 +13274,7 @@ void func_808497A0(Player* this, PlayState* play) { R_PLAY_FILL_SCREEN_ON = 20; R_PLAY_FILL_SCREEN_ALPHA = 0; R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA; - play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + Audio_PlaySfx(NA_SE_SY_DEKUNUTS_JUMP_FAILED); } else if (R_PLAY_FILL_SCREEN_ON > 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; if (R_PLAY_FILL_SCREEN_ALPHA > 255) { @@ -14372,9 +14373,9 @@ void func_8084C6EC(Player* this, PlayState* play) { func_8083CB58(this, sp3C, this->actor.shape.rot.y); if (func_8083FBC4(play, this)) { - func_800B8F98(&this->actor, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) - ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG - : NA_SE_PL_ROLL_DUST - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) + ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG + : NA_SE_PL_ROLL_DUST - SFX_FLAG); } Player_PlayAnimSfx(this, D_8085D61C); @@ -15051,7 +15052,7 @@ void func_8084E724(Player* this, PlayState* play) { BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) || func_808391D8(this, play)))) { func_80839ED0(this, play); - play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { if (func_801240DC(this)) { this->unk_AA6 |= 0x43; @@ -15985,7 +15986,7 @@ void func_80850D68(Player* this, PlayState* play) { this->unk_B86[0] = 1; } else { sp44 = 9.0f; - func_800B8F98(&this->actor, NA_SE_PL_ZORA_SWIM_LV - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_ZORA_SWIM_LV - SFX_FLAG); } // Y @@ -17032,8 +17033,8 @@ void func_80853D68(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); PlayerAnimation_Update(play, &this->skelAnime); func_8083FBC4(play, this); - func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), - this->actor.speed); + Audio_PlaySfx_AtPosWithSyncedFreqAndVolume( + &this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), this->actor.speed); if (func_80838A90(this, play)) { return; @@ -17150,7 +17151,7 @@ void func_8085421C(Player* this, PlayState* play) { } play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); } else { play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; @@ -17273,7 +17274,8 @@ void func_80854800(Player* this, PlayState* play) { } this->shockTimer = 40; - func_800B8F98(&this->actor, this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG)); + Actor_PlaySfx_FlaggedCentered1(&this->actor, + this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG)); } void func_808548B8(Player* this, PlayState* play) { @@ -17627,7 +17629,7 @@ void func_808553F4(Player* this, PlayState* play) { Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f); } else if (this->unk_AE7 < sp4C->unk_3) { if (this->unk_AE7 == sp4C->unk_2) { - func_801000CC(NA_SE_EV_LIGHTNING_HARD); + Lib_PlaySfx_2(NA_SE_EV_LIGHTNING_HARD); } Math_StepToF(&this->unk_B10[4], 2.0f, 0.5f); @@ -18078,7 +18080,7 @@ void func_80856918(Player* this, PlayState* play) { this->stateFlags3 &= ~PLAYER_STATE3_200; this->stateFlags3 |= PLAYER_STATE3_1000000; func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); - func_8019FD90(4, 2); + Audio_SetSfxTimerLerpInterval(4, 2); } } } @@ -18170,10 +18172,10 @@ void func_80856918(Player* this, PlayState* play) { func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.0f, 1.0f, 0.0f, 32); } - func_8019FCB8(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f))); + Audio_PlaySfx_AtPosWithTimer(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f))); if ((this->boomerangActor == NULL) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { if (AMMO(ITEM_NUT) == 0) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); } else { this->boomerangActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x, @@ -18272,7 +18274,7 @@ void func_808573A4(Player* this, PlayState* play) { func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, 2.0f, this->currentYaw, this->actor.floorPoly, this->actor.floorBgId); - func_800B8F98(&this->actor, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG)); + Actor_PlaySfx_FlaggedCentered1(&this->actor, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG)); } } @@ -18300,7 +18302,7 @@ void func_808576BC(PlayState* play, Player* this) { } if (var_v0 > 0x1770) { - func_800B8F98(&this->actor, NA_SE_PL_GORON_SLIP - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_GORON_SLIP - SFX_FLAG); } if (func_8083F8A8(play, this, 12.0f, -1 - (var_v0 >> 0xC), (var_v0 >> 0xA) + 1.0f, (var_v0 >> 7) + 160, 20, true)) { @@ -18571,7 +18573,7 @@ void func_80857BE8(Player* this, PlayState* play) { if ((gSaveContext.magicState == MAGIC_STATE_IDLE) && (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) { this->unk_AE7++; - func_800B8F98(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); } else { this->unk_AE7 = 4; } @@ -18656,7 +18658,7 @@ void func_80857BE8(Player* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (temp_ft3_2 != 0) && (((temp_v0_10 + temp_ft3_2) * temp_v0_10) <= 0)) { spE0 = Player_GetFloorSfx(this, NA_SE_PL_GORON_ROLL); - func_8019F780(&this->actor.projectedPos, spE0, sp54); + Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, spE0, sp54); } } } @@ -18738,7 +18740,7 @@ void func_80857BE8(Player* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) { spE0 = Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL); - func_8019F780(&this->actor.projectedPos, spE0, this->unk_B08); + Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, spE0, this->unk_B08); } } @@ -19132,7 +19134,7 @@ void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) { R_PLAY_FILL_SCREEN_G = 255; R_PLAY_FILL_SCREEN_B = 255; R_PLAY_FILL_SCREEN_ALPHA = 0; - play_sound(NA_SE_SY_WHITE_OUT_T); + Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); } } @@ -19689,7 +19691,7 @@ void func_8085A364(PlayState* play, Player* this, void* arg2) { if (this->skelAnime.animation == &gPlayerAnim_cl_nigeru) { Player_PlayAnimSfx(this, D_8085DA48); } else if (this->skelAnime.animation == &gPlayerAnim_alink_rakkatyu) { - func_800B8F98(&this->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); + Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); } else { func_80858FE8(this); } @@ -19791,7 +19793,7 @@ void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) { R_PLAY_FILL_SCREEN_G = 255; R_PLAY_FILL_SCREEN_B = 255; R_PLAY_FILL_SCREEN_ALPHA = 0; - play_sound(NA_SE_SY_WHITE_OUT_T); + Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); } } diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c index 03bc1e81d..b12a9cb76 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c @@ -74,7 +74,7 @@ void TransitionWipe3_Start(void* thisx) { } else { this->scrollY = 500; if (this->texIndex == 2) { - func_8019F128(NA_SE_OC_SECRET_WARP_OUT); + Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_OUT); } } guPerspective(&this->projection, &this->normal, 60.0f, 4.0f / 3.0f, 10.0f, 12800.0f, 1.0f); @@ -102,7 +102,7 @@ void TransitionWipe3_Update(void* thisx, s32 updateRate) { if (this->dir != TRANS_WIPE3_DIR_IN) { if ((this->scrollY == 0) && (this->texIndex == 2)) { - func_8019F128(NA_SE_OC_SECRET_WARP_IN); + Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_IN); } this->scrollY += (this->wipeSpeed * 3) / updateRate; if (this->scrollY >= 500) { diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 134c6457b..cd44664c9 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -244,5 +244,5 @@ void DayTelop_Init(GameState* thisx) { DayTelop_Noop(this); DayTelop_LoadGraphics(this); - play_sound(NA_SE_OC_TELOP_IMPACT); + Audio_PlaySfx(NA_SE_OC_TELOP_IMPACT); } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index 0cc43ad50..f869c88a4 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -242,7 +242,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { if (this->buttonIndex <= FS_BTN_MAIN_FILE_3) { if (!gSaveContext.flashSaveAvailable) { if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->configMode = CM_ROTATE_TO_NAME_ENTRY; this->kbdButton = FS_KBD_BTN_NONE; this->charPage = FS_CHAR_PAGE_HIRA; @@ -258,7 +258,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { this->nameEntryBoxAlpha = 0; Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); } else { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->actionTimer = 4; this->selectMode = SM_FADE_MAIN_TO_SELECT; this->selectedFileIndex = this->buttonIndex; @@ -266,7 +266,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { this->nextTitleLabel = FS_TITLE_OPEN_FILE; } } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->configMode = CM_ROTATE_TO_NAME_ENTRY; this->kbdButton = FS_KBD_BTN_NONE; this->charPage = FS_CHAR_PAGE_HIRA; @@ -282,7 +282,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { this->nameEntryBoxAlpha = 0; Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); } else { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->actionTimer = 4; this->selectMode = SM_FADE_MAIN_TO_SELECT; this->selectedFileIndex = this->buttonIndex; @@ -290,7 +290,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { this->nextTitleLabel = FS_TITLE_OPEN_FILE; } } else if (this->warningLabel == FS_WARNING_NONE) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->prevConfigMode = this->configMode; if (this->buttonIndex == FS_BTN_MAIN_COPY) { @@ -310,7 +310,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { } this->actionTimer = 4; } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; @@ -318,7 +318,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); } else { if (ABS_ALT(this->stickAdjY) > 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (this->stickAdjY > 30) { this->buttonIndex--; if (this->buttonIndex == FS_BTN_MAIN_FILE_3) { @@ -2048,18 +2048,18 @@ void FileSelect_ConfirmFile(GameState* thisx) { if (CHECK_BTN_ALL(input->press.button, BTN_START) || (CHECK_BTN_ALL(input->press.button, BTN_A))) { if (this->confirmButtonIndex == FS_BTN_CONFIRM_YES) { Rumble_Request(300.0f, 180, 20, 100); - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->selectMode = SM_FADE_OUT; func_801A4058(0xF); } else { // FS_BTN_CONFIRM_QUIT - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); this->selectMode++; // SM_FADE_OUT_FILE_INFO } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); this->selectMode++; // SM_FADE_OUT_FILE_INFO } else if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->confirmButtonIndex ^= 1; } } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c index 7f8e5789c..97181cefb 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c @@ -77,7 +77,7 @@ void FileSelect_SelectCopySource(GameState* thisx) { this->nextTitleLabel = FS_TITLE_SELECT_FILE; this->configMode = CM_COPY_RETURN_MAIN; this->warningLabel = FS_WARNING_NONE; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { if (!gSaveContext.flashSaveAvailable) { if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { @@ -85,22 +85,22 @@ void FileSelect_SelectCopySource(GameState* thisx) { this->selectedFileIndex = this->buttonIndex; this->configMode = CM_SETUP_COPY_DEST_1; this->nextTitleLabel = FS_TITLE_COPY_TO; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { this->actionTimer = 4; this->selectedFileIndex = this->buttonIndex; this->configMode = CM_SETUP_COPY_DEST_1; this->nextTitleLabel = FS_TITLE_COPY_TO; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else { if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (this->stickAdjY >= 30) { this->buttonIndex--; // Instead of removing File 3 entirely, the index is manually adjusted to skip it @@ -211,7 +211,7 @@ void FileSelect_SelectCopyDest(GameState* thisx) { this->nextTitleLabel = FS_TITLE_COPY_FROM; this->actionTimer = 4; this->configMode = CM_EXIT_TO_COPY_SOURCE_1; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { if (!gSaveContext.flashSaveAvailable) { if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { @@ -219,22 +219,22 @@ void FileSelect_SelectCopyDest(GameState* thisx) { this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; this->actionTimer = 4; this->configMode = CM_SETUP_COPY_CONFIRM_1; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { this->copyDestFileIndex = this->buttonIndex; this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; this->actionTimer = 4; this->configMode = CM_SETUP_COPY_CONFIRM_1; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else { if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (this->stickAdjY >= 30) { this->buttonIndex--; // Instead of removing File 3 entirely, the index is manually adjusted to skip it @@ -421,7 +421,7 @@ void FileSelect_CopyConfirm(GameState* thisx) { this->actionTimer = 4; this->nextTitleLabel = FS_TITLE_COPY_TO; this->configMode = CM_RETURN_TO_COPY_DEST; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { dayTime = gSaveContext.save.time; gSaveContext.save.time = dayTime; @@ -439,9 +439,9 @@ void FileSelect_CopyConfirm(GameState* thisx) { this->configMode = CM_COPY_WAIT_FOR_FLASH_SAVE; } Rumble_Request(300.0f, 180, 20, 100); - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->buttonIndex ^= 1; } } @@ -585,7 +585,7 @@ void FileSelect_CopyAnim3(GameState* thisx) { if (this->actionTimer == 38) { this->connectorAlpha[this->copyDestFileIndex] = 255; - play_sound(NA_SE_EV_DIAMOND_SWITCH); + Audio_PlaySfx(NA_SE_EV_DIAMOND_SWITCH); } this->actionTimer--; @@ -594,7 +594,7 @@ void FileSelect_CopyAnim3(GameState* thisx) { if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (this->actionTimer == 0)) { this->actionTimer = 4; this->nextTitleLabel = FS_TITLE_SELECT_FILE; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); this->configMode = CM_COPY_ANIM_4; } } @@ -794,7 +794,7 @@ void FileSelect_EraseSelect(GameState* thisx) { this->nextTitleLabel = FS_TITLE_SELECT_FILE; this->configMode = CM_EXIT_ERASE_TO_MAIN; this->warningLabel = FS_WARNING_NONE; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { if (!gSaveContext.flashSaveAvailable) { @@ -803,22 +803,22 @@ void FileSelect_EraseSelect(GameState* thisx) { this->selectedFileIndex = this->buttonIndex; this->configMode = CM_SETUP_ERASE_CONFIRM_1; this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { this->actionTimer = 4; this->selectedFileIndex = this->buttonIndex; this->configMode = CM_SETUP_ERASE_CONFIRM_1; this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } else { if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (this->stickAdjY >= 30) { this->buttonIndex--; @@ -966,7 +966,7 @@ void FileSelect_EraseConfirm(GameState* thisx) { this->nextTitleLabel = FS_TITLE_ERASE_FILE; this->configMode = CM_EXIT_TO_ERASE_SELECT_1; this->actionTimer = 4; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { Sram_EraseSave(this, sramCtx, this->selectedFileIndex); if (!gSaveContext.flashSaveAvailable) { @@ -978,13 +978,13 @@ void FileSelect_EraseConfirm(GameState* thisx) { this->configMode = CM_ERASE_WAIT_FOR_FLASH_SAVE; } this->connectorAlpha[this->selectedFileIndex] = 0; - play_sound(NA_SE_EV_DIAMOND_SWITCH); + Audio_PlaySfx(NA_SE_EV_DIAMOND_SWITCH); this->actionTimer = 4; this->nextTitleLabel = FS_TITLE_ERASE_COMPLETE; Rumble_Request(200.0f, 255, 20, 150); sEraseDelayTimer = 15; } else if (ABS_ALT(this->stickAdjY) >= 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->buttonIndex ^= 1; } } @@ -1104,7 +1104,7 @@ void FileSelect_EraseAnim1(GameState* thisx) { sEraseDelayTimer--; if (sEraseDelayTimer == 0) { - play_sound(NA_SE_OC_ABYSS); + Audio_PlaySfx(NA_SE_OC_ABYSS); } } } @@ -1141,7 +1141,7 @@ void FileSelect_EraseAnim2(GameState* thisx) { this->actionTimer = 4; this->nextTitleLabel = FS_TITLE_SELECT_FILE; this->configMode++; // CM_ERASE_ANIM_3 - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c index 02236002a..2011d10fd 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c @@ -403,7 +403,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { if (this->configMode == CM_NAME_ENTRY) { if (CHECK_BTN_ALL(input->press.button, BTN_START)) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); // place cursor on END button this->kbdY = 5; this->kbdX = 4; @@ -415,21 +415,21 @@ void FileSelect_DrawNameEntry(GameState* thisx) { } this->fileNames[this->buttonIndex][i] = 0x3E; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else { this->newFileNameCharCount--; if (this->newFileNameCharCount < 0) { this->newFileNameCharCount = 0; this->configMode = CM_NAME_ENTRY_TO_MAIN; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else { for (i = this->newFileNameCharCount; i < 7; i++) { this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; } this->fileNames[this->buttonIndex][i] = 0x3E; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } } } else { @@ -462,7 +462,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { font->fontBuf + D_808141F0[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); if (CHECK_BTN_ALL(input->press.button, BTN_A)) { - play_sound(NA_SE_SY_FSEL_DECIDE_S); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_S); this->fileNames[this->buttonIndex][this->newFileNameCharCount] = D_808141F0[this->charIndex]; this->newFileNameCharCount++; @@ -481,7 +481,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { } this->fileNames[this->buttonIndex][i] = 0x3E; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } else { this->newFileNameCharCount--; @@ -494,7 +494,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { } this->fileNames[this->buttonIndex][i] = 0x3E; - play_sound(NA_SE_SY_FSEL_CLOSE); + Audio_PlaySfx(NA_SE_SY_FSEL_CLOSE); } } else if (this->kbdButton == FS_KBD_BTN_END) { validName = false; @@ -507,7 +507,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { } if (validName) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); gSaveContext.fileNum = this->buttonIndex; time = ((void)0, gSaveContext.save.time); Sram_InitSave(this, sramCtx); @@ -526,21 +526,21 @@ void FileSelect_DrawNameEntry(GameState* thisx) { this->connectorAlpha[this->buttonIndex] = 255; Rumble_Request(300.0f, 180, 20, 100); } else { - play_sound(NA_SE_SY_FSEL_ERROR); + Audio_PlaySfx(NA_SE_SY_FSEL_ERROR); } } } } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->newFileNameCharCount++; if (this->newFileNameCharCount > 7) { this->newFileNameCharCount = 7; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->newFileNameCharCount--; if (this->newFileNameCharCount < 0) { @@ -597,7 +597,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { if (this->kbdY != 5) { if (this->stickAdjX < -30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->charIndex--; this->kbdX--; if (this->kbdX < 0) { @@ -605,7 +605,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { this->charIndex = (this->kbdY * 13) + this->kbdX; } } else if (this->stickAdjX > 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->charIndex++; this->kbdX++; if (this->kbdX > 12) { @@ -615,13 +615,13 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { } } else { if (this->stickAdjX < -30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->kbdX--; if (this->kbdX < 3) { this->kbdX = 4; } } else if (this->stickAdjX > 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->kbdX++; if (this->kbdX > 4) { this->kbdX = 3; @@ -630,7 +630,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { } if (this->stickAdjY > 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->kbdY--; @@ -661,7 +661,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { } } } else if (this->stickAdjY < -30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); this->kbdY++; if (this->kbdY > 5) { @@ -757,7 +757,7 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) { Input* input = CONTROLLER1(&this->state); if (CHECK_BTN_ALL(input->press.button, BTN_B)) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); Sram_WriteSaveOptionsToBuffer(sramCtx); if (!gSaveContext.flashSaveAvailable) { @@ -772,7 +772,7 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) { } if (this->stickAdjX < -30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (sSelectedSetting == FS_SETTING_AUDIO) { gSaveContext.options.audioSetting--; @@ -785,7 +785,7 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) { gSaveContext.options.zTargetSetting ^= 1; } } else if (this->stickAdjX > 30) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); if (sSelectedSetting == FS_SETTING_AUDIO) { gSaveContext.options.audioSetting++; @@ -798,12 +798,12 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) { } if ((this->stickAdjY < -30) || (this->stickAdjY > 30)) { - play_sound(NA_SE_SY_FSEL_CURSOR); + Audio_PlaySfx(NA_SE_SY_FSEL_CURSOR); sSelectedSetting ^= 1; return; } if (CHECK_BTN_ALL(input->press.button, BTN_A)) { - play_sound(NA_SE_SY_FSEL_DECIDE_L); + Audio_PlaySfx(NA_SE_SY_FSEL_DECIDE_L); sSelectedSetting ^= 1; } } diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 88d9ccdc4..ca4bfde8d 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -631,13 +631,13 @@ void MapSelect_UpdateMenu(MapSelectState* this) { this->timerUp = 20; this->lockUp = true; - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = updateRate; } } if (CHECK_BTN_ALL(controller1->cur.button, BTN_DUP) && (this->timerUp == 0)) { - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = updateRate * 3; } @@ -648,24 +648,24 @@ void MapSelect_UpdateMenu(MapSelectState* this) { if (this->timerDown == 0) { this->timerDown = 20; this->lockDown = true; - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = -updateRate; } } if (CHECK_BTN_ALL(controller1->cur.button, BTN_DDOWN) && (this->timerDown == 0)) { - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = -updateRate * 3; } if (CHECK_BTN_ALL(controller1->press.button, BTN_DLEFT) || CHECK_BTN_ALL(controller1->cur.button, BTN_DLEFT)) { - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = updateRate; } if (CHECK_BTN_ALL(controller1->press.button, BTN_DRIGHT) || CHECK_BTN_ALL(controller1->cur.button, BTN_DRIGHT)) { - play_sound(NA_SE_IT_SWORD_IMPACT); + Audio_PlaySfx(NA_SE_IT_SWORD_IMPACT); this->verticalInput = -updateRate; } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 1b18adcd1..41296b5f2 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -690,7 +690,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { // if the cursor point changed if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_QUEST]) { pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } // Update cursor item and slot @@ -851,7 +851,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK) { play->pauseCtx.bombersNotebookOpen = true; pauseCtx->mainState = PAUSE_MAIN_STATE_BOMBERS_NOTEBOOK_OPEN; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); } else { pauseCtx->itemDescriptionOn = true; if (pauseCtx->cursorYIndex[PAUSE_QUEST] < 2) { 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 f46db573c..a4bd52d32 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 @@ -604,19 +604,19 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CLEFT)) { if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CDOWN)) { if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CRIGHT)) { if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } @@ -626,21 +626,21 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CLEFT)) { if ((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } pauseCtx->equipTargetCBtn = PAUSE_EQUIP_C_LEFT; } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CDOWN)) { if ((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } pauseCtx->equipTargetCBtn = PAUSE_EQUIP_C_DOWN; } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CRIGHT)) { if ((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } pauseCtx->equipTargetCBtn = PAUSE_EQUIP_C_RIGHT; @@ -668,12 +668,12 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { if (pauseCtx->equipTargetItem == ITEM_ARROW_LIGHT) { magicArrowIndex = 2; } - play_sound(NA_SE_SY_SET_FIRE_ARROW + magicArrowIndex); + Audio_PlaySfx(NA_SE_SY_SET_FIRE_ARROW + magicArrowIndex); pauseCtx->equipTargetItem = 0xB5 + magicArrowIndex; pauseCtx->equipAnimAlpha = sEquipState = 0; // EQUIP_STATE_MAGIC_ARROW_GROW_ORB sEquipAnimTimer = 6; } else { - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); } } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && @@ -692,7 +692,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_ITEM]) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM) && (pauseCtx->pageIndex == PAUSE_ITEM)) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW; @@ -731,7 +731,7 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { pauseCtx->equipAnimScale = 320; pauseCtx->equipAnimShrinkRate = 40; sEquipState++; - play_sound(NA_SE_SY_SYNTH_MAGIC_ARROW); + Audio_PlaySfx(NA_SE_SY_SYNTH_MAGIC_ARROW); } return; } 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 a4df2c889..c88aff6f1 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 @@ -465,7 +465,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_MAP]) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } @@ -917,7 +917,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { // Used as cursor vtxIndex pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; } - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); sStickAdjTimer = 0; } } else if (pauseCtx->stickAdjX < -30) { @@ -942,7 +942,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { // Used as cursor vtxIndex pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; } - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); sStickAdjTimer = 0; } } @@ -951,7 +951,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; } if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_WORLD_MAP]) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } else if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE; @@ -985,7 +985,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_WORLD_MAP]) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } } 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 228f0d16a..949b3de59 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 @@ -546,7 +546,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { @@ -555,7 +555,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { @@ -564,7 +564,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } } @@ -573,7 +573,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE) && ((cursorSlot == (SLOT_MASK_DEKU - ITEM_NUM_SLOTS)) || (cursorSlot == (SLOT_MASK_GORON - ITEM_NUM_SLOTS)))) { - play_sound(NA_SE_SY_ERROR); + Audio_PlaySfx(NA_SE_SY_ERROR); return; } @@ -596,7 +596,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { sMaskEquipMagicArrowSlotHoldTimer = 0; sMaskEquipState = EQUIP_STATE_MOVE_TO_C_BTN; sMaskEquipAnimTimer = 10; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && CHECK_BTN_ALL(input->press.button, BTN_A) && (msgCtx->msgLength == 0)) { @@ -614,7 +614,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_MASK]) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); } } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK) && (pauseCtx->pageIndex == PAUSE_MASK)) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW; @@ -653,7 +653,7 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) { pauseCtx->equipAnimScale = 320; pauseCtx->equipAnimShrinkRate = 40; sMaskEquipState++; - play_sound(NA_SE_SY_SYNTH_MAGIC_ARROW); + Audio_PlaySfx(NA_SE_SY_SYNTH_MAGIC_ARROW); } return; } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c index 9bf89cdd2..d2a11b7d2 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c @@ -24,11 +24,11 @@ void KaleidoScope_UpdatePrompt(PlayState* play) { // Move the prompt if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (stickAdjX >= 30)) { // Move right to the no prompt - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_NO; } else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (stickAdjX <= -30)) { // Move left to the yes prompt - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_YES; } 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 60d79536e..2b8e80db3 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 @@ -267,7 +267,7 @@ void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos) pauseCtx->cursorSpecialPos = cursorSpecialPos; pauseCtx->pageSwitchInputTimer = 0; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED; @@ -285,7 +285,7 @@ void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play) { pauseCtx->nameDisplayTimer = 0; pauseCtx->cursorSpecialPos = 0; - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); pauseCtx->cursorShrinkRate = 4.0f; @@ -321,11 +321,11 @@ void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 direction) { if (direction == SWITCH_PAGE_LEFT) { pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1; - play_sound(NA_SE_SY_WIN_SCROLL_LEFT); + Audio_PlaySfx(NA_SE_SY_WIN_SCROLL_LEFT); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; } else { // SWITCH_PAGE_RIGHT pauseCtx->nextPageMode = pauseCtx->pageIndex * 2; - play_sound(NA_SE_SY_WIN_SCROLL_RIGHT); + Audio_PlaySfx(NA_SE_SY_WIN_SCROLL_RIGHT); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; } @@ -2944,7 +2944,7 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); } break; @@ -2978,17 +2978,17 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; } else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIndex) { // The player successfully played the song - play_sound(NA_SE_SY_TRE_BOX_APPEAR); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); sNextMainState = PAUSE_MAIN_STATE_IDLE; sDelayTimer = 30; pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT_DONE; } else if (pauseCtx->ocarinaStaff->state == 0xFF) { // The player failed to play the song - play_sound(NA_SE_SY_OCARINA_ERROR); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); sNextMainState = PAUSE_MAIN_STATE_SONG_PROMPT_INIT; sDelayTimer = 20; pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT_DONE; @@ -3014,7 +3014,7 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; } break; @@ -3056,7 +3056,7 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; } else { - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; func_8014546C(sramCtx); @@ -3075,7 +3075,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3; sPauseMenuVerticalOffset = -6240.0f; D_8082B90C = pauseCtx->roll; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; @@ -3096,7 +3096,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3; sPauseMenuVerticalOffset = -6240.0f; D_8082B90C = pauseCtx->roll; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); } break; @@ -3314,14 +3314,14 @@ void KaleidoScope_Update(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_A)) { if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) { pauseCtx->promptChoice = PAUSE_PROMPT_YES; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); pauseCtx->state = PAUSE_STATE_OFF; Game_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); } else { - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); pauseCtx->promptChoice = PAUSE_PROMPT_YES; Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; @@ -3338,10 +3338,10 @@ void KaleidoScope_Update(PlayState* play) { sDelayTimer = 90; } } else if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (stickAdjX >= 30)) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_NO; } else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (stickAdjX <= -30)) { - play_sound(NA_SE_SY_CURSOR); + Audio_PlaySfx(NA_SE_SY_CURSOR); pauseCtx->promptChoice = PAUSE_PROMPT_YES; } break; @@ -3365,18 +3365,18 @@ void KaleidoScope_Update(PlayState* play) { (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START))) { pauseCtx->state = PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT; gameOverCtx->state++; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); } break; case PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT: if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START)) { if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) { - play_sound(NA_SE_SY_PIECE_OF_HEART); + Audio_PlaySfx(NA_SE_SY_PIECE_OF_HEART); Play_SaveCycleSceneFlags(&play->state); if (gSaveContext.save.entrance == ENTRANCE(UNSET_0D, 0)) {} } else { // PAUSE_PROMPT_NO - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); } pauseCtx->state = PAUSE_STATE_GAMEOVER_10; } @@ -3484,11 +3484,11 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); play->msgCtx.ocarinaMode = 4; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) { - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); Message_StartTextbox(play, 0x1B93, NULL); pauseCtx->state = PAUSE_STATE_OWLWARP_CONFIRM; } else { @@ -3504,26 +3504,26 @@ void KaleidoScope_Update(PlayState* play) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); play->msgCtx.ocarinaMode = sCursorPointsToOcarinaModes[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; - play_sound(NA_SE_SY_DECIDE); + Audio_PlaySfx(NA_SE_SY_DECIDE); } else { pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT; func_8011552C(play, DO_ACTION_WARP); - play_sound(NA_SE_SY_MESSAGE_PASS); + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { msgCtx->msgLength = 0; msgCtx->msgMode = 0; pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT; - play_sound(NA_SE_SY_MESSAGE_PASS); + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) { msgCtx->msgLength = 0; msgCtx->msgMode = 0; func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; - func_801A3AEC(0); + Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); play->msgCtx.ocarinaMode = 4; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index ba8336dcd..d5cd2151d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -802,14 +802,14 @@ 0x800B8E1C:("func_800B8E1C",), 0x800B8E58:("Player_PlaySfx",), 0x800B8EC8:("Actor_PlaySfx",), - 0x800B8EF4:("func_800B8EF4",), - 0x800B8F98:("func_800B8F98",), - 0x800B8FC0:("func_800B8FC0",), - 0x800B8FE8:("func_800B8FE8",), - 0x800B9010:("func_800B9010",), - 0x800B9038:("func_800B9038",), - 0x800B9084:("func_800B9084",), - 0x800B9098:("func_800B9098",), + 0x800B8EF4:("Actor_PlaySfx_SurfaceBomb",), + 0x800B8F98:("Actor_PlaySfx_FlaggedCentered1",), + 0x800B8FC0:("Actor_PlaySfx_FlaggedCentered2",), + 0x800B8FE8:("Actor_PlaySfx_FlaggedCentered3",), + 0x800B9010:("Actor_PlaySfx_Flagged",), + 0x800B9038:("Actor_PlaySfx_FlaggedTimer",), + 0x800B9084:("Actor_PlaySeq_FlaggedKamaroDance",), + 0x800B9098:("Actor_PlaySeq_FlaggedMusicBoxHouse",), 0x800B90AC:("func_800B90AC",), 0x800B90F4:("Actor_DeactivateLens",), 0x800B9120:("Actor_InitHalfDaysBit",), @@ -818,7 +818,7 @@ 0x800B948C:("Actor_UpdateActor",), 0x800B9780:("Actor_UpdateAll",), 0x800B9A04:("Actor_Draw",), - 0x800B9D1C:("func_800B9D1C",), + 0x800B9D1C:("Actor_UpdateFlaggedAudio",), 0x800B9E3C:("Actor_ResetLensActors",), 0x800B9E4C:("Actor_AddToLensActors",), 0x800B9E84:("Actor_DrawLensOverlay",), @@ -1845,9 +1845,9 @@ 0x800FFEBC:("Math_SmoothStepToS",), 0x800FFFD8:("Math_ApproachS",), 0x8010007C:("Color_RGBA8_Copy",), - 0x801000A4:("func_801000A4",), - 0x801000CC:("func_801000CC",), - 0x801000F4:("Lib_PlaySfxAtPos",), + 0x801000A4:("Lib_PlaySfx",), + 0x801000CC:("Lib_PlaySfx_2",), + 0x801000F4:("Lib_PlaySfx_AtPos",), 0x8010011C:("Lib_Vec3f_TranslateAndRotateY",), 0x801001B8:("Lib_LerpRGB",), 0x80100448:("Math_Vec3f_StepTo",), @@ -3867,40 +3867,40 @@ 0x8019EB2C:("AudioSfx_SetProperties",), 0x8019F024:("AudioSfx_SetFreqAndStereoBits",), 0x8019F05C:("AudioSfx_ResetSfxChannelState",), - 0x8019F0C8:("play_sound",), - 0x8019F128:("func_8019F128",), - 0x8019F170:("func_8019F170",), - 0x8019F1C0:("Audio_PlaySfxAtPos",), - 0x8019F208:("func_8019F208",), - 0x8019F230:("func_8019F230",), + 0x8019F0C8:("Audio_PlaySfx",), + 0x8019F128:("Audio_PlaySfx_2",), + 0x8019F170:("Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb",), + 0x8019F1C0:("Audio_PlaySfx_AtPos",), + 0x8019F208:("Audio_PlaySfx_MessageDecide",), + 0x8019F230:("Audio_PlaySfx_MessageCancel",), 0x8019F258:("AudioSfx_AddSfxSetting",), 0x8019F300:("AudioSfx_ProcessSfxSettings",), - 0x8019F420:("func_8019F420",), - 0x8019F4AC:("func_8019F4AC",), - 0x8019F540:("func_8019F540",), + 0x8019F420:("Audio_PlaySfx_Underwater",), + 0x8019F4AC:("Audio_PlaySfx_WithSfxSettingsReverb",), + 0x8019F540:("Audio_SetSfxUnderwaterReverb",), 0x8019F570:("AudioSfx_LowerSfxSettingsReverb",), - 0x8019F5AC:("func_8019F5AC",), - 0x8019F638:("func_8019F638",), - 0x8019F780:("func_8019F780",), - 0x8019F7D8:("func_8019F7D8",), - 0x8019F830:("func_8019F830",), - 0x8019F88C:("func_8019F88C",), - 0x8019F900:("func_8019F900",), - 0x8019FA18:("func_8019FA18",), - 0x8019FAD8:("func_8019FAD8",), - 0x8019FB0C:("func_8019FB0C",), - 0x8019FC20:("func_8019FC20",), - 0x8019FCB8:("func_8019FCB8",), - 0x8019FD90:("func_8019FD90",), - 0x8019FDC8:("func_8019FDC8",), - 0x8019FE1C:("func_8019FE1C",), - 0x8019FE74:("func_8019FE74",), - 0x8019FEDC:("func_8019FEDC",), - 0x8019FF38:("func_8019FF38",), - 0x8019FF9C:("Audio_PlaySfxForRiver",), - 0x801A0048:("Audio_PlaySfxForWaterfall",), + 0x8019F5AC:("Audio_SetSyncedSfxFreqAndVolume",), + 0x8019F638:("Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume",), + 0x8019F780:("Audio_PlaySfx_AtPosWithSyncedFreqAndVolume",), + 0x8019F7D8:("Audio_PlaySfx_GiantsMaskUnused",), + 0x8019F830:("Audio_PlaySfx_GiantsMask",), + 0x8019F88C:("Audio_PlaySfx_Randomized",), + 0x8019F900:("Audio_PlaySfx_SwordCharge",), + 0x8019FA18:("Audio_PlaySfx_AtPosWithFreqAndVolume",), + 0x8019FAD8:("Audio_PlaySfx_AtPosWithFreq",), + 0x8019FB0C:("Audio_PlaySfx_AtPosWithFreqAndChannelIO",), + 0x8019FC20:("Audio_PlaySfx_WaterWheel",), + 0x8019FCB8:("Audio_PlaySfx_AtPosWithTimer",), + 0x8019FD90:("Audio_SetSfxTimerLerpInterval",), + 0x8019FDC8:("Audio_PlaySfx_AtPosWithReverb",), + 0x8019FE1C:("Audio_PlaySfx_AtPosWithVolume",), + 0x8019FE74:("Audio_SetSfxVolumeTransition",), + 0x8019FEDC:("Audio_UpdateSfxVolumeTransition",), + 0x8019FF38:("Audio_PlaySfx_FishingReel",), + 0x8019FF9C:("Audio_PlaySfx_River",), + 0x801A0048:("Audio_PlaySfx_Waterfall",), 0x801A00EC:("Audio_StepFreqLerp",), - 0x801A0124:("func_801A0124",), + 0x801A0124:("Audio_PlaySfx_BigBells",), 0x801A0184:("Audio_SetBgmVolumeOff",), 0x801A01C4:("Audio_SetBgmVolumeOn",), 0x801A0204:("func_801A0204",), @@ -3909,12 +3909,12 @@ 0x801A0318:("Audio_SetGanonsTowerBgmVolume",), 0x801A0450:("Audio_LowerMainBgmVolume",), 0x801A046C:("Audio_UpdateRiverSoundVolumes",), - 0x801A0554:("func_801A0554",), - 0x801A05E4:("func_801A05E4",), - 0x801A05F0:("func_801A05F0",), + 0x801A0554:("Audio_PlaySfx_IncreasinglyTransposed",), + 0x801A05E4:("Audio_ResetIncreasingTranspose",), + 0x801A05F0:("Audio_PlaySfx_Transposed",), 0x801A0654:("AudioSfx_SetChannelIO",), - 0x801A0810:("func_801A0810",), - 0x801A0868:("func_801A0868",), + 0x801A0810:("Audio_PlaySfx_AtPosWithChannelIO",), + 0x801A0868:("Audio_PlaySfx_AtPosWithAllChannelsIO",), 0x801A09D4:("func_801A09D4",), 0x801A0C70:("Audio_ClearSariaBgm",), 0x801A0C90:("Audio_ClearSariaBgmAtPos",), @@ -3969,35 +3969,35 @@ 0x801A39F8:("func_801A39F8",), 0x801A3A7C:("func_801A3A7C",), 0x801A3AC0:("func_801A3AC0",), - 0x801A3AEC:("func_801A3AEC",), + 0x801A3AEC:("Audio_PlaySfx_PauseMenuOpenOrClose",), 0x801A3B48:("func_801A3B48",), 0x801A3B90:("func_801A3B90",), 0x801A3CD8:("func_801A3CD8",), 0x801A3CF4:("func_801A3CF4",), - 0x801A3D54:("func_801A3D54",), + 0x801A3D54:("Audio_PlaySfx_SurroundSoundTest",), 0x801A3D98:("func_801A3D98",), 0x801A3E38:("func_801A3E38",), 0x801A3EC0:("func_801A3EC0",), 0x801A3F54:("Audio_SetCutsceneFlag",), - 0x801A3F6C:("func_801A3F6C",), - 0x801A3FB4:("func_801A3FB4",), - 0x801A3FFC:("func_801A3FFC",), + 0x801A3F6C:("Audio_PlaySfx_IfNotInCutsceneImpl",), + 0x801A3FB4:("Audio_PlaySfx_IfNotInCutscene",), + 0x801A3FFC:("Audio_MuteSfxAndAmbienceSeqExceptOcarinaAndSystem",), 0x801A400C:("Audio_SetSpec",), 0x801A4058:("func_801A4058",), 0x801A41C8:("func_801A41C8",), 0x801A41F8:("func_801A41F8",), - 0x801A429C:("func_801A429C",), + 0x801A429C:("Audio_StartSfxPlayer",), 0x801A42C8:("func_801A42C8",), 0x801A4324:("func_801A4324",), 0x801A4348:("func_801A4348",), 0x801A4380:("Audio_SetSfxVolumeExceptSystemAndOcarinaBanks",), - 0x801A4428:("func_801A4428",), + 0x801A4428:("Audio_SetSfxReverbIndexExceptOcarinaBank",), 0x801A44A4:("Audio_PreNMI",), 0x801A44C4:("Audio_ResetRequestedSceneSeqId",), 0x801A44D4:("Audio_ResetData",), 0x801A46F8:("func_801A46F8",), - 0x801A4748:("func_801A4748",), - 0x801A479C:("func_801A479C",), + 0x801A4748:("Audio_PlaySfx_AtFixedPos",), + 0x801A479C:("Audio_PlaySfx_AtPosWithVolumeTransition",), 0x801A47DC:("Audio_SetAmbienceChannelIO",), 0x801A48E0:("Audio_StartAmbience",), 0x801A4A28:("Audio_PlayAmbience",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 31c7a2019..08668478b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2250,7 +2250,7 @@ 0x801D66A0:("sEnterGanonsTowerTimer","UNK_TYPE1","",0x1), 0x801D66A4:("sSfxVolumeDuration","UNK_TYPE2","",0x2), 0x801D66A8:("sSoundMode","UNK_TYPE1","",0x1), - 0x801D66AC:("sAudioIsWindowOpen","UNK_TYPE1","",0x1), + 0x801D66AC:("sAudioPauseMenuOpenOrClose","UNK_TYPE1","",0x1), 0x801D66B0:("sAudioCutsceneFlag","UNK_TYPE1","",0x1), 0x801D66B4:("sSpecReverb","UNK_TYPE1","",0x1), 0x801D66B8:("sAudioEnvReverb","UNK_TYPE1","",0x1), diff --git a/tools/namefixer.py b/tools/namefixer.py index 417210d8f..d268b8674 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -186,7 +186,7 @@ wordReplace = { "func_801A0238": "Audio_SetMainBgmVolume", "func_801A2C20": "Audio_StopSubBgm", "func_801A2BB8": "Audio_PlaySubBgm", - "func_8019F1C0": "Audio_PlaySfxAtPos", + "func_8019F1C0": "Audio_PlaySfx_AtPos", "func_801A5BD0": "AudioSfx_MuteBanks", "func_801A72CC": "AudioSfx_StopByPos", "Audio_StopSfxByPos": "AudioSfx_StopByPos", @@ -218,6 +218,48 @@ wordReplace = { "func_801358D4": "AnimationContext_SetNextQueue", "func_801358F4": "AnimationContext_DisableQueue", "SkelAnime_LoadLinkAnimetion": "AnimationContext_SetLoadFrame", + "play_sound": "Audio_PlaySfx", + "func_8019F128": "Audio_PlaySfx_2", + "func_8019F170": "Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb", + "Audio_PlaySfxAtPos": "Audio_PlaySfx_AtPos", + "func_8019F208": "Audio_PlaySfx_MessageDecide", + "func_8019F230": "Audio_PlaySfx_MessageCancel", + "func_8019F420": "Audio_PlaySfx_Underwater", + "func_8019F4AC": "Audio_PlaySfx_WithSfxSettingsReverb", + "func_8019F638": "Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume", + "func_8019F780": "Audio_PlaySfx_AtPosWithSyncedFreqAndVolume", + "func_8019F830": "Audio_PlaySfx_GiantsMask", + "func_8019F88C": "Audio_PlaySfx_Randomized", + "func_8019F900": "Audio_PlaySfx_SwordCharge", + "func_8019FAD8": "Audio_PlaySfx_AtPosWithFreq", + "func_8019FB0C": "Audio_PlaySfx_AtPosWithFreqAndChannelIO", + "func_8019FC20": "Audio_PlaySfx_WaterWheel", + "func_8019FCB8": "Audio_PlaySfx_AtPosWithTimer", + "func_8019FDC8": "Audio_PlaySfx_AtPosWithReverb", + "func_8019FE1C": "Audio_PlaySfx_AtPosWithVolume", + "func_8019FF9C": "Audio_PlaySfx_River", + "func_801A0124": "Audio_PlaySfx_BigBells", + "func_801A0810": "Audio_PlaySfx_AtPosWithAllChannelsIO", + "func_801A0868": "Audio_PlaySfx_AtPosWithChannelIO", + "func_801A3AEC": "Audio_PlaySfx_PauseMenuOpenOrClose", + "func_801A3FB4": "Audio_PlaySfx_IfNotInCutscene", + "func_801A4748": "Audio_PlaySfx_AtFixedPos", + "func_801A479C": "Audio_PlaySfx_AtPosWithVolumeTransition", + "func_8019F540": "Audio_SetSfxUnderwaterReverb", + "func_8019FD90": "Audio_SetSfxTimerLerpInterval", + "func_8019FE74": "Audio_SetSfxVolumeTransition", + "func_801A4428": "Audio_SetSfxReverbIndexExceptOcarinaBank", + "func_800B8EF4": "Actor_PlaySfx_SurfaceBomb", + "func_800B8F98": "Actor_PlaySfx_FlaggedCentered1", + "func_800B8FC0": "Actor_PlaySfx_FlaggedCentered2", + "func_800B8FE8": "Actor_PlaySfx_FlaggedCentered3", + "func_800B9010": "Actor_PlaySfx_Flagged", + "func_800B9038": "Actor_PlaySfx_FlaggedTimer", + "func_800B9084": "Actor_PlaySeq_FlaggedKamaroDance", + "func_800B9098": "Actor_PlaySeq_FlaggedMusicBoxHouse", + "func_801000A4": "Lib_PlaySfx", + "func_801000CC": "Lib_PlaySfx_2", + "Lib_PlaySfxAtPos": "Lib_PlaySfx_AtPos", "SkelAnime_AnimationType1Loaded": "AnimationContext_CopyAll", "SkelAnime_AnimationType2Loaded": "AnimationContext_CopyInterp", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 42d1e5f0b..449be7b5d 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -316,14 +316,14 @@ asm/non_matchings/code/z_actor/func_800B8DD4.s,func_800B8DD4,0x800B8DD4,0x12 asm/non_matchings/code/z_actor/func_800B8E1C.s,func_800B8E1C,0x800B8E1C,0xF asm/non_matchings/code/z_actor/Player_PlaySfx.s,Player_PlaySfx,0x800B8E58,0x1C asm/non_matchings/code/z_actor/Actor_PlaySfx.s,Actor_PlaySfx,0x800B8EC8,0xB -asm/non_matchings/code/z_actor/func_800B8EF4.s,func_800B8EF4,0x800B8EF4,0x29 -asm/non_matchings/code/z_actor/func_800B8F98.s,func_800B8F98,0x800B8F98,0xA -asm/non_matchings/code/z_actor/func_800B8FC0.s,func_800B8FC0,0x800B8FC0,0xA -asm/non_matchings/code/z_actor/func_800B8FE8.s,func_800B8FE8,0x800B8FE8,0xA -asm/non_matchings/code/z_actor/func_800B9010.s,func_800B9010,0x800B9010,0xA -asm/non_matchings/code/z_actor/func_800B9038.s,func_800B9038,0x800B9038,0x13 -asm/non_matchings/code/z_actor/func_800B9084.s,func_800B9084,0x800B9084,0x5 -asm/non_matchings/code/z_actor/func_800B9098.s,func_800B9098,0x800B9098,0x5 +asm/non_matchings/code/z_actor/Actor_PlaySfx_SurfaceBomb.s,Actor_PlaySfx_SurfaceBomb,0x800B8EF4,0x29 +asm/non_matchings/code/z_actor/Actor_PlaySfx_FlaggedCentered1.s,Actor_PlaySfx_FlaggedCentered1,0x800B8F98,0xA +asm/non_matchings/code/z_actor/Actor_PlaySfx_FlaggedCentered2.s,Actor_PlaySfx_FlaggedCentered2,0x800B8FC0,0xA +asm/non_matchings/code/z_actor/Actor_PlaySfx_FlaggedCentered3.s,Actor_PlaySfx_FlaggedCentered3,0x800B8FE8,0xA +asm/non_matchings/code/z_actor/Actor_PlaySfx_Flagged.s,Actor_PlaySfx_Flagged,0x800B9010,0xA +asm/non_matchings/code/z_actor/Actor_PlaySfx_FlaggedTimer.s,Actor_PlaySfx_FlaggedTimer,0x800B9038,0x13 +asm/non_matchings/code/z_actor/Actor_PlaySeq_FlaggedKamaroDance.s,Actor_PlaySeq_FlaggedKamaroDance,0x800B9084,0x5 +asm/non_matchings/code/z_actor/Actor_PlaySeq_FlaggedMusicBoxHouse.s,Actor_PlaySeq_FlaggedMusicBoxHouse,0x800B9098,0x5 asm/non_matchings/code/z_actor/func_800B90AC.s,func_800B90AC,0x800B90AC,0x12 asm/non_matchings/code/z_actor/Actor_DeactivateLens.s,Actor_DeactivateLens,0x800B90F4,0xB asm/non_matchings/code/z_actor/Actor_InitHalfDaysBit.s,Actor_InitHalfDaysBit,0x800B9120,0x14 @@ -332,7 +332,7 @@ asm/non_matchings/code/z_actor/Actor_SpawnSetupActors.s,Actor_SpawnSetupActors,0 asm/non_matchings/code/z_actor/Actor_UpdateActor.s,Actor_UpdateActor,0x800B948C,0xBD asm/non_matchings/code/z_actor/Actor_UpdateAll.s,Actor_UpdateAll,0x800B9780,0xA1 asm/non_matchings/code/z_actor/Actor_Draw.s,Actor_Draw,0x800B9A04,0xC6 -asm/non_matchings/code/z_actor/func_800B9D1C.s,func_800B9D1C,0x800B9D1C,0x48 +asm/non_matchings/code/z_actor/Actor_UpdateFlaggedAudio.s,Actor_UpdateFlaggedAudio,0x800B9D1C,0x48 asm/non_matchings/code/z_actor/Actor_ResetLensActors.s,Actor_ResetLensActors,0x800B9E3C,0x4 asm/non_matchings/code/z_actor/Actor_AddToLensActors.s,Actor_AddToLensActors,0x800B9E4C,0xE asm/non_matchings/code/z_actor/Actor_DrawLensOverlay.s,Actor_DrawLensOverlay,0x800B9E84,0x1C @@ -1359,9 +1359,9 @@ asm/non_matchings/code/z_lib/Math_ApproachZeroF.s,Math_ApproachZeroF,0x800FFE68, asm/non_matchings/code/z_lib/Math_SmoothStepToS.s,Math_SmoothStepToS,0x800FFEBC,0x47 asm/non_matchings/code/z_lib/Math_ApproachS.s,Math_ApproachS,0x800FFFD8,0x29 asm/non_matchings/code/z_lib/Color_RGBA8_Copy.s,Color_RGBA8_Copy,0x8010007C,0xA -asm/non_matchings/code/z_lib/func_801000A4.s,func_801000A4,0x801000A4,0xA -asm/non_matchings/code/z_lib/func_801000CC.s,func_801000CC,0x801000CC,0xA -asm/non_matchings/code/z_lib/Lib_PlaySfxAtPos.s,Lib_PlaySfxAtPos,0x801000F4,0xA +asm/non_matchings/code/z_lib/Lib_PlaySfx.s,Lib_PlaySfx,0x801000A4,0xA +asm/non_matchings/code/z_lib/Lib_PlaySfx_2.s,Lib_PlaySfx_2,0x801000CC,0xA +asm/non_matchings/code/z_lib/Lib_PlaySfx_AtPos.s,Lib_PlaySfx_AtPos,0x801000F4,0xA asm/non_matchings/code/z_lib/Lib_Vec3f_TranslateAndRotateY.s,Lib_Vec3f_TranslateAndRotateY,0x8010011C,0x27 asm/non_matchings/code/z_lib/Lib_LerpRGB.s,Lib_LerpRGB,0x801001B8,0xA4 asm/non_matchings/code/z_lib/Math_Vec3f_StepTo.s,Math_Vec3f_StepTo,0x80100448,0x2D @@ -3384,40 +3384,40 @@ asm/non_matchings/code/code_8019AF00/AudioSfx_ComputeCombFilter.s,AudioSfx_Compu asm/non_matchings/code/code_8019AF00/AudioSfx_SetProperties.s,AudioSfx_SetProperties,0x8019EB2C,0x13E asm/non_matchings/code/code_8019AF00/AudioSfx_SetFreqAndStereoBits.s,AudioSfx_SetFreqAndStereoBits,0x8019F024,0xE asm/non_matchings/code/code_8019AF00/AudioSfx_ResetSfxChannelState.s,AudioSfx_ResetSfxChannelState,0x8019F05C,0x1B -asm/non_matchings/code/code_8019AF00/play_sound.s,play_sound,0x8019F0C8,0x18 -asm/non_matchings/code/code_8019AF00/func_8019F128.s,func_8019F128,0x8019F128,0x12 -asm/non_matchings/code/code_8019AF00/func_8019F170.s,func_8019F170,0x8019F170,0x14 -asm/non_matchings/code/code_8019AF00/Audio_PlaySfxAtPos.s,Audio_PlaySfxAtPos,0x8019F1C0,0x12 -asm/non_matchings/code/code_8019AF00/func_8019F208.s,func_8019F208,0x8019F208,0xA -asm/non_matchings/code/code_8019AF00/func_8019F230.s,func_8019F230,0x8019F230,0xA +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx.s,Audio_PlaySfx,0x8019F0C8,0x18 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_2.s,Audio_PlaySfx_2,0x8019F128,0x12 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb.s,Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb,0x8019F170,0x14 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPos.s,Audio_PlaySfx_AtPos,0x8019F1C0,0x12 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_MessageDecide.s,Audio_PlaySfx_MessageDecide,0x8019F208,0xA +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_MessageCancel.s,Audio_PlaySfx_MessageCancel,0x8019F230,0xA asm/non_matchings/code/code_8019AF00/AudioSfx_AddSfxSetting.s,AudioSfx_AddSfxSetting,0x8019F258,0x2A asm/non_matchings/code/code_8019AF00/AudioSfx_ProcessSfxSettings.s,AudioSfx_ProcessSfxSettings,0x8019F300,0x48 -asm/non_matchings/code/code_8019AF00/func_8019F420.s,func_8019F420,0x8019F420,0x23 -asm/non_matchings/code/code_8019AF00/func_8019F4AC.s,func_8019F4AC,0x8019F4AC,0x25 -asm/non_matchings/code/code_8019AF00/func_8019F540.s,func_8019F540,0x8019F540,0xC +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_Underwater.s,Audio_PlaySfx_Underwater,0x8019F420,0x23 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_WithSfxSettingsReverb.s,Audio_PlaySfx_WithSfxSettingsReverb,0x8019F4AC,0x25 +asm/non_matchings/code/code_8019AF00/Audio_SetSfxUnderwaterReverb.s,Audio_SetSfxUnderwaterReverb,0x8019F540,0xC asm/non_matchings/code/code_8019AF00/AudioSfx_LowerSfxSettingsReverb.s,AudioSfx_LowerSfxSettingsReverb,0x8019F570,0xF -asm/non_matchings/code/code_8019AF00/func_8019F5AC.s,func_8019F5AC,0x8019F5AC,0x23 -asm/non_matchings/code/code_8019AF00/func_8019F638.s,func_8019F638,0x8019F638,0x52 -asm/non_matchings/code/code_8019AF00/func_8019F780.s,func_8019F780,0x8019F780,0x16 -asm/non_matchings/code/code_8019AF00/func_8019F7D8.s,func_8019F7D8,0x8019F7D8,0x16 -asm/non_matchings/code/code_8019AF00/func_8019F830.s,func_8019F830,0x8019F830,0x17 -asm/non_matchings/code/code_8019AF00/func_8019F88C.s,func_8019F88C,0x8019F88C,0x1D -asm/non_matchings/code/code_8019AF00/func_8019F900.s,func_8019F900,0x8019F900,0x46 -asm/non_matchings/code/code_8019AF00/func_8019FA18.s,func_8019FA18,0x8019FA18,0x30 -asm/non_matchings/code/code_8019AF00/func_8019FAD8.s,func_8019FAD8,0x8019FAD8,0xD -asm/non_matchings/code/code_8019AF00/func_8019FB0C.s,func_8019FB0C,0x8019FB0C,0x45 -asm/non_matchings/code/code_8019AF00/func_8019FC20.s,func_8019FC20,0x8019FC20,0x26 -asm/non_matchings/code/code_8019AF00/func_8019FCB8.s,func_8019FCB8,0x8019FCB8,0x36 -asm/non_matchings/code/code_8019AF00/func_8019FD90.s,func_8019FD90,0x8019FD90,0xE -asm/non_matchings/code/code_8019AF00/func_8019FDC8.s,func_8019FDC8,0x8019FDC8,0x15 -asm/non_matchings/code/code_8019AF00/func_8019FE1C.s,func_8019FE1C,0x8019FE1C,0x16 -asm/non_matchings/code/code_8019AF00/func_8019FE74.s,func_8019FE74,0x8019FE74,0x1A -asm/non_matchings/code/code_8019AF00/func_8019FEDC.s,func_8019FEDC,0x8019FEDC,0x17 -asm/non_matchings/code/code_8019AF00/func_8019FF38.s,func_8019FF38,0x8019FF38,0x19 -asm/non_matchings/code/code_8019AF00/Audio_PlaySfxForRiver.s,Audio_PlaySfxForRiver,0x8019FF9C,0x2B -asm/non_matchings/code/code_8019AF00/Audio_PlaySfxForWaterfall.s,Audio_PlaySfxForWaterfall,0x801A0048,0x29 +asm/non_matchings/code/code_8019AF00/Audio_SetSyncedSfxFreqAndVolume.s,Audio_SetSyncedSfxFreqAndVolume,0x8019F5AC,0x23 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume.s,Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume,0x8019F638,0x52 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithSyncedFreqAndVolume.s,Audio_PlaySfx_AtPosWithSyncedFreqAndVolume,0x8019F780,0x16 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_GiantsMaskUnused.s,Audio_PlaySfx_GiantsMaskUnused,0x8019F7D8,0x16 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_GiantsMask.s,Audio_PlaySfx_GiantsMask,0x8019F830,0x17 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_Randomized.s,Audio_PlaySfx_Randomized,0x8019F88C,0x1D +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_SwordCharge.s,Audio_PlaySfx_SwordCharge,0x8019F900,0x46 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithFreqAndVolume.s,Audio_PlaySfx_AtPosWithFreqAndVolume,0x8019FA18,0x30 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithFreq.s,Audio_PlaySfx_AtPosWithFreq,0x8019FAD8,0xD +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithFreqAndChannelIO.s,Audio_PlaySfx_AtPosWithFreqAndChannelIO,0x8019FB0C,0x45 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_WaterWheel.s,Audio_PlaySfx_WaterWheel,0x8019FC20,0x26 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithTimer.s,Audio_PlaySfx_AtPosWithTimer,0x8019FCB8,0x36 +asm/non_matchings/code/code_8019AF00/Audio_SetSfxTimerLerpInterval.s,Audio_SetSfxTimerLerpInterval,0x8019FD90,0xE +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithReverb.s,Audio_PlaySfx_AtPosWithReverb,0x8019FDC8,0x15 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithVolume.s,Audio_PlaySfx_AtPosWithVolume,0x8019FE1C,0x16 +asm/non_matchings/code/code_8019AF00/Audio_SetSfxVolumeTransition.s,Audio_SetSfxVolumeTransition,0x8019FE74,0x1A +asm/non_matchings/code/code_8019AF00/Audio_UpdateSfxVolumeTransition.s,Audio_UpdateSfxVolumeTransition,0x8019FEDC,0x17 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_FishingReel.s,Audio_PlaySfx_FishingReel,0x8019FF38,0x19 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_River.s,Audio_PlaySfx_River,0x8019FF9C,0x2B +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_Waterfall.s,Audio_PlaySfx_Waterfall,0x801A0048,0x29 asm/non_matchings/code/code_8019AF00/Audio_StepFreqLerp.s,Audio_StepFreqLerp,0x801A00EC,0xE -asm/non_matchings/code/code_8019AF00/func_801A0124.s,func_801A0124,0x801A0124,0x18 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_BigBells.s,Audio_PlaySfx_BigBells,0x801A0124,0x18 asm/non_matchings/code/code_8019AF00/Audio_SetBgmVolumeOff.s,Audio_SetBgmVolumeOff,0x801A0184,0x10 asm/non_matchings/code/code_8019AF00/Audio_SetBgmVolumeOn.s,Audio_SetBgmVolumeOn,0x801A01C4,0x10 asm/non_matchings/code/code_8019AF00/func_801A0204.s,func_801A0204,0x801A0204,0xD @@ -3426,12 +3426,12 @@ asm/non_matchings/code/code_8019AF00/Audio_SetGanonsTowerBgmVolumeLevel.s,Audio_ asm/non_matchings/code/code_8019AF00/Audio_SetGanonsTowerBgmVolume.s,Audio_SetGanonsTowerBgmVolume,0x801A0318,0x4E asm/non_matchings/code/code_8019AF00/Audio_LowerMainBgmVolume.s,Audio_LowerMainBgmVolume,0x801A0450,0x7 asm/non_matchings/code/code_8019AF00/Audio_UpdateRiverSoundVolumes.s,Audio_UpdateRiverSoundVolumes,0x801A046C,0x3A -asm/non_matchings/code/code_8019AF00/func_801A0554.s,func_801A0554,0x801A0554,0x24 -asm/non_matchings/code/code_8019AF00/func_801A05E4.s,func_801A05E4,0x801A05E4,0x3 -asm/non_matchings/code/code_8019AF00/func_801A05F0.s,func_801A05F0,0x801A05F0,0x19 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_IncreasinglyTransposed.s,Audio_PlaySfx_IncreasinglyTransposed,0x801A0554,0x24 +asm/non_matchings/code/code_8019AF00/Audio_ResetIncreasingTranspose.s,Audio_ResetIncreasingTranspose,0x801A05E4,0x3 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_Transposed.s,Audio_PlaySfx_Transposed,0x801A05F0,0x19 asm/non_matchings/code/code_8019AF00/AudioSfx_SetChannelIO.s,AudioSfx_SetChannelIO,0x801A0654,0x6F -asm/non_matchings/code/code_8019AF00/func_801A0810.s,func_801A0810,0x801A0810,0x16 -asm/non_matchings/code/code_8019AF00/func_801A0868.s,func_801A0868,0x801A0868,0x5B +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithChannelIO.s,Audio_PlaySfx_AtPosWithChannelIO,0x801A0810,0x16 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithAllChannelsIO.s,Audio_PlaySfx_AtPosWithAllChannelsIO,0x801A0868,0x5B asm/non_matchings/code/code_8019AF00/func_801A09D4.s,func_801A09D4,0x801A09D4,0xA7 asm/non_matchings/code/code_8019AF00/Audio_ClearSariaBgm.s,Audio_ClearSariaBgm,0x801A0C70,0x8 asm/non_matchings/code/code_8019AF00/Audio_ClearSariaBgmAtPos.s,Audio_ClearSariaBgmAtPos,0x801A0C90,0x8 @@ -3486,35 +3486,35 @@ asm/non_matchings/code/code_8019AF00/func_801A3950.s,func_801A3950,0x801A3950,0x asm/non_matchings/code/code_8019AF00/func_801A39F8.s,func_801A39F8,0x801A39F8,0x21 asm/non_matchings/code/code_8019AF00/func_801A3A7C.s,func_801A3A7C,0x801A3A7C,0x11 asm/non_matchings/code/code_8019AF00/func_801A3AC0.s,func_801A3AC0,0x801A3AC0,0xB -asm/non_matchings/code/code_8019AF00/func_801A3AEC.s,func_801A3AEC,0x801A3AEC,0x17 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_PauseMenuOpenOrClose.s,Audio_PlaySfx_PauseMenuOpenOrClose,0x801A3AEC,0x17 asm/non_matchings/code/code_8019AF00/func_801A3B48.s,func_801A3B48,0x801A3B48,0x12 asm/non_matchings/code/code_8019AF00/func_801A3B90.s,func_801A3B90,0x801A3B90,0x52 asm/non_matchings/code/code_8019AF00/func_801A3CD8.s,func_801A3CD8,0x801A3CD8,0x7 asm/non_matchings/code/code_8019AF00/func_801A3CF4.s,func_801A3CF4,0x801A3CF4,0x18 -asm/non_matchings/code/code_8019AF00/func_801A3D54.s,func_801A3D54,0x801A3D54,0x11 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_SurroundSoundTest.s,Audio_PlaySfx_SurroundSoundTest,0x801A3D54,0x11 asm/non_matchings/code/code_8019AF00/func_801A3D98.s,func_801A3D98,0x801A3D98,0x28 asm/non_matchings/code/code_8019AF00/func_801A3E38.s,func_801A3E38,0x801A3E38,0x22 asm/non_matchings/code/code_8019AF00/func_801A3EC0.s,func_801A3EC0,0x801A3EC0,0x25 asm/non_matchings/code/code_8019AF00/Audio_SetCutsceneFlag.s,Audio_SetCutsceneFlag,0x801A3F54,0x6 -asm/non_matchings/code/code_8019AF00/func_801A3F6C.s,func_801A3F6C,0x801A3F6C,0x12 -asm/non_matchings/code/code_8019AF00/func_801A3FB4.s,func_801A3FB4,0x801A3FB4,0x12 -asm/non_matchings/code/code_8019AF00/func_801A3FFC.s,func_801A3FFC,0x801A3FFC,0x4 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_IfNotInCutsceneImpl.s,Audio_PlaySfx_IfNotInCutsceneImpl,0x801A3F6C,0x12 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_IfNotInCutscene.s,Audio_PlaySfx_IfNotInCutscene,0x801A3FB4,0x12 +asm/non_matchings/code/code_8019AF00/Audio_MuteSfxAndAmbienceSeqExceptOcarinaAndSystem.s,Audio_MuteSfxAndAmbienceSeqExceptOcarinaAndSystem,0x801A3FFC,0x4 asm/non_matchings/code/code_8019AF00/Audio_SetSpec.s,Audio_SetSpec,0x801A400C,0x13 asm/non_matchings/code/code_8019AF00/func_801A4058.s,func_801A4058,0x801A4058,0x5C asm/non_matchings/code/code_8019AF00/func_801A41C8.s,func_801A41C8,0x801A41C8,0xC asm/non_matchings/code/code_8019AF00/func_801A41F8.s,func_801A41F8,0x801A41F8,0x29 -asm/non_matchings/code/code_8019AF00/func_801A429C.s,func_801A429C,0x801A429C,0xB +asm/non_matchings/code/code_8019AF00/Audio_StartSfxPlayer.s,Audio_StartSfxPlayer,0x801A429C,0xB asm/non_matchings/code/code_8019AF00/func_801A42C8.s,func_801A42C8,0x801A42C8,0x17 asm/non_matchings/code/code_8019AF00/func_801A4324.s,func_801A4324,0x801A4324,0x9 asm/non_matchings/code/code_8019AF00/func_801A4348.s,func_801A4348,0x801A4348,0xE asm/non_matchings/code/code_8019AF00/Audio_SetSfxVolumeExceptSystemAndOcarinaBanks.s,Audio_SetSfxVolumeExceptSystemAndOcarinaBanks,0x801A4380,0x2A -asm/non_matchings/code/code_8019AF00/func_801A4428.s,func_801A4428,0x801A4428,0x1F +asm/non_matchings/code/code_8019AF00/Audio_SetSfxReverbIndexExceptOcarinaBank.s,Audio_SetSfxReverbIndexExceptOcarinaBank,0x801A4428,0x1F asm/non_matchings/code/code_8019AF00/Audio_PreNMI.s,Audio_PreNMI,0x801A44A4,0x8 asm/non_matchings/code/code_8019AF00/Audio_ResetRequestedSceneSeqId.s,Audio_ResetRequestedSceneSeqId,0x801A44C4,0x4 asm/non_matchings/code/code_8019AF00/Audio_ResetData.s,Audio_ResetData,0x801A44D4,0x89 asm/non_matchings/code/code_8019AF00/func_801A46F8.s,func_801A46F8,0x801A46F8,0x14 -asm/non_matchings/code/code_8019AF00/func_801A4748.s,func_801A4748,0x801A4748,0x15 -asm/non_matchings/code/code_8019AF00/func_801A479C.s,func_801A479C,0x801A479C,0x10 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtFixedPos.s,Audio_PlaySfx_AtFixedPos,0x801A4748,0x15 +asm/non_matchings/code/code_8019AF00/Audio_PlaySfx_AtPosWithVolumeTransition.s,Audio_PlaySfx_AtPosWithVolumeTransition,0x801A479C,0x10 asm/non_matchings/code/code_8019AF00/Audio_SetAmbienceChannelIO.s,Audio_SetAmbienceChannelIO,0x801A47DC,0x41 asm/non_matchings/code/code_8019AF00/Audio_StartAmbience.s,Audio_StartAmbience,0x801A48E0,0x52 asm/non_matchings/code/code_8019AF00/Audio_PlayAmbience.s,Audio_PlayAmbience,0x801A4A28,0x56 From c0ac061e6f30d72bccf43b472a6949c26689191f Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 21 Jun 2023 00:50:26 -0700 Subject: [PATCH 004/121] AudioMgr cleanup (#1300) * AudioMgr cleanup * Remove D_801D14F0 from variables.h --- include/audiomgr.h | 29 +++++++++++++++++++ include/functions.h | 8 ------ include/variables.h | 1 - include/z64.h | 15 ---------- src/code/audio_thread_manager.c | 49 ++++++++++++++++++--------------- src/code/game.c | 1 + src/code/main.c | 3 +- src/code/z_jpeg.c | 2 +- src/libultra/io/devmgr.c | 2 +- src/libultra/io/vimgr.c | 2 +- tools/disasm/functions.txt | 4 +-- tools/sizes/code_functions.csv | 4 +-- 12 files changed, 66 insertions(+), 54 deletions(-) create mode 100644 include/audiomgr.h diff --git a/include/audiomgr.h b/include/audiomgr.h new file mode 100644 index 000000000..4bed0e095 --- /dev/null +++ b/include/audiomgr.h @@ -0,0 +1,29 @@ +#ifndef AUDIOMGR_H +#define AUDIOMGR_H + +#include "ultra64.h" +#include "unk.h" +#include "irqmgr.h" +#include "scheduler.h" +#include "z64audio.h" + +typedef struct { + /* 0x000 */ IrqMgr* irqMgr; + /* 0x004 */ SchedContext* sched; + /* 0x008 */ OSScTask audioTask; + /* 0x060 */ AudioTask* rspTask; + /* 0x064 */ OSMesgQueue interruptQueue; + /* 0x07C */ OSMesg interruptMsgBuf[30]; + /* 0x0F4 */ OSMesgQueue cmdQueue; + /* 0x10C */ OSMesg cmdMsgBuf[1]; + /* 0x110 */ OSMesgQueue lockQueue; + /* 0x128 */ OSMesg lockMsgBuf[1]; + /* 0x12C */ UNK_TYPE1 pad_12C[0x4]; + /* 0x130 */ OSThread thread; +} AudioMgr; // size = 0x2E0 + +void AudioMgr_StopAllSfxExceptSystem(void); +void AudioMgr_Unlock(AudioMgr* audioMgr); +void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr); + +#endif diff --git a/include/functions.h b/include/functions.h index c64fd607d..39cb03363 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1490,14 +1490,6 @@ void func_801720C4(PreRender* this); void func_801720FC(PreRenderParams* params, Gfx** gfxp); void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags); -void AudioMgr_StopAllSfxExceptSystem(void); -void func_80172C30(AudioMgr* audioMgr); -void AudioMgr_HandleRetrace(AudioMgr* audioMgr); -void AudioMgr_HandlePRENMI(AudioMgr* audioMgr); -void AudioMgr_ThreadEntry(void* arg); -void AudioMgr_Unlock(AudioMgr* audioMgr); -void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr); - void GameAlloc_Log(GameAlloc* this); void* GameAlloc_Malloc(GameAlloc* this, size_t size); void GameAlloc_Free(GameAlloc* this, void* data); diff --git a/include/variables.h b/include/variables.h index 1886d3519..9882fa0f4 100644 --- a/include/variables.h +++ b/include/variables.h @@ -658,7 +658,6 @@ extern s32 gDbgCamEnabled; extern Input* D_801D0D60; // extern UNK_TYPE2 sPlayerCsIdToCsCamId; // extern UNK_TYPE1 D_801D0D7A; -// extern UNK_TYPE4 D_801D14F0; extern u32 retryCount; extern u32 cfbIdx[3]; diff --git a/include/z64.h b/include/z64.h index 6d9ff59be..d03b2fd44 100644 --- a/include/z64.h +++ b/include/z64.h @@ -348,21 +348,6 @@ typedef struct { struct PlayState; -typedef struct { - /* 0x000 */ IrqMgr* irqMgr; - /* 0x004 */ SchedContext* sched; - /* 0x008 */ OSScTask audioTask; - /* 0x060 */ AudioTask* rspTask; - /* 0x064 */ OSMesgQueue interruptMsgQ; - /* 0x07C */ OSMesg interruptMsgBuf[30]; - /* 0x0F4 */ OSMesgQueue cmdQ; - /* 0x10C */ OSMesg cmdMsgBuf[1]; - /* 0x110 */ OSMesgQueue lockMsgQ; - /* 0x128 */ OSMesg lockMsgBuf[1]; - /* 0x12C */ UNK_TYPE1 pad_12C[0x4]; - /* 0x130 */ OSThread thread; -} AudioMgr; // size = 0x2E0 - typedef struct { /* 0x0 */ u8 seqId; /* 0x1 */ u8 ambienceId; diff --git a/src/code/audio_thread_manager.c b/src/code/audio_thread_manager.c index 45fbcb87e..12941eb2d 100644 --- a/src/code/audio_thread_manager.c +++ b/src/code/audio_thread_manager.c @@ -1,6 +1,7 @@ #include "global.h" +#include "audiomgr.h" -void func_80172C30(AudioMgr* audioMgr) { +void AudioMgr_NotifyTaskDone(AudioMgr* audioMgr) { AudioTask* task = audioMgr->rspTask; if (audioMgr->rspTask->taskQueue != NULL) { @@ -9,7 +10,7 @@ void func_80172C30(AudioMgr* audioMgr) { } void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { - static s32 retryCount = 10; + static s32 sRetryCount = 10; AudioTask* rspTask; s32 timerMsgVal = 666; OSTimer timer; @@ -19,8 +20,8 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { audioMgr->rspTask = NULL; } - while (audioMgr->cmdQ.validCount != 0) { - osRecvMesg(&audioMgr->cmdQ, NULL, OS_MESG_NOBLOCK); + while (!MQ_IS_EMPTY(&audioMgr->cmdQueue)) { + osRecvMesg(&audioMgr->cmdQueue, NULL, OS_MESG_NOBLOCK); } if (audioMgr->rspTask != NULL) { @@ -29,7 +30,7 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { audioMgr->audioTask.framebuffer = NULL; audioMgr->audioTask.list = audioMgr->rspTask->task; - audioMgr->audioTask.msgQ = &audioMgr->cmdQ; + audioMgr->audioTask.msgQ = &audioMgr->cmdQueue; audioMgr->audioTask.msg = NULL; osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK); @@ -44,13 +45,13 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { if (audioMgr->rspTask != NULL) { while (true) { - osSetTimer(&timer, OS_USEC_TO_CYCLES(32000), 0, &audioMgr->cmdQ, (OSMesg)timerMsgVal); - osRecvMesg(&audioMgr->cmdQ, (OSMesg*)&msg, OS_MESG_BLOCK); + osSetTimer(&timer, OS_USEC_TO_CYCLES(32000), 0, &audioMgr->cmdQueue, (OSMesg)timerMsgVal); + osRecvMesg(&audioMgr->cmdQueue, (OSMesg*)&msg, OS_MESG_BLOCK); osStopTimer(&timer); if (msg == timerMsgVal) { osSyncPrintf("AUDIO SP TIMEOUT %08x %08x\n", audioMgr->rspTask, audioMgr->rspTask->task); - if (retryCount >= 0) { - retryCount--; + if (sRetryCount >= 0) { + sRetryCount--; Sched_SendAudioCancelMsg(audioMgr->sched); } else { osSyncPrintf("audioMgr.c:もうダメ!死ぬ!\n"); @@ -62,13 +63,13 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { } } - func_80172C30(audioMgr); + AudioMgr_NotifyTaskDone(audioMgr); } audioMgr->rspTask = rspTask; } -void AudioMgr_HandlePRENMI(AudioMgr* audioMgr) { +void AudioMgr_HandlePreNMI(AudioMgr* audioMgr) { Audio_PreNMI(); } @@ -81,32 +82,36 @@ void AudioMgr_ThreadEntry(void* arg) { Audio_Init(); AudioLoad_SetDmaHandler(DmaMgr_DmaHandler); Audio_InitSound(); - osSendMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK); - IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptMsgQ); + osSendMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK); + IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptQueue); exit = false; while (!exit) { - osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK); + osRecvMesg(&audioMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK); switch (*msg) { case OS_SC_RETRACE_MSG: AudioMgr_HandleRetrace(audioMgr); - while (audioMgr->interruptMsgQ.validCount != 0) { - osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK); + while (!MQ_IS_EMPTY(&audioMgr->interruptQueue)) { + osRecvMesg(&audioMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK); switch (*msg) { case OS_SC_RETRACE_MSG: break; + case OS_SC_PRE_NMI_MSG: - AudioMgr_HandlePRENMI(audioMgr); + AudioMgr_HandlePreNMI(audioMgr); break; + case OS_SC_NMI_MSG: exit = true; break; } } break; + case OS_SC_PRE_NMI_MSG: - AudioMgr_HandlePRENMI(audioMgr); + AudioMgr_HandlePreNMI(audioMgr); break; + case OS_SC_NMI_MSG: exit = true; break; @@ -117,7 +122,7 @@ void AudioMgr_ThreadEntry(void* arg) { } void AudioMgr_Unlock(AudioMgr* audioMgr) { - osRecvMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK); + osRecvMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK); } void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr) { @@ -127,9 +132,9 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon audioMgr->irqMgr = irqMgr; audioMgr->rspTask = NULL; - osCreateMesgQueue(&audioMgr->cmdQ, audioMgr->cmdMsgBuf, ARRAY_COUNT(audioMgr->cmdMsgBuf)); - osCreateMesgQueue(&audioMgr->interruptMsgQ, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf)); - osCreateMesgQueue(&audioMgr->lockMsgQ, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf)); + osCreateMesgQueue(&audioMgr->cmdQueue, audioMgr->cmdMsgBuf, ARRAY_COUNT(audioMgr->cmdMsgBuf)); + osCreateMesgQueue(&audioMgr->interruptQueue, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf)); + osCreateMesgQueue(&audioMgr->lockQueue, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf)); osCreateThread(&audioMgr->thread, id, AudioMgr_ThreadEntry, audioMgr, stack, pri); osStartThread(&audioMgr->thread); diff --git a/src/code/game.c b/src/code/game.c index 8f4e0f44d..685b2f492 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -1,4 +1,5 @@ #include "global.h" +#include "audiomgr.h" #include "system_malloc.h" #include "z64debug_text.h" #include "z64rumble.h" diff --git a/src/code/main.c b/src/code/main.c index 3da3d25d7..381c42fac 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -5,6 +5,7 @@ */ #include "global.h" +#include "audiomgr.h" #include "buffers.h" #include "stack.h" #include "stackcheck.h" @@ -80,7 +81,7 @@ void Main(void* arg) { while (!exit) { msg = NULL; - osRecvMesg(&irqMgrMsgQ, (OSMesg)&msg, OS_MESG_BLOCK); + osRecvMesg(&irqMgrMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK); if (msg == NULL) { break; } diff --git a/src/code/z_jpeg.c b/src/code/z_jpeg.c index ad592a40e..5ccc5987d 100644 --- a/src/code/z_jpeg.c +++ b/src/code/z_jpeg.c @@ -65,7 +65,7 @@ void Jpeg_ScheduleDecoderTask(JpegContext* jpegCtx) { jpegCtx->scTask.framebuffer = NULL; jpegCtx->scTask.list.t = sJpegTask; - osSendMesg(&gSchedContext.cmdQ, (OSMesg)&jpegCtx->scTask, OS_MESG_BLOCK); + osSendMesg(&gSchedContext.cmdQ, (OSMesg*)&jpegCtx->scTask, OS_MESG_BLOCK); Sched_SendEntryMsg(&gSchedContext); // osScKickEntryMsg osRecvMesg(&jpegCtx->mq, NULL, OS_MESG_BLOCK); } diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c index c0f69c456..c3bbfa1f7 100644 --- a/src/libultra/io/devmgr.c +++ b/src/libultra/io/devmgr.c @@ -13,7 +13,7 @@ void __osDevMgrMain(void* arg) { ret = 0; while (true) { - osRecvMesg(devMgr->cmdQueue, (OSMesg)&ioMesg, OS_MESG_BLOCK); + osRecvMesg(devMgr->cmdQueue, (OSMesg*)&ioMesg, OS_MESG_BLOCK); if ((ioMesg->piHandle != NULL) && (ioMesg->piHandle->type == 2) && ((ioMesg->piHandle->transferInfo.cmdType == OS_READ) || (ioMesg->piHandle->transferInfo.cmdType == OS_WRITE))) { diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index ad9cbffd8..13f63c90d 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -72,7 +72,7 @@ void viMgrMain(void* vargs) { args = (OSMgrArgs*)vargs; while (true) { - osRecvMesg(args->eventQueue, (OSMesg)&mesg, OS_MESG_BLOCK); + osRecvMesg(args->eventQueue, (OSMesg*)&mesg, OS_MESG_BLOCK); switch (mesg->hdr.type) { case OS_MESG_TYPE_VRETRACE: __osViSwapContext(); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d5cd2151d..64fe6b2ec 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3110,9 +3110,9 @@ 0x80172B58:("THA_Init",), 0x80172B9C:("THA_Destroy",), 0x80172BC0:("AudioMgr_StopAllSfxExceptSystem",), - 0x80172C30:("func_80172C30",), + 0x80172C30:("AudioMgr_NotifyTaskDone",), 0x80172C68:("AudioMgr_HandleRetrace",), - 0x80172EAC:("AudioMgr_HandlePRENMI",), + 0x80172EAC:("AudioMgr_HandlePreNMI",), 0x80172ED0:("AudioMgr_ThreadEntry",), 0x80173048:("AudioMgr_Unlock",), 0x80173074:("AudioMgr_Init",), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 449be7b5d..074eb35ec 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2624,9 +2624,9 @@ asm/non_matchings/code/TwoHeadArena/THA_Reset.s,THA_Reset,0x80172B3C,0x7 asm/non_matchings/code/TwoHeadArena/THA_Init.s,THA_Init,0x80172B58,0x11 asm/non_matchings/code/TwoHeadArena/THA_Destroy.s,THA_Destroy,0x80172B9C,0x9 asm/non_matchings/code/audio_stop_all_sfx/AudioMgr_StopAllSfxExceptSystem.s,AudioMgr_StopAllSfxExceptSystem,0x80172BC0,0x1C -asm/non_matchings/code/audio_thread_manager/func_80172C30.s,func_80172C30,0x80172C30,0xE +asm/non_matchings/code/audio_thread_manager/AudioMgr_NotifyTaskDone.s,AudioMgr_NotifyTaskDone,0x80172C30,0xE asm/non_matchings/code/audio_thread_manager/AudioMgr_HandleRetrace.s,AudioMgr_HandleRetrace,0x80172C68,0x91 -asm/non_matchings/code/audio_thread_manager/AudioMgr_HandlePRENMI.s,AudioMgr_HandlePRENMI,0x80172EAC,0x9 +asm/non_matchings/code/audio_thread_manager/AudioMgr_HandlePreNMI.s,AudioMgr_HandlePreNMI,0x80172EAC,0x9 asm/non_matchings/code/audio_thread_manager/AudioMgr_ThreadEntry.s,AudioMgr_ThreadEntry,0x80172ED0,0x5E asm/non_matchings/code/audio_thread_manager/AudioMgr_Unlock.s,AudioMgr_Unlock,0x80173048,0xB asm/non_matchings/code/audio_thread_manager/AudioMgr_Init.s,AudioMgr_Init,0x80173074,0x2F From 35a0f705384b19bfec6b661da0a3f0730251cef7 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 21 Jun 2023 02:00:07 -0700 Subject: [PATCH 005/121] Doc schedule_dma_static (#1296) * Doc schedule_dma_static * Update assets/xml/archives/schedule_dma_static.xml Co-authored-by: Anghelo Carvajal * xml whitespace * Remove unused from name * pose * ia8 -> large --------- Co-authored-by: Anghelo Carvajal --- assets/xml/archives/schedule_dma_static.xml | 48 +++++++++---------- .../tables/bombers_notebook/person_table.h | 40 ++++++++-------- src/code/z_play_hireso.c | 6 +-- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/assets/xml/archives/schedule_dma_static.xml b/assets/xml/archives/schedule_dma_static.xml index f3b7ba834..c71bdb413 100644 --- a/assets/xml/archives/schedule_dma_static.xml +++ b/assets/xml/archives/schedule_dma_static.xml @@ -1,28 +1,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/tables/bombers_notebook/person_table.h b/include/tables/bombers_notebook/person_table.h index e6ef49b27..c9cf76004 100644 --- a/include/tables/bombers_notebook/person_table.h +++ b/include/tables/bombers_notebook/person_table.h @@ -9,23 +9,23 @@ * - Argument 4: Message id for the event meeting this person * - Argument 5: WeekEventFlag for the event meeting this person */ -/* 0x00 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMBERS, schedule_dma_static_yar_Blob_009800, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) -/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, schedule_dma_static_yar_Blob_000000, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) -/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, schedule_dma_static_yar_Blob_000800, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) -/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, schedule_dma_static_yar_Blob_001000, 0x21CC, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN, 0x2136, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) -/* 0x04 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMB_SHOP_LADY, schedule_dma_static_yar_Blob_001800, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) -/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, schedule_dma_static_yar_Blob_002000, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) -/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, schedule_dma_static_yar_Blob_002800, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) -/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, schedule_dma_static_yar_Blob_003000, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) -/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, schedule_dma_static_yar_Blob_003800, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA) -/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, schedule_dma_static_yar_Blob_004000, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) -/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, schedule_dma_static_yar_Blob_004800, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) -/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, schedule_dma_static_yar_Blob_005000, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) -/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, schedule_dma_static_yar_Blob_005800, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) -/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, schedule_dma_static_yar_Blob_006000, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) -/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, schedule_dma_static_yar_Blob_006800, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) -/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, schedule_dma_static_yar_Blob_007000, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) -/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, schedule_dma_static_yar_Blob_007800, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG) -/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, schedule_dma_static_yar_Blob_008000, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) -/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, schedule_dma_static_yar_Blob_008800, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) -/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, schedule_dma_static_yar_Blob_009000, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) +/* 0x00 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMBERS, gBombersNotebookPhotoBombersTex, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) +/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, gBombersNotebookPhotoAnjuTex, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) +/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, gBombersNotebookPhotoKafeiTex, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) +/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, gBombersNotebookPhotoCuriosityShopManTex, 0x21CC, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN, 0x2136, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) +/* 0x04 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMB_SHOP_LADY, gBombersNotebookPhotoBombShopLadyTex, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) +/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, gBombersNotebookPhotoRomaniTex, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) +/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, gBombersNotebookPhotoCremiaTex, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) +/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, gBombersNotebookPhotoMayorDotourTex, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) +/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, gBombersNotebookPhotoMadameAromaTex, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA) +/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, gBombersNotebookPhotoTotoTex, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) +/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, gBombersNotebookPhotoGormanTex, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) +/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, gBombersNotebookPhotoPostmanTex, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) +/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, gBombersNotebookPhotoRosaSistersTex, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) +/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, gBombersNotebookPhotoToiletHandTex, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) +/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, gBombersNotebookPhotoAnjusGrandmotherTex, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) +/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, gBombersNotebookPhotoKamaroTex, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) +/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, gBombersNotebookPhotoGrogTex, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG) +/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, gBombersNotebookPhotoGormanBrothersTex, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) +/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, gBombersNotebookPhotoShiroTex, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) +/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, gBombersNotebookPhotoGuruGuruTex, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 76fb71192..2a182411b 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -371,8 +371,8 @@ void BombersNotebook_DrawColumns(Gfx** gfxP) { TexturePtr sBombersNotebookEventIconTextures[] = { gBombersNotebookEntryIconExclamationPointTex, - schedule_dma_static_yar_Blob_00AC00, - schedule_dma_static_yar_Blob_00AEA0, + gBombersNotebookEntryIconMaskTex, + gBombersNotebookEntryIconRibbonTex, }; s16 sBombersNotebookEntryIconColors[][3] = { { 255, 255, 0 }, @@ -550,7 +550,7 @@ void BombersNotebook_DrawEntries(Gfx** gfxP, s32 row, u32 rectTop) { *gfxP = gfx; } -#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) &photo, +#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) photo, TexturePtr sBombersNotebookPhotoTextures[] = { #include "tables/bombers_notebook/person_table.h" From 763830b185fbd18b6fa982ca15964824107112de Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:27:42 +0200 Subject: [PATCH 006/121] ovl_En_Dnh decompiled (#1289) * all func except func_80A50D40 * func_80A50D40 * decompiled * forgot an line * improvements * SkeletonHeader * format * forgot to remove wrong include * D_80A5143C and improvements * improvements * added limb * format * forgot the header * object_tro * OutName fix * improvements * THIS upcast * limb rename --- assets/xml/objects/object_tro.xml | 24 ++-- spec | 3 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 158 ++++++++++++++++++++-- src/overlays/actors/ovl_En_Dnh/z_en_dnh.h | 14 +- tools/disasm/variables.txt | 1 - 5 files changed, 171 insertions(+), 29 deletions(-) diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml index 773182c58..a5f2fb5c8 100644 --- a/assets/xml/objects/object_tro.xml +++ b/assets/xml/objects/object_tro.xml @@ -1,14 +1,18 @@  - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/spec b/spec index 8d23d42dd..3fb69b01f 100644 --- a/spec +++ b/spec @@ -2741,8 +2741,7 @@ beginseg name "ovl_En_Dnh" compress include "build/src/overlays/actors/ovl_En_Dnh/z_en_dnh.o" - include "build/data/ovl_En_Dnh/ovl_En_Dnh.data.o" - include "build/data/ovl_En_Dnh/ovl_En_Dnh.reloc.o" + include "build/src/overlays/actors/ovl_En_Dnh/ovl_En_Dnh_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 9413b046c..8f67395b3 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -16,9 +16,32 @@ void EnDnh_Update(Actor* thisx, PlayState* play); void EnDnh_Draw(Actor* thisx, PlayState* play); void func_80A50F38(EnDnh* this, PlayState* play); -void func_80A50F9C(EnDnh* this, PlayState* play); +void EnDnh_DoNothing(EnDnh* this, PlayState* play); + +UNK_TYPE D_80A51250[] = { + 0x000C0800, 0x080E0862, 0x0C111101, 0x10040005, 0x0E08670C, 0x10001402, 0x007A0019, 0x1000300E, 0x08590C25, + 0x000D0018, 0x0F08630C, 0x12060043, 0x00001300, 0x430C0700, 0x000E088D, 0x0C190007, 0x0F088D0C, 0x19000012, + 0x11191009, 0x00001000, 0x1A100016, 0x0E085A11, 0x1A100C0F, 0x085B0C0F, 0x085C0C05, 0x00060024, 0x00060E08, + 0x5B19FFEE, 0x300F085E, 0x0C08000A, 0x00050F08, 0x750C1014, 0xFFF60F08, 0x600C1211, 0x19100900, 0x0010310F, + 0x085F0C10, 0x00192000, 0x49001A10, 0x003D0E08, 0x68111A10, 0x0C0F0869, 0x0C0F086A, 0x0C0F086B, 0x0C0F086C, + 0x0C050000, 0x00190000, 0x300E086E, 0x1119201C, 0x03201D03, 0x401D0380, 0x1D04010C, 0x12090000, 0x10310E08, + 0x6D0C100E, 0x08700C19, 0xFFCB0019, 0x2000070E, 0x08710C19, 0xFFBB0E08, 0x720C0F08, 0x730C0500, 0x00001700, + 0x0008000A, 0x0006320F, 0x08750C10, 0x3014FFF6, 0x001A4000, 0x0919FFA8, 0x310E0874, 0x0C100E08, 0x76111920, + 0x1C03201D, 0x03401D03, 0x801D0401, 0x0C120900, 0x00100000, +}; + +UNK_TYPE D_80A51384[] = { + 0x0E08610C, + 0x16100000, +}; + +UNK_TYPE D_80A5138C[] = { + 0x1B034000, 0x67001A40, 0x003A1B03, 0x80001A0E, 0x087C0C00, 0x5B20000A, 0x0F087E0C, 0x115B2019, + 0x004E0F08, 0x7B0C1900, 0x470E087D, 0x0C120600, 0x0C000013, 0x000C0C07, 0x00000E08, 0x7E0C111A, + 0x4019002C, 0x1B038000, 0x0B0E087A, 0x0C0F087B, 0x0C19001C, 0x0E08780C, 0x12060005, 0x00001300, + 0x050C0700, 0x000E0879, 0x0C190004, 0x0E08770C, 0x1D03201D, 0x03401D03, 0x801D0401, 0x16100000, +}; -#if 0 ActorInit En_Dnh_InitVars = { ACTOR_EN_DNH, ACTORCAT_NPC, @@ -31,28 +54,133 @@ ActorInit En_Dnh_InitVars = { (ActorFunc)EnDnh_Draw, }; -#endif +static AnimationInfoS sAnimationInfo[] = { + { &gKioskKoumeHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +}; -extern UNK_TYPE D_06002950; +static TexturePtr sEyeTextures[] = { + gKioskKoumeEyeOpenTex, + gKioskKoumeEyeHalfTex, + gKioskKoumeEyeClosedTex, + gKioskKoumeEyeHalfTex, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50D40.s") +s32 func_80A50D40(Actor* actor, PlayState* play) { + func_800B7298(play, actor, PLAYER_CSMODE_WAIT); + if (CHECK_EVENTINF(EVENTINF_35)) { + play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 6); + } else { + play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 6); + } + gSaveContext.nextCutsceneIndex = 0; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE_SLOW; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); + CLEAR_EVENTINF(EVENTINF_50); + return 1; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50DF8.s") +void* func_80A50DF8(EnDnh* this, PlayState* play) { + switch (this->unk198) { + case 1: + return D_80A51384; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50E40.s") + case 2: + return D_80A5138C; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50EC0.s") + default: + return D_80A51250; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50F38.s") +s32 func_80A50E40(EnDnh* this, PlayState* play) { + if (!(this->unk18C & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { + return 0; + } + SubS_UpdateFlags(&this->unk18C, 0, 7); + this->msgEventScript = func_80A50DF8(this, play); + this->actionFunc = func_80A50F38; + return 1; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A50F9C.s") +s32 func_80A50EC0(EnDnh* this) { + if (DECR(this->blinkTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex >= ARRAY_COUNT(sEyeTextures)) { + this->blinkTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = 0; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/EnDnh_Init.s") +void func_80A50F38(EnDnh* this, PlayState* play) { + if (func_8010BF58(&this->actor, play, this->msgEventScript, this->msgEventCallback, &this->unk194)) { + SubS_UpdateFlags(&this->unk18C, 3, 7); + this->unk194 = 0; + this->unk198 = 0; + this->actionFunc = EnDnh_DoNothing; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/EnDnh_Destroy.s") +void EnDnh_DoNothing(EnDnh* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/EnDnh_Update.s") +void EnDnh_Init(Actor* thisx, PlayState* play) { + EnDnh* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/func_80A51168.s") + ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); + SkelAnime_Init(play, &this->skelAnime, &gKioskKoumeSkeleton, NULL, this->jointTable, this->morphTable, + KIOSK_KOUME_LIMB_MAX); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); + this->actor.shape.yOffset = 1100.0f; + if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 1)) { + SubS_UpdateFlags(&this->unk18C, 3, 7); + this->unk198 = 0; + } else { + SubS_UpdateFlags(&this->unk18C, 4, 7); + this->unk198 = CHECK_EVENTINF(EVENTINF_35) ? 2 : 1; + } + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { + this->actor.draw = NULL; + } + this->msgEventCallback = func_80A50D40; + this->unk194 = 0; + this->actionFunc = EnDnh_DoNothing; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnh/EnDnh_Draw.s") +void EnDnh_Destroy(Actor* thisx, PlayState* play) { +} + +void EnDnh_Update(Actor* thisx, PlayState* play) { + EnDnh* this = THIS; + + func_80A50E40(this, play); + this->actionFunc(this, play); + func_80A50EC0(this); + SkelAnime_Update(&this->skelAnime); + func_8013C964(&this->actor, play, 60.0f, 30.0f, 0, this->unk18C & 7); + Actor_SetFocus(&this->actor, 26.0f); +} + +s32 EnDnh_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnDnh* this = THIS; + + if (limbIndex == KIOSK_KOUME_LIMB_HEAD) { + Matrix_Translate(0.0f, this->actor.shape.yOffset, 0.0f, MTXMODE_APPLY); + } + return false; +} + +void EnDnh_Draw(Actor* thisx, PlayState* play) { + EnDnh* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDnh_OverrideLimbDraw, NULL, + &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h index c2331d777..b7acca739 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h @@ -2,15 +2,27 @@ #define Z_EN_DNH_H #include "global.h" +#include "objects/object_tro/object_tro.h" struct EnDnh; typedef void (*EnDnhActionFunc)(struct EnDnh*, PlayState*); +typedef s32 (*MsgEventFunc)(Actor*, PlayState*); typedef struct EnDnh { /* 0x000 */ Actor actor; /* 0x144 */ EnDnhActionFunc actionFunc; - /* 0x148 */ char unk_148[0x74]; + /* 0x148 */ SkelAnime skelAnime; + /* 0x18C */ u16 unk18C; + /* 0x190 */ s32 msgEventScript; + /* 0x194 */ s32 unk194; + /* 0x198 */ s16 unk198; + /* 0x19A */ UNK_TYPE1 pad19A[0x2]; + /* 0x19C */ s16 blinkTimer; + /* 0x19E */ s16 eyeTexIndex; + /* 0x1A0 */ MsgEventFunc msgEventCallback; + /* 0x1A4 */ Vec3s jointTable[KIOSK_KOUME_LIMB_MAX]; + /* 0x1B0 */ Vec3s morphTable[KIOSK_KOUME_LIMB_MAX]; } EnDnh; // size = 0x1BC #endif // Z_EN_DNH_H diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 08668478b..f55b89ea0 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2058,7 +2058,6 @@ 0x801D03C8:("D_801D03C8","UNK_TYPE1","",0x1), 0x801D03E8:("D_801D03E8","UNK_TYPE1","",0x1), 0x801D03F0:("D_801D03F0","UNK_TYPE1","",0x1), - 0x801D0401:("D_801D0401","UNK_TYPE1","",0x1), 0x801D0408:("D_801D0408","UNK_TYPE1","",0x1), 0x801D0428:("D_801D0428","UNK_TYPE1","",0x1), 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1), From 96a1d37084a5eb93540f712e55fcd3cb717c0ea3 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Wed, 21 Jun 2023 06:29:16 -0700 Subject: [PATCH 007/121] Cleanup of Shooting Gallery actors (#1302) * Change `EN_SYATEKI_*` enums/defines to `SG_*` * Name shooting gallery weekeventregs * Get rid of names on unions (this is what I wanted to begin with!) * Use ARRAY_COUNT(sGuayFlagsPerWave) instead of 3 * Actually give a proper name for SG_DEKU_GET_PARAM_FF00 * Use anon's suggestion for path param name * Remove comment that isn't true? What was I cooking back then * Animation naming stuff + comments * Tons of score and shooting game logic cleanup * Fix build issues * Some more Octorok docs * Use ANIMMODE enum in EnShn * Put a bug tag on the weird behavior in EnSyatekiWf --- assets/xml/objects/object_shn.xml | 6 +- include/functions.h | 2 +- include/z64save.h | 8 +- src/code/z_effect_soft_sprite_old_init.c | 4 +- src/code/z_sram_NES.c | 8 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 8 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 22 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.h | 8 +- .../z_en_syateki_dekunuts.c | 87 +++--- .../z_en_syateki_dekunuts.h | 14 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 250 ++++++++++-------- .../ovl_En_Syateki_Man/z_en_syateki_man.h | 41 ++- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 8 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 66 ++--- .../ovl_En_Syateki_Wf/z_en_syateki_wf.h | 6 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 4 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.h | 14 +- tools/disasm/variables.txt | 2 +- tools/weekeventregconvert.py | 8 +- 19 files changed, 311 insertions(+), 255 deletions(-) diff --git a/assets/xml/objects/object_shn.xml b/assets/xml/objects/object_shn.xml index c4b256f68..97d2e4854 100644 --- a/assets/xml/objects/object_shn.xml +++ b/assets/xml/objects/object_shn.xml @@ -79,11 +79,11 @@ - + - - + + diff --git a/include/functions.h b/include/functions.h index 39cb03363..52ba8b111 100644 --- a/include/functions.h +++ b/include/functions.h @@ -510,7 +510,7 @@ void EffectSsEnIce_Spawn(PlayState* play, Vec3f* pos, f32 scale, Vec3f* velocity void EffectSsFireTail_SpawnFlameOnPlayer(PlayState* play, f32 scale, s16 bodyPart, f32 colorIntensity); void EffectSsEnFire_SpawnVec3f(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, s16 params, s16 flags, s16 bodyPart); // void EffectSsEnFire_SpawnVec3s(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx); +void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIndex); void EffectSsDeadDb_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s32 life); void func_800B3030(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, s32 colorIndex); void EffectSsDeadDd_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s16 alphaStep, s32 life); diff --git a/include/z64save.h b/include/z64save.h index 0c0af023c..71cb6428b 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -845,8 +845,8 @@ typedef enum { #define WEEKEVENTREG_31_80 PACK_WEEKEVENTREG_FLAG(31, 0x80) #define WEEKEVENTREG_32_01 PACK_WEEKEVENTREG_FLAG(32, 0x01) -#define WEEKEVENTREG_32_02 PACK_WEEKEVENTREG_FLAG(32, 0x02) -#define WEEKEVENTREG_32_04 PACK_WEEKEVENTREG_FLAG(32, 0x04) +#define WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE PACK_WEEKEVENTREG_FLAG(32, 0x02) +#define WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE PACK_WEEKEVENTREG_FLAG(32, 0x04) #define WEEKEVENTREG_32_08 PACK_WEEKEVENTREG_FLAG(32, 0x08) #define WEEKEVENTREG_32_10 PACK_WEEKEVENTREG_FLAG(32, 0x10) #define WEEKEVENTREG_32_20 PACK_WEEKEVENTREG_FLAG(32, 0x20) @@ -1042,8 +1042,8 @@ typedef enum { #define WEEKEVENTREG_59_04 PACK_WEEKEVENTREG_FLAG(59, 0x04) #define WEEKEVENTREG_59_08 PACK_WEEKEVENTREG_FLAG(59, 0x08) -#define WEEKEVENTREG_59_10 PACK_WEEKEVENTREG_FLAG(59, 0x10) -#define WEEKEVENTREG_59_20 PACK_WEEKEVENTREG_FLAG(59, 0x20) +#define WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE PACK_WEEKEVENTREG_FLAG(59, 0x10) +#define WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE PACK_WEEKEVENTREG_FLAG(59, 0x20) #define WEEKEVENTREG_59_40 PACK_WEEKEVENTREG_FLAG(59, 0x40) #define WEEKEVENTREG_59_80 PACK_WEEKEVENTREG_FLAG(59, 0x80) #define WEEKEVENTREG_60_01 PACK_WEEKEVENTREG_FLAG(60, 0x01) diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index 17852c4c1..63b6861a7 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -925,14 +925,14 @@ void EffectSsEnFire_SpawnVec3s(PlayState* play, Actor* actor, Vec3s* pos, s16 sc // EffectSsExtra Spawn Functions -void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx) { +void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIndex) { EffectSsExtraInitParams initParams; Math_Vec3f_Copy(&initParams.pos, pos); Math_Vec3f_Copy(&initParams.velocity, velocity); Math_Vec3f_Copy(&initParams.accel, accel); initParams.scale = scale; - initParams.scoreIdx = scoreIdx; + initParams.scoreIndex = scoreIndex; EffectSs_Spawn(play, EFFECT_SS_EXTRA, 100, &initParams); } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index f03d38e45..79f2d7043 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -112,8 +112,9 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20), /* 32 */ - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) | - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04), + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE), /* 33 */ 0, /* 34 */ 0, /* 35 */ @@ -146,7 +147,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 58 */ 0, /* 59 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) | - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20), + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE), /* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10), /* 61 */ 0, /* 62 */ 0, diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 643509515..f9344ce05 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -70,10 +70,10 @@ void func_80AE6130(EnShn* this) { s32 func_80AE615C(EnShn* this, s32 animIndex) { static AnimationInfoS sAnimationInfo[] = { - { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, 0 }, - { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, -4 }, - { &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, 0 }, - { &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, -4 }, + { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gBurlyGuyChinScratchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBurlyGuyChinScratchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, }; s32 phi_v0 = 0; s32 phi_v1 = 0; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index 7972bed61..df20a3696 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -79,11 +79,11 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) { s32 i; path = syatekiMan->path; - while (path->customValue != SG_PATH_TYPE_CROW) { + while (path->customValue != SG_PATH_TYPE_GUAY) { path = &play->setupPathList[path->additionalPathIndex]; } - for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) { + for (i = 0; i < SG_GUAY_GET_INDEX(&this->actor); i++) { path = &play->setupPathList[path->additionalPathIndex]; } @@ -95,7 +95,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) { this->collider.elements[0].dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius; ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f); - if ((path == NULL) || (EN_SYATEKI_CROW_GET_INDEX(&this->actor) >= 0x80)) { + if ((path == NULL) || (SG_GUAY_GET_INDEX(&this->actor) >= 0x80)) { Actor_Kill(&this->actor); return; } @@ -133,7 +133,7 @@ void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true) && - (syatekiMan->guayFlags & (1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor)))) { + (syatekiMan->guayFlags & (1 << SG_GUAY_GET_INDEX(&this->actor)))) { EnSyatekiCrow_SetupWaitToMove(this); } else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) { this->isActive = true; @@ -168,10 +168,10 @@ void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this) { * How long the Guay should wait is controlled by its params. */ void EnSyatekiCrow_WaitToMove(EnSyatekiCrow* this, PlayState* play) { - if (((EN_SYATEKI_CROW_GET_WAIT_MOD(&this->actor) * 20) + 20) < this->waitTimer) { + if (((SG_GUAY_GET_WAIT_MOD(&this->actor) * 20) + 20) < this->waitTimer) { Actor_PlaySfx(this->actor.parent, NA_SE_EN_KAICHO_CRY); this->waitTimer = 0; - this->actor.speed = EN_SYATEKI_CROW_GET_SPEED_MOD(&this->actor) + 6.0f; + this->actor.speed = SG_GUAY_GET_SPEED_MOD(&this->actor) + 6.0f; this->actor.gravity = -0.5f; this->actionFunc = EnSyatekiCrow_Fly; } else { @@ -206,13 +206,13 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) { this->currentPointIndex++; } else { this->isActive = false; - syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor)); + syatekiMan->guayFlags &= ~(1 << SG_GUAY_GET_INDEX(&this->actor)); EnSyatekiCrow_SetupWaitForSignal(this); } SkelAnime_Update(&this->skelAnime); this->actor.shape.yOffset = (fabsf(this->skelAnime.curFrame - 3.0f) * 150.0f) + 1700.0f; - if ((syatekiMan->perGameVar1.guaySpawnTimer % 90) == 0) { + if ((syatekiMan->guayAppearTimer % 90) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY); } } @@ -220,7 +220,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) { void EnSyatekiCrow_SetupDead(EnSyatekiCrow* this) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; - syatekiMan->score += 60; + syatekiMan->score += SG_POINTS_GUAY; this->isActive = false; this->actor.speed *= Math_CosS(this->actor.world.rot.x); this->actor.velocity.y = 0.0f; @@ -245,7 +245,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) { if (this->deathTimer > 20) { func_800B3030(play, &this->actor.world.pos, &sZeroVec, &sZeroVec, this->actor.scale.x * 10000.0f, 0, 0); syatekiMan->guayHitCounter++; - syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor)); + syatekiMan->guayFlags &= ~(1 << SG_GUAY_GET_INDEX(&this->actor)); EnSyatekiCrow_SetupWaitForSignal(this); } @@ -262,7 +262,7 @@ void EnSyatekiCrow_UpdateDamage(EnSyatekiCrow* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); this->deathTimer = 0; this->collider.base.acFlags &= ~AC_HIT; - EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 1); + EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_60); EnSyatekiCrow_SetupDead(this); } else { this->collider.elements[0].dim.worldSphere.center.x = this->actor.world.pos.x; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h index f244b0b60..71f346645 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h @@ -4,10 +4,10 @@ #include "global.h" #include "objects/object_crow/object_crow.h" -#define EN_SYATEKI_CROW_GET_WAIT_MOD(thisx) ((thisx)->params & 0xF) -#define EN_SYATEKI_CROW_GET_SPEED_MOD(thisx) (((thisx)->params & 0xF0) >> 4) -#define EN_SYATEKI_CROW_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) -#define EN_SYATEKI_CROW_PARAMS(index, speedMod, waitMod) (((index << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF)) +#define SG_GUAY_GET_WAIT_MOD(thisx) ((thisx)->params & 0xF) +#define SG_GUAY_GET_SPEED_MOD(thisx) (((thisx)->params & 0xF0) >> 4) +#define SG_GUAY_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) +#define SG_GUAY_PARAMS(index, speedMod, waitMod) (((index << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF)) struct EnSyatekiCrow; diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index ae04a3401..c4d366718 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -35,9 +35,9 @@ void EnSyatekiDekunuts_GameEnd(EnSyatekiDekunuts* this, PlayState* play); void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play); typedef enum { - /* 0 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL, - /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP -} EnSyatekiDekunutsHeaddressType; + /* 0 */ SG_DEKU_HEADDRESS_TYPE_NORMAL, + /* 1 */ SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP +} ShootingGalleryDekuScrubHeaddressType; ActorInit En_Syateki_Dekunuts_InitVars = { ACTOR_EN_SYATEKI_DEKUNUTS, @@ -74,23 +74,23 @@ static ColliderCylinderInit sCylinderInit = { static Cylinder16 sBonusDekuScrubColliderDimensions[] = { { 24, 40, 0, { 0, 0, 0 } } }; typedef enum { - /* 0 */ EN_SYATEKI_DEKUNUTS_ANIM_UP, - /* 1 */ EN_SYATEKI_DEKUNUTS_ANIM_BURROW, - /* 2 */ EN_SYATEKI_DEKUNUTS_ANIM_IDLE, // unused - /* 3 */ EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND, - /* 4 */ EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE, - /* 5 */ EN_SYATEKI_DEKUNUTS_ANIM_DIE, - /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW // unused -} EnSyatekiDekunutsAnimation; + /* 0 */ SG_DEKU_ANIM_UP, + /* 1 */ SG_DEKU_ANIM_BURROW, + /* 2 */ SG_DEKU_ANIM_IDLE, // unused + /* 3 */ SG_DEKU_ANIM_LOOK_AROUND, + /* 4 */ SG_DEKU_ANIM_DAMAGE, + /* 5 */ SG_DEKU_ANIM_DIE, + /* 6 */ SG_DEKU_ANIM_UNBURROW // unused +} ShootingGalleryDekuScrubAnimation; static AnimationInfo sAnimationInfo[] = { - { &gDekuScrubUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gDekuScrubBurrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gDekuScrubIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, - { &gDekuScrubLookAroundAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, - { &gDekuScrubDamageAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gDekuScrubDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gDekuScrubUnburrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gDekuScrubUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_UP + { &gDekuScrubBurrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_BURROW + { &gDekuScrubIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_DEKU_ANIM_IDLE + { &gDekuScrubLookAroundAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_DEKU_ANIM_LOOK_AROUND + { &gDekuScrubDamageAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_DAMAGE + { &gDekuScrubDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_DIE + { &gDekuScrubUnburrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_UNBURROW }; static InitChainEntry sInitChain[] = { @@ -112,20 +112,20 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { + if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) { Actor_SetScale(&this->actor, 0.01f); this->collider.dim = sBonusDekuScrubColliderDimensions[0]; - pathType = SG_PATH_TYPE_SCRUB_BONUS; + pathType = SG_PATH_TYPE_DEKU_BONUS; } else { Actor_SetScale(&this->actor, 0.02f); - pathType = SG_PATH_TYPE_SCRUB_NORMAL; + pathType = SG_PATH_TYPE_DEKU_NORMAL; } while (path->customValue != pathType) { path = &play->setupPathList[path->additionalPathIndex]; } - for (i = 0; i < EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(&this->actor); i++) { + for (i = 0; i < SG_DEKU_GET_ADDITIONAL_PATH_INDEX_LIMIT(&this->actor); i++) { path = &play->setupPathList[path->additionalPathIndex]; } @@ -147,7 +147,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { } this->flowerPos = Lib_SegmentedToVirtual(path->points); - this->index = EN_SYATEKI_DEKUNUTS_GET_INDEX(&this->actor); + this->index = SG_DEKU_GET_INDEX(&this->actor); this->flowerCount = path->count; this->timer = 0; this->unk_1DC = 0; @@ -172,7 +172,7 @@ void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this) { this->timer = 0; this->unk_1DC = 0; - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { + if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) { this->isAlive = true; } @@ -193,7 +193,7 @@ void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play) { } if (!syatekiMan->dekuScrubFlags && !syatekiMan->guayFlags && - (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS)) { + (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS)) { this->isAlive = true; } } @@ -215,10 +215,10 @@ void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this) { this->timeToBurrow = 140 - (syatekiMan->currentWave * 20); if ((syatekiMan->currentWave % 2) != 0) { - this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP; + this->headdressType = SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP; this->headdressRotZ = 0; } else { - this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL; + this->headdressType = SG_DEKU_HEADDRESS_TYPE_NORMAL; } this->actionFunc = EnSyatekiDekunuts_WaitToStart; @@ -259,7 +259,7 @@ void EnSyatekiDekunuts_WaitToEmerge(EnSyatekiDekunuts* this, PlayState* play) { void EnSyatekiDekunuts_SetupEmerge(EnSyatekiDekunuts* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_UP); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_UP); this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer; this->actionFunc = EnSyatekiDekunuts_Emerge; @@ -275,7 +275,7 @@ void EnSyatekiDekunuts_Emerge(EnSyatekiDekunuts* this, PlayState* play) { EnSyatekiDekunuts_SetupLookAround(this); } - if (this->headdressType == EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP) { + if (this->headdressType == SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP) { Math_SmoothStepToS(&this->headdressRotZ, -0x8000, 5, 0x1000, 0x100); } @@ -283,8 +283,8 @@ void EnSyatekiDekunuts_Emerge(EnSyatekiDekunuts* this, PlayState* play) { } void EnSyatekiDekunuts_SetupLookAround(EnSyatekiDekunuts* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND); - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_LOOK_AROUND); + if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) { this->actionFunc = EnSyatekiDekunuts_LookAround; } else { this->actionFunc = EnSyatekiDekunuts_BonusLookAround; @@ -325,7 +325,7 @@ void EnSyatekiDekunuts_BonusLookAround(EnSyatekiDekunuts* this, PlayState* play) } void EnSyatekiDekunuts_SetupBurrow(EnSyatekiDekunuts* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_BURROW); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_BURROW); this->actionFunc = EnSyatekiDekunuts_Burrow; } @@ -369,19 +369,19 @@ void EnSyatekiDekunuts_SetupDead(EnSyatekiDekunuts* this, PlayState* play) { static Vec3f sAccel = { 0.0f, 0.0f, 0.0f }; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { - EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2); - syatekiMan->score += 100; - syatekiMan->perGameVar2.bonusDekuScrubHitCounter++; + if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) { + EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_100); + syatekiMan->score += SG_POINTS_DEKU_BONUS; + syatekiMan->bonusDekuScrubHitCounter++; } else { - EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 0); - syatekiMan->score += 30; + EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_30); + syatekiMan->score += SG_POINTS_DEKU_NORMAL; syatekiMan->dekuScrubHitCounter++; } Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE); this->isAlive = false; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_DAMAGE); this->timer = 160; this->actionFunc = EnSyatekiDekunuts_Dead; } @@ -393,7 +393,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { if (this->timer == 160) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DIE); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_DIE); Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DEAD); this->timer--; } else if (this->timer < 160) { @@ -407,7 +407,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) { pos.y = this->actor.world.pos.y + 10.0f; EffectSsHahen_SpawnBurst(play, &pos, 3.0f, 0, 12, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { + if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) { syatekiMan->dekuScrubFlags &= ~(1 << this->index); } @@ -427,7 +427,7 @@ void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play) { if ((this->actionFunc != EnSyatekiDekunuts_WaitForSignal) && (this->timer < this->timeToBurrow) && (this->timer > 10)) { if ((this->collider.base.acFlags & AC_HIT) && (this->isAlive == true)) { - if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { + if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } else { Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); @@ -450,8 +450,7 @@ s32 EnSyatekiDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dLi Actor* thisx) { EnSyatekiDekunuts* this = THIS; - if ((limbIndex == DEKU_SCRUB_LIMB_HEADDRESS) && - (this->headdressType == EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP)) { + if ((limbIndex == DEKU_SCRUB_LIMB_HEADDRESS) && (this->headdressType == SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP)) { rot->z += this->headdressRotZ; } diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h index ce3e9ba90..2a103aa98 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h @@ -4,15 +4,15 @@ #include "global.h" #include "objects/object_dekunuts/object_dekunuts.h" -#define EN_SYATEKI_DEKUNUTS_GET_TYPE(thisx) ((thisx)->params & 0xF) -#define EN_SYATEKI_DEKUNUTS_GET_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) -#define EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) -#define EN_SYATEKI_DEKUNUTS_PARAMS(unkFF00, index, type) (((unkFF00 << 8) & 0xFF00) | ((index << 4) & 0xF0) | (type & 0xF)) +#define SG_DEKU_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define SG_DEKU_GET_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) +#define SG_DEKU_GET_ADDITIONAL_PATH_INDEX_LIMIT(thisx) (((thisx)->params & 0xFF00) >> 8) +#define SG_DEKU_PARAMS(additionalPathIndexLimit, index, type) (((additionalPathIndexLimit << 8) & 0xFF00) | ((index << 4) & 0xF0) | (type & 0xF)) typedef enum { - /* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points - /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS // Worth 100 points -} EnSyatekiDekunutsType; + /* 0 */ SG_DEKU_TYPE_NORMAL, // Worth 30 points + /* 1 */ SG_DEKU_TYPE_BONUS // Worth 100 points +} ShootingGalleryDekuScrubType; struct EnSyatekiDekunuts; 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 3e9ac9a40..c9c38a0ec 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 @@ -50,11 +50,42 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play); #define TALK_FLAG_SWAMP_HAS_SPOKEN_WITH_HUMAN (1 << 0) #define TALK_FLAG_SWAMP_HAS_EXPLAINED_THE_RULES (1 << 1) +// This defines the configuration of a single wave of Octoroks in the Town Shooting Gallery. These are +// arranged in the same columns and rows that appear in-game; the player stands in the center column, and +// the Octorok with an index of 7 appears directly in front of them like so: +// 0 1 2 +// 3 4 5 +// 6 7 8 +// Player #define OCTO_FLAGS(type0, type1, type2, type3, type4, type5, type6, type7, type8) \ (SG_OCTO_SET_FLAG(type0, 0) | SG_OCTO_SET_FLAG(type1, 1) | SG_OCTO_SET_FLAG(type2, 2) | \ SG_OCTO_SET_FLAG(type3, 3) | SG_OCTO_SET_FLAG(type4, 4) | SG_OCTO_SET_FLAG(type5, 5) | \ SG_OCTO_SET_FLAG(type6, 6) | SG_OCTO_SET_FLAG(type7, 7) | SG_OCTO_SET_FLAG(type8, 8)) +// These defines assume that sNormalSwampTargetActorList is used to spawn actors and that the logic of +// EnSyatekiMan_Swamp_RunGame is not modified; in other words, it assumes that each wave consists of five +// Deku Scrubs that the player must shoot and three Guays that the player can either shoot or let escape. +// Once all Deku Scrubs and Guays have been shot or escape, the next wave starts. +#define SG_SWAMP_WAVE_COUNT 4 +#define SG_SWAMP_DEKUS_PER_WAVE 5 +#define SG_SWAMP_GUAYS_PER_WAVE 3 +#define SG_SWAMP_BONUS_DEKU_COUNT 2 + +// This is the score the player will receive if they hit every single Deku Scrub (both normal and bonus), Guay, and +// Wolfos. There are two conditions for a Wolfos to appear, hence why their point value appears twice; one Wolfos +// will appear after shooting two waves of Deku Scrubs, and one Wolfos will appear after shooting one wave of Guays. +// Assuming the point values, actor list, and shooting game logic are unmodified, this should total to 2120 points. +#define SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS \ + (SG_POINTS_DEKU_NORMAL * (SG_SWAMP_DEKUS_PER_WAVE * SG_SWAMP_WAVE_COUNT) + \ + SG_POINTS_GUAY * (SG_SWAMP_GUAYS_PER_WAVE * SG_SWAMP_WAVE_COUNT) + \ + SG_POINTS_DEKU_BONUS * SG_SWAMP_BONUS_DEKU_COUNT + SG_POINTS_WOLFOS * SG_SWAMP_WAVE_COUNT + \ + SG_POINTS_WOLFOS * (SG_SWAMP_WAVE_COUNT / 2)) + +// To obtain the Heart Piece from the Swamp Shooting Gallery, the player not only needs to achieve a perfect score, +// but they must also have at least six seconds remaining on the minigame timer. If the player has already obtained +// the Heart Piece, then this score will be used instead to determine if the player should get a Purple Rupee. +#define SG_SWAMP_HEART_PIECE_SCORE (SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS + (6 * SG_BONUS_POINTS_PER_SECOND)) + ActorInit En_Syateki_Man_InitVars = { ACTOR_EN_SYATEKI_MAN, ACTORCAT_NPC, @@ -68,22 +99,23 @@ ActorInit En_Syateki_Man_InitVars = { }; typedef enum { - /* 0 */ EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE, - /* 1 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_LOOP, - /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END -} EnSyatekiManAnimation; + /* 0 */ SG_MAN_ANIM_HANDS_ON_TABLE, + /* 1 */ SG_MAN_ANIM_HEAD_SCRATCH_LOOP, + /* 2 */ SG_MAN_ANIM_HEAD_SCRATCH_END +} ShootingGalleryManAnimation; static AnimationInfo sAnimationInfo[] = { - { &gBurlyGuyHandsOnTableAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &gSwampShootingGalleryManHeadScratchLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &gSwampShootingGalleryManHeadScratchEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gBurlyGuyHandsOnTableAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_MAN_ANIM_HANDS_ON_TABLE + { &gBurlyGuyHeadScratchLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_MAN_ANIM_HEAD_SCRATCH_LOOP + { &gBurlyGuyHeadScratchEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // SG_MAN_ANIM_HEAD_SCRATCH_END }; /** * In the Swamp Shooting Gallery, there are four waves of Guays. * For each wave, these flags are used to control which Guays appear. + * The number of flags per wave should be exactly SG_SWAMP_GUAYS_PER_WAVE for all waves. */ -static s16 sGuayFlagsPerWave[] = { +static s16 sGuayFlagsPerWave[SG_SWAMP_WAVE_COUNT] = { (1 << 7) | (1 << 6) | (1 << 0), (1 << 9) | (1 << 8) | (1 << 1), (1 << 4) | (1 << 3) | (1 << 0), @@ -97,32 +129,25 @@ typedef struct { } SwampTargetActorEntry; // size = 0x14 static SwampTargetActorEntry sNormalSwampTargetActorList[] = { - { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(1, 3, 0) }, - { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(0, 2, 0) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 2, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 3, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 4, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(5, 2, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(6, 0, 1) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(7, 0, 2) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(8, 0, 1) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(9, 0, 2) }, + { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(1, 3, 0) }, + { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(0, 2, 0) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_NORMAL) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_NORMAL) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 2, SG_DEKU_TYPE_NORMAL) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 3, SG_DEKU_TYPE_NORMAL) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 4, SG_DEKU_TYPE_NORMAL) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_BONUS) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_BONUS) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(5, 2, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(6, 0, 1) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(7, 0, 2) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(8, 0, 1) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(9, 0, 2) }, }; /** @@ -130,22 +155,20 @@ static SwampTargetActorEntry sNormalSwampTargetActorList[] = { * Without any "normal" Deku Scrubs, the game will not progress beyond the first wave. */ static SwampTargetActorEntry sUnusedSwampTargetActorList[] = { - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) }, - { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, - EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 2) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 2) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 3) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 3) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 3) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 4) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 4) }, - { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 4) }, - { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(0, 2, 5) }, - { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(1, 3, 6) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 0) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 0) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_BONUS) }, + { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_BONUS) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 2) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 2) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 3) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 3) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 3) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 4) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 4) }, + { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 4) }, + { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(0, 2, 5) }, + { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(1, 3, 6) }, }; static SwampTargetActorEntry* sSwampTargetActorLists[] = { @@ -179,14 +202,14 @@ void EnSyatekiMan_Swamp_SpawnTargetActors(EnSyatekiMan* this, PlayState* play2, void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { EnSyatekiMan* this = THIS; s32 pad; - Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH_INDEX(&this->actor)]; + Path* path = &play->setupPathList[SG_MAN_GET_PATH_INDEX(&this->actor)]; s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex]; this->actor.targetMode = 1; Actor_SetScale(&this->actor, 0.01f); if (play->sceneId == SCENE_SYATEKI_MORI) { - SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gSwampShootingGalleryManHeadScratchLoopAnim, - this->jointTable, this->morphTable, BURLY_GUY_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHeadScratchLoopAnim, this->jointTable, + this->morphTable, BURLY_GUY_LIMB_MAX); } else { SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHandsOnTableAnim, this->jointTable, this->morphTable, BURLY_GUY_LIMB_MAX); @@ -197,7 +220,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->talkWaitTimer = 15; this->flagsIndex = 0; - this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; + this->lastHitOctorokType = SG_OCTO_TYPE_NONE; this->octorokFlags = 0; this->dekuScrubFlags = 0; this->guayFlags = 0; @@ -265,7 +288,7 @@ void EnSyatekiMan_Swamp_Idle(EnSyatekiMan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { u16 faceReactionTextId; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_MAN_ANIM_HEAD_SCRATCH_END); faceReactionTextId = Text_GetFaceReaction(play, FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN); if (faceReactionTextId != 0) { Message_StartTextbox(play, faceReactionTextId, &this->actor); @@ -482,9 +505,9 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) { break; } - if (this->skelAnime.animation == &gSwampShootingGalleryManHeadScratchEndAnim) { + if (this->skelAnime.animation == &gBurlyGuyHeadScratchEndAnim) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_MAN_ANIM_HANDS_ON_TABLE); } } } @@ -858,20 +881,22 @@ void EnSyatekiMan_Swamp_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_HasParent(&this->actor, play)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) { - SET_WEEKEVENTREG(WEEKEVENTREG_59_10); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02) && (this->score >= 2180)) { - SET_WEEKEVENTREG(WEEKEVENTREG_32_02); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE); + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE) && + (this->score >= SG_SWAMP_HEART_PIECE_SCORE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE); } this->actor.parent = NULL; this->actionFunc = EnSyatekiMan_Swamp_GiveReward; } else { - if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) { + if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE)) { Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f); - } else if (this->score < 2180) { + } else if (this->score < SG_SWAMP_HEART_PIECE_SCORE) { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 500.0f, 100.0f); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE)) { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); @@ -913,14 +938,14 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { if (this->prevTextId == 0x407) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { - SET_WEEKEVENTREG(WEEKEVENTREG_59_20); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE); } } if ((this->prevTextId == 0x405) || (this->prevTextId == 0x406)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) { - SET_WEEKEVENTREG(WEEKEVENTREG_32_04); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE); } } @@ -928,12 +953,13 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Town_GiveReward; } else { if (this->prevTextId == 0x407) { - if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { + if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) { Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE)) { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f); @@ -1012,11 +1038,11 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) { this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0); this->guayFlags = 0; this->wolfosFlags = 0; - this->perGameVar1.guaySpawnTimer = 0; + this->guayAppearTimer = 0; this->dekuScrubHitCounter = 0; this->guayHitCounter = 0; this->currentWave = 0; - this->perGameVar2.bonusDekuScrubHitCounter = 0; + this->bonusDekuScrubHitCounter = 0; Interface_StartTimer(TIMER_ID_MINIGAME_1, 100); this->actor.draw = NULL; this->actionFunc = EnSyatekiMan_Swamp_RunGame; @@ -1024,72 +1050,80 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) { } void EnSyatekiMan_Swamp_RunGame(EnSyatekiMan* this, PlayState* play) { - static s16 sHasSpawnedGuaysForThisWave = false; + static s16 sHasSignaledGuaysForThisWave = false; Player* player = GET_PLAYER(play); - if (((this->dekuScrubFlags == 0) || (this->perGameVar1.guaySpawnTimer > 140)) && !sHasSpawnedGuaysForThisWave && - (this->currentWave < 4)) { - // Spawn three guays after the player has killed all Deku Scrubs, or after 140 frames. - sHasSpawnedGuaysForThisWave = true; - this->perGameVar1.guaySpawnTimer = 0; + if (((this->dekuScrubFlags == 0) || (this->guayAppearTimer > 140)) && !sHasSignaledGuaysForThisWave && + (this->currentWave < SG_SWAMP_WAVE_COUNT)) { + // Make three Guays appear after the player has killed all Deku Scrubs, or after 140 frames. + sHasSignaledGuaysForThisWave = true; + this->guayAppearTimer = 0; Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND); this->guayFlags = sGuayFlagsPerWave[this->flagsIndex]; - if (this->flagsIndex == 3) { + if (this->flagsIndex == ARRAY_COUNT(sGuayFlagsPerWave) - 1) { this->flagsIndex = 0; } else { this->flagsIndex++; } - } else if ((this->guayFlags == 0) && (this->dekuScrubFlags == 0) && (sHasSpawnedGuaysForThisWave == true) && - (this->currentWave < 4)) { + } else if ((this->guayFlags == 0) && (this->dekuScrubFlags == 0) && (sHasSignaledGuaysForThisWave == true) && + (this->currentWave < SG_SWAMP_WAVE_COUNT)) { // Once all Deku Scrubs and Guays in this wave have either disappeared or died, move on to the next wave. - if (this->guayHitCounter < 3) { + if (this->guayHitCounter < SG_SWAMP_GUAYS_PER_WAVE) { this->guayHitCounter = 0; } - this->perGameVar1.guaySpawnTimer = 0; - sHasSpawnedGuaysForThisWave = false; + this->guayAppearTimer = 0; + sHasSignaledGuaysForThisWave = false; this->currentWave++; - if (this->currentWave < 4) { + if (this->currentWave < SG_SWAMP_WAVE_COUNT) { this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0); } } - if (this->guayHitCounter == 3) { + // Makes a Wolfos appear after the player has shot all the Guays in the current wave. + if (this->guayHitCounter == SG_SWAMP_GUAYS_PER_WAVE) { this->guayHitCounter = 0; this->wolfosFlags |= 1; } - if (this->dekuScrubHitCounter == 10) { + // Makes a Wolfos appear after the player has shot two waves of Deku Scrubs. + if (this->dekuScrubHitCounter == SG_SWAMP_DEKUS_PER_WAVE * 2) { this->dekuScrubHitCounter = 0; this->wolfosFlags |= 2; } - this->perGameVar1.guaySpawnTimer++; + this->guayAppearTimer++; if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) { + // End the game because the timer ran out. gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0); gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; this->actor.draw = EnSyatekiMan_Draw; this->flagsIndex = 0; this->currentWave = 0; player->stateFlags1 |= PLAYER_STATE1_20; - sHasSpawnedGuaysForThisWave = false; + sHasSignaledGuaysForThisWave = false; Audio_StopSubBgm(); this->actionFunc = EnSyatekiMan_Swamp_EndGame; - } else if ((this->currentWave == 4) && (this->wolfosFlags == 0) && - (this->perGameVar2.bonusDekuScrubHitCounter == 2)) { + } else if ((this->currentWave == SG_SWAMP_WAVE_COUNT) && (this->wolfosFlags == 0) && + (this->bonusDekuScrubHitCounter == SG_SWAMP_BONUS_DEKU_COUNT)) { + // End the game because the player has nothing left to shoot. This doesn't mean the + // player actually hit everything, since Guays and Wolfos can escape. this->actor.draw = EnSyatekiMan_Draw; this->flagsIndex = 0; this->currentWave = 0; player->stateFlags1 |= PLAYER_STATE1_20; - sHasSpawnedGuaysForThisWave = false; + sHasSignaledGuaysForThisWave = false; Audio_StopSubBgm(); this->shootingGameState = SG_GAME_STATE_GIVING_BONUS; - if (this->score == 2120) { + + if (this->score == SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS) { Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_2); gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_6; this->actionFunc = EnSyatekiMan_Swamp_AddBonusPoints; } else { + // If the player ran out of things to shoot but did *not* get a perfect score, then + // they must have missed a Guay or Wolfos at some point; don't award any bonus points. gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; this->actionFunc = EnSyatekiMan_Swamp_EndGame; } @@ -1108,7 +1142,7 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) { } this->talkWaitTimer = 15; - if (this->score >= 2120) { + if (this->score >= SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS) { // Perfect! Take this! Message_StartTextbox(play, 0xA34, &this->actor); this->prevTextId = 0xA34; @@ -1162,8 +1196,8 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) { sBonusTimer = 0; } else if (sBonusTimer > 10) { gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += SECONDS_TO_TIMER(1); - play->interfaceCtx.minigamePoints += 10; - this->score += 10; + play->interfaceCtx.minigamePoints += SG_BONUS_POINTS_PER_SECOND; + this->score += SG_BONUS_POINTS_PER_SECOND; Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); sBonusTimer = 0; } else { @@ -1222,8 +1256,8 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; this->score = 0; this->flagsIndex = 0; - this->perGameVar1.octorokState = SG_OCTO_STATE_INITIAL; - this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; + this->octorokState = SG_OCTO_STATE_INITIAL; + this->lastHitOctorokType = SG_OCTO_TYPE_NONE; sGameStartTimer = 30; Interface_StartTimer(TIMER_ID_MINIGAME_1, 75); this->actor.draw = NULL; @@ -1321,36 +1355,36 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { // Octoroks begin hiding four seconds after a wave begins. if (waveTimer < 100) { - this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING; + this->octorokState = SG_OCTO_STATE_HIDING; } - if (this->perGameVar2.lastHitOctorokType != SG_OCTO_TYPE_NONE) { - if (this->perGameVar2.lastHitOctorokType == SG_OCTO_TYPE_BLUE) { + if (this->lastHitOctorokType != SG_OCTO_TYPE_NONE) { + if (this->lastHitOctorokType == SG_OCTO_TYPE_BLUE) { gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] -= SECONDS_TO_TIMER_PRECISE(2, 50); sModFromLosingTime = (sModFromLosingTime + 25) % 50; } - this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; + this->lastHitOctorokType = SG_OCTO_TYPE_NONE; } - if (this->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING) { - this->perGameVar1.octorokState++; + if (this->octorokState == SG_OCTO_STATE_APPEARING) { + this->octorokState++; } // A new wave of Octoroks should appear every five seconds. However, we need to take into account // that the player might have lost time from hitting Blue Octoroks, so we do something similar to // what was done with waveTimer above. - if ((sModFromLosingTime == (timer % 50)) && (this->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL)) { + if ((sModFromLosingTime == (timer % 50)) && (this->octorokState >= SG_OCTO_STATE_INITIAL)) { if (this->flagsIndex < ARRAY_COUNT(sOctorokFlagsPerWave)) { this->octorokFlags = sOctorokFlagsPerWave[this->flagsIndex++]; Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND); - this->perGameVar1.octorokState = SG_OCTO_STATE_APPEARING; + this->octorokState = SG_OCTO_STATE_APPEARING; } } if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) { this->flagsIndex = 0; - this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING; + this->octorokState = SG_OCTO_STATE_HIDING; gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0); gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; player->stateFlags1 |= PLAYER_STATE1_20; @@ -1374,7 +1408,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { this->talkWaitTimer = 15; if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) { // You got a new record! Message_StartTextbox(play, 0x407, &this->actor); this->prevTextId = 0x407; diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h index 28d19871b..2f6fe13f5 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h @@ -3,12 +3,29 @@ #include "global.h" #include "objects/object_shn/object_shn.h" +#include "overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h" struct EnSyatekiMan; typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*); -#define EN_SYATEKI_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) +#define SG_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) + +// These values are used to modify the shooting gallery man's internal score. They are +// defined in terms of the scores used by EffectSsExtra because EffectSsExtra_Update +// updates the score displayed to the player, and defining them like this will prevent +// these two different scores from becoming desynchronized. If you intend to modify these +// values, then you'll also need to make sure that EffectSsExtra_Spawn in the appropriate +// actor is called with the correct parameter for the index; failing to do this will +// cause the two different score variables to fall out of sync. +#define SG_POINTS_DEKU_NORMAL EXTRA_SCORE_30 +#define SG_POINTS_DEKU_BONUS EXTRA_SCORE_100 +#define SG_POINTS_GUAY EXTRA_SCORE_60 +#define SG_POINTS_WOLFOS EXTRA_SCORE_100 + +// After getting a perfect score in the Swamp Shooting Gallery, the player is rewarded +// additional points for every second remaining on the minigame timer. +#define SG_BONUS_POINTS_PER_SECOND 10 typedef enum { /* 0 */ SG_GAME_STATE_NONE, // None of the states below apply. @@ -22,17 +39,17 @@ typedef enum { } ShootingGalleryGameState; typedef enum { - /* 0 */ SG_OCTO_STATE_APPEARING, - /* 1 */ SG_OCTO_STATE_APPEARED, - /* 70 */ SG_OCTO_STATE_INITIAL = 70, - /* 80 */ SG_OCTO_STATE_HIDING = 80 + /* 0 */ SG_OCTO_STATE_APPEARING, // The Octoroks will begin to appear on the next frame. + /* 1 */ SG_OCTO_STATE_APPEARED, // The Octoroks are appearing from underwater or have already appeared and are floating. + /* 70 */ SG_OCTO_STATE_INITIAL = 70, // The initial state of the game. The Octoroks have not appeared yet. + /* 80 */ SG_OCTO_STATE_HIDING = 80 // The Octoroks are in the process of hiding underwater. } ShootingGalleryOctorokState; typedef enum { - /* 0 */ SG_PATH_TYPE_CROW, - /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL, + /* 0 */ SG_PATH_TYPE_GUAY, + /* 1 */ SG_PATH_TYPE_DEKU_NORMAL, /* 2 */ SG_PATH_TYPE_WOLFOS, - /* 3 */ SG_PATH_TYPE_SCRUB_BONUS + /* 3 */ SG_PATH_TYPE_DEKU_BONUS } ShootingGalleryPathType; typedef struct EnSyatekiMan { @@ -41,7 +58,7 @@ typedef struct EnSyatekiMan { /* 0x188 */ EnSyatekiManActionFunc actionFunc; /* 0x18C */ Path* path; /* 0x190 */ s32 octorokFlags; - /* 0x194 */ s32 swampTargetActorListIndex; // used but never initialized, so the value is implicitly always 0 + /* 0x194 */ s32 swampTargetActorListIndex; /* 0x198 */ Vec3s jointTable[BURLY_GUY_LIMB_MAX]; /* 0x1F8 */ Vec3s morphTable[BURLY_GUY_LIMB_MAX]; /* 0x258 */ Vec3s headRot; @@ -51,13 +68,13 @@ typedef struct EnSyatekiMan { /* 0x268 */ UNK_TYPE1 unk268[0x2]; /* 0x26A */ s16 shootingGameState; /* 0x26C */ union { - s16 guaySpawnTimer; + s16 guayAppearTimer; s16 octorokState; - } perGameVar1; + }; /* 0x26E */ union { s16 bonusDekuScrubHitCounter; s16 lastHitOctorokType; - } perGameVar2; + }; /* 0x270 */ s16 talkWaitTimer; /* 0x272 */ s16 dekuScrubFlags; /* 0x274 */ s16 guayFlags; diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 5673439cf..114a5fe22 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -249,7 +249,7 @@ void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play) { // In practice, if the Octorok is floating, then the octorokState is either SG_OCTO_STATE_APPEARED or // SG_OCTO_STATE_HIDING. Only the latter state is greater than SG_OCTO_STATE_INITIAL, so that's what // this check is looking for. - if (syatekiMan->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL) { + if (syatekiMan->octorokState >= SG_OCTO_STATE_INITIAL) { EnSyatekiOkuta_SetupHide(this); } } @@ -405,7 +405,7 @@ void EnSyatekiOkuta_CheckForSignal(EnSyatekiOkuta* this, PlayState* play) { if ((this->actionFunc != EnSyatekiOkuta_Float) && (this->actionFunc != EnSyatekiOkuta_Appear) && (syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && - (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING)) { + (syatekiMan->octorokState == SG_OCTO_STATE_APPEARING)) { type = SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_GET_INDEX(&this->actor)); if (type > SG_OCTO_TYPE_NONE) { Actor_SetScale(&this->actor, 0.01f); @@ -434,10 +434,10 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); play->interfaceCtx.minigamePoints++; syatekiMan->score++; - syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_RED; + syatekiMan->lastHitOctorokType = SG_OCTO_TYPE_RED; } else { Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR); - syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_BLUE; + syatekiMan->lastHitOctorokType = SG_OCTO_TYPE_BLUE; } EnSyatekiOkuta_SetupDie(this); 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 8a9696767..7f1f3cd4a 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 @@ -114,23 +114,23 @@ ActorInit En_Syateki_Wf_InitVars = { }; typedef enum { - /* 0 */ EN_SYATEKI_WF_ANIM_WAIT, // unused - /* 1 */ EN_SYATEKI_WF_ANIM_RUN, - /* 2 */ EN_SYATEKI_WF_ANIM_JUMP, - /* 3 */ EN_SYATEKI_WF_ANIM_LAND, - /* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused - /* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED, - /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER -} EnSyatekiWfAnimation; + /* 0 */ SG_WOLFOS_ANIM_WAIT, // unused + /* 1 */ SG_WOLFOS_ANIM_RUN, + /* 2 */ SG_WOLFOS_ANIM_JUMP, + /* 3 */ SG_WOLFOS_ANIM_LAND, + /* 4 */ SG_WOLFOS_ANIM_BACKFLIP, // unused + /* 5 */ SG_WOLFOS_ANIM_DAMAGED, + /* 6 */ SG_WOLFOS_ANIM_REAR_UP_FALL_OVER +} ShootingGalleryWolfosAnimation; static AnimationInfo sAnimationInfo[] = { - { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, - { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f }, - { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f }, - { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f }, - { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_WOLFOS_ANIM_WAIT + { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_WOLFOS_ANIM_RUN + { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f }, // SG_WOLFOS_ANIM_JUMP + { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f }, // SG_WOLFOS_ANIM_LAND + { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_WOLFOS_ANIM_BACKFLIP + { &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f }, // SG_WOLFOS_ANIM_DAMAGED + { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_WOLFOS_ANIM_REAR_UP_FALL_OVER }; static InitChainEntry sInitChain[] = { @@ -150,7 +150,7 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) { path = &play->setupPathList[path->additionalPathIndex]; } - for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) { + for (i = 0; i < SG_WOLFOS_GET_INDEX(&this->actor); i++) { path = &play->setupPathList[path->additionalPathIndex]; } @@ -224,7 +224,7 @@ void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this) { this->actor.draw = NULL; this->currentPointIndex = 1; this->isActive = false; - syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_INDEX(&this->actor)); + syatekiMan->wolfosFlags &= ~(1 << SG_WOLFOS_GET_INDEX(&this->actor)); this->actionFunc = EnSyatekiWf_WaitForSignal; } @@ -239,7 +239,7 @@ void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play) { if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true)) { EnSyatekiWf_InitPathStart(this); EnSyatekiWf_SetupWaitToMove(this); - } else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_INDEX(&this->actor))) { + } else if (syatekiMan->wolfosFlags & (1 << SG_WOLFOS_GET_INDEX(&this->actor))) { this->isActive = true; } } @@ -263,7 +263,7 @@ void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play) { } void EnSyatekiWf_SetupRun(EnSyatekiWf* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_RUN); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_RUN); this->actor.speed = 10.0f; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.draw = EnSyatekiWf_Draw; @@ -318,7 +318,7 @@ void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play) { } } else { if (this->currentPointIndex < (this->maxPointIndex - 1)) { - if (this->currentPointIndex == EN_SYATEKI_WF_GET_POINT_TO_HOWL(&this->actor)) { + if (this->currentPointIndex == SG_WOLFOS_GET_POINT_TO_HOWL(&this->actor)) { EnSyatekiWf_SetupHowl(this); } @@ -340,7 +340,7 @@ void EnSyatekiWf_SetupJump(EnSyatekiWf* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP); this->actor.velocity.y = 20.0f; this->actor.speed = 5.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_JUMP); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_JUMP); this->actionFunc = EnSyatekiWf_Jump; } @@ -352,7 +352,7 @@ void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play) { void EnSyatekiWf_SetupLand(EnSyatekiWf* this) { this->actor.speed = 0.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_LAND); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_LAND); this->actionFunc = EnSyatekiWf_Land; } @@ -369,7 +369,7 @@ void EnSyatekiWf_SetupHowl(EnSyatekiWf* this) { this->timer = 40; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_DAMAGED); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_DAMAGED); this->actionFunc = EnSyatekiWf_Howl; } @@ -390,10 +390,10 @@ void EnSyatekiWf_SetupDead(EnSyatekiWf* this, PlayState* play) { this->isActive = false; this->actor.speed = 0.0f; - EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2); + EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_100); Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER); - syatekiMan->score += 100; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_REAR_UP_FALL_OVER); + syatekiMan->score += SG_POINTS_WOLFOS; this->actionFunc = EnSyatekiWf_Dead; } @@ -441,19 +441,19 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) { this->tailCollider.base.acFlags &= ~AC_HIT; this->headCollider.base.acFlags &= ~AC_HIT; - // The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it; - // the else-block is never reached in practice. If you *could* damage the Wolfos without killing - // it, then the number "30" would appear every time you hit it, and the player's displayed score - // would increase by 30. However, the else-block doesn't increase the shooting gallery man's - // "score" variable, so it would become desynchronized from the displayed score. This could cause - // weird behavior, like not getting a free replay after finishing a game with 2000 or more points. + //! @bug: The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it; + //! the else-block is never reached in practice. If you *could* damage the Wolfos without killing + //! it, then the number "30" would appear every time you hit it, and the player's displayed score + //! would increase by 30. However, the else-block doesn't increase the shooting gallery man's + //! "score" variable, so it would become desynchronized from the displayed score. This could cause + //! weird behavior, like not getting a free replay after finishing a game with 2000 or more points. this->actor.colChkInfo.health -= 2; if (this->actor.colChkInfo.health == 0) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); EnSyatekiWf_SetupDead(this, play); } else { Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); - EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, 0); + EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, EXTRA_SCORE_INDEX_30); } } diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h index 4a1fb2f72..06057d6b4 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h @@ -4,9 +4,9 @@ #include "global.h" #include "objects/object_wf/object_wf.h" -#define EN_SYATEKI_WF_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4) -#define EN_SYATEKI_WF_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) -#define EN_SYATEKI_WF_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF)) +#define SG_WOLFOS_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4) +#define SG_WOLFOS_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) +#define SG_WOLFOS_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF)) struct EnSyatekiWf; diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index 91b699f5f..e3daa2530 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -14,7 +14,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this); -static s16 sScores[] = { 30, 60, 100 }; +static s16 sScores[] = { EXTRA_SCORE_30, EXTRA_SCORE_60, EXTRA_SCORE_100 }; EffectSsInit Effect_Ss_Extra_InitVars = { EFFECT_SS_EXTRA, @@ -45,7 +45,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->draw = EffectSsExtra_Draw; this->update = EffectSsExtra_Update; this->life = 50; - this->rScoreIndex = params->scoreIdx; + this->rScoreIndex = params->scoreIndex; this->rScale = params->scale; this->rTimer = 5; this->rObjId = objIndex; diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h index 081570f62..b0e162c12 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h @@ -3,18 +3,22 @@ #include "global.h" +#define EXTRA_SCORE_30 30 +#define EXTRA_SCORE_60 60 +#define EXTRA_SCORE_100 100 + typedef enum { - /* 0 */ EXTRA_SCORE_30, - /* 1 */ EXTRA_SCORE_60, - /* 2 */ EXTRA_SCORE_100 -} ExtraScoreIdx; + /* 0 */ EXTRA_SCORE_INDEX_30, + /* 1 */ EXTRA_SCORE_INDEX_60, + /* 2 */ EXTRA_SCORE_INDEX_100 +} ExtraScoreIndex; typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3f velocity; /* 0x18 */ Vec3f accel; /* 0x24 */ s16 scale; - /* 0x26 */ s16 scoreIdx; + /* 0x26 */ s16 scoreIndex; } EffectSsExtraInitParams; // size = 0x28 #endif diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f55b89ea0..b581ef1e6 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9817,7 +9817,7 @@ 0x809C9480:("sTownFierceDeityPlayerPos","UNK_TYPE4","",0x4), 0x809C948C:("sTownPlayerPos","UNK_TYPE4","",0x4), 0x809C9498:("sGameStartTimer","s16","",0x2), - 0x809C949C:("sHasSpawnedGuaysForThisWave","UNK_TYPE2","",0x2), + 0x809C949C:("sHasSignaledGuaysForThisWave","UNK_TYPE2","",0x2), 0x809C94A0:("sBonusTimer","s32","",0x4), 0x809C94A4:("sGameStartTimer","s16","",0x2), 0x809C94A8:("sModFromLosingTime","s32","",0x4), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 591671ab8..ceaa72f50 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -261,8 +261,8 @@ weekEventReg = { (31 << 8) | 0x40: "WEEKEVENTREG_31_40", (31 << 8) | 0x80: "WEEKEVENTREG_31_80", (32 << 8) | 0x01: "WEEKEVENTREG_32_01", - (32 << 8) | 0x02: "WEEKEVENTREG_32_02", - (32 << 8) | 0x04: "WEEKEVENTREG_32_04", + (32 << 8) | 0x02: "WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE", + (32 << 8) | 0x04: "WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE", (32 << 8) | 0x08: "WEEKEVENTREG_32_08", (32 << 8) | 0x10: "WEEKEVENTREG_32_10", (32 << 8) | 0x20: "WEEKEVENTREG_32_20", @@ -480,8 +480,8 @@ weekEventReg = { (59 << 8) | 0x02: "WEEKEVENTREG_59_02", (59 << 8) | 0x08: "WEEKEVENTREG_59_08", (59 << 8) | 0x04: "WEEKEVENTREG_59_04", - (59 << 8) | 0x10: "WEEKEVENTREG_59_10", - (59 << 8) | 0x20: "WEEKEVENTREG_59_20", + (59 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE", + (59 << 8) | 0x20: "WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE", (59 << 8) | 0x40: "WEEKEVENTREG_59_40", (59 << 8) | 0x80: "WEEKEVENTREG_59_80", (60 << 8) | 0x01: "WEEKEVENTREG_60_01", From 11dac8d0207912db138f450df04ee40e6771923a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 23 Jun 2023 07:36:12 -0700 Subject: [PATCH 008/121] Name the weekeventreg that corresponds with the Clock Tower opening (#1303) * Name the weekeventreg that corresponds with the Clock Tower opening * Explanatory comment * Drop IS * Try to clean up the comment --- include/z64save.h | 11 +++++++++-- src/code/z_elf_message.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 2 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 4 ++-- src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 10 +++++----- tools/weekeventregconvert.py | 2 +- 7 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 71cb6428b..ca0625ad2 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -603,8 +603,15 @@ typedef enum { #define WEEKEVENTREG_08_10 PACK_WEEKEVENTREG_FLAG(8, 0x10) #define WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE PACK_WEEKEVENTREG_FLAG(8, 0x20) -// Related to final hours -#define WEEKEVENTREG_08_40 PACK_WEEKEVENTREG_FLAG(8, 0x40) +// This is set under three circumstances: +// 1. The player watches the cutscene of the Clock Tower opening. +// 2. The player sees the Clock Tower opening outside of a cutscene. After the first cycle, this +// can be seen in Termina Field or in North, East, or West Clock Town. +// 3. The player enters Termina Field or North, South, East, or West Clock Town any time after +// midnight on the Final Day. +// Thus, it is possible for the player to be in the final six hours and still have this unset; all +// the player needs to do is avoid certain areas. +#define WEEKEVENTREG_CLOCK_TOWER_OPENED PACK_WEEKEVENTREG_FLAG(8, 0x40) #define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80) #define WEEKEVENTREG_09_01 PACK_WEEKEVENTREG_FLAG(9, 0x01) diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index 1b005443d..e2b54a9bf 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -26,7 +26,7 @@ u16 QuestHint_GetTatlTextId(PlayState* play) { } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) { return 0; } 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 b9bf702b2..afb9796a9 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1173,7 +1173,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) { if (gSaveContext.save.day < 3) { csId = dayOneAndTwoCsId; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED) || ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { csId = finalHoursCsId; } else { 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 89fbd9f6b..7304be442 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -183,7 +183,7 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { return; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_20)) { Actor_Kill(&this->actor); return; @@ -276,7 +276,7 @@ void func_80BA1CF8(ElfMsg6* this, PlayState* play) { return; } - if ((this->actor.textId == 0x224) && CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + if ((this->actor.textId == 0x224) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) { this->actor.textId = 0x25B; } else if (func_80BA1C00(this) && (player->actor.speed > 1.0f)) { player->tatlTextId = -this->actor.textId; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index dfcd1bad0..9b569f803 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -56,7 +56,7 @@ void EnTimeTag_Init(Actor* thisx, PlayState* play) { switch (TIMETAG_GET_TYPE(&this->actor)) { case TIMETAG_KICKOUT_FINAL_HOURS: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || (CURRENT_DAY != 3)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED) || (CURRENT_DAY != 3)) { Actor_Kill(&this->actor); return; } 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 170eb35ce..73cefa0f2 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -128,7 +128,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) { this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle; this->actor.world.pos.y += this->actor.scale.y * 1900.0f; this->actor.shape.yOffset = 1500.0f; - SET_WEEKEVENTREG(WEEKEVENTREG_08_40); + SET_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED); } else { this->actionFunc = ObjTokeidai_ExteriorGear_Idle; } @@ -444,7 +444,7 @@ void ObjTokeidai_TerminaFieldWalls_Idle(ObjTokeidai* this, PlayState* play) { void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 5)) { - SET_WEEKEVENTREG(WEEKEVENTREG_08_40); + SET_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED); if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { Audio_SetCutsceneFlag(false); @@ -593,7 +593,7 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) { void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) { if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 4)) || - CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) { this->actionFunc = ObjTokeidai_TowerOpening_RaiseTower; } } @@ -616,7 +616,7 @@ void ObjTokeidai_DoNothing(ObjTokeidai* this, PlayState* play) { void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) { if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) || - CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) { this->actor.draw = ObjTokeidai_Draw; } else { this->actor.draw = NULL; @@ -691,7 +691,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { if ((CURRENT_DAY == 3) && (this->clockHour < 6) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { this->actor.draw = ObjTokeidai_Clock_Draw; ObjTokeidai_SetupTowerOpening(this); - SET_WEEKEVENTREG(WEEKEVENTREG_08_40); + SET_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED); return; } diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index ceaa72f50..45faf5f0e 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -74,7 +74,7 @@ weekEventReg = { ( 8 << 8) | 0x08: "WEEKEVENTREG_08_08", ( 8 << 8) | 0x10: "WEEKEVENTREG_08_10", ( 8 << 8) | 0x20: "WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE", - ( 8 << 8) | 0x40: "WEEKEVENTREG_08_40", + ( 8 << 8) | 0x40: "WEEKEVENTREG_CLOCK_TOWER_OPENED", ( 8 << 8) | 0x80: "WEEKEVENTREG_08_80", ( 9 << 8) | 0x01: "WEEKEVENTREG_09_01", ( 9 << 8) | 0x02: "WEEKEVENTREG_09_02", From aa9e368561ae13106daa14da4e2bf0656bfc70da Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 24 Jun 2023 00:57:01 +1000 Subject: [PATCH 009/121] `icon_item_static` and `icon_item_24_static` documented (#1297) * extract_archives.py * autogenerated xmls * build OK * cleanup * Use symbols in gItemIcons * change how archives are generated * makeyar in C * Rename segments * rename .archive.o to .yar.o * Explanation at the top of programs * fix progress calculation * Ignore archives in progress script * merge * document icon items * cleanup * remove duplicate headers * jap -> jpn * PR review * link human * PR Review * missed some --------- Co-authored-by: angie --- assets/xml/archives/icon_item_24_static.xml | 31 +- assets/xml/archives/icon_item_static.xml | 409 ++++++++++-------- assets/xml/objects/object_gi_sword_4.xml | 16 +- assets/xml/objects/object_thiefbird.xml | 6 +- include/z64item.h | 6 +- include/z64player.h | 2 +- src/code/code_8012EC80.c | 266 ++++++------ src/code/z_draw.c | 4 +- src/code/z_elf_message.c | 2 +- src/code/z_parameter.c | 19 +- src/code/z_player_lib.c | 2 +- src/code/z_sram_NES.c | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 8 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.h | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 6 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 2 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 2 +- .../actors/ovl_player_actor/z_player.c | 14 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 15 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 18 +- .../ovl_kaleido_scope/z_kaleido_map.c | 16 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 114 +++-- tools/gitable.py | 6 +- tools/namefixer.py | 2 +- undefined_syms.txt | 28 -- 26 files changed, 499 insertions(+), 503 deletions(-) diff --git a/assets/xml/archives/icon_item_24_static.xml b/assets/xml/archives/icon_item_24_static.xml index 7b3b338a3..2997b546b 100644 --- a/assets/xml/archives/icon_item_24_static.xml +++ b/assets/xml/archives/icon_item_24_static.xml @@ -1,18 +1,21 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/icon_item_static.xml b/assets/xml/archives/icon_item_static.xml index 3084ab2a5..697ca431e 100644 --- a/assets/xml/archives/icon_item_static.xml +++ b/assets/xml/archives/icon_item_static.xml @@ -1,194 +1,223 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_gi_sword_4.xml b/assets/xml/objects/object_gi_sword_4.xml index 7732259c6..082c27e2a 100644 --- a/assets/xml/objects/object_gi_sword_4.xml +++ b/assets/xml/objects/object_gi_sword_4.xml @@ -1,14 +1,14 @@  - + - - - + + + - - - - + + + + diff --git a/assets/xml/objects/object_thiefbird.xml b/assets/xml/objects/object_thiefbird.xml index 5a4cec335..52165cb89 100644 --- a/assets/xml/objects/object_thiefbird.xml +++ b/assets/xml/objects/object_thiefbird.xml @@ -40,13 +40,13 @@ - + - + @@ -55,7 +55,7 @@ - + diff --git a/include/z64item.h b/include/z64item.h index 55cbb337f..c37ba02c8 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -184,7 +184,7 @@ typedef enum ItemId { /* 0x25 */ ITEM_CHATEAU, /* 0x26 */ ITEM_HYLIAN_LOACH, /* 0x27 */ ITEM_OBABA_DRINK, - /* 0x28 */ ITEM_MOON_TEAR, + /* 0x28 */ ITEM_MOONS_TEAR, /* 0x29 */ ITEM_DEED_LAND, /* 0x2A */ ITEM_DEED_SWAMP, /* 0x2B */ ITEM_DEED_MOUNTAIN, @@ -471,7 +471,7 @@ typedef enum GetItemId { /* 0x93 */ GI_GOLD_DUST_2, /* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel /* 0x95 */ GI_SEAHORSE_CAUGHT, - /* 0x96 */ GI_MOON_TEAR, + /* 0x96 */ GI_MOONS_TEAR, /* 0x97 */ GI_DEED_LAND, /* 0x98 */ GI_DEED_SWAMP, /* 0x99 */ GI_DEED_MOUNTAIN, @@ -601,7 +601,7 @@ typedef enum GetItemDrawId { /* 0x56 */ GID_SKULL_TOKEN_2, /* 0x57 */ GID_57, /* 0x58 */ GID_ZORA_EGG, - /* 0x59 */ GID_MOON_TEAR, + /* 0x59 */ GID_MOONS_TEAR, /* 0x5A */ GID_DEED_LAND, /* 0x5B */ GID_MASK_DEKU, /* 0x5C */ GID_REMAINS_ODOLWA, diff --git a/include/z64player.h b/include/z64player.h index 5982233b8..598e75246 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -98,7 +98,7 @@ typedef enum PlayerItemAction { /* 0x27 */ PLAYER_IA_BOTTLE_MILK_HALF, /* 0x28 */ PLAYER_IA_BOTTLE_CHATEAU, /* 0x29 */ PLAYER_IA_BOTTLE_FAIRY, - /* 0x2A */ PLAYER_IA_MOON_TEAR, + /* 0x2A */ PLAYER_IA_MOONS_TEAR, /* 0x2B */ PLAYER_IA_DEED_LAND, /* 0x2C */ PLAYER_IA_ROOM_KEY, /* 0x2D */ PLAYER_IA_LETTER_TO_KAFEI, diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index 1fbce712d..37039a05d 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -98,137 +98,137 @@ u32 gGsFlagsShift[] = { }; TexturePtr gItemIcons[] = { - icon_item_static_yar_Blob_000000, // ITEM_OCARINA - icon_item_static_yar_Blob_001000, // ITEM_BOW - icon_item_static_yar_Blob_002000, // ITEM_ARROW_FIRE - icon_item_static_yar_Blob_003000, // ITEM_ARROW_ICE - icon_item_static_yar_Blob_004000, // ITEM_ARROW_LIGHT - icon_item_static_yar_Blob_005000, // ITEM_OCARINA_FAIRY - icon_item_static_yar_Blob_006000, // ITEM_BOMB - icon_item_static_yar_Blob_007000, // ITEM_BOMBCHU - icon_item_static_yar_Blob_008000, // ITEM_STICK - icon_item_static_yar_Blob_009000, // ITEM_NUT - icon_item_static_yar_Blob_00A000, // ITEM_MAGIC_BEANS - icon_item_static_yar_Blob_00B000, // ITEM_SLINGSHOT - icon_item_static_yar_Blob_00C000, // ITEM_POWDER_KEG - icon_item_static_yar_Blob_00D000, // ITEM_PICTO_BOX - icon_item_static_yar_Blob_00E000, // ITEM_LENS - icon_item_static_yar_Blob_00F000, // ITEM_HOOKSHOT - icon_item_static_yar_Blob_010000, // ITEM_SWORD_GREAT_FAIRY - icon_item_static_yar_Blob_011000, // ITEM_LONGSHOT - icon_item_static_yar_Blob_012000, // ITEM_BOTTLE - icon_item_static_yar_Blob_013000, // ITEM_POTION_RED - icon_item_static_yar_Blob_014000, // ITEM_POTION_GREEN - icon_item_static_yar_Blob_015000, // ITEM_POTION_BLUE - icon_item_static_yar_Blob_016000, // ITEM_FAIRY - icon_item_static_yar_Blob_017000, // ITEM_DEKU_PRINCESS - icon_item_static_yar_Blob_018000, // ITEM_MILK_BOTTLE - icon_item_static_yar_Blob_019000, // ITEM_MILK_HALF - icon_item_static_yar_Blob_01A000, // ITEM_FISH - icon_item_static_yar_Blob_01B000, // ITEM_BUG - icon_item_static_yar_Blob_01C000, // ITEM_BLUE_FIRE - icon_item_static_yar_Blob_01D000, // ITEM_POE - icon_item_static_yar_Blob_01E000, // ITEM_BIG_POE - icon_item_static_yar_Blob_01F000, // ITEM_SPRING_WATER - icon_item_static_yar_Blob_020000, // ITEM_HOT_SPRING_WATER - icon_item_static_yar_Blob_021000, // ITEM_ZORA_EGG - icon_item_static_yar_Blob_022000, // ITEM_GOLD_DUST - icon_item_static_yar_Blob_023000, // ITEM_MUSHROOM - icon_item_static_yar_Blob_024000, // ITEM_SEAHORSE - icon_item_static_yar_Blob_025000, // ITEM_CHATEAU - icon_item_static_yar_Blob_026000, // ITEM_HYLIAN_LOACH - icon_item_static_yar_Blob_027000, // ITEM_OBABA_DRINK - icon_item_static_yar_Blob_028000, // ITEM_MOON_TEAR - icon_item_static_yar_Blob_029000, // ITEM_DEED_LAND - icon_item_static_yar_Blob_02A000, // ITEM_DEED_SWAMP - icon_item_static_yar_Blob_02B000, // ITEM_DEED_MOUNTAIN - icon_item_static_yar_Blob_02C000, // ITEM_DEED_OCEAN - icon_item_static_yar_Blob_02D000, // ITEM_ROOM_KEY - icon_item_static_yar_Blob_02E000, // ITEM_LETTER_MAMA - icon_item_static_yar_Blob_02F000, // ITEM_LETTER_TO_KAFEI - icon_item_static_yar_Blob_030000, // ITEM_PENDANT_OF_MEMORIES - icon_item_static_yar_Blob_031000, // ITEM_TINGLE_MAP - icon_item_static_yar_Blob_032000, // ITEM_MASK_DEKU - icon_item_static_yar_Blob_033000, // ITEM_MASK_GORON - icon_item_static_yar_Blob_034000, // ITEM_MASK_ZORA - icon_item_static_yar_Blob_035000, // ITEM_MASK_FIERCE_DEITY - icon_item_static_yar_Blob_036000, // ITEM_MASK_TRUTH - icon_item_static_yar_Blob_037000, // ITEM_MASK_KAFEIS_MASK - icon_item_static_yar_Blob_038000, // ITEM_MASK_ALL_NIGHT - icon_item_static_yar_Blob_039000, // ITEM_MASK_BUNNY - icon_item_static_yar_Blob_03A000, // ITEM_MASK_KEATON - icon_item_static_yar_Blob_03B000, // ITEM_MASK_GARO - icon_item_static_yar_Blob_03C000, // ITEM_MASK_ROMANI - icon_item_static_yar_Blob_03D000, // ITEM_MASK_CIRCUS_LEADER - icon_item_static_yar_Blob_03E000, // ITEM_MASK_POSTMAN - icon_item_static_yar_Blob_03F000, // ITEM_MASK_COUPLE - icon_item_static_yar_Blob_040000, // ITEM_MASK_GREAT_FAIRY - icon_item_static_yar_Blob_041000, // ITEM_MASK_GIBDO - icon_item_static_yar_Blob_042000, // ITEM_MASK_DON_GERO - icon_item_static_yar_Blob_043000, // ITEM_MASK_KAMARO - icon_item_static_yar_Blob_044000, // ITEM_MASK_CAPTAIN - icon_item_static_yar_Blob_045000, // ITEM_MASK_STONE - icon_item_static_yar_Blob_046000, // ITEM_MASK_BREMEN - icon_item_static_yar_Blob_047000, // ITEM_MASK_BLAST - icon_item_static_yar_Blob_048000, // ITEM_MASK_SCENTS - icon_item_static_yar_Blob_049000, // ITEM_MASK_GIANT - icon_item_static_yar_Blob_04A000, // ITEM_BOW_ARROW_FIRE - icon_item_static_yar_Blob_04B000, // ITEM_BOW_ARROW_ICE - icon_item_static_yar_Blob_04C000, // ITEM_BOW_ARROW_LIGHT - icon_item_static_yar_Blob_04D000, // ITEM_SWORD_KOKIRI - icon_item_static_yar_Blob_04E000, // ITEM_SWORD_RAZOR - icon_item_static_yar_Blob_04F000, // ITEM_SWORD_GILDED - icon_item_static_yar_Blob_050000, // ITEM_SWORD_DEITY - icon_item_static_yar_Blob_051000, // ITEM_SHIELD_HERO - icon_item_static_yar_Blob_052000, // ITEM_SHIELD_MIRROR - icon_item_static_yar_Blob_053000, // ITEM_QUIVER_30 - icon_item_static_yar_Blob_054000, // ITEM_QUIVER_40 - icon_item_static_yar_Blob_055000, // ITEM_QUIVER_50 - icon_item_static_yar_Blob_056000, // ITEM_BOMB_BAG_20 - icon_item_static_yar_Blob_057000, // ITEM_BOMB_BAG_30 - icon_item_static_yar_Blob_058000, // ITEM_BOMB_BAG_40 - icon_item_static_yar_Blob_059000, // ITEM_WALLET_DEFAULT - icon_item_static_yar_Blob_05A000, // ITEM_WALLET_ADULT - icon_item_static_yar_Blob_05B000, // ITEM_WALLET_GIANT - icon_item_static_yar_Blob_05C000, // ITEM_FISHING_ROD - icon_item_static_yar_Blob_05D000, // ITEM_REMAINS_ODOLWA - icon_item_static_yar_Blob_05E000, // ITEM_REMAINS_GOHT - icon_item_static_yar_Blob_05F000, // ITEM_REMAINS_GYORG - icon_item_static_yar_Blob_060000, // ITEM_REMAINS_TWINMOLD - icon_item_static_yar_Blob_062000, // ITEM_SONG_SONATA - icon_item_static_yar_Blob_062000, // ITEM_SONG_LULLABY - icon_item_static_yar_Blob_062000, // ITEM_SONG_NOVA - icon_item_static_yar_Blob_062000, // ITEM_SONG_ELEGY - icon_item_static_yar_Blob_062000, // ITEM_SONG_OATH - icon_item_static_yar_Blob_062000, // ITEM_SONG_SARIA - icon_item_static_yar_Blob_062000, // ITEM_SONG_TIME - icon_item_static_yar_Blob_062000, // ITEM_SONG_HEALING - icon_item_static_yar_Blob_062000, // ITEM_SONG_EPONA - icon_item_static_yar_Blob_062000, // ITEM_SONG_SOARING - icon_item_static_yar_Blob_062000, // ITEM_SONG_STORMS - icon_item_static_yar_Blob_062000, // ITEM_SONG_SUN - icon_item_static_yar_Blob_061000, // ITEM_BOMBERS_NOTEBOOK - icon_item_24_static_yar_Blob_000000, // ITEM_SKULL_TOKEN - icon_item_24_static_yar_Blob_000900, // ITEM_HEART_CONTAINER - icon_item_24_static_yar_Blob_001200, // ITEM_HEART_PIECE - icon_item_static_yar_Blob_062000, // - icon_item_static_yar_Blob_062000, // - icon_item_static_yar_Blob_062000, // ITEM_SONG_LULLABY_INTRO - icon_item_24_static_yar_Blob_003600, // ITEM_KEY_BOSS - icon_item_24_static_yar_Blob_004800, // ITEM_COMPASS - icon_item_24_static_yar_Blob_003F00, // ITEM_DUNGEON_MAP - icon_item_24_static_yar_Blob_005100, // ITEM_STRAY_FAIRIES - icon_item_24_static_yar_Blob_005A00, // ITEM_KEY_SMALL - icon_item_24_static_yar_Blob_006300, // ITEM_MAGIC_SMALL - icon_item_24_static_yar_Blob_006C00, // ITEM_MAGIC_LARGE - icon_item_static_yar_Blob_062180, // ITEM_HEART_PIECE_2 - icon_item_static_yar_Blob_062A80, // ITEM_INVALID_1 - icon_item_static_yar_Blob_063380, // ITEM_INVALID_2 - gOcarinaCUpTex, // ITEM_INVALID_3 - gOcarinaCDownTex, // ITEM_INVALID_4 - gOcarinaCLeftTex, // ITEM_INVALID_5 - gOcarinaCRightTex, // ITEM_INVALID_6 - gOcarinaATex, // ITEM_INVALID_7 + gItemIconOcarinaOfTimeTex, // ITEM_OCARINA + gItemIconBowTex, // ITEM_BOW + gItemIconFireArrowTex, // ITEM_ARROW_FIRE + gItemIconIceArrowTex, // ITEM_ARROW_ICE + gItemIconLightArrowTex, // ITEM_ARROW_LIGHT + gItemIconFairyOcarinaTex, // ITEM_OCARINA_FAIRY + gItemIconBombTex, // ITEM_BOMB + gItemIconBombchuTex, // ITEM_BOMBCHU + gItemIconDekuStickTex, // ITEM_STICK + gItemIconDekuNutTex, // ITEM_NUT + gItemIconMagicBeansTex, // ITEM_MAGIC_BEANS + gItemIconSlingshotTex, // ITEM_SLINGSHOT + gItemIconPowderKegTex, // ITEM_POWDER_KEG + gItemIconPictoBoxTex, // ITEM_PICTO_BOX + gItemIconLensofTruthTex, // ITEM_LENS + gItemIconHookshotTex, // ITEM_HOOKSHOT + gItemIconGreatFairysSwordTex, // ITEM_SWORD_GREAT_FAIRY + gItemIconLongshotTex, // ITEM_LONGSHOT + gItemIconEmptyBottleTex, // ITEM_BOTTLE + gItemIconRedPotionTex, // ITEM_POTION_RED + gItemIconGreenPotionTex, // ITEM_POTION_GREEN + gItemIconBluePotionTex, // ITEM_POTION_BLUE + gItemIconBottledFairyTex, // ITEM_FAIRY + gItemIconBottledDekuPrincessTex, // ITEM_DEKU_PRINCESS + gItemIconBottledFullMilkTex, // ITEM_MILK_BOTTLE + gItemIconBottledHalfMilkTex, // ITEM_MILK_HALF + gItemIconBottledFishTex, // ITEM_FISH + gItemIconBottledBugTex, // ITEM_BUG + gItemIconBottledBlueFireTex, // ITEM_BLUE_FIRE + gItemIconBottledPoeTex, // ITEM_POE + gItemIconBottledBigPoeTex, // ITEM_BIG_POE + gItemIconSpringWaterTex, // ITEM_SPRING_WATER + gItemIconHotSpringWaterTex, // ITEM_HOT_SPRING_WATER + gItemIconBottledZoraEggTex, // ITEM_ZORA_EGG + gItemIconBottledGoldDustTex, // ITEM_GOLD_DUST + gItemIconBottledMushroomTex, // ITEM_MUSHROOM + gItemIconBottledSeahorseTex, // ITEM_SEAHORSE + gItemIconChateauRomaniTex, // ITEM_CHATEAU + gItemIconBottledHylianLoachTex, // ITEM_HYLIAN_LOACH + gItemIconEmptyBottle2Tex, // ITEM_OBABA_DRINK + gItemIconMoonsTearTex, // ITEM_MOONS_TEAR + gItemIconLandDeedTex, // ITEM_DEED_LAND + gItemIconSwampDeedTex, // ITEM_DEED_SWAMP + gItemIconMountainDeedTex, // ITEM_DEED_MOUNTAIN + gItemIconOceanDeedTex, // ITEM_DEED_OCEAN + gItemIconRoomKeyTex, // ITEM_ROOM_KEY + gItemIconLetterToMamaTex, // ITEM_LETTER_MAMA + gItemIconLetterToKafeiTex, // ITEM_LETTER_TO_KAFEI + gItemIconPendantOfMemoriesTex, // ITEM_PENDANT_OF_MEMORIES + gItemIconTingleMapTex, // ITEM_TINGLE_MAP + gItemIconDekuMaskTex, // ITEM_MASK_DEKU + gItemIconGoronMaskTex, // ITEM_MASK_GORON + gItemIconZoraMaskTex, // ITEM_MASK_ZORA + gItemIconFierceDeityMaskTex, // ITEM_MASK_FIERCE_DEITY + gItemIconMaskOfTruthTex, // ITEM_MASK_TRUTH + gItemIconKafeisMaskTex, // ITEM_MASK_KAFEIS_MASK + gItemIconAllNightMaskTex, // ITEM_MASK_ALL_NIGHT + gItemIconBunnyHoodTex, // ITEM_MASK_BUNNY + gItemIconKeatonMaskTex, // ITEM_MASK_KEATON + gItemIconGaroMaskTex, // ITEM_MASK_GARO + gItemIconRomaniMaskTex, // ITEM_MASK_ROMANI + gItemIconCircusLeaderMaskTex, // ITEM_MASK_CIRCUS_LEADER + gItemIconPostmansHatTex, // ITEM_MASK_POSTMAN + gItemIconCouplesMaskTex, // ITEM_MASK_COUPLE + gItemIconGreatFairyMaskTex, // ITEM_MASK_GREAT_FAIRY + gItemIconGibdoMaskTex, // ITEM_MASK_GIBDO + gItemIconDonGeroMaskTex, // ITEM_MASK_DON_GERO + gItemIconKamaroMaskTex, // ITEM_MASK_KAMARO + gItemIconCaptainsHatTex, // ITEM_MASK_CAPTAIN + gItemIconStoneMaskTex, // ITEM_MASK_STONE + gItemIconBremenMaskTex, // ITEM_MASK_BREMEN + gItemIconBlastMaskTex, // ITEM_MASK_BLAST + gItemIconMaskOfScentsTex, // ITEM_MASK_SCENTS + gItemIconGiantsMaskTex, // ITEM_MASK_GIANT + gItemIconBowFireTex, // ITEM_BOW_ARROW_FIRE + gItemIconBowIceTex, // ITEM_BOW_ARROW_ICE + gItemIconBowLightTex, // ITEM_BOW_ARROW_LIGHT + gItemIconKokiriSwordTex, // ITEM_SWORD_KOKIRI + gItemIconRazorSwordTex, // ITEM_SWORD_RAZOR + gItemIconGildedSwordTex, // ITEM_SWORD_GILDED + gItemIconFierceDeitySwordTex, // ITEM_SWORD_DEITY + gItemIconHerosShieldTex, // ITEM_SHIELD_HERO + gItemIconMirrorShieldTex, // ITEM_SHIELD_MIRROR + gItemIconQuiver30Tex, // ITEM_QUIVER_30 + gItemIconQuiver40Tex, // ITEM_QUIVER_40 + gItemIconQuiver50Tex, // ITEM_QUIVER_50 + gItemIconBombBag20Tex, // ITEM_BOMB_BAG_20 + gItemIconBombBag30Tex, // ITEM_BOMB_BAG_30 + gItemIconBombBag40Tex, // ITEM_BOMB_BAG_40 + gItemIconDefaultWalletTex, // ITEM_WALLET_DEFAULT + gItemIconAdultsWalletTex, // ITEM_WALLET_ADULT + gItemIconGiantsWalletTex, // ITEM_WALLET_GIANT + gItemIconFishingRodTex, // ITEM_FISHING_ROD + gItemIconOdolwasRemainsTex, // ITEM_REMAINS_ODOLWA + gItemIconGohtsRemainsTex, // ITEM_REMAINS_GOHT + gItemIconGyorgsRemainsTex, // ITEM_REMAINS_GYORG + gItemIconTwinmoldsRemainsTex, // ITEM_REMAINS_TWINMOLD + gItemIconSongNoteTex, // ITEM_SONG_SONATA + gItemIconSongNoteTex, // ITEM_SONG_LULLABY + gItemIconSongNoteTex, // ITEM_SONG_NOVA + gItemIconSongNoteTex, // ITEM_SONG_ELEGY + gItemIconSongNoteTex, // ITEM_SONG_OATH + gItemIconSongNoteTex, // ITEM_SONG_SARIA + gItemIconSongNoteTex, // ITEM_SONG_TIME + gItemIconSongNoteTex, // ITEM_SONG_HEALING + gItemIconSongNoteTex, // ITEM_SONG_EPONA + gItemIconSongNoteTex, // ITEM_SONG_SOARING + gItemIconSongNoteTex, // ITEM_SONG_STORMS + gItemIconSongNoteTex, // ITEM_SONG_SUN + gItemIconBombersNotebookTex, // ITEM_BOMBERS_NOTEBOOK + gQuestIconGoldSkulltulaTex, // ITEM_SKULL_TOKEN + gQuestIconHeartContainerTex, // ITEM_HEART_CONTAINER + gQuestIconPieceOfHeartTex, // ITEM_HEART_PIECE + gItemIconSongNoteTex, // + gItemIconSongNoteTex, // + gItemIconSongNoteTex, // ITEM_SONG_LULLABY_INTRO + gQuestIconBossKeyTex, // ITEM_KEY_BOSS + gQuestIconDungeonMapTex, // ITEM_COMPASS + gQuestIconCompassTex, // ITEM_DUNGEON_MAP + gQuestIconGoldSkulltula2Tex, // ITEM_STRAY_FAIRIES + gQuestIconSmallKeyTex, // ITEM_KEY_SMALL + gQuestIconSmallMagicJarTex, // ITEM_MAGIC_SMALL + gQuestIconBigMagicJarTex, // ITEM_MAGIC_LARGE + gItemIconHeartPiece1Tex, // ITEM_HEART_PIECE_2 + gItemIconHeartPiece2Tex, // ITEM_INVALID_1 + gItemIconHeartPiece3Tex, // ITEM_INVALID_2 + gOcarinaCUpTex, // ITEM_INVALID_3 + gOcarinaCDownTex, // ITEM_INVALID_4 + gOcarinaCLeftTex, // ITEM_INVALID_5 + gOcarinaCRightTex, // ITEM_INVALID_6 + gOcarinaATex, // ITEM_INVALID_7 }; // Used to map item IDs to inventory slots @@ -273,7 +273,7 @@ u8 gItemSlots[] = { SLOT_BOTTLE_1, // ITEM_CHATEAU SLOT_BOTTLE_1, // ITEM_HYLIAN_LOACH SLOT_BOTTLE_1, // ITEM_OBABA_DRINK - SLOT_TRADE_DEED, // ITEM_MOON_TEAR + SLOT_TRADE_DEED, // ITEM_MOONS_TEAR SLOT_TRADE_DEED, // ITEM_DEED_LAND SLOT_TRADE_DEED, // ITEM_DEED_SWAMP SLOT_TRADE_DEED, // ITEM_DEED_MOUNTAIN @@ -353,7 +353,7 @@ s16 gItemPrices[] = { 200, // ITEM_CHATEAU 20, // ITEM_HYLIAN_LOACH 0, // ITEM_OBABA_DRINK - 0, // ITEM_MOON_TEAR + 0, // ITEM_MOONS_TEAR 0, // ITEM_DEED_LAND 0, // ITEM_DEED_SWAMP 0, // ITEM_DEED_MOUNTAIN diff --git a/src/code/z_draw.c b/src/code/z_draw.c index e6a814e2a..43b9c35b5 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -313,7 +313,7 @@ static DrawItemTableEntry sDrawItemTable[] = { { GetItem_DrawOpa0Xlu1, { gGiRedPotionBottleEmptyDL, gGiRedPotionBottleDL } }, // GID_ZORA_EGG, OBJECT_GI_BOTTLE_15 { GetItem_DrawOpa0Xlu1, { gGiZoraEggBottleContentsDL, gGiZoraEggBottleGlassAndCorkDL } }, - // GID_MOON_TEAR, OBJECT_GI_RESERVE00 + // GID_MOONS_TEAR, OBJECT_GI_RESERVE00 { GetItem_DrawMoonsTear, { gGiMoonsTearItemDL, gGiMoonsTearGlowDL } }, // GID_DEED_LAND, OBJECT_GI_RESERVE01 { GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedLandColorDL } }, @@ -344,7 +344,7 @@ static DrawItemTableEntry sDrawItemTable[] = { // GID_SWORD_GILDED, OBJECT_GI_SWORD_3 { GetItem_DrawOpa01, { gGiGildedSwordDL, gGiGildedSwordEmptyDL } }, // GID_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4 - { GetItem_DrawOpa0Xlu1, { gGiGreatFairySwordBladeDL, gGiGreatFairySwordHiltEmblemDL } }, + { GetItem_DrawOpa0Xlu1, { gGiGreatFairysSwordBladeDL, gGiGreatFairysSwordHiltEmblemDL } }, // GID_MASK_GARO, OBJECT_GI_MASK09 { GetItem_DrawOpa0Xlu1, { gGiGarosMaskCloakDL, gGiGarosMaskFaceDL } }, // GID_MASK_GREAT_FAIRY, OBJECT_GI_MASK14 diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index e2b54a9bf..75112a6b5 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -57,7 +57,7 @@ u16 QuestHint_GetTatlTextId(PlayState* play) { return 0; } - if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_MOON_TEAR) { + if (INV_CONTENT(ITEM_MOONS_TEAR) == ITEM_MOONS_TEAR) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_04)) { return 0x242; } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index fe5ade1d2..c6a086276 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1,6 +1,7 @@ #include "global.h" #include "z64snap.h" #include "z64view.h" +#include "archives/icon_item_static/icon_item_static_yar.h" #include "interface/parameter_static/parameter_static.h" #include "interface/do_action_static/do_action_static.h" #include "misc/story_static/story_static.h" @@ -8,8 +9,6 @@ #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #include "overlays/actors/ovl_En_Mm3/z_en_mm3.h" -extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex - typedef enum { /* 0 */ PICTO_BOX_STATE_OFF, // Not using the pictograph /* 1 */ PICTO_BOX_STATE_LENS, // Looking through the lens of the pictograph @@ -2057,7 +2056,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } else { // End of special item cases. Apply restrictions to buttons if (interfaceCtx->restrictions.tradeItems != 0) { - if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) && + if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) || ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) || @@ -2068,7 +2067,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { gSaveContext.buttonStatus[i] = BTN_DISABLED; } } else if (interfaceCtx->restrictions.tradeItems == 0) { - if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) && + if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) || ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) || @@ -2115,7 +2114,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } if (interfaceCtx->restrictions.all != 0) { - if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) && + if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) && @@ -2130,7 +2129,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } } } else if (interfaceCtx->restrictions.all == 0) { - if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) && + if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) && @@ -2899,10 +2898,10 @@ u8 Item_Give(PlayState* play, u8 item) { } } - } else if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_MASK_GIANT)) { + } else if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_MASK_GIANT)) { temp = INV_CONTENT(item); INV_CONTENT(item) = item; - if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_PENDANT_OF_MEMORIES) && (temp != ITEM_NONE)) { + if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_PENDANT_OF_MEMORIES) && (temp != ITEM_NONE)) { for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { if (temp == GET_CUR_FORM_BTN_ITEM(i)) { SET_CUR_FORM_BTN_ITEM(i, item); @@ -3066,7 +3065,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) { } } } - } else if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_MASK_GIANT)) { + } else if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_MASK_GIANT)) { return ITEM_NONE; } @@ -4295,7 +4294,7 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) { } gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[16], 4, 0); - gDPLoadTextureBlock(OVERLAY_DISP++, &D_08095AC0, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, + gDPLoadTextureBlock(OVERLAY_DISP++, gMagicArrowEquipEffectTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 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); } diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 4654158f9..abab2f560 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -695,7 +695,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_HALF PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_CHATEAU PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FAIRY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOON_TEAR + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOONS_TEAR PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_LAND PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ROOM_KEY PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_TO_KAFEI diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 79f2d7043..4da2f6963 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -608,7 +608,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { Inventory_DeleteItem(ITEM_LONGSHOT, SLOT_TRADE_COUPLE); for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) { - if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOON_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES) { + if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES) { SET_CUR_FORM_BTN_ITEM(j, ITEM_NONE); Interface_LoadItemIconImpl(play, j); } @@ -907,7 +907,7 @@ Inventory sSaveDebugInventory = { ITEM_ARROW_FIRE, ITEM_ARROW_ICE, ITEM_ARROW_LIGHT, - ITEM_MOON_TEAR, + ITEM_MOONS_TEAR, ITEM_BOMB, ITEM_BOMBCHU, ITEM_STICK, 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 02630ed6d..f18aa79e9 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -959,7 +959,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { buttonItem = GET_CUR_FORM_BTN_ITEM(player->heldItemButton); - this->price = (buttonItem < ITEM_MOON_TEAR) ? gItemPrices[buttonItem] : 0; + this->price = (buttonItem < ITEM_MOONS_TEAR) ? gItemPrices[buttonItem] : 0; if (this->price > 0) { player->actor.textId = 0x29EF; player->exchangeItemId = buttonItem; 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 1b9c1cc99..3bc31cd74 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 @@ -147,7 +147,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { player->unk_B08 = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; - if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { + if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRYS_SWORD) { this->scaleTarget = 6; } else if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { this->scaleTarget = 4; @@ -158,7 +158,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { player->unk_B08 = 0.5f; this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; - if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { + if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRYS_SWORD) { this->scaleTarget = 4; } else if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { this->scaleTarget = 3; @@ -276,7 +276,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { if (player->unk_B08 < 0.85f) { this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; - if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { + if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRYS_SWORD) { this->scaleTarget = 4; } else if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { this->scaleTarget = 3; @@ -286,7 +286,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { } else { this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; - if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { + if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRYS_SWORD) { this->scaleTarget = 6; } else if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { this->scaleTarget = 4; diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h index 9842eeb78..1068173e7 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h @@ -12,7 +12,7 @@ typedef enum { /* 0x00 */ ENMTHUNDER_TYPE_KOKIRI_SWORD, /* 0x01 */ ENMTHUNDER_TYPE_RAZOR_SWORD, /* 0x02 */ ENMTHUNDER_TYPE_GILDED_SWORD, - /* 0x03 */ ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD, + /* 0x03 */ ENMTHUNDER_TYPE_GREAT_FAIRYS_SWORD, /* 0x80 */ ENMTHUNDER_TYPE_UNK = 0x80 } EnMThunderType; 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 7210e453b..21359a0a6 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -341,7 +341,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x7D0, 0); this->actor.world.rot.y = this->actor.shape.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (Player_GetExchangeItemId(play) == PLAYER_IA_MOON_TEAR) { + if (Player_GetExchangeItemId(play) == PLAYER_IA_MOONS_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; this->actionFunc = func_80ADBAB8; @@ -382,7 +382,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { } else if (((this->actor.xzDistToPlayer < 80.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || this->actor.isTargeted) { - func_800B85E0(&this->actor, play, 80.0f, PLAYER_IA_MOON_TEAR); + func_800B85E0(&this->actor, play, 80.0f, PLAYER_IA_MOONS_TEAR); if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { this->unk_33A = 2; @@ -423,7 +423,7 @@ void func_80ADB924(EnSellnuts* this, PlayState* play) { itemAction = func_80123810(play); if (itemAction > PLAYER_IA_NONE) { - if (itemAction == PLAYER_IA_MOON_TEAR) { + if (itemAction == PLAYER_IA_MOONS_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; player->exchangeItemId = itemAction; 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 6b708a036..35a36a15b 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -265,7 +265,7 @@ s32 func_80C10B0C(EnThiefbird* this, PlayState* play) { itemId1 = phi_a3 + (ITEM_SWORD_KOKIRI - 1); if (phi_a3 == 4) { Inventory_DeleteItem(ITEM_SWORD_GREAT_FAIRY, SLOT_SWORD_GREAT_FAIRY); - this->unk_3E8 = gTakkuriStolenGreatFairySwordDL; + this->unk_3E8 = gTakkuriStolenGreatFairysSwordDL; itemId1 = ITEM_SWORD_GREAT_FAIRY; } else { CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE; diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index dab7489ee..7a05542d2 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -117,7 +117,7 @@ void func_80C06768(ObjMoonStone* this, PlayState* play) { this->actor.draw = NULL; func_80C0685C(this); } else if (this->actor.xzDistToPlayer < 25.0f) { - Actor_OfferGetItem(&this->actor, play, GI_MOON_TEAR, 100.0f, 30.0f); + Actor_OfferGetItem(&this->actor, play, GI_MOONS_TEAR, 100.0f, 30.0f); } } } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1b73e8c7f..ef331864a 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -2449,8 +2449,8 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { // GI_SEAHORSE_CAUGHT GET_ITEM(ITEM_SEAHORSE_CAUGHT, OBJECT_GI_SEAHORSE, GID_SEAHORSE_CAUGHT, 0x95, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), - // GI_MOON_TEAR - GET_ITEM(ITEM_MOON_TEAR, OBJECT_GI_RESERVE00, GID_MOON_TEAR, 0x96, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + // GI_MOONS_TEAR + GET_ITEM(ITEM_MOONS_TEAR, OBJECT_GI_RESERVE00, GID_MOONS_TEAR, 0x96, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), // GI_DEED_LAND GET_ITEM(ITEM_DEED_LAND, OBJECT_GI_RESERVE01, GID_DEED_LAND, 0x97, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), @@ -2912,7 +2912,7 @@ s8 sItemItemActions[] = { PLAYER_IA_BOTTLE_CHATEAU, // ITEM_CHATEAU, PLAYER_IA_BOTTLE_HYLIAN_LOACH, // ITEM_HYLIAN_LOACH, PLAYER_IA_BOTTLE_POE, // ITEM_OBABA_DRINK, // ! - PLAYER_IA_MOON_TEAR, // ITEM_MOON_TEAR, + PLAYER_IA_MOONS_TEAR, // ITEM_MOONS_TEAR, PLAYER_IA_DEED_LAND, // ITEM_DEED_LAND, PLAYER_IA_DEED_SWAMP, // ITEM_DEED_SWAMP, PLAYER_IA_DEED_MOUNTAIN, // ITEM_DEED_MOUNTAIN, @@ -3031,7 +3031,7 @@ PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { func_80848780, // PLAYER_IA_BOTTLE_MILK_HALF func_80848780, // PLAYER_IA_BOTTLE_CHATEAU func_80848780, // PLAYER_IA_BOTTLE_FAIRY - func_80848780, // PLAYER_IA_MOON_TEAR + func_80848780, // PLAYER_IA_MOONS_TEAR func_80848780, // PLAYER_IA_DEED_LAND func_80848780, // PLAYER_IA_ROOM_KEY func_80848780, // PLAYER_IA_LETTER_TO_KAFEI @@ -3118,7 +3118,7 @@ void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { func_8082F594, // PLAYER_IA_BOTTLE_MILK_HALF func_8082F594, // PLAYER_IA_BOTTLE_CHATEAU func_8082F594, // PLAYER_IA_BOTTLE_FAIRY - func_8082F594, // PLAYER_IA_MOON_TEAR + func_8082F594, // PLAYER_IA_MOONS_TEAR func_8082F594, // PLAYER_IA_DEED_LAND func_8082F594, // PLAYER_IA_ROOM_KEY func_8082F594, // PLAYER_IA_LETTER_TO_KAFEI @@ -7054,7 +7054,7 @@ u8 D_8085D1A4[PLAYER_IA_MAX] = { GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK_HALF GI_CHATEAU, // PLAYER_IA_BOTTLE_CHATEAU GI_FAIRY, // PLAYER_IA_BOTTLE_FAIRY - GI_MOON_TEAR, // PLAYER_IA_MOON_TEAR + GI_MOONS_TEAR, // PLAYER_IA_MOONS_TEAR GI_DEED_LAND, // PLAYER_IA_DEED_LAND GI_ROOM_KEY, // PLAYER_IA_ROOM_KEY GI_LETTER_TO_KAFEI, // PLAYER_IA_LETTER_TO_KAFEI @@ -7062,7 +7062,7 @@ u8 D_8085D1A4[PLAYER_IA_MAX] = { GI_DEED_SWAMP, // PLAYER_IA_DEED_SWAMP GI_DEED_MOUNTAIN, // PLAYER_IA_DEED_MOUNTAIN GI_DEED_OCEAN, // PLAYER_IA_DEED_OCEAN - GI_MOON_TEAR, // PLAYER_IA_32 + GI_MOONS_TEAR, // PLAYER_IA_32 GI_LETTER_TO_MAMA, // PLAYER_IA_LETTER_MAMA GI_A7, // PLAYER_IA_34 GI_A8, // PLAYER_IA_35 diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 41296b5f2..6c3af4569 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -6,12 +6,10 @@ #include "z_kaleido_scope.h" #include "interface/parameter_static/parameter_static.h" +#include "archives/icon_item_static/icon_item_static_yar.h" s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s16 point); -extern TexturePtr D_08061000; // gBombersNotebookIconTex -extern TexturePtr D_08062000; // gSongNoteIconTex - s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 }; s16 sQuestHpColorTimerInits[] = { 20, 4, 20, 10 }; s16 sQuestSongPlayedOcarinaButtonsNum = 0; @@ -117,8 +115,8 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { 255, // QUEST_SONG_SUN }; static TexturePtr sQuestUpgradeTextures[][3] = { - { 0x08053000, 0x08054000, 0x08055000 }, // UPG_QUIVER - { 0x08056000, 0x08057000, 0x08058000 }, // UPG_BOMB_BAG + { gItemIconQuiver30Tex, gItemIconQuiver40Tex, gItemIconQuiver50Tex }, // UPG_QUIVER + { gItemIconBombBag20Tex, gItemIconBombBag30Tex, gItemIconBombBag40Tex }, // UPG_BOMB_BAG }; static u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG }; PauseContext* pauseCtx = &play->pauseCtx; @@ -221,8 +219,9 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08062000, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 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); + gDPLoadTextureBlock(POLY_OPA_DISP++, gItemIconSongNoteTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 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); for (i = 0; i < 12; i++, j += 4) { if (CHECK_QUEST_ITEM(i + QUEST_SONG_SONATA) || @@ -256,7 +255,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0); - KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, &D_08061000, 32, 32, 0); + KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIconBombersNotebookTex, 32, 32, 0); } j += 4; 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 f643d8d40..0ab31533c 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 @@ -805,18 +805,18 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { Inventory_DeleteItem(value, slot); } 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.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.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) + 1; + if (INV_CONTENT(ITEM_MOONS_TEAR) == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_MOONS_TEAR; + } else if ((INV_CONTENT(ITEM_MOONS_TEAR) >= ITEM_MOONS_TEAR) && + (INV_CONTENT(ITEM_MOONS_TEAR) <= ITEM_DEED_MOUNTAIN)) { + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOONS_TEAR) + 1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_NONE) { + if (INV_CONTENT(ITEM_MOONS_TEAR) == ITEM_NONE) { 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.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) - 1; + } else if ((INV_CONTENT(ITEM_MOONS_TEAR) >= ITEM_DEED_LAND) && + (INV_CONTENT(ITEM_MOONS_TEAR) <= ITEM_DEED_OCEAN)) { + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOONS_TEAR) - 1; } } } else if (slot == SLOT_TRADE_KEY_MAMA) { 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 c88aff6f1..6f6b000e7 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 @@ -9,8 +9,7 @@ #include "interface/icon_item_field_static/icon_item_field_static.h" #include "interface/icon_item_dungeon_static/icon_item_dungeon_static.h" #include "interface/icon_item_jpn_static/icon_item_jpn_static.h" - -extern TexturePtr D_09007500; // gPlayerFaceIcon +#include "archives/icon_item_24_static/icon_item_24_static_yar.h" void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { s16 counterDigits[2]; @@ -76,9 +75,9 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { } TexturePtr sDungeonItemTextures[] = { - 0x09003600, // `gBossKeyIconTex`: DUNGEON_BOSS_KEY - 0x09003F00, // `gCompassIconTex`: DUNGEON_COMPASS - 0x09004800, // `gDungeonMapIconTex`: DUNGEON_MAP + gQuestIconBossKeyTex, // DUNGEON_BOSS_KEY + gQuestIconCompassTex, // DUNGEON_COMPASS + gQuestIconDungeonMapTex, // DUNGEON_MAP }; TexturePtr sDungeonTitleTextures[] = { @@ -283,7 +282,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { // Draw Player's face next to the dungeon floor icon currently in. POLY_OPA_DISP = - Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, 62, + Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gQuestIconLinkHumanFaceTex, 16, 16, 62, sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.dungeonIndex)) { @@ -813,8 +812,9 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n], - sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = + Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gQuestIconLinkHumanFaceTex, 16, 16, sWorldMapCursorsRectLeft[n], + sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10); } } 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 2b8e80db3..7f891ca35 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 @@ -3,102 +3,96 @@ * Overlay: ovl_kaleido_scope * Description: Pause Menu */ -#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" -#include "overlays/gamestates/ovl_opening/z_opening.h" -#include "interface/icon_item_gameover_static/icon_item_gameover_static.h" -#include "interface/icon_item_jpn_static/icon_item_jpn_static.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" +#include "archives/icon_item_static/icon_item_static_yar.h" #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" #include "interface/icon_item_jpn_static/icon_item_jpn_static.h" #include "interface/icon_item_vtx_static/icon_item_vtx_static.h" -// iconItemSegment -extern TexturePtr D_08064340; // gPauseMenuCursorTex - // Page Textures (Background of Page): // Broken up into multiple textures. // Numbered by column/row. TexturePtr sMaskPageBgTextures[] = { // Column 0 - 0x08064440, // gPauseMasks00Tex - 0x0806E440, // gPauseMasks01Tex - 0x08077A40, // gPauseMasks02Tex - 0x08081040, // gPauseMasks03Tex - 0x0808A640, // gPauseMasks04Tex + gPauseMasks00Tex, + gPauseMasks01Tex, + gPauseMasks02Tex, + gPauseMasks03Tex, + gPauseMasks04Tex, // Column 1 gPauseMasks10ENGTex, - 0x0806EE40, // gPauseMasks11Tex - 0x08078440, // gPauseMasks12Tex - 0x08081A40, // gPauseMasks13Tex - 0x0808B040, // gPauseMasks14Tex + gPauseMasks11Tex, + gPauseMasks12Tex, + gPauseMasks13Tex, + gPauseMasks14Tex, // Column 2 - 0x08065840, // gPauseMasks20Tex - 0x0806F840, // gPauseMasks21Tex - 0x08078E40, // gPauseMasks22Tex - 0x08082440, // gPauseMasks23Tex - 0x0808BA40, // gPauseMasks24Tex + gPauseMasks20Tex, + gPauseMasks21Tex, + gPauseMasks22Tex, + gPauseMasks23Tex, + gPauseMasks24Tex, }; TexturePtr sItemPageBgTextures[] = { // Column 0 gPauseSelectItem00ENGTex, - 0x08070240, // gPauseSelectItem01Tex - 0x08079840, // gPauseSelectItem02Tex - 0x08082E40, // gPauseSelectItem03Tex - 0x0808C440, // gPauseSelectItem04Tex + gPauseSelectItem01Tex, + gPauseSelectItem02Tex, + gPauseSelectItem03Tex, + gPauseSelectItem04Tex, // Column 1 gPauseSelectItem10ENGTex, - 0x08070C40, // gPauseSelectItem11Tex - 0x0807A240, // gPauseSelectItem12Tex - 0x08083840, // gPauseSelectItem13Tex - 0x0808CE40, // gPauseSelectItem14Tex + gPauseSelectItem11Tex, + gPauseSelectItem12Tex, + gPauseSelectItem13Tex, + gPauseSelectItem14Tex, // Column 2 gPauseSelectItem20ENGTex, - 0x08071640, // gPauseSelectItem21Tex - 0x0807AC40, // gPauseSelectItem22Tex - 0x08084240, // gPauseSelectItem23Tex - 0x0808D840, // gPauseSelectItem24Tex + gPauseSelectItem21Tex, + gPauseSelectItem22Tex, + gPauseSelectItem23Tex, + gPauseSelectItem24Tex, }; TexturePtr sMapPageBgTextures[] = { // Column 0 - 0x08068040, // gPauseMap00Tex - 0x08072040, // gPauseMap01Tex - 0x0807B640, // gPauseMap02Tex - 0x08084C40, // gPauseMap03Tex - 0x0808E240, // gPauseMap04Tex + gPauseMap00Tex, + gPauseMap01Tex, + gPauseMap02Tex, + gPauseMap03Tex, + gPauseMap04Tex, // Column 1 gPauseMap10ENGTex, - 0x08072A40, // gPauseMap11Tex - 0x0807C040, // gPauseMap12Tex - 0x08085640, // gPauseMap13Tex - 0x0808EC40, // gPauseMap14Tex + gPauseMap11Tex, + gPauseMap12Tex, + gPauseMap13Tex, + gPauseMap14Tex, // Column 2 - 0x08069440, // gPauseMap20Tex - 0x08073440, // gPauseMap21Tex - 0x0807CA40, // gPauseMap22Tex - 0x08086040, // gPauseMap23Tex - 0x0808F640, // gPauseMap24Tex + gPauseMap20Tex, + gPauseMap21Tex, + gPauseMap22Tex, + gPauseMap23Tex, + gPauseMap24Tex, }; TexturePtr sQuestPageBgTextures[] = { // Column 0 gPauseQuestStatus00ENGTex, - 0x08073E40, // gPauseQuestStatus01Tex - 0x0807D440, // gPauseQuestStatus02Tex - 0x08086A40, // gPauseQuestStatus03Tex - 0x08090040, // gPauseQuestStatus04Tex + gPauseQuestStatus01Tex, + gPauseQuestStatus02Tex, + gPauseQuestStatus03Tex, + gPauseQuestStatus04Tex, // Column 1 gPauseQuestStatus10ENGTex, - 0x08074840, // gPauseQuestStatus11Tex - 0x0807DE40, // gPauseQuestStatus12Tex - 0x08087440, // gPauseQuestStatus13Tex - 0x08090A40, // gPauseQuestStatus14Tex + gPauseQuestStatus11Tex, + gPauseQuestStatus12Tex, + gPauseQuestStatus13Tex, + gPauseQuestStatus14Tex, // Column 2 gPauseQuestStatus20ENGTex, - 0x08075240, // gPauseQuestStatus21Tex - 0x0807E840, // gPauseQuestStatus22Tex - 0x08087E40, // gPauseQuestStatus23Tex - 0x08091440, // gPauseQuestStatus24Tex + gPauseQuestStatus21Tex, + gPauseQuestStatus22Tex, + gPauseQuestStatus23Tex, + gPauseQuestStatus24Tex, }; s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = { @@ -2607,7 +2601,7 @@ void KaleidoScope_DrawCursor(PlayState* play) { Matrix_Translate(sCursorCirclesX[i], sCursorCirclesY[i], -50.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPPipeSync(POLY_OPA_DISP++); - gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08064340, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, gPauseMenuCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 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); gSPVertex(POLY_OPA_DISP++, &pauseCtx->cursorVtx[0], 4, 0); diff --git a/tools/gitable.py b/tools/gitable.py index dad39638f..a3b41f6e8 100755 --- a/tools/gitable.py +++ b/tools/gitable.py @@ -53,7 +53,7 @@ itemId_names = { 0x25: "ITEM_CHATEAU", 0x26: "ITEM_HYLIAN_LOACH", 0x27: "ITEM_OBABA_DRINK", - 0x28: "ITEM_MOON_TEAR", + 0x28: "ITEM_MOONS_TEAR", 0x29: "ITEM_DEED_LAND", 0x2A: "ITEM_DEED_SWAMP", 0x2B: "ITEM_DEED_MOUNTAIN", @@ -305,7 +305,7 @@ getItemId_names = { 0x93: "GI_GOLD_DUST_2", 0x94: "GI_HYLIAN_LOACH", 0x95: "GI_SEAHORSE_CAUGHT", - 0x96: "GI_MOON_TEAR", + 0x96: "GI_MOONS_TEAR", 0x97: "GI_DEED_LAND", 0x98: "GI_DEED_SWAMP", 0x99: "GI_DEED_MOUNTAIN", @@ -426,7 +426,7 @@ getItemDrawId_names = { 0x56: "GID_SKULL_TOKEN_2", 0x57: "GID_57", 0x58: "GID_ZORA_EGG", - 0x59: "GID_MOON_TEAR", + 0x59: "GID_MOONS_TEAR", 0x5A: "GID_DEED_LAND", 0x5B: "GID_MASK_DEKU", 0x5C: "GID_REMAINS_ODOLWA", diff --git a/tools/namefixer.py b/tools/namefixer.py index d268b8674..ae7942c59 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1149,7 +1149,7 @@ wordReplace = { "EXCH_ITEM_NONE": "PLAYER_IA_NONE", "EXCH_ITEM_PICTO_BOX": "PLAYER_IA_PICTO_BOX", "EXCH_ITEM_1E": "PLAYER_IA_BOTTLE_MUSHROOM", - "EXCH_ITEM_MOON_TEAR": "PLAYER_IA_MOON_TEAR", + "EXCH_ITEM_MOON_TEAR": "PLAYER_IA_MOONS_TEAR", "EXCH_ITEM_DEED_LAND": "PLAYER_IA_DEED_LAND", "EXCH_ITEM_ROOM_KEY": "PLAYER_IA_ROOM_KEY", "EXCH_ITEM_LETTER_TO_KAFEI": "PLAYER_IA_LETTER_TO_KAFEI", diff --git a/undefined_syms.txt b/undefined_syms.txt index 9dd07f623..8ae26753f 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1101,34 +1101,6 @@ D_06000D60 = 0x06000D60; // segment 0x08 D_08000000 = 0x08000000; -D_08000100 = 0x08000100; -D_08000700 = 0x08000700; -D_08000880 = 0x08000880; -D_08000A40 = 0x08000A40; -D_08001240 = 0x08001240; -D_080012C0 = 0x080012C0; -D_08001340 = 0x08001340; -D_08001358 = 0x08001358; -D_080013D8 = 0x080013D8; -D_080017D8 = 0x080017D8; -D_08001898 = 0x08001898; -D_080018B0 = 0x080018B0; -D_080018D0 = 0x080018D0; -D_08001950 = 0x08001950; -D_08001CD0 = 0x08001CD0; -D_08001DB0 = 0x08001DB0; -D_08001E90 = 0x08001E90; -D_08001F70 = 0x08001F70; -D_080025C8 = 0x080025C8; -D_080032B0 = 0x080032B0; -D_08061000 = 0x08061000; -D_08062000 = 0x08062000; -D_08064340 = 0x08064340; -D_08095AC0 = 0x08095AC0; - -// segment 0x09 - -D_09007500 = 0x09007500; // segment 0x0A From 5619dc5b5e3a1507feb7828ccfd70fe67268ece4 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 23 Jun 2023 21:26:36 -0700 Subject: [PATCH 010/121] Load Docs (#1222) * Sync with OoT * Macro cleanup * Some cleanup/rename load system name to Fragment * Format * bss * Some clarifying comments regarding fragments * PR suggestions * size_t and numRelocations --- include/color.h | 4 + include/loadfragment.h | 42 ++++++ include/macros.h | 7 - include/variables.h | 3 - include/z64load.h | 31 ----- src/boot_O2/loadfragment.c | 144 +++++++++++++------- src/boot_O2/loadfragment2.c | 132 ++++++++++++------ src/code/graph.c | 2 +- src/code/z_DLF.c | 51 ++++--- src/code/z_actor.c | 11 +- src/code/z_actor_dlftbls.c | 4 +- src/code/z_effect_soft_sprite.c | 27 ++-- src/code/z_kaleido_manager.c | 10 +- src/code/z_lifemeter.c | 1 + src/code/z_overlay.c | 8 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 1 - tools/disasm/functions.txt | 12 +- tools/disasm/variables.txt | 2 +- tools/sizes/boot_functions.csv | 12 +- 19 files changed, 307 insertions(+), 197 deletions(-) create mode 100644 include/loadfragment.h delete mode 100644 include/z64load.h diff --git a/include/color.h b/include/color.h index b49ab8d78..def50caa8 100644 --- a/include/color.h +++ b/include/color.h @@ -73,4 +73,8 @@ typedef union{ #define RGBA8(r, g, b, a) ((((r) & 0xFF) << 24) | (((g) & 0xFF) << 16) | (((b) & 0xFF) << 8) | (((a) & 0xFF) << 0)) +#define RGBA16_GET_R(pixel) (((pixel) >> 11) & 0x1F) +#define RGBA16_GET_G(pixel) (((pixel) >> 6) & 0x1F) +#define RGBA16_GET_B(pixel) (((pixel) >> 1) & 0x1F) + #endif diff --git a/include/loadfragment.h b/include/loadfragment.h new file mode 100644 index 000000000..db1f3a322 --- /dev/null +++ b/include/loadfragment.h @@ -0,0 +1,42 @@ +#ifndef LOADFRAGMENT_H +#define LOADFRAGMENT_H + +#include "PR/ultratypes.h" +#include "libc/stdint.h" +#include "libc/stddef.h" + +extern s32 gOverlayLogSeverity; + +#define RELOC_SECTION(reloc) ((reloc) >> 30) +#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF) +#define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000) +#define RELOC_TYPE_SHIFT 24 + +/* MIPS Relocation Types */ +#define R_MIPS_32 2 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 + +typedef enum { + /* 0 */ RELOC_SECTION_NULL, + /* 1 */ RELOC_SECTION_TEXT, + /* 2 */ RELOC_SECTION_DATA, + /* 3 */ RELOC_SECTION_RODATA, + /* 4 */ RELOC_SECTION_MAX +} RelocSectionId; + +typedef struct OverlayRelocationSection { + /* 0x00 */ size_t textSize; + /* 0x04 */ size_t dataSize; + /* 0x08 */ size_t rodataSize; + /* 0x0C */ size_t bssSize; + /* 0x10 */ u32 numRelocations; + /* 0x14 */ u32 relocations[1]; // array count is numRelocations +} OverlayRelocationSection; // size >= 0x18 + +// Fragment overlay load functions +size_t Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart, uintptr_t vramEnd, void* allocatedRamAddr); +void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart, uintptr_t vramEnd); + +#endif diff --git a/include/macros.h b/include/macros.h index 7924066b6..1755a398c 100644 --- a/include/macros.h +++ b/include/macros.h @@ -104,10 +104,6 @@ #define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x)) #define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x)) -#define RGBA16_GET_R(pixel) (((pixel) >> 11) & 0x1F) -#define RGBA16_GET_G(pixel) (((pixel) >> 6) & 0x1F) -#define RGBA16_GET_B(pixel) (((pixel) >> 1) & 0x1F) - #define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) #define SWAP(type, a, b) \ @@ -118,7 +114,4 @@ } \ (void)0 -#define OVERLAY_RELOCATION_OFFSET(overlayEntry) ((uintptr_t)((overlayEntry)->vramStart) - (uintptr_t)((overlayEntry)->loadedRamAddr)) -#define VRAM_PTR_SIZE(entry) ((uintptr_t)((entry)->vramEnd) - (uintptr_t)((entry)->vramStart)) - #endif // MACROS_H diff --git a/include/variables.h b/include/variables.h index 9882fa0f4..a5d05901f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -35,9 +35,6 @@ extern const char* sCpuExceptions[18]; extern const char* sFpuExceptions[6]; extern FaultDrawer* sFaultDrawContext; extern FaultDrawer sFaultDrawerDefault; -extern s32 gLoadLogSeverity; -extern s32 gLoad2LogSeverity; - // extern UNK_TYPE1 sGfxPrintFontTLUT; // extern UNK_TYPE1 sGfxPrintRainbowTLUT; // extern UNK_TYPE1 sGfxPrintRainbowData; diff --git a/include/z64load.h b/include/z64load.h deleted file mode 100644 index 8570faf25..000000000 --- a/include/z64load.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef Z64LOAD_H -#define Z64LOAD_H - -#include "PR/ultratypes.h" - -#define RELOCATE_ADDR(addr, vRamStart, allocu32) ((addr) - (vRamStart) + (allocu32)) - -#define RELOC_SECTION(reloc) ((reloc) >> 30) -#define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF) -#define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000) -#define RELOC_TYPE_SHIFT 24 - -/* MIPS Relocation Types */ -#define R_MIPS_32 2 -#define R_MIPS_26 4 -#define R_MIPS_HI16 5 -#define R_MIPS_LO16 6 - -typedef struct { - /* 0x00 */ u32 textSize; - /* 0x04 */ u32 dataSize; - /* 0x08 */ u32 rodataSize; - /* 0x0C */ u32 bssSize; - /* 0x10 */ u32 nRelocations; - /* 0x14 */ u32 relocations[1]; -} OverlayRelocationSection; // size >= 0x18 - -size_t Load2_LoadOverlay(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart, uintptr_t vRamEnd, void* allocatedVRamAddr); -void* Load2_AllocateAndLoad(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart, uintptr_t vRamEnd); - -#endif diff --git a/src/boot_O2/loadfragment.c b/src/boot_O2/loadfragment.c index 17ed6b8ef..517c82bbb 100644 --- a/src/boot_O2/loadfragment.c +++ b/src/boot_O2/loadfragment.c @@ -1,42 +1,81 @@ /** * @file loadfragment.c * - * Functions used to process and relocate overlays + * Functions used to process and relocate dynamically loadable code segments (overlays). * * @note: - * These are completly unused in favor of the functions in `loadfragment2.c`. + * These are completly unused in favor of the fragment overlay functions in `loadfragment2.c`. * - * The main difference between them seems to be the lack of vRamEnd arguments here. + * The main difference between them seems to be the lack of vramEnd arguments here. * Instead they are calculated on the fly. */ #include "global.h" #include "system_malloc.h" -#include "z64load.h" +#include "loadfragment.h" s32 gLoadLogSeverity = 2; -void Load_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintptr_t vRamStart) { - u32 sections[4]; +// Extract MIPS register rs from an instruction word +#define MIPS_REG_RS(insn) (((insn) >> 0x15) & 0x1F) + +// Extract MIPS register rt from an instruction word +#define MIPS_REG_RT(insn) (((insn) >> 0x10) & 0x1F) + +// Extract MIPS jump target from an instruction word +#define MIPS_JUMP_TARGET(insn) (((insn)&0x03FFFFFF) << 2) + +/** + * Performs runtime relocation of overlay files, loadable code segments. + * + * Overlays are expected to be loadable anywhere in direct-mapped cached (KSEG0) memory, with some appropriate + * alignment requirements; memory addresses in such code must be updated once loaded to execute properly. + * When compiled, overlays are given 'fake' KSEG0 RAM addresses larger than the total possible available main memory + * (>= 0x80800000), such addresses are referred to as Virtual RAM (VRAM) to distinguish them. When loading the overlay, + * the relocation table produced at compile time is consulted to determine where and how to update these VRAM addresses + * to correct RAM addresses based on the location the overlay was loaded at, enabling the code to execute at this + * address as if it were compiled to run at this address. + * + * Each relocation is represented by a packed 32-bit value, formatted in the following way: + * - [31:30] 2-bit section id, taking values from the `RelocSectionId` enum. + * - [29:24] 6-bit relocation type describing which relocation operation should be performed. Same as ELF32 MIPS. + * - [23: 0] 24-bit section-relative offset indicating where in the section to apply this relocation. + * + * @param allocatedRamAddr Memory address the binary was loaded at. + * @param ovlRelocs Overlay relocation section containing overlay section layout and runtime relocations. + * @param vramStart Virtual RAM address that the overlay was compiled at. + */ +void Fragment_Relocate(void* allocatedRamAddr, OverlayRelocationSection* ovlRelocs, uintptr_t vramStart) { + u32 sections[RELOC_SECTION_MAX]; u32* relocDataP; u32 reloc; uintptr_t relocatedAddress; u32 i; u32* luiInstRef; - uintptr_t allocu32 = (uintptr_t)allocatedVRamAddr; + uintptr_t allocu32 = (uintptr_t)allocatedRamAddr; u32* regValP; + //! MIPS ELF relocation does not generally require tracking register values, so at first glance it appears this + //! register tracking was an unnecessary complication. However there is a bug in the IDO compiler that can cause + //! relocations to be emitted in the wrong order under rare circumstances when the compiler attempts to reuse a + //! previous HI16 relocation for a different LO16 relocation as an optimization. This register tracking is likely + //! a workaround to prevent improper matching of unrelated HI16 and LO16 relocations that would otherwise arise + //! due to the incorrect ordering. u32* luiRefs[32]; u32 luiVals[32]; u32 isLoNeg; if (gLoadLogSeverity >= 3) {} - sections[0] = 0; - sections[1] = allocu32; - sections[2] = allocu32 + ovl->textSize; - sections[3] = sections[2] + ovl->dataSize; + sections[RELOC_SECTION_NULL] = 0; + sections[RELOC_SECTION_TEXT] = allocu32; + sections[RELOC_SECTION_DATA] = allocu32 + ovlRelocs->textSize; + sections[RELOC_SECTION_RODATA] = sections[RELOC_SECTION_DATA] + ovlRelocs->dataSize; - for (i = 0; i < ovl->nRelocations; i++) { - reloc = ovl->relocations[i]; + for (i = 0; i < ovlRelocs->numRelocations; i++) { + // This will always resolve to a 32-bit aligned address as each section + // containing code or pointers must be aligned to at least 4 bytes and the + // MIPS ABI defines the offset of both 16-bit and 32-bit relocations to be + // the start of the 32-bit word containing the target. + reloc = ovlRelocs->relocations[i]; relocDataP = (u32*)(sections[RELOC_SECTION(reloc)] + RELOC_OFFSET(reloc)); switch (RELOC_TYPE_MASK(reloc)) { @@ -46,7 +85,7 @@ void Load_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintp // Check address is valid for relocation if ((*relocDataP & 0x0F000000) == 0) { - *relocDataP = RELOCATE_ADDR(*relocDataP, vRamStart, allocu32); + *relocDataP = *relocDataP - vramStart + allocu32; } else if (gLoadLogSeverity >= 3) { } break; @@ -56,10 +95,11 @@ void Load_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintp // Extract the address from the target field of the J-type MIPS instruction. // Relocate the address and update the instruction. - *relocDataP = - (*relocDataP & 0xFC000000) | - ((RELOCATE_ADDR(PHYS_TO_K0((*relocDataP & 0x03FFFFFF) << 2), vRamStart, allocu32) & 0x0FFFFFFF) >> - 2); + if (1) { + *relocDataP = + (*relocDataP & 0xFC000000) | + (((PHYS_TO_K0(MIPS_JUMP_TARGET(*relocDataP)) - vramStart + allocu32) & 0x0FFFFFFF) >> 2); + } break; case R_MIPS_HI16 << RELOC_TYPE_SHIFT: @@ -83,7 +123,7 @@ void Load_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintp // Check address is valid for relocation if ((((*luiInstRef << 0x10) + (s16)*relocDataP) & 0x0F000000) == 0) { - relocatedAddress = RELOCATE_ADDR((*regValP << 0x10) + (s16)*relocDataP, vRamStart, allocu32); + relocatedAddress = ((*regValP << 0x10) + (s16)*relocDataP) - vramStart + allocu32; isLoNeg = (relocatedAddress & 0x8000) ? 1 : 0; *luiInstRef = (*luiInstRef & 0xFFFF0000) | (((relocatedAddress >> 0x10) & 0xFFFF) + isLoNeg); *relocDataP = (*relocDataP & 0xFFFF0000) | (relocatedAddress & 0xFFFF); @@ -94,97 +134,97 @@ void Load_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintp } } -size_t Load_LoadOverlay(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart, void* allocatedVRamAddr, - size_t allocatedBytes) { - size_t size = vRomEnd - vRomStart; +size_t Fragment_Load(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart, void* allocatedRamAddr, + size_t allocatedBytes) { + size_t size = vromEnd - vromStart; void* end; s32 pad; - OverlayRelocationSection* ovl; + OverlayRelocationSection* ovlRelocs; if (gLoadLogSeverity >= 3) {} if (gLoadLogSeverity >= 3) {} - end = (uintptr_t)allocatedVRamAddr + size; - DmaMgr_SendRequest0(allocatedVRamAddr, vRomStart, size); + end = (uintptr_t)allocatedRamAddr + size; + DmaMgr_SendRequest0(allocatedRamAddr, vromStart, size); - ovl = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); + ovlRelocs = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); if (gLoadLogSeverity >= 3) {} - if (allocatedBytes < ovl->bssSize + size) { + if (allocatedBytes < ovlRelocs->bssSize + size) { if (gLoadLogSeverity >= 3) {} return 0; } - allocatedBytes = ovl->bssSize + size; + allocatedBytes = ovlRelocs->bssSize + size; if (gLoadLogSeverity >= 3) {} - Load_Relocate(allocatedVRamAddr, ovl, vRamStart); + Fragment_Relocate(allocatedRamAddr, ovlRelocs, vramStart); - if (ovl->bssSize != 0) { + if (ovlRelocs->bssSize != 0) { if (gLoadLogSeverity >= 3) {} - bzero(end, ovl->bssSize); + bzero(end, ovlRelocs->bssSize); } - osWritebackDCache(allocatedVRamAddr, allocatedBytes); - osInvalICache(allocatedVRamAddr, allocatedBytes); + osWritebackDCache(allocatedRamAddr, allocatedBytes); + osInvalICache(allocatedRamAddr, allocatedBytes); if (gLoadLogSeverity >= 3) {} return allocatedBytes; } -void* Load_AllocateAndLoad(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart) { - size_t size = vRomEnd - vRomStart; +void* Fragment_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart) { + size_t size = vromEnd - vromStart; void* end; - void* allocatedVRamAddr; + void* allocatedRamAddr; uintptr_t ovlOffset; - OverlayRelocationSection* ovl; + OverlayRelocationSection* ovlRelocs; size_t allocatedBytes; if (gLoadLogSeverity >= 3) {} - allocatedVRamAddr = SystemArena_MallocR(size); - end = (uintptr_t)allocatedVRamAddr + size; + allocatedRamAddr = SystemArena_MallocR(size); + end = (uintptr_t)allocatedRamAddr + size; if (gLoadLogSeverity >= 3) {} - DmaMgr_SendRequest0(allocatedVRamAddr, vRomStart, size); + DmaMgr_SendRequest0(allocatedRamAddr, vromStart, size); if (gLoadLogSeverity >= 3) {} ovlOffset = (uintptr_t)end - 4; - ovl = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); + ovlRelocs = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); if (1) {} - allocatedBytes = ovl->bssSize + size; + allocatedBytes = ovlRelocs->bssSize + size; - allocatedVRamAddr = SystemArena_Realloc(allocatedVRamAddr, allocatedBytes); + allocatedRamAddr = SystemArena_Realloc(allocatedRamAddr, allocatedBytes); if (gLoadLogSeverity >= 3) {} - if (allocatedVRamAddr == NULL) { + if (allocatedRamAddr == NULL) { if (gLoadLogSeverity >= 3) {} - return allocatedVRamAddr; + return allocatedRamAddr; } - end = (uintptr_t)allocatedVRamAddr + size; - ovl = (OverlayRelocationSection*)((uintptr_t)end - *(uintptr_t*)ovlOffset); + end = (uintptr_t)allocatedRamAddr + size; + ovlRelocs = (OverlayRelocationSection*)((uintptr_t)end - *(uintptr_t*)ovlOffset); if (gLoadLogSeverity >= 3) {} - Load_Relocate(allocatedVRamAddr, ovl, vRamStart); + Fragment_Relocate(allocatedRamAddr, ovlRelocs, vramStart); - if (ovl->bssSize != 0) { + if (ovlRelocs->bssSize != 0) { if (gLoadLogSeverity >= 3) {} - bzero(end, ovl->bssSize); + bzero(end, ovlRelocs->bssSize); } - osInvalICache(allocatedVRamAddr, allocatedBytes); + osInvalICache(allocatedRamAddr, allocatedBytes); if (gLoadLogSeverity >= 3) {} - return allocatedVRamAddr; + return allocatedRamAddr; } diff --git a/src/boot_O2/loadfragment2.c b/src/boot_O2/loadfragment2.c index 51b651c2b..6925aaaac 100644 --- a/src/boot_O2/loadfragment2.c +++ b/src/boot_O2/loadfragment2.c @@ -1,37 +1,78 @@ /** * @file loadfragment2.c * - * Functions used to process and relocate overlays + * Functions used to process and relocate dynamically loadable code segments (overlays). * + * @note: + * These are for specific fragment overlays with the .ovl file extension */ #include "global.h" #include "system_malloc.h" -#include "z64load.h" +#include "loadfragment.h" -s32 gLoad2LogSeverity = 2; +s32 gOverlayLogSeverity = 2; -void Load2_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uintptr_t vRamStart) { - u32 sections[4]; +// Extract MIPS register rs from an instruction word +#define MIPS_REG_RS(insn) (((insn) >> 0x15) & 0x1F) + +// Extract MIPS register rt from an instruction word +#define MIPS_REG_RT(insn) (((insn) >> 0x10) & 0x1F) + +// Extract MIPS jump target from an instruction word +#define MIPS_JUMP_TARGET(insn) (((insn)&0x03FFFFFF) << 2) + +/** + * Performs runtime relocation of overlay files, loadable code segments. + * + * Overlays are expected to be loadable anywhere in direct-mapped cached (KSEG0) memory, with some appropriate + * alignment requirements; memory addresses in such code must be updated once loaded to execute properly. + * When compiled, overlays are given 'fake' KSEG0 RAM addresses larger than the total possible available main memory + * (>= 0x80800000), such addresses are referred to as Virtual RAM (VRAM) to distinguish them. When loading the overlay, + * the relocation table produced at compile time is consulted to determine where and how to update these VRAM addresses + * to correct RAM addresses based on the location the overlay was loaded at, enabling the code to execute at this + * address as if it were compiled to run at this address. + * + * Each relocation is represented by a packed 32-bit value, formatted in the following way: + * - [31:30] 2-bit section id, taking values from the `RelocSectionId` enum. + * - [29:24] 6-bit relocation type describing which relocation operation should be performed. Same as ELF32 MIPS. + * - [23: 0] 24-bit section-relative offset indicating where in the section to apply this relocation. + * + * @param allocatedRamAddress Memory address the binary was loaded at. + * @param ovlRelocs Overlay relocation section containing overlay section layout and runtime relocations. + * @param vramStart Virtual RAM address that the overlay was compiled at. + */ +void Overlay_Relocate(void* allocatedRamAddr, OverlayRelocationSection* ovlRelocs, uintptr_t vramStart) { + u32 sections[RELOC_SECTION_MAX]; u32* relocDataP; u32 reloc; uintptr_t relocatedAddress; u32 i; u32* luiInstRef; - uintptr_t allocu32 = (uintptr_t)allocatedVRamAddr; + uintptr_t allocu32 = (uintptr_t)allocatedRamAddr; u32* regValP; + //! MIPS ELF relocation does not generally require tracking register values, so at first glance it appears this + //! register tracking was an unnecessary complication. However there is a bug in the IDO compiler that can cause + //! relocations to be emitted in the wrong order under rare circumstances when the compiler attempts to reuse a + //! previous HI16 relocation for a different LO16 relocation as an optimization. This register tracking is likely + //! a workaround to prevent improper matching of unrelated HI16 and LO16 relocations that would otherwise arise + //! due to the incorrect ordering. u32* luiRefs[32]; u32 luiVals[32]; u32 isLoNeg; - if (gLoad2LogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} - sections[0] = 0; - sections[1] = allocu32; - sections[2] = allocu32 + ovl->textSize; - sections[3] = sections[2] + ovl->dataSize; + sections[RELOC_SECTION_NULL] = 0; + sections[RELOC_SECTION_TEXT] = allocu32; + sections[RELOC_SECTION_DATA] = allocu32 + ovlRelocs->textSize; + sections[RELOC_SECTION_RODATA] = sections[RELOC_SECTION_DATA] + ovlRelocs->dataSize; - for (i = 0; i < ovl->nRelocations; i++) { - reloc = ovl->relocations[i]; + for (i = 0; i < ovlRelocs->numRelocations; i++) { + // This will always resolve to a 32-bit aligned address as each section + // containing code or pointers must be aligned to at least 4 bytes and the + // MIPS ABI defines the offset of both 16-bit and 32-bit relocations to be + // the start of the 32-bit word containing the target. + reloc = ovlRelocs->relocations[i]; relocDataP = (u32*)(sections[RELOC_SECTION(reloc)] + RELOC_OFFSET(reloc)); switch (RELOC_TYPE_MASK(reloc)) { @@ -41,8 +82,8 @@ void Load2_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uint // Check address is valid for relocation if ((*relocDataP & 0x0F000000) == 0) { - *relocDataP = RELOCATE_ADDR(*relocDataP, vRamStart, allocu32); - } else if (gLoad2LogSeverity >= 3) { + *relocDataP = *relocDataP - vramStart + allocu32; + } else if (gOverlayLogSeverity >= 3) { } break; @@ -51,10 +92,11 @@ void Load2_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uint // Extract the address from the target field of the J-type MIPS instruction. // Relocate the address and update the instruction. - *relocDataP = - (*relocDataP & 0xFC000000) | - ((RELOCATE_ADDR(PHYS_TO_K0((*relocDataP & 0x03FFFFFF) << 2), vRamStart, allocu32) & 0x0FFFFFFF) >> - 2); + if (1) { + *relocDataP = + (*relocDataP & 0xFC000000) | + (((PHYS_TO_K0(MIPS_JUMP_TARGET(*relocDataP)) - vramStart + allocu32) & 0x0FFFFFFF) >> 2); + } break; case R_MIPS_HI16 << RELOC_TYPE_SHIFT: @@ -78,58 +120,58 @@ void Load2_Relocate(void* allocatedVRamAddr, OverlayRelocationSection* ovl, uint // Check address is valid for relocation if ((((*luiInstRef << 0x10) + (s16)*relocDataP) & 0x0F000000) == 0) { - relocatedAddress = RELOCATE_ADDR((*regValP << 0x10) + (s16)*relocDataP, vRamStart, allocu32); + relocatedAddress = ((*regValP << 0x10) + (s16)*relocDataP) - vramStart + allocu32; isLoNeg = (relocatedAddress & 0x8000) ? 1 : 0; *luiInstRef = (*luiInstRef & 0xFFFF0000) | (((relocatedAddress >> 0x10) & 0xFFFF) + isLoNeg); *relocDataP = (*relocDataP & 0xFFFF0000) | (relocatedAddress & 0xFFFF); - } else if (gLoad2LogSeverity >= 3) { + } else if (gOverlayLogSeverity >= 3) { } break; } } } -size_t Load2_LoadOverlay(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart, uintptr_t vRamEnd, - void* allocatedVRamAddr) { +size_t Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart, uintptr_t vramEnd, + void* allocatedRamAddr) { s32 pad[2]; - s32 size = vRomEnd - vRomStart; + s32 size = vromEnd - vromStart; void* end; - OverlayRelocationSection* ovl; + OverlayRelocationSection* ovlRelocs; - if (gLoad2LogSeverity >= 3) {} - if (gLoad2LogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} - end = (uintptr_t)allocatedVRamAddr + size; - DmaMgr_SendRequest0(allocatedVRamAddr, vRomStart, size); + end = (uintptr_t)allocatedRamAddr + size; + DmaMgr_SendRequest0(allocatedRamAddr, vromStart, size); - ovl = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); + ovlRelocs = (OverlayRelocationSection*)((uintptr_t)end - ((s32*)end)[-1]); - if (gLoad2LogSeverity >= 3) {} - if (gLoad2LogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} - Load2_Relocate(allocatedVRamAddr, ovl, vRamStart); + Overlay_Relocate(allocatedRamAddr, ovlRelocs, vramStart); - if (ovl->bssSize != 0) { - if (gLoad2LogSeverity >= 3) {} - bzero(end, ovl->bssSize); + if (ovlRelocs->bssSize != 0) { + if (gOverlayLogSeverity >= 3) {} + bzero(end, ovlRelocs->bssSize); } - size = vRamEnd - vRamStart; + size = vramEnd - vramStart; - osWritebackDCache(allocatedVRamAddr, size); - osInvalICache(allocatedVRamAddr, size); + osWritebackDCache(allocatedRamAddr, size); + osInvalICache(allocatedRamAddr, size); - if (gLoad2LogSeverity >= 3) {} + if (gOverlayLogSeverity >= 3) {} return size; } -void* Load2_AllocateAndLoad(uintptr_t vRomStart, uintptr_t vRomEnd, uintptr_t vRamStart, uintptr_t vRamEnd) { - void* allocatedVRamAddr = SystemArena_MallocR(vRamEnd - vRamStart); +void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, uintptr_t vramStart, uintptr_t vramEnd) { + void* allocatedRamAddr = SystemArena_MallocR(vramEnd - vramStart); - if (allocatedVRamAddr != NULL) { - Load2_LoadOverlay(vRomStart, vRomEnd, vRamStart, vRamEnd, allocatedVRamAddr); + if (allocatedRamAddr != NULL) { + Overlay_Load(vromStart, vromEnd, vramStart, vramEnd, allocatedRamAddr); } - return allocatedVRamAddr; + return allocatedRamAddr; } diff --git a/src/code/graph.c b/src/code/graph.c index eca40bbaf..f4f04fc1f 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -101,7 +101,7 @@ void* Graph_FaultAddrConv(void* address, void* param) { s32 i; for (i = 0; i < gGraphNumGameStates; i++, gameStateOvl++) { - diff = VRAM_PTR_SIZE(gameStateOvl); + diff = (uintptr_t)gameStateOvl->vramEnd - (uintptr_t)gameStateOvl->vramStart; ramStart = gameStateOvl->loadedRamAddr; ramConv = (uintptr_t)gameStateOvl->vramStart - (uintptr_t)ramStart; diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c index aa5c0325d..036777d49 100644 --- a/src/code/z_DLF.c +++ b/src/code/z_DLF.c @@ -1,6 +1,6 @@ #include "global.h" #include "system_malloc.h" -#include "z64load.h" +#include "loadfragment.h" void Overlay_LoadGameState(GameStateOverlay* overlayEntry) { void* vramStart; @@ -13,29 +13,38 @@ void Overlay_LoadGameState(GameStateOverlay* overlayEntry) { overlayEntry->unk_28 = 0; return; } - overlayEntry->loadedRamAddr = Load2_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd, - (uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd); + overlayEntry->loadedRamAddr = Overlay_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd, + (uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd); if (overlayEntry->loadedRamAddr != NULL) { overlayEntry->unk_14 = (uintptr_t)( (overlayEntry->unk_14 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_14 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_14 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); - overlayEntry->init = - (uintptr_t)((overlayEntry->init != NULL) - ? (void*)((uintptr_t)overlayEntry->init - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) - : NULL); + + overlayEntry->init = (uintptr_t)( + (overlayEntry->init != NULL) + ? (void*)((uintptr_t)overlayEntry->init - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + overlayEntry->destroy = (uintptr_t)( (overlayEntry->destroy != NULL) - ? (void*)((uintptr_t)overlayEntry->destroy - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->destroy - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->unk_20 = (uintptr_t)( (overlayEntry->unk_20 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_20 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_20 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->unk_24 = (uintptr_t)( (overlayEntry->unk_24 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_24 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_24 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); overlayEntry->unk_28 = 0; @@ -50,24 +59,34 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) { if (var_v0 == 0) { overlayEntry->unk_14 = (uintptr_t)( (overlayEntry->unk_14 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_14 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_14 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->init = (uintptr_t)( (overlayEntry->init != NULL) - ? (void*)((uintptr_t)overlayEntry->init + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->init + + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->destroy = (uintptr_t)( (overlayEntry->destroy != NULL) - ? (void*)((uintptr_t)overlayEntry->destroy + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->destroy + + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->unk_20 = (uintptr_t)( (overlayEntry->unk_20 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_20 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_20 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + overlayEntry->unk_24 = (uintptr_t)( (overlayEntry->unk_24 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_24 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->unk_24 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); + SystemArena_Free(overlayEntry->loadedRamAddr); overlayEntry->loadedRamAddr = NULL; } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index ac014e5ca..9d1ec98a5 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4,8 +4,8 @@ */ #include "global.h" +#include "loadfragment.h" #include "z64horse.h" -#include "z64load.h" #include "z64quake.h" #include "z64rumble.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" @@ -3157,7 +3157,7 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) { ActorOverlay* overlayEntry = &gActorOverlayTable[index]; ActorInit* actorInit; - overlaySize = VRAM_PTR_SIZE(overlayEntry); + overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart; if (overlayEntry->vramStart == NULL) { actorInit = overlayEntry->initInfo; @@ -3178,14 +3178,15 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) { return NULL; } - Load2_LoadOverlay(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, - overlayEntry->vramEnd, overlayEntry->loadedRamAddr); + Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd, + overlayEntry->loadedRamAddr); overlayEntry->numLoaded = 0; } actorInit = (uintptr_t)( (overlayEntry->initInfo != NULL) - ? (void*)((uintptr_t)overlayEntry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry)) + ? (void*)((uintptr_t)overlayEntry->initInfo - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) : NULL); } diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 1008cceab..2e2f80a50 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -52,7 +52,7 @@ void ActorOverlayTable_FaultClient(void* arg0, void* arg1) { FaultDrawer_Printf("No. RamStart- RamEnd cn Name\n"); for (actorId = 0, overlayEntry = &gActorOverlayTable[0]; actorId < gMaxActorId; actorId++, overlayEntry++) { - overlaySize = VRAM_PTR_SIZE(overlayEntry); + overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart; if (overlayEntry->loadedRamAddr != NULL) { FaultDrawer_Printf("%3d %08x-%08x %3d %s\n", actorId, overlayEntry->loadedRamAddr, (u32)overlayEntry->loadedRamAddr + overlaySize, overlayEntry->numLoaded, ""); @@ -69,7 +69,7 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param) { ActorId actorId; for (actorId = 0; actorId < gMaxActorId; actorId++, actorOvl++) { - diff = VRAM_PTR_SIZE(actorOvl); + diff = (uintptr_t)actorOvl->vramEnd - (uintptr_t)actorOvl->vramStart; ramStart = actorOvl->loadedRamAddr; ramConv = (uintptr_t)actorOvl->vramStart - (uintptr_t)ramStart; diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 186608729..0c247998e 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -1,5 +1,5 @@ #include "global.h" -#include "z64load.h" +#include "loadfragment.h" EffectSsInfo sEffectSsInfo = { NULL, 0, 0 }; @@ -164,7 +164,7 @@ void EffectSS_Copy(PlayState* play, EffectSs* effectsSs) { void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) { s32 index; u32 overlaySize; - EffectSsOverlay* entry = &gParticleOverlayTable[type]; + EffectSsOverlay* overlayEntry = &gParticleOverlayTable[type]; EffectSsInit* initInfo; if (EffectSS_FindFreeSpace(priority, &index) != 0) { @@ -173,24 +173,27 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) { } sEffectSsInfo.searchIndex = index + 1; - overlaySize = VRAM_PTR_SIZE(entry); + overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart; - if (entry->vramStart == NULL) { - initInfo = entry->initInfo; + if (overlayEntry->vramStart == NULL) { + initInfo = overlayEntry->initInfo; } else { - if (entry->loadedRamAddr == NULL) { - entry->loadedRamAddr = ZeldaArena_MallocR(overlaySize); + if (overlayEntry->loadedRamAddr == NULL) { + overlayEntry->loadedRamAddr = ZeldaArena_MallocR(overlaySize); - if (entry->loadedRamAddr == NULL) { + if (overlayEntry->loadedRamAddr == NULL) { return; } - Load2_LoadOverlay(entry->vromStart, entry->vromEnd, entry->vramStart, entry->vramEnd, entry->loadedRamAddr); + Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd, + overlayEntry->loadedRamAddr); } - initInfo = (uintptr_t)((entry->initInfo != NULL) - ? (void*)((uintptr_t)entry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(entry)) - : NULL); + initInfo = (uintptr_t)( + (overlayEntry->initInfo != NULL) + ? (void*)((uintptr_t)overlayEntry->initInfo - + (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); } if (initInfo->init != NULL) { diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c index 0d9f30a08..a84e74776 100644 --- a/src/code/z_kaleido_manager.c +++ b/src/code/z_kaleido_manager.c @@ -1,5 +1,5 @@ #include "global.h" -#include "z64load.h" +#include "loadfragment.h" #define KALEIDO_OVERLAY(name) \ { \ @@ -24,7 +24,7 @@ void* KaleidoManager_FaultAddrConv(void* address, void* param) { size_t diff; if (kaleidoMgrOvl != NULL) { - diff = VRAM_PTR_SIZE(kaleidoMgrOvl); + diff = (uintptr_t)kaleidoMgrOvl->vramEnd - (uintptr_t)kaleidoMgrOvl->vramStart; ramStart = kaleidoMgrOvl->loadedRamAddr; ramConv = (uintptr_t)kaleidoMgrOvl->vramStart - (uintptr_t)ramStart; @@ -39,7 +39,7 @@ void* KaleidoManager_FaultAddrConv(void* address, void* param) { void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) { ovl->loadedRamAddr = sKaleidoAreaPtr; - Load2_LoadOverlay(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr); + Overlay_Load(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr); ovl->offset = (uintptr_t)ovl->loadedRamAddr - (uintptr_t)ovl->vramStart; gKaleidoMgrCurOvl = ovl; } @@ -47,7 +47,7 @@ void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) { void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl) { if (ovl->loadedRamAddr != NULL) { ovl->offset = 0; - bzero(ovl->loadedRamAddr, VRAM_PTR_SIZE(ovl)); + bzero(ovl->loadedRamAddr, (uintptr_t)ovl->vramEnd - (uintptr_t)ovl->vramStart); ovl->loadedRamAddr = NULL; gKaleidoMgrCurOvl = NULL; } @@ -59,7 +59,7 @@ void KaleidoManager_Init(PlayState* play) { u32 i; for (i = 0; i < ARRAY_COUNT(gKaleidoMgrOverlayTable); i++) { - size = VRAM_PTR_SIZE(&gKaleidoMgrOverlayTable[i]); + size = (uintptr_t)gKaleidoMgrOverlayTable[i].vramEnd - (uintptr_t)gKaleidoMgrOverlayTable[i].vramStart; if (size > largestSize) { largestSize = size; } diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index 5d1299bbf..d9abe151d 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #include "interface/parameter_static/parameter_static.h" diff --git a/src/code/z_overlay.c b/src/code/z_overlay.c index 2c8c8d6d7..2e348c336 100644 --- a/src/code/z_overlay.c +++ b/src/code/z_overlay.c @@ -13,7 +13,7 @@ */ #include "global.h" -#include "z64load.h" +#include "loadfragment.h" void* TransitionOverlay_VramToRam(TransitionOverlay* overlayEntry, void* vramAddr) { void* loadedRamAddr = Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr); @@ -40,13 +40,13 @@ s32 TransitionOverlay_Load(TransitionOverlay* overlayEntry) { return 3; } if (Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr) == NULL) { - loadedRamAddr = ZeldaArena_Malloc(VRAM_PTR_SIZE(overlayEntry)); + loadedRamAddr = ZeldaArena_Malloc((uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart); if (loadedRamAddr == NULL) { return -1; } - Load2_LoadOverlay(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, - overlayEntry->vramEnd, loadedRamAddr); + Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd, + loadedRamAddr); overlayEntry->loadInfo.addr = Lib_VirtualToPhysical(loadedRamAddr); overlayEntry->loadInfo.count = 1; return 0; 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 aefc6385b..7ad778659 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -3,7 +3,6 @@ * Overlay: ovl_En_Twig * Description: Beaver Race Ring */ - #include "z_en_twig.h" #include "objects/object_twig/object_twig.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 64fe6b2ec..d7c955ea4 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -109,12 +109,12 @@ 0x800848B8:("FaultDrawer_Init",), 0x80084940:("func_80084940",), 0x80084968:("func_80084968",), - 0x800849A0:("Load_Relocate",), - 0x80084C0C:("Load_LoadOverlay",), - 0x80084CD0:("Load_AllocateAndLoad",), - 0x80084DB0:("Load2_Relocate",), - 0x8008501C:("Load2_LoadOverlay",), - 0x800850C8:("Load2_AllocateAndLoad",), + 0x800849A0:("Fragment_Relocate",), + 0x80084C0C:("Fragment_Load",), + 0x80084CD0:("Fragment_AllocateAndLoad",), + 0x80084DB0:("Overlay_Relocate",), + 0x8008501C:("Overlay_Load",), + 0x800850C8:("Overlay_AllocateAndLoad",), 0x80085130:("PadUtils_Init",), 0x80085150:("func_80085150",), 0x80085158:("PadUtils_ResetPressRel",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b581ef1e6..3376dbef4 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -28,7 +28,7 @@ 0x80096BE0:("sFaultDrawContext","FaultDrawer*","",0x4), 0x80096BE4:("sFaultDrawerDefault","FaultDrawer","",0x3c), 0x80096C20:("gLoadLogSeverity","UNK_TYPE4","",0x4), - 0x80096C30:("gLoad2LogSeverity","UNK_TYPE4","",0x4), + 0x80096C30:("gOverlayLogSeverity","UNK_TYPE4","",0x4), 0x80096C40:("sStackInfoListStart","StackEntry*","",0x4), 0x80096C44:("sStackInfoListEnd","StackEntry*","",0x4), 0x80096C50:("sGfxPrintFontTLUT","u16","[64]",0x80), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index ecc9eed27..276d4954c 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -106,12 +106,12 @@ asm/non_matchings/boot/fault_drawer/FaultDrawer_SetInputCallback.s,FaultDrawer_S asm/non_matchings/boot/fault_drawer/FaultDrawer_Init.s,FaultDrawer_Init,0x800848B8,0x22 asm/non_matchings/boot/boot_80084940/func_80084940.s,func_80084940,0x80084940,0xA asm/non_matchings/boot/boot_80084940/func_80084968.s,func_80084968,0x80084968,0xE -asm/non_matchings/boot/loadfragment/Load_Relocate.s,Load_Relocate,0x800849A0,0x9B -asm/non_matchings/boot/loadfragment/Load_LoadOverlay.s,Load_LoadOverlay,0x80084C0C,0x31 -asm/non_matchings/boot/loadfragment/Load_AllocateAndLoad.s,Load_AllocateAndLoad,0x80084CD0,0x38 -asm/non_matchings/boot/loadfragment2/Load2_Relocate.s,Load2_Relocate,0x80084DB0,0x9B -asm/non_matchings/boot/loadfragment2/Load2_LoadOverlay.s,Load2_LoadOverlay,0x8008501C,0x2B -asm/non_matchings/boot/loadfragment2/Load2_AllocateAndLoad.s,Load2_AllocateAndLoad,0x800850C8,0x1A +asm/non_matchings/boot/loadfragment/Fragment_Relocate.s,Fragment_Relocate,0x800849A0,0x9B +asm/non_matchings/boot/loadfragment/Fragment_Load.s,Fragment_Load,0x80084C0C,0x31 +asm/non_matchings/boot/loadfragment/Fragment_AllocateAndLoad.s,Fragment_AllocateAndLoad,0x80084CD0,0x38 +asm/non_matchings/boot/loadfragment2/Overlay_Relocate.s,Overlay_Relocate,0x80084DB0,0x9B +asm/non_matchings/boot/loadfragment2/Overlay_Load.s,Overlay_Load,0x8008501C,0x2B +asm/non_matchings/boot/loadfragment2/Overlay_AllocateAndLoad.s,Overlay_AllocateAndLoad,0x800850C8,0x1A asm/non_matchings/boot/padutils/PadUtils_Init.s,PadUtils_Init,0x80085130,0x8 asm/non_matchings/boot/padutils/func_80085150.s,func_80085150,0x80085150,0x2 asm/non_matchings/boot/padutils/PadUtils_ResetPressRel.s,PadUtils_ResetPressRel,0x80085158,0x3 From 19da43859e700a3f312133130e9d897b33e5f389 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 24 Jun 2023 16:39:55 +1000 Subject: [PATCH 011/121] Document Player's bgcheck routine (#1275) * Thanks Fig * cleanup * more docs * cleanup * oops * cleanup comment * add comment to SurfaceType_GetSceneExitIndex * fix bss --- include/z64bgcheck.h | 2 + include/z64player.h | 41 +- src/code/z_bgcheck.c | 3 + .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- .../actors/ovl_player_actor/z_player.c | 1037 +++++++++-------- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 22 +- 9 files changed, 600 insertions(+), 519 deletions(-) diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h index 91a892e03..2df706cb2 100644 --- a/include/z64bgcheck.h +++ b/include/z64bgcheck.h @@ -223,6 +223,8 @@ typedef enum ConveyorSpeed { /* 4 */ CONVEYOR_SPEED_MAX } ConveyorSpeed; +#define CONVEYOR_DIRECTION_TO_BINANG(conveyorDirection) ((conveyorDirection) * (0x10000 / 64)) + typedef struct { /* 0x0 */ u32 data[2]; diff --git a/include/z64player.h b/include/z64player.h index 598e75246..39767ada6 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -524,22 +524,32 @@ typedef struct PlayerAnimationFrame { #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 enum PlayerLedgeClimbType { + /* 0 */ PLAYER_LEDGE_CLIMB_NONE, + /* 1 */ PLAYER_LEDGE_CLIMB_1, + /* 2 */ PLAYER_LEDGE_CLIMB_2, + /* 3 */ PLAYER_LEDGE_CLIMB_3, + /* 4 */ PLAYER_LEDGE_CLIMB_4 +} PlayerLedgeClimbType; + +#define LEDGE_DIST_MAX 399.96002f + typedef struct PlayerAgeProperties { - /* 0x00 */ f32 unk_00; // ceilingCheckHeight + /* 0x00 */ f32 ceilingCheckHeight; /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; - /* 0x14 */ f32 unk_14; // compared to wallHeight - /* 0x18 */ f32 unk_18; // compared to wallHeight - /* 0x1C */ f32 unk_1C; // compared to wallHeight + /* 0x14 */ f32 unk_14; // compared to yDistToLedge + /* 0x18 */ f32 unk_18; // compared to yDistToLedge + /* 0x1C */ f32 unk_1C; // compared to yDistToLedge /* 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 + /* 0x34 */ f32 unk_34; // height? + /* 0x38 */ f32 wallCheckRadius; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ Vec3s unk_44; @@ -819,7 +829,7 @@ typedef enum PlayerCsMode { // #define PLAYER_STATE2_100 (1 << 8) // -#define PLAYER_STATE2_200 (1 << 9) +#define PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND (1 << 9) // #define PLAYER_STATE2_400 (1 << 10) // Diving @@ -1130,10 +1140,10 @@ typedef struct Player { /* 0xB4C */ s16 unk_B4C; /* 0xB4E */ s16 unk_B4E; /* 0xB50 */ f32 unk_B50; - /* 0xB54 */ f32 wallHeight; // height used to determine whether link can climb or grab a ledge at the top - /* 0xB58 */ f32 wallDistance; // distance to the colliding wall plane - /* 0xB5C */ u8 unk_B5C; - /* 0xB5D */ u8 unk_B5D; + /* 0xB54 */ f32 yDistToLedge; // y distance to ground above an interact wall. LEDGE_DIST_MAX if no ground if found + /* 0xB58 */ f32 distToInteractWall; // xyz distance to the interact wall + /* 0xB5C */ u8 ledgeClimbType; // see PlayerLedgeClimbType enum + /* 0xB5D */ u8 ledgeClimbDelayTimer; /* 0xB5E */ u8 unk_B5E; /* 0xB5F */ u8 unk_B5F; /* 0xB60 */ u16 blastMaskTimer; @@ -1144,8 +1154,8 @@ typedef struct Player { /* 0xB67 */ u8 remainingHopsCounter; // Deku hopping on water /* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling /* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) - /* 0xB6C */ s16 unk_B6C; - /* 0xB6E */ s16 unk_B6E; + /* 0xB6C */ s16 floorPitch; // angle of the floor slope in the direction of current world yaw (positive for ascending slope) + /* 0xB6E */ s16 floorPitchAlt; // the calculation for this value is bugged and doesn't represent anything meaningful /* 0xB70 */ s16 unk_B70; /* 0xB72 */ u16 floorSfxOffset; /* 0xB74 */ u8 unk_B74; @@ -1172,11 +1182,12 @@ typedef struct Player { /* 0xD57 */ u8 unk_D57; /* 0xD58 */ PlayerFuncD58 unk_D58; /* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame) - /* 0xD5D */ u8 unk_D5D; + /* 0xD5D */ u8 floorTypeTimer; // Unused remnant of OoT /* 0xD5E */ u8 floorProperty; // FloorProperty enum + /* 0xD5F */ u8 prevFloorType; // Unused remnant of OoT /* 0xD60 */ f32 unk_D60; /* 0xD64 */ s16 unk_D64; - /* 0xD66 */ u16 unk_D66; // sfx + /* 0xD66 */ u16 prevFloorSfxOffset; /* 0xD68 */ s16 unk_D68; /* 0xD6A */ s8 unk_D6A; /* 0xD6B */ u8 unk_D6B; diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index a263d4393..f63ff6b01 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -4200,6 +4200,9 @@ Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s return BgCheck_GetBgCamFuncDataImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId); } +/** + * Returns one above the value indexed by `play->setupExitList[]` + */ u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 8 & 0x1F; } 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 fbdcb860f..f82efe6d8 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -590,7 +590,7 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) { this->actor.world.rot.y = this->unk_2D6 + this->unk_2D4; - if (SurfaceType_GetSceneExitIndex(&play->colCtx, sp58, sp5C)) { + if (SurfaceType_GetSceneExitIndex(&play->colCtx, sp58, sp5C) != 0) { s16 temp = BINANG_SUB(this->actor.world.rot.y, this->actor.yawTowardsPlayer - 0x8000); if (temp < 0) { 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 340d57cf1..5d14b12ae 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -4118,7 +4118,7 @@ s32 EnHorse_UpdateConveyors(EnHorse* this, PlayState* play) { } conveyorDir = SurfaceType_GetConveyorDirection(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - conveyorDir = (conveyorDir * 0x400) - this->actor.world.rot.y; + conveyorDir = CONVEYOR_DIRECTION_TO_BINANG(conveyorDir) - this->actor.world.rot.y; if (conveyorDir > 0x640) { this->actor.world.rot.y += 0x640; } else if (conveyorDir < -0x640) { 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 82ee7c7fa..0e4790f1e 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -950,7 +950,7 @@ s32 func_80A40230(EnTest3* this, PlayState* play) { dx = this->player.actor.world.pos.x - this->player.actor.prevPos.x; dy = this->player.actor.world.pos.z - this->player.actor.prevPos.z; this->player.linearVelocity = sqrtf(SQ(dx) + SQ(dy)); - this->player.linearVelocity *= 1.0f + (1.05f * fabsf(Math_SinS(this->player.unk_B6C))); + this->player.linearVelocity *= 1.0f + (1.05f * fabsf(Math_SinS(this->player.floorPitch))); D_80A41D40 = (this->player.linearVelocity * 10.0f) + 20.0f; D_80A41D40 = CLAMP_MAX(D_80A41D40, 60.0f); D_80A41D44 = this->player.actor.world.rot.y; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index ef331864a..7341fd5e8 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -492,20 +492,20 @@ f32 D_80862AFC; // distance of the analog stick to its center s16 D_80862B00; // analog stick angle/yaw s16 D_80862B02; // analog stick yaw + camera yaw s32 D_80862B04; // boolean, set to the return value of func_8083216C -FloorType sPlayerCurrentFloorType; -u32 sPlayerCurrentWallFlags; +FloorType sPlayerFloorType; +u32 sPlayerTouchedWallFlags; ConveyorSpeed sPlayerConveyorSpeedIndex; s16 sPlayerIsOnFloorConveyor; -s16 D_80862B16; // SurfaceType_GetConveyorDirection << 0xA -f32 D_80862B18; // D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; +s16 sPlayerConveyorYaw; +f32 sPlayerYDistToFloor; FloorProperty sPlayerPrevFloorProperty; -s32 D_80862B20; // ABS_ALT(this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000)) -s32 D_80862B24; // ABS_ALT(BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000))) -s16 D_80862B28; +s32 sPlayerShapeYawToTouchedWall; +s32 sPlayerWorldYawToTouchedWall; +s16 sPlayerFloorPitchShape; s32 D_80862B2C; // D_80862B2C = player->currentMask; -Vec3f D_80862B30; +Vec3f sPlayerInteractWallCheckResult; f32 D_80862B3C; -FloorEffect D_80862B40; // SurfaceType_GetFloorEffect +FloorEffect sPlayerFloorEffect; Input* sPlayerControlInput; s32 D_80862B48; s32 D_80862B4C; @@ -733,39 +733,39 @@ void Player_RequestRumble(PlayState* play, Player* this, s32 sourceIntensity, s3 PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { - // unk_00; + // ceilingCheckHeight 84.0f, - // shadowScale; + // shadowScale 90.0f, - // unk_08; + // unk_08 1.5f, - // unk_0C; + // unk_0C 166.5f, - // unk_10; + // unk_10 105.0f, - // unk_14; + // unk_14 119.100006f, - // unk_18; + // unk_18 88.5f, - // unk_1C; + // unk_1C 61.5f, - // unk_20; + // unk_20 28.5f, - // unk_24; + // unk_24 54.0f, - // unk_28; + // unk_28 75.0f, - // unk_2C; + // unk_2C 84.0f, - // unk_30; + // unk_30 102.0f, - // unk_34; // height? + // unk_34 70.0f, - // unk_38; + // wallCheckRadius 27.0f, - // unk_3C; + // unk_3C 24.75f, - // unk_40; + // unk_40 105.0f, // unk_44 { 9, 0x123F, 0x167 }, @@ -787,13 +787,13 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { -0x638, 0x1256, 0x17C }, { -0x637, 0x17EA, 0x167 }, }, - // voiceSfxIdOffset; + // voiceSfxIdOffset SFX_VOICE_BANK_SIZE * 0, - // surfaceSfxIdOffset; + // surfaceSfxIdOffset 0x80, - // unk_98; + // unk_98 33.0f, - // unk_9C; + // unk_9C 44.15145f, // openChestAnim &gPlayerAnim_link_demo_Tbox_open, @@ -829,39 +829,39 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { }, }, { - // unk_00; + // ceilingCheckHeight 70.0f, - // shadowScale; + // shadowScale 90.0f, - // unk_08; + // unk_08 0.74f, - // unk_0C; + // unk_0C 111.0f, - // unk_10; + // unk_10 70.0f, - // unk_14; + // unk_14 79.4f, - // unk_18; + // unk_18 59.0f, - // unk_1C; + // unk_1C 41.0f, - // unk_20; + // unk_20 19.0f, - // unk_24; + // unk_24 36.0f, - // unk_28; + // unk_28 50.0f, - // unk_2C; + // unk_2C 56.0f, - // unk_30; + // unk_30 68.0f, - // unk_34; // height? + // unk_34 70.0f, - // unk_38; + // wallCheckRadius 19.5f, - // unk_3C; + // unk_3C 18.2f, - // unk_40; + // unk_40 80.0f, // unk_44 { 0x17, 0xF3B, 0xDF }, @@ -883,13 +883,13 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { -0x638, 0x1256, 0x17C }, { -0x637, 0x17EA, 0x167 }, }, - // voiceSfxIdOffset; + // voiceSfxIdOffset SFX_VOICE_BANK_SIZE * 6, - // surfaceSfxIdOffset; + // surfaceSfxIdOffset 0x150, - // unk_98; + // unk_98 -25.0f, - // unk_9C; + // unk_9C 42.0f, // openChestAnim &gPlayerAnim_pg_Tbox_open, @@ -925,39 +925,39 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { }, }, { - // unk_00; + // ceilingCheckHeight 56.0f, - // shadowScale; + // shadowScale 90.0f, - // unk_08; + // unk_08 1.0f, - // unk_0C; + // unk_0C 111.0f, - // unk_10; + // unk_10 70.0f, - // unk_14; + // unk_14 79.4f, - // unk_18; + // unk_18 59.0f, - // unk_1C; + // unk_1C 41.0f, - // unk_20; + // unk_20 19.0f, - // unk_24; + // unk_24 36.0f, - // unk_28; + // unk_28 50.0f, - // unk_2C; + // unk_2C 56.0f, - // unk_30; + // unk_30 68.0f, - // unk_34; // height? + // unk_34 70.0f, - // unk_38; + // wallCheckRadius 18.0f, - // unk_3C; + // unk_3C 23.0f, - // unk_40; + // unk_40 70.0f, // unk_44 { 0x17, 0x1323, -0x6D }, @@ -979,13 +979,13 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { -0x638, 0x1256, 0x17C }, { -0x637, 0x17EA, 0x167 }, }, - // voiceSfxIdOffset; + // voiceSfxIdOffset SFX_VOICE_BANK_SIZE * 5, - // surfaceSfxIdOffset; + // surfaceSfxIdOffset 0x120, - // unk_98; + // unk_98 22.0f, - // unk_9C; + // unk_9C 36.0f, // openChestAnim &gPlayerAnim_pz_Tbox_open, @@ -1021,39 +1021,39 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { }, }, { - // unk_00; + // ceilingCheckHeight 35.0f, - // shadowScale; + // shadowScale 50.0f, - // unk_08; + // unk_08 0.3f, - // unk_0C; + // unk_0C 71.0f, - // unk_10; + // unk_10 50.0f, - // unk_14; + // unk_14 49.0f, - // unk_18; + // unk_18 39.0f, - // unk_1C; + // unk_1C 27.0f, - // unk_20; + // unk_20 19.0f, - // unk_24; + // unk_24 8.0f, - // unk_28; + // unk_28 13.6f, - // unk_2C; + // unk_2C 24.0f, - // unk_30; + // unk_30 24.0f, - // unk_34; // height? + // unk_34 70.0f, - // unk_38; + // wallCheckRadius 14.0f, - // unk_3C; + // unk_3C 12.0f, - // unk_40; + // unk_40 55.0f, // unk_44 { -0x18, 0xDED, 0x36C }, @@ -1075,13 +1075,13 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { -0x638, 0x1256, 0x17C }, { -0x637, 0x17EA, 0x167 }, }, - // voiceSfxIdOffset; + // voiceSfxIdOffset SFX_VOICE_BANK_SIZE * 4, - // surfaceSfxIdOffset; + // surfaceSfxIdOffset 0xF0, - // unk_98; + // unk_98 -21.0f, - // unk_9C; + // unk_9C 33.0f, // openChestAnim &gPlayerAnim_pn_Tbox_open, @@ -1117,39 +1117,39 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { }, }, { - // unk_00; + // ceilingCheckHeight 40.0f, - // shadowScale; + // shadowScale 60.0f, - // unk_08; + // unk_08 11.0f / 17.0f, - // unk_0C; + // unk_0C 71.0f, - // unk_10; + // unk_10 50.0f, - // unk_14; + // unk_14 49.0f, - // unk_18; + // unk_18 39.0f, - // unk_1C; + // unk_1C 27.0f, - // unk_20; + // unk_20 19.0f, - // unk_24; + // unk_24 22.0f, - // unk_28; + // unk_28 32.4f, - // unk_2C; + // unk_2C 32.0f, - // unk_30; + // unk_30 48.0f, - // unk_34; // height? + // unk_34 11.0f / 17.0f * 70.0f, - // unk_38; + // wallCheckRadius 14.0f, - // unk_3C; + // unk_3C 12.0f, - // unk_40; + // unk_40 55.0f, // unk_44 { -0x18, 0xDED, 0x36C }, @@ -1171,13 +1171,13 @@ PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { { -0x638, 0x1256, 0x17C }, { -0x637, 0x17EA, 0x167 }, }, - // voiceSfxIdOffset; + // voiceSfxIdOffset SFX_VOICE_BANK_SIZE * 1, - // surfaceSfxIdOffset; + // surfaceSfxIdOffset 0, - // unk_98; + // unk_98 22.0f, - // unk_9C; + // unk_9C 29.4343f, // openChestAnim &gPlayerAnim_clink_demo_Tbox_open, @@ -4081,7 +4081,7 @@ void func_8083133C(Player* this) { this->stateFlags1 |= PLAYER_STATE1_20000; if (!(this->skelAnime.moveFlags & ANIM_FLAG_80) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && - (D_80862B20 < 0x2000)) { + (sPlayerShapeYawToTouchedWall < 0x2000)) { this->currentYaw = this->actor.shape.rot.y = this->actor.wallYaw + 0x8000; } @@ -4296,7 +4296,8 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (gSaveContext.save.saveInfo.playerData.magic == 0))) || (!(this->stateFlags1 & PLAYER_STATE1_8000000) && BgCheck_EntityCheckCeiling(&play->colCtx, &sp54, &this->actor.world.pos, - sPlayerAgeProperties[playerForm].unk_00, &sp5C, &sp58, &this->actor))) { + sPlayerAgeProperties[playerForm].ceilingCheckHeight, &sp5C, &sp58, + &this->actor))) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } @@ -4701,7 +4702,7 @@ s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg } if (D_80862AFC != 0.0f) { - f32 temp_fv0 = Math_SinS(this->unk_B6C); + f32 temp_fv0 = Math_SinS(this->floorPitch); f32 var_fa0 = this->unk_B50; f32 var_fa1; @@ -5401,7 +5402,7 @@ s32 func_80834600(Player* this, PlayState* play) { this->unk_D6A = 0; } } else if ((var_v0 = ((Player_GetHeight(this) - 8.0f) < (this->unk_AB8 * this->actor.scale.y))) || - (this->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + (this->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) || (sPlayerFloorType == FLOOR_TYPE_9) || (this->stateFlags2 & PLAYER_STATE2_80000000)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); @@ -5498,7 +5499,7 @@ s32 func_80834600(Player* this, PlayState* play) { } else if (this->invincibilityTimer != 0) { return false; } else { - s32 sp58 = func_808340AC(sPlayerCurrentFloorType); + s32 sp58 = func_808340AC(sPlayerFloorType); u32 isSurfaceWallDamage = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); s32 var_a1 = false; s32 var_v1_2; @@ -5562,44 +5563,48 @@ void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlaySta s32 func_80834DFC(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && - ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->unk_B5C < 4)) && - !(this->stateFlags1 & PLAYER_STATE1_800) && (this->unk_B5C >= 2) && - (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->wallHeight < this->ageProperties->unk_14))) { + ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || + (this->ledgeClimbType <= PLAYER_LEDGE_CLIMB_3)) && + !(this->stateFlags1 & PLAYER_STATE1_800) && (this->ledgeClimbType >= PLAYER_LEDGE_CLIMB_2) && + (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->yDistToLedge < this->ageProperties->unk_14))) { s32 var_v1 = false; PlayerAnimationHeader* anim; - f32 wallHeight; + f32 yDistToLedge; if (func_801242B4(this)) { f32 depth = (this->transformation == PLAYER_FORM_FIERCE_DEITY) ? 80.0f : 50.0f; if (this->actor.depthInWater < depth) { - if ((this->unk_B5C < 2) || (this->ageProperties->unk_10 < this->wallHeight)) { + if ((this->ledgeClimbType <= PLAYER_LEDGE_CLIMB_1) || + (this->ageProperties->unk_10 < this->yDistToLedge)) { return false; } - } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || (this->unk_B5C >= 3)) { + } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || + (this->ledgeClimbType >= PLAYER_LEDGE_CLIMB_3)) { return false; } } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || - ((this->ageProperties->unk_14 <= this->wallHeight) && (this->stateFlags1 & PLAYER_STATE1_8000000))) { + ((this->ageProperties->unk_14 <= this->yDistToLedge) && + (this->stateFlags1 & PLAYER_STATE1_8000000))) { return false; } - if ((this->actor.wallBgId != BGCHECK_SCENE) && (sPlayerCurrentWallFlags & WALL_FLAG_6)) { - if (this->unk_B5D >= 6) { + if ((this->actor.wallBgId != BGCHECK_SCENE) && (sPlayerTouchedWallFlags & WALL_FLAG_6)) { + if (this->ledgeClimbDelayTimer >= 6) { this->stateFlags2 |= PLAYER_STATE2_4; if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { var_v1 = true; } } - } else if ((this->unk_B5D >= 6) || CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + } else if ((this->ledgeClimbDelayTimer >= 6) || CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { var_v1 = true; } if (var_v1) { Player_SetAction(play, this, func_8084D4EC, 0); - wallHeight = this->wallHeight; + yDistToLedge = this->yDistToLedge; - if (this->ageProperties->unk_14 <= wallHeight) { + if (this->ageProperties->unk_14 <= yDistToLedge) { anim = &gPlayerAnim_link_normal_250jump_start; this->linearVelocity = 1.0f; } else { @@ -5607,28 +5612,28 @@ s32 func_80834DFC(Player* this, PlayState* play) { s32 bgId; f32 wallPolyNormalX = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.x); f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.z); - f32 var_fv1 = this->wallDistance + 0.5f; // wallDistance + f32 var_fv1 = this->distToInteractWall + 0.5f; f32 yIntersect; s32 pad; this->stateFlags1 |= PLAYER_STATE1_4; if (func_801242B4(this)) { - wallHeight -= 60.0f * this->ageProperties->unk_08; + yDistToLedge -= 60.0f * this->ageProperties->unk_08; anim = &gPlayerAnim_link_swimer_swim_15step_up; this->stateFlags1 &= ~PLAYER_STATE1_8000000; - } else if (this->ageProperties->unk_18 <= wallHeight) { - wallHeight -= 59.0f * this->ageProperties->unk_08; + } else if (this->ageProperties->unk_18 <= yDistToLedge) { + yDistToLedge -= 59.0f * this->ageProperties->unk_08; anim = &gPlayerAnim_link_normal_150step_up; } else { - wallHeight -= 41.0f * this->ageProperties->unk_08; + yDistToLedge -= 41.0f * this->ageProperties->unk_08; anim = &gPlayerAnim_link_normal_100step_up; } - this->unk_ABC -= wallHeight * 100.0f; + this->unk_ABC -= yDistToLedge * 100.0f; this->actor.world.pos.x -= var_fv1 * wallPolyNormalX; - this->actor.world.pos.y += this->wallHeight + 10.0f; + this->actor.world.pos.y += this->yDistToLedge + 10.0f; this->actor.world.pos.z -= var_fv1 * wallPolyNormalZ; yIntersect = @@ -5650,8 +5655,9 @@ s32 func_80834DFC(Player* this, PlayState* play) { this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; return true; } - } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->unk_B5C == 1) && (this->unk_B5D >= 3)) { - f32 temp = (this->wallHeight * 0.08f) + 5.5f; + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->ledgeClimbType == PLAYER_LEDGE_CLIMB_1) && + (this->ledgeClimbDelayTimer >= 3)) { + f32 temp = (this->yDistToLedge * 0.08f) + 5.5f; func_80834DB8(this, &gPlayerAnim_link_normal_jump, temp, play); this->linearVelocity = 2.5f; @@ -5717,8 +5723,8 @@ u8 sReturnEntranceGroupIndices[] = { }; // subfunction of OoT's func_80839034 -void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { - play->nextEntrance = play->setupExitList[arg1]; +void func_808354A4(PlayState* play, s32 exitIndex, s32 arg2) { + play->nextEntrance = play->setupExitList[exitIndex]; if (play->nextEntrance == 0xFFFF) { gSaveContext.respawnFlag = 4; @@ -5737,7 +5743,7 @@ void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { gSaveContext.respawnFlag = -2; } - gSaveContext.retainWeatherMode = 1; + gSaveContext.retainWeatherMode = true; Scene_SetExitFade(play); } @@ -5751,136 +5757,144 @@ void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE); } -// related to grottos (?) -s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) { - s32 var_a3; +s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) { + s32 exitIndexPlusOne; FloorType floorType; s32 sp34; s32 sp30; if ((this == GET_PLAYER(play)) && !(this->stateFlags1 & PLAYER_STATE1_80) && !func_8082DA90(play) && (this->csMode == PLAYER_CSMODE_0) && !(this->stateFlags1 & PLAYER_STATE1_1)) { - var_a3 = 0; - if (((poly != NULL) && (var_a3 = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), (var_a3 != 0)) && - (((play->sceneId != SCENE_GORONRACE) && (play->sceneId != SCENE_DEKU_KING)) || (var_a3 < 3)) && - (((play->sceneId != SCENE_20SICHITAI) && (play->sceneId != SCENE_20SICHITAI2)) || (var_a3 < 0x15)) && - ((play->sceneId != SCENE_11GORONNOSATO) || (var_a3 < 6))) || - (func_808340D4(sPlayerCurrentFloorType) && (this->floorProperty == FLOOR_PROPERTY_12))) { + exitIndexPlusOne = 0; + + if (((poly != NULL) && + (exitIndexPlusOne = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), (exitIndexPlusOne != 0)) && + (((play->sceneId != SCENE_GORONRACE) && (play->sceneId != SCENE_DEKU_KING)) || (exitIndexPlusOne < 3)) && + (((play->sceneId != SCENE_20SICHITAI) && (play->sceneId != SCENE_20SICHITAI2)) || + (exitIndexPlusOne < 0x15)) && + ((play->sceneId != SCENE_11GORONNOSATO) || (exitIndexPlusOne < 6))) || + (func_808340D4(sPlayerFloorType) && (this->floorProperty == FLOOR_PROPERTY_12))) { + sp34 = this->unk_D68 - (s32)this->actor.world.pos.y; + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && - !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sp34 < 400) && (D_80862B18 > 100.0f)) { + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sp34 < 400) && (sPlayerYDistToFloor > 100.0f)) { if ((this->floorProperty != FLOOR_PROPERTY_5) && (this->floorProperty != FLOOR_PROPERTY_12)) { this->linearVelocity = 0.0f; } - return false; + } + + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (exitIndexPlusOne == 0) { + func_80169EFC(&play->state); + Scene_SetExitFade(play); } else { - if (this->stateFlags3 & PLAYER_STATE3_1000000) { - func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + func_808354A4(play, exitIndexPlusOne - 1, + SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2); + + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) { + Audio_PlaySfx_2(NA_SE_OC_TUNAMI); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->floorProperty == FLOOR_PROPERTY_12)) { + Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_IN); } - if (var_a3 == 0) { - func_80169EFC(&play->state); - Scene_SetExitFade(play); + if (this->stateFlags1 & PLAYER_STATE1_800000) { + if (D_801BDAA0) { + D_801BDAA0 = false; + } else { + gHorseIsMounted = true; + } + } + } + + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) && + ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (floorType == FLOOR_TYPE_11) { + Audio_PlaySfx_2(NA_SE_OC_SECRET_HOLE_OUT); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } else { - func_808354A4(play, var_a3 - 1, - SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2); - if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) { - Audio_PlaySfx_2(NA_SE_OC_TUNAMI); - func_801A4058(5); - gSaveContext.seqId = (u8)NA_BGM_DISABLED; - gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && - (this->floorProperty == FLOOR_PROPERTY_12)) { - Audio_PlaySfx_2(NA_SE_OC_SECRET_WARP_IN); - } - - if (this->stateFlags1 & PLAYER_STATE1_800000) { - if (D_801BDAA0) { - D_801BDAA0 = false; - } else { - gHorseIsMounted = true; - } - } + func_8085B74C(play); } - - if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && - ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) && - ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { - if (floorType == FLOOR_TYPE_11) { - Audio_PlaySfx_2(NA_SE_OC_SECRET_HOLE_OUT); - func_801A4058(5); - gSaveContext.seqId = (u8)NA_BGM_DISABLED; - gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - } else { - func_8085B74C(play); - } - } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - Player_StopHorizontalMovement(this); - } - - Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); - this->stateFlags1 |= PLAYER_STATE1_1 | PLAYER_STATE1_20000000; - return true; - } - } else { - if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.floorPoly == NULL)) { - BgCheck_EntityRaycastFloor7(&play->colCtx, &this->actor.floorPoly, &sp30, &this->actor, - &this->actor.world.pos); - if (this->actor.floorPoly == NULL) { - func_80169EFC(&play->state); - return false; - } - //! FAKE - if (1) {} + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_StopHorizontalMovement(this); } - if (!(this->stateFlags1 & PLAYER_STATE1_80000000)) { - if (((this->actor.world.pos.y < -4000.0f) || - (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12) || - (this->floorProperty == FLOOR_PROPERTY_13)) && - ((D_80862B18 < 100.0f) || (this->fallDistance > 400))))) { - if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - if (this->floorProperty == FLOOR_PROPERTY_5) { - func_80169FDC(&play->state); - func_808345C8(); - } else { - func_80169EFC(&play->state); - } - if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { - gSaveContext.respawnFlag = -5; - } - - play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; - Audio_PlaySfx(NA_SE_OC_ABYSS); - } else { - if (this->stateFlags3 & PLAYER_STATE3_1000000) { - func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); - } - - if (this->floorProperty == FLOOR_PROPERTY_13) { - Player_SetAction(play, this, func_808497A0, 0); - this->stateFlags1 |= PLAYER_STATE1_20000000; - } else { - func_80834104(play, this); - this->unk_AE8 = 9999; - if (this->floorProperty == FLOOR_PROPERTY_5) { - this->unk_AE7 = -1; - } else { - this->unk_AE7 = 1; - } - } - } - } - } - - this->unk_D68 = this->actor.world.pos.y; + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); + this->stateFlags1 |= PLAYER_STATE1_1 | PLAYER_STATE1_20000000; + return true; } + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.floorPoly == NULL)) { + BgCheck_EntityRaycastFloor7(&play->colCtx, &this->actor.floorPoly, &sp30, &this->actor, + &this->actor.world.pos); + if (this->actor.floorPoly == NULL) { + func_80169EFC(&play->state); + return false; + } + //! FAKE + if (1) {} + } + + if (!(this->stateFlags1 & PLAYER_STATE1_80000000)) { + if (((this->actor.world.pos.y < -4000.0f) || + (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12) || + (this->floorProperty == FLOOR_PROPERTY_13)) && + ((sPlayerYDistToFloor < 100.0f) || (this->fallDistance > 400))))) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->floorProperty == FLOOR_PROPERTY_5) { + func_80169FDC(&play->state); + func_808345C8(); + } else { + func_80169EFC(&play->state); + } + if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + gSaveContext.respawnFlag = -5; + } + + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + Audio_PlaySfx(NA_SE_OC_ABYSS); + } else { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (this->floorProperty == FLOOR_PROPERTY_13) { + Player_SetAction(play, this, func_808497A0, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else { + func_80834104(play, this); + this->unk_AE8 = 9999; + if (this->floorProperty == FLOOR_PROPERTY_5) { + this->unk_AE7 = -1; + } else { + this->unk_AE7 = 1; + } + } + } + } + } + + this->unk_D68 = this->actor.world.pos.y; } return false; } +/** + * Gets a position relative to player's yaw. + * An offset is applied to the provided base position in the direction of shape y rotation. + * The resulting position is stored in `dst` + */ void Player_TranslateAndRotateY(Player* this, Vec3f* translation, Vec3f* src, Vec3f* dst) { Lib_Vec3f_TranslateAndRotateY(translation, this->actor.shape.rot.y, src, dst); } @@ -5901,6 +5915,7 @@ Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3 f32 func_80835CD8(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos, CollisionPoly** outPoly, s32* outBgId) { Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, pos); + return BgCheck_EntityRaycastFloor5(&play->colCtx, outPoly, outBgId, &this->actor, pos); } @@ -5911,16 +5926,25 @@ f32 func_80835D2C(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos) { return func_80835CD8(play, this, arg2, pos, &poly, &bgId); } -s32 func_80835D58(PlayState* play, Player* this, Vec3f* arg2, CollisionPoly** outPoly, s32* bgId, Vec3f* posResult) { +/** + * Checks if a line between the player's position and the provided `offset` intersect a wall. + * + * Point A of the line is at player's world position offset by the height provided in `offset`. + * Point B of the line is at player's world position offset by the entire `offset` vector. + * Point A and B are always at the same height, meaning this is a horizontal line test. + */ +s32 Player_PosVsWallLineTest(PlayState* play, Player* this, Vec3f* offset, CollisionPoly** wallPoly, s32* bgId, + Vec3f* posResult) { Vec3f posA; Vec3f posB; posA.x = this->actor.world.pos.x; - posA.y = this->actor.world.pos.y + arg2->y; + posA.y = this->actor.world.pos.y + offset->y; posA.z = this->actor.world.pos.z; - Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, &posB); - return BgCheck_EntityLineTest2(&play->colCtx, &posA, &posB, posResult, outPoly, true, false, false, true, bgId, + Player_TranslateAndRotateY(this, &this->actor.world.pos, offset, &posB); + + return BgCheck_EntityLineTest2(&play->colCtx, &posA, &posB, posResult, wallPoly, true, false, false, true, bgId, &this->actor); } @@ -6111,7 +6135,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f; BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); - if (func_8083562C(play, this, poly, BGCHECK_SCENE)) { + if (Player_HandleExitsAndVoids(play, this, poly, BGCHECK_SCENE)) { gSaveContext.entranceSpeed = 2.0f; } else if (enDoorType != ENDOOR_TYPE_7) { Camera* mainCam; @@ -6340,8 +6364,7 @@ FallImpactInfo sFallImpactInfos[] = { s32 func_80836F10(PlayState* play, Player* this) { s32 fallDistance; - if ((sPlayerCurrentFloorType == FLOOR_TYPE_6) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || - (this->csMode != PLAYER_CSMODE_0)) { + if ((sPlayerFloorType == FLOOR_TYPE_6) || (sPlayerFloorType == FLOOR_TYPE_9) || (this->csMode != PLAYER_CSMODE_0)) { fallDistance = 0; } else { fallDistance = this->fallDistance; @@ -6386,8 +6409,8 @@ s32 func_80836F10(PlayState* play, Player* this) { fallDistance = CLAMP_MAX(fallDistance, 255); Player_RequestRumble(play, this, fallDistance, fallDistance * 0.1f, fallDistance, SQ(0)); - if (sPlayerCurrentFloorType == FLOOR_TYPE_6) { - //! @bug unreachable code: When sPlayerCurrentFloorType is equal to FLOOR_TYPE_6 then fallDistance is + if (sPlayerFloorType == FLOOR_TYPE_6) { + //! @bug unreachable code: When sPlayerFloorType is equal to FLOOR_TYPE_6 then fallDistance is //! ignored (set to zero), so the previous check based on said variable will always fail, producing this //! current check to always be false. Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); @@ -6494,7 +6517,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { s32 var_v1; if ((this->transformation != PLAYER_FORM_DEKU) && - (((sPlayerPrevFloorProperty == FLOOR_PROPERTY_1)) || (sPlayerPrevFloorProperty == FLOOR_PROPERTY_2))) { + ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_1) || (sPlayerPrevFloorProperty == FLOOR_PROPERTY_2))) { if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_1) { var_v1 = 4; } else { @@ -6570,7 +6593,7 @@ s32 func_80837730(PlayState* play, Player* this, f32 arg2, s32 scale) { s32 func_8083784C(Player* this) { if (this->actor.velocity.y < 0.0f) { if ((this->actor.depthInWater > 0.0f) && - ((this->ageProperties->unk_2C - this->actor.depthInWater) < D_80862B18)) { + ((this->ageProperties->unk_2C - this->actor.depthInWater) < sPlayerYDistToFloor)) { if ((this->remainingHopsCounter != 0) && (gSaveContext.save.saveInfo.playerData.health != 0) && !(this->stateFlags1 & PLAYER_STATE1_4000000)) { if (((this->talkActor == NULL) || !(this->talkActor->flags & ACTOR_FLAG_10000))) { @@ -6694,7 +6717,11 @@ void func_80837CEC(PlayState* play, Player* this, CollisionPoly* arg2, f32 arg3, s32 func_80837DEC(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && (this->transformation != PLAYER_FORM_DEKU) && (this->actor.depthInWater < -80.0f)) { - if ((ABS_ALT(this->unk_B6C)) < 0xAAA && (ABS_ALT(this->unk_B6E) < 0xAAA)) { + //! @bug `floorPitch` and `floorPitchAlt` are cleared to 0 before this function is called, + //! because the player left the ground. The angles will always be zero and therefore will always + //! pass these checks. The intention seems to be to prevent ledge hanging or vine grabbing when + //! walking off of a steep enough slope. + if ((ABS_ALT(this->floorPitch) < 0xAAA) && (ABS_ALT(this->floorPitchAlt) < 0xAAA)) { CollisionPoly* entityPoly; CollisionPoly* sp90; s32 entityBgId; @@ -6741,7 +6768,7 @@ s32 func_80837DEC(Player* this, PlayState* play) { temp_fv1_2 = this->actor.world.pos.y - BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp88, &this->actor, &sp70); if ((temp_fv1_2 >= -11.0f) && (temp_fv1_2 <= 0.0f)) { - var_v1_2 = sPlayerPrevFloorProperty == FLOOR_PROPERTY_6; + var_v1_2 = (sPlayerPrevFloorProperty == FLOOR_PROPERTY_6); if (!var_v1_2) { if (SurfaceType_GetWallFlags(&play->colCtx, entityPoly, entityBgId) & WALL_FLAG_3) { var_v1_2 = true; @@ -6848,13 +6875,13 @@ void func_8083827C(Player* this, PlayState* play) { Player_SetAction(play, this, func_8084C16C, 1); func_8082DD2C(play, this); - this->floorSfxOffset = this->unk_D66; + this->floorSfxOffset = this->prevFloorSfxOffset; if ((this->transformation != PLAYER_FORM_GORON) && ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0)) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE)) { if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { if ((sPlayerPrevFloorProperty != FLOOR_PROPERTY_6) && (sPlayerPrevFloorProperty != FLOOR_PROPERTY_9) && - (D_80862B18 > 20.0f) && (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0)) { + (sPlayerYDistToFloor > 20.0f) && (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0)) { if ((ABS_ALT(temp_t0) < 0x2000) && (this->linearVelocity > 3.0f)) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { if (((this->transformation == PLAYER_FORM_ZORA) && @@ -6882,7 +6909,7 @@ void func_8083827C(Player* this, PlayState* play) { } // Checking if the ledge is tall enough for Player to hang from - if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_9) || (D_80862B18 <= this->ageProperties->unk_34) || + if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_9) || (sPlayerYDistToFloor <= this->ageProperties->unk_34) || !func_80837DEC(this, play)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); } @@ -7416,7 +7443,7 @@ s32 func_808396B8(PlayState* play, Player* this) { s32 func_80839770(Player* this, PlayState* play) { if (func_808396B8(play, this)) { - if ((this->transformation != PLAYER_FORM_GORON) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + if ((this->transformation != PLAYER_FORM_GORON) && (sPlayerFloorType != FLOOR_TYPE_7)) { func_808395F0(play, this, (this->transformation == PLAYER_FORM_ZORA) ? PLAYER_MWA_ZORA_JUMPKICK_START : PLAYER_MWA_JUMPSLASH_START, @@ -7428,7 +7455,7 @@ s32 func_80839770(Player* this, PlayState* play) { } s32 func_80839800(Player* this, PlayState* play) { - if ((this->unk_AE3[this->unk_ADE] == 0) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + if ((this->unk_AE3[this->unk_ADE] == 0) && (sPlayerFloorType != FLOOR_TYPE_7)) { func_80836B3C(play, this, 0.0f); return true; } @@ -7498,8 +7525,8 @@ s32 func_80839A84(PlayState* play, Player* this) { s32 func_80839B18(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && - (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerCurrentFloorType != FLOOR_TYPE_7) && - (D_80862B40 != FLOOR_EFFECT_1)) { + (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerFloorType != FLOOR_TYPE_7) && + (sPlayerFloorEffect != FLOOR_EFFECT_1)) { s32 temp_a2 = this->unk_AE3[this->unk_ADE]; if (temp_a2 <= 0) { @@ -8281,11 +8308,10 @@ void func_8083BF54(PlayState* play, Player* this) { this->actor.gravity = REG(68) / 100.0f; var_a2 = false; - temp_v0 = func_808340D4(sPlayerCurrentFloorType); + temp_v0 = func_808340D4(sPlayerFloorType); - if (temp_v0 || - (((var_a2 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) || (sPlayerCurrentFloorType == FLOOR_TYPE_15))) || - (sPlayerCurrentFloorType == FLOOR_TYPE_13))) { + if (temp_v0 || ((var_a2 = (sPlayerFloorType == FLOOR_TYPE_14) || (sPlayerFloorType == FLOOR_TYPE_15)) || + (sPlayerFloorType == FLOOR_TYPE_13))) { f32 temp_fv1_2; f32 var_fa1; f32 var_ft4; @@ -8294,9 +8320,9 @@ void func_8083BF54(PlayState* play, Player* this) { var_ft4 = fabsf(this->linearVelocity + D_80862B3C) * 20.0f; if (temp_v0) { - if (sPlayerCurrentFloorType == FLOOR_TYPE_4) { + if (sPlayerFloorType == FLOOR_TYPE_4) { var_fa1 = 1300.0f; - } else if (sPlayerCurrentFloorType == FLOOR_TYPE_7) { + } else if (sPlayerFloorType == FLOOR_TYPE_7) { var_fa1 = 20000.0f; var_ft4 = 0.0f; } else { @@ -8305,7 +8331,7 @@ void func_8083BF54(PlayState* play, Player* this) { } sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG; } else if (var_a2) { - if (sPlayerCurrentFloorType == FLOOR_TYPE_14) { + if (sPlayerFloorType == FLOOR_TYPE_14) { var_fa1 = 400.0f; var_ft4 *= 10.0f; } else { @@ -8321,7 +8347,7 @@ void func_8083BF54(PlayState* play, Player* this) { var_fa1 = CLAMP_MIN(var_fa1, this->unk_AB8); - var_fv0 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) ? 200.0f : (var_fa1 - this->unk_AB8) * 0.02f; + var_fv0 = (sPlayerFloorType == FLOOR_TYPE_14) ? 200.0f : (var_fa1 - this->unk_AB8) * 0.02f; var_fv0 = CLAMP(var_fv0, 0.0f, 300.0f); temp_fv1_2 = this->unk_AB8; @@ -8444,7 +8470,7 @@ void func_8083C6E8(Player* this, PlayState* play) { return; } - if (sPlayerCurrentFloorType == FLOOR_TYPE_11) { + if (sPlayerFloorType == FLOOR_TYPE_11) { Math_SmoothStepToS(&this->actor.focus.rot.x, -20000, 10, 4000, 800); } else { s16 sp46 = 0; @@ -8627,15 +8653,15 @@ s32 func_8083CCB4(Player* this, PlayState* play) { return false; } -PlayerAnimationHeader* D_8085D264[] = { +PlayerAnimationHeader* sPlayerSlopeSlipAnims[] = { &gPlayerAnim_link_normal_down_slope_slip, &gPlayerAnim_link_normal_up_slope_slip, }; -s32 func_8083CF68(PlayState* play, Player* this) { +s32 Player_HandleSlopes(PlayState* play, Player* this) { if (!Player_InBlockingCsMode(play, this) && !(this->cylinder.base.ocFlags1 & OC1_HIT)) { if ((func_80853D68 != this->actionFunc) && (func_80857BE8 != this->actionFunc) && - (D_80862B40 == FLOOR_EFFECT_1)) { + (sPlayerFloorEffect == FLOOR_EFFECT_1)) { s16 playerVelYaw = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); Vec3f slopeNormal; s16 downwardSlopeYaw; @@ -8649,7 +8675,7 @@ s32 func_8083CF68(PlayState* play, Player* this) { velYawToDownwardSlope = downwardSlopeYaw - playerVelYaw; if (ABS_ALT(velYawToDownwardSlope) > 0x3E80) { // 87.9 degrees - var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->unk_B6C) : slopeNormal.y; + var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->floorPitch) : slopeNormal.y; slopeSlowdownSpeed = (1.0f - var_fa1) * 40.0f; temp_fv1 = fabsf(this->actor.speed) + slopeSlowdownSpeed; slopeSlowdownSpeedStep = SQ(temp_fv1) * 0.011f; @@ -8661,10 +8687,10 @@ s32 func_8083CF68(PlayState* play, Player* this) { } else { Player_SetAction(play, this, func_80853D68, 0); func_8082DE50(play, this); - func_8082E514(play, this, D_8085D264[this->unk_AE7]); + func_8082E514(play, this, sPlayerSlopeSlipAnims[this->unk_AE7]); this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); this->currentYaw = downwardSlopeYaw; - if (D_80862B28 >= 0) { + if (sPlayerFloorPitchShape >= 0) { this->unk_AE7 = 1; Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); } @@ -8840,11 +8866,11 @@ s32 func_8083D78C(Player* this, PlayState* play) { } s32 func_8083D860(Player* this, PlayState* play) { - if ((this->wallHeight >= 79.0f) && + if ((this->yDistToLedge >= 79.0f) && (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) || (this->actor.depthInWater < this->ageProperties->unk_2C))) { - s32 var_t0 = (sPlayerCurrentWallFlags & WALL_FLAG_3) ? 2 : 0; - s32 temp_t2 = sPlayerCurrentWallFlags & WALL_FLAG_1; + s32 var_t0 = (sPlayerTouchedWallFlags & WALL_FLAG_3) ? 2 : 0; + s32 temp_t2 = sPlayerTouchedWallFlags & WALL_FLAG_1; if ((var_t0 != 0) || temp_t2 || SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { @@ -8904,7 +8930,7 @@ s32 func_8083D860(Player* this, PlayState* play) { if (xOut < 8.0f) { f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); - f32 wallDistance = this->wallDistance; + f32 distToInteractWall = this->distToInteractWall; PlayerAnimationHeader* anim; func_80832558(play, this, func_80837C20); @@ -8920,10 +8946,10 @@ s32 func_8083D860(Player* this, PlayState* play) { } else { anim = &gPlayerAnim_link_normal_Fclimb_hold2upL; } - wallDistance = (this->ageProperties->unk_3C + 4.0f) - wallDistance; + distToInteractWall = (this->ageProperties->unk_3C + 4.0f) - distToInteractWall; } else { anim = this->ageProperties->unk_AC; - wallDistance = 20.5f; + distToInteractWall = 20.5f; } this->unk_AE8 = -2; @@ -8932,14 +8958,14 @@ s32 func_8083D860(Player* this, PlayState* play) { this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; } else { anim = this->ageProperties->unk_B0; - wallDistance = (this->ageProperties->unk_38 - this->ageProperties->unk_3C) + 17.0f; + distToInteractWall = (this->ageProperties->wallCheckRadius - this->ageProperties->unk_3C) + 17.0f; this->unk_AE8 = -4; this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE } - this->actor.world.pos.x = (wallDistance * wallPolyNormalX) + sp78; - this->actor.world.pos.z = (wallDistance * wallPolyNormalZ) + sp74; + this->actor.world.pos.x = (distToInteractWall * wallPolyNormalX) + sp78; + this->actor.world.pos.z = (distToInteractWall * wallPolyNormalZ) + sp74; func_8082DAD4(this); Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); Player_AnimationPlayOnce(play, this, anim); @@ -8982,7 +9008,7 @@ s32 func_8083DD1C(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, f wallPoly = this->actor.wallPoly; this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; this->actor.wallBgId = bgId; - sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, bgId); + sPlayerTouchedWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, bgId); wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); @@ -9001,7 +9027,7 @@ s32 func_8083DD1C(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, f } void func_8083DEE4(PlayState* play, Player* this) { - f32 temp_fv0 = this->ageProperties->unk_38; + f32 temp_fv0 = this->ageProperties->wallCheckRadius; func_8083DD1C(play, this, 268 * 0.1f, temp_fv0 + 5.0f, temp_fv0 + 15.0f, 0.0f); } @@ -9019,14 +9045,14 @@ void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { s32 func_8083DFC4(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && - (D_80862B20 < 0x3000)) { + (sPlayerShapeYawToTouchedWall < 0x3000)) { if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) { return true; } if (!func_801242B4(this) && ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_4)) && - (sPlayerCurrentWallFlags & WALL_FLAG_6) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && - (this->wallHeight >= 39.0f)) { + (sPlayerTouchedWallFlags & WALL_FLAG_6) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->yDistToLedge >= 39.0f)) { this->stateFlags2 |= PLAYER_STATE2_1; if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { @@ -9097,7 +9123,7 @@ void func_8083E2F4(Player* this, PlayState* play) { s32 func_8083E354(Player* this, PlayState* play) { if (!CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT)) { - if ((sPlayerCurrentWallFlags & WALL_FLAG_3) || (sPlayerCurrentWallFlags & WALL_FLAG_1) || + if ((sPlayerTouchedWallFlags & WALL_FLAG_3) || (sPlayerTouchedWallFlags & WALL_FLAG_1) || SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { return false; } @@ -9421,10 +9447,10 @@ void func_8083F358(Player* this, s32 arg1, PlayState* play) { f32 var_fv1; s16 var_a1; - if (ABS_ALT(D_80862B28) < 0xE38) { + if (ABS_ALT(sPlayerFloorPitchShape) < 0xE38) { var_a1 = 0; } else { - var_a1 = CLAMP(D_80862B28, -0x2AAA, 0x2AAA); + var_a1 = CLAMP(sPlayerFloorPitchShape, -0x2AAA, 0x2AAA); } Math_ScaledStepToS(&this->unk_B70, var_a1, 0x190); @@ -9913,7 +9939,8 @@ s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { if (arg3 <= *arg2) { // If interacting with a wall and close to facing it - if (((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B24 < 0x1C00)) || + if (((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + (sPlayerWorldYawToTouchedWall < 0x1C00)) || // or, impacting something's cylinder (((this->cylinder.base.ocFlags1 & OC1_HIT) && (cylinderOc = this->cylinder.base.oc) != NULL) && // and that something is a Beaver Race ring, @@ -10733,7 +10760,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { if ((this->transformation != PLAYER_FORM_GORON) && !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_4000)) && (sp28 <= 0) && ((func_80123420(this)) || - ((sPlayerCurrentFloorType != FLOOR_TYPE_7) && + ((sPlayerFloorType != FLOOR_TYPE_7) && ((func_80123434(this)) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) { doActionA = DO_ACTION_ATTACK; @@ -10788,27 +10815,39 @@ s32 func_808430E0(Player* this) { } if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { - sPlayerCurrentFloorType = FLOOR_TYPE_0; + sPlayerFloorType = FLOOR_TYPE_0; } - this->unk_B6C = 0; - this->unk_B6E = 0; - D_80862B28 = 0; + this->floorPitch = 0; + this->floorPitchAlt = 0; + sPlayerFloorPitchShape = 0; return true; } -void func_80843178(PlayState* play, Player* this) { - u8 spC7 = 0; +/** + * Performs the following tasks related to scene collision: + * + * This includes: + * - Update BgCheckInfo, parameters adjusted due to various state flags + * - Update floor type, floor property and floor sfx offset + * - Update conveyor, reverb and light settings according to the current floor poly + * - Handle exits and voids + * - Update information relating to the "interact wall" + * - Update information for ledge climbing + * - Calculate floor poly angles + */ +void Player_ProcessSceneCollision(PlayState* play, Player* this) { + u8 nextLedgeClimbType = PLAYER_LEDGE_CLIMB_NONE; CollisionPoly* floorPoly; - f32 temp_fv0; - f32 temp_fv0_3; - f32 temp_fv1; + f32 wallCheckRadius; + f32 speedScale; + f32 ceilingCheckHeight; u32 updBgCheckInfoFlags; s32 spAC = (func_8084D820 == this->actionFunc) && (this->unk_397 == 4); sPlayerPrevFloorProperty = this->floorProperty; - temp_fv0 = this->ageProperties->unk_38; - temp_fv1 = this->ageProperties->unk_00; + wallCheckRadius = this->ageProperties->wallCheckRadius; + ceilingCheckHeight = this->ageProperties->ceilingCheckHeight; if (this->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000)) { if ((!(this->stateFlags1 & PLAYER_STATE1_80) && !(this->stateFlags2 & PLAYER_STATE2_4000) && @@ -10816,20 +10855,19 @@ void func_80843178(PlayState* play, Player* this) { spAC) { updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } else if ((this->stateFlags1 & PLAYER_STATE1_1) && + (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) && + ((this->unk_D68 - (s32)this->actor.world.pos.y) >= 100)) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } else if (!(this->stateFlags1 & PLAYER_STATE1_1) && + ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT); } else { - if ((this->stateFlags1 & 1) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) && - ((this->unk_D68 - (s32)this->actor.world.pos.y) >= 100)) { - updBgCheckInfoFlags = - UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; - } else if (!(this->stateFlags1 & PLAYER_STATE1_1) && - ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) { - updBgCheckInfoFlags = - UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; - this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT); - } else { - updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | - UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; - } + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; } } else { if (func_808561B0 == this->actionFunc) { @@ -10847,6 +10885,7 @@ void func_80843178(PlayState* play, Player* this) { if (this->stateFlags3 & PLAYER_STATE3_1) { updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) { this->stateFlags3 |= PLAYER_STATE3_10; } @@ -10855,7 +10894,7 @@ void func_80843178(PlayState* play, Player* this) { updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } - Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, temp_fv0, temp_fv1, updBgCheckInfoFlags); + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, wallCheckRadius, ceilingCheckHeight, updBgCheckInfoFlags); this->unk_AC0 -= (this->actor.world.pos.y - this->actor.prevPos.y) / this->actor.scale.y; this->unk_AC0 = CLAMP(this->unk_AC0, -1000.0f, 1000.0f); @@ -10864,14 +10903,16 @@ void func_80843178(PlayState* play, Player* this) { this->actor.velocity.y = 0.0f; } - D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; + sPlayerYDistToFloor = this->actor.world.pos.y - this->actor.floorHeight; sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; floorPoly = this->actor.floorPoly; if ((floorPoly != NULL) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4)) { this->floorProperty = SurfaceType_GetFloorProperty(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this == GET_PLAYER(play)) { func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId)); + if (this->actor.floorBgId == BGCHECK_SCENE) { func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); } else { @@ -10880,11 +10921,14 @@ void func_80843178(PlayState* play, Player* this) { } sPlayerConveyorSpeedIndex = SurfaceType_GetConveyorSpeed(&play->colCtx, floorPoly, this->actor.floorBgId); + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { sPlayerIsOnFloorConveyor = SurfaceType_IsFloorConveyor(&play->colCtx, floorPoly, this->actor.floorBgId); + if ((!sPlayerIsOnFloorConveyor && (this->actor.depthInWater > 20.0f)) || (sPlayerIsOnFloorConveyor && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { - D_80862B16 = SurfaceType_GetConveyorDirection(&play->colCtx, floorPoly, this->actor.floorBgId) << 0xA; + sPlayerConveyorYaw = CONVEYOR_DIRECTION_TO_BINANG( + SurfaceType_GetConveyorDirection(&play->colCtx, floorPoly, this->actor.floorBgId)); } else { sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; } @@ -10892,94 +10936,102 @@ void func_80843178(PlayState* play, Player* this) { } this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT; + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - static Vec3f D_8085D358 = { 0.0f, 0.0f, 0.0f }; - CollisionPoly* spA8; - s32 spA4; - s16 temp_v1_3; - f32 sp9C; + static Vec3f sInteractWallCheckOffset = { 0.0f, 0.0f, 0.0f }; + CollisionPoly* wallPoly; + s32 wallBgId; + s16 yawDiff; + s32 pad; - D_8085D358.y = 178.0f * 0.1f; - D_8085D358.z = this->ageProperties->unk_38 + 10.0f; + sInteractWallCheckOffset.y = 178.0f * 0.1f; + sInteractWallCheckOffset.z = this->ageProperties->wallCheckRadius + 10.0f; - if (func_80835D58(play, this, &D_8085D358, &spA8, &spA4, &D_80862B30)) { + if (Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &wallPoly, &wallBgId, + &sPlayerInteractWallCheckResult)) { this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; - if (spA8 != this->actor.wallPoly) { - this->actor.wallPoly = spA8; - this->actor.wallBgId = spA4; - this->actor.wallYaw = Math_Atan2S_XY(spA8->normal.z, spA8->normal.x); + + if (this->actor.wallPoly != wallPoly) { + this->actor.wallPoly = wallPoly; + this->actor.wallBgId = wallBgId; + this->actor.wallYaw = Math_Atan2S_XY(wallPoly->normal.z, wallPoly->normal.x); } } - temp_v1_3 = this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000); - sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); - D_80862B20 = ABS_ALT(temp_v1_3); - temp_v1_3 = BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000)); - D_80862B24 = ABS_ALT(temp_v1_3); + yawDiff = this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000); + sPlayerTouchedWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); + sPlayerShapeYawToTouchedWall = ABS_ALT(yawDiff); - temp_fv0_3 = D_80862B24 * 0.00008f; - if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (temp_fv0_3 >= 1.0f)) { + yawDiff = BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000)); + sPlayerWorldYawToTouchedWall = ABS_ALT(yawDiff); + + speedScale = sPlayerWorldYawToTouchedWall * 0.00008f; + + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (speedScale >= 1.0f)) { this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; } else { - temp_fv1 = (R_RUN_SPEED_LIMIT / 100.0f) * temp_fv0_3; - - this->unk_B50 = temp_fv1; - if (temp_fv1 < 0.1f) { + this->unk_B50 = ceilingCheckHeight = (R_RUN_SPEED_LIMIT / 100.0f) * speedScale; + if (this->unk_B50 < 0.1f) { this->unk_B50 = 0.1f; } } - if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B20 < 0x3000)) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (sPlayerShapeYawToTouchedWall < 0x3000)) { CollisionPoly* wallPoly = this->actor.wallPoly; - if (ABS_ALT(wallPoly->normal.y) < 0x258) { + if (ABS_ALT(wallPoly->normal.y) < 600) { f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); f32 wallPolyNormalY = COLPOLY_GET_NORMAL(wallPoly->normal.y); f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); - f32 temp_fv1_3; - CollisionPoly* sp84; - CollisionPoly* sp80; - s32 sp7C; - Vec3f sp70; - f32 temp_fv0_5; - f32 sp68; - s32 temp_v1_6; + f32 ledgeCheckOffsetXZ; + CollisionPoly* ledgeFloorPoly; + CollisionPoly* poly; + s32 bgId; + Vec3f ledgeCheckPos; + f32 ledgePosY; + f32 ceillingPosY; + s32 wallYawDiff; - this->wallDistance = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, - wallPoly->dist, &this->actor.world.pos); - temp_fv1_3 = this->wallDistance + 10.0f; - sp70.x = this->actor.world.pos.x - (temp_fv1_3 * wallPolyNormalX); - sp70.z = this->actor.world.pos.z - (temp_fv1_3 * wallPolyNormalZ); - sp70.y = this->actor.world.pos.y + this->ageProperties->unk_0C; - temp_fv0_5 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp84, &sp7C, &this->actor, &sp70); + this->distToInteractWall = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, + wallPoly->dist, &this->actor.world.pos); - this->wallHeight = temp_fv0_5 - this->actor.world.pos.y; - if ((this->wallHeight < 178.0f * 0.1f) || - ((BgCheck_EntityCheckCeiling(&play->colCtx, &sp68, &this->actor.world.pos, - (temp_fv0_5 - this->actor.world.pos.y) + 20.0f, &sp80, &sp7C, - &this->actor) != 0))) { - this->wallHeight = 399.96002f; + ledgeCheckOffsetXZ = this->distToInteractWall + 10.0f; + + ledgeCheckPos.x = this->actor.world.pos.x - (ledgeCheckOffsetXZ * wallPolyNormalX); + ledgeCheckPos.z = this->actor.world.pos.z - (ledgeCheckOffsetXZ * wallPolyNormalZ); + ledgeCheckPos.y = this->actor.world.pos.y + this->ageProperties->unk_0C; + + ledgePosY = + BgCheck_EntityRaycastFloor5(&play->colCtx, &ledgeFloorPoly, &bgId, &this->actor, &ledgeCheckPos); + this->yDistToLedge = ledgePosY - this->actor.world.pos.y; + + if ((this->yDistToLedge < 178.0f * 0.1f) || + BgCheck_EntityCheckCeiling(&play->colCtx, &ceillingPosY, &this->actor.world.pos, + (ledgePosY - this->actor.world.pos.y) + 20.0f, &poly, &bgId, + &this->actor)) { + this->yDistToLedge = LEDGE_DIST_MAX; } else { - D_8085D358.y = (temp_fv0_5 + 5.0f) - this->actor.world.pos.y; + sInteractWallCheckOffset.y = (ledgePosY + 5.0f) - this->actor.world.pos.y; - if ((func_80835D58(play, this, &D_8085D358, &sp80, &sp7C, &D_80862B30)) && - (temp_v1_6 = this->actor.wallYaw - Math_Atan2S_XY(sp80->normal.z, sp80->normal.x), - ABS_ALT(temp_v1_6) < 0x4000) && - !(SurfaceType_CheckWallFlag1(&play->colCtx, sp80, sp7C))) { - this->wallHeight = 399.96002f; - } else if (SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId) == 0) { - if (this->ageProperties->unk_1C <= this->wallHeight) { - if (ABS_ALT(sp84->normal.y) > 0x5DC0) { - if ((this->ageProperties->unk_14 <= this->wallHeight) || func_801242B4(this)) { - spC7 = 4; - } else if (this->ageProperties->unk_18 <= this->wallHeight) { - spC7 = 3; + if (Player_PosVsWallLineTest(play, this, &sInteractWallCheckOffset, &poly, &bgId, + &sPlayerInteractWallCheckResult) && + (wallYawDiff = (s32)(this->actor.wallYaw - Math_Atan2S_XY(poly->normal.z, poly->normal.x)), + ABS_ALT(wallYawDiff) < 0x4000) && + !SurfaceType_CheckWallFlag1(&play->colCtx, poly, bgId)) { + this->yDistToLedge = LEDGE_DIST_MAX; + } else if (!SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId)) { + if (this->ageProperties->unk_1C <= this->yDistToLedge) { + if (ABS_ALT(ledgeFloorPoly->normal.y) > 0x5DC0) { + if ((this->ageProperties->unk_14 <= this->yDistToLedge) || func_801242B4(this)) { + nextLedgeClimbType = PLAYER_LEDGE_CLIMB_4; + } else if (this->ageProperties->unk_18 <= this->yDistToLedge) { + nextLedgeClimbType = PLAYER_LEDGE_CLIMB_3; } else { - spC7 = 2; + nextLedgeClimbType = PLAYER_LEDGE_CLIMB_2; } } } else { - spC7 = 1; + nextLedgeClimbType = PLAYER_LEDGE_CLIMB_1; } } } @@ -10987,39 +11039,41 @@ void func_80843178(PlayState* play, Player* this) { } } else { this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; - this->wallHeight = 0.0f; - this->unk_B5D = 0; + this->yDistToLedge = 0.0f; + this->ledgeClimbDelayTimer = 0; } - if (spC7 == this->unk_B5C) { + if (nextLedgeClimbType == this->ledgeClimbType) { if (this->linearVelocity != 0.0f) { - if (this->unk_B5D < 0x64) { - this->unk_B5D++; + if (this->ledgeClimbDelayTimer < 100) { + this->ledgeClimbDelayTimer++; } } } else { - this->unk_B5C = spC7; - this->unk_B5D = 0; + this->ledgeClimbType = nextLedgeClimbType; + this->ledgeClimbDelayTimer = 0; } - sPlayerCurrentFloorType = SurfaceType_GetFloorType(&play->colCtx, floorPoly, this->actor.floorBgId); + sPlayerFloorType = SurfaceType_GetFloorType(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { f32 floorPolyNormalX; f32 floorPolyNormalY; f32 floorPolyNormalZ; - f32 sp54; + f32 sin; s32 pad; - f32 sp4C; + f32 cos; - D_80862B40 = SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if (func_808430E0(this) == 0) { + sPlayerFloorEffect = SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + + if (!func_808430E0(this)) { floorPolyNormalY = COLPOLY_GET_NORMAL(floorPoly->normal.y); if (this->actor.floorBgId != BGCHECK_SCENE) { DynaPoly_SetPlayerOnTop(&play->colCtx, this->actor.floorBgId); } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && (this->actor.depthInWater <= 24.0f) && - (D_80862B40 != FLOOR_EFFECT_1) && (sPlayerConveyorSpeedIndex == CONVEYOR_SPEED_DISABLED) && - (floorPolyNormalY > 0.5f)) { + (sPlayerFloorEffect != FLOOR_EFFECT_1) && + (sPlayerConveyorSpeedIndex == CONVEYOR_SPEED_DISABLED) && (floorPolyNormalY > 0.5f)) { if (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP]) { func_80841A50(play, this); } @@ -11029,26 +11083,31 @@ void func_80843178(PlayState* play, Player* this) { floorPolyNormalY = 1.0f / floorPolyNormalY; floorPolyNormalZ = COLPOLY_GET_NORMAL(floorPoly->normal.z); - sp54 = Math_SinS(this->currentYaw); - sp4C = Math_CosS(this->currentYaw); - this->unk_B6C = - Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); - this->unk_B6E = - Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp4C) - (floorPolyNormalZ * sp54)) * floorPolyNormalY); - sp54 = Math_SinS(this->actor.shape.rot.y); - sp4C = Math_CosS(this->actor.shape.rot.y); - D_80862B28 = - Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); - func_8083CF68(play, this); + sin = Math_SinS(this->currentYaw); + cos = Math_CosS(this->currentYaw); + + this->floorPitch = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sin) - (floorPolyNormalZ * cos)) * floorPolyNormalY); + this->floorPitchAlt = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * cos) - (floorPolyNormalZ * sin)) * floorPolyNormalY); + + sin = Math_SinS(this->actor.shape.rot.y); + cos = Math_CosS(this->actor.shape.rot.y); + + sPlayerFloorPitchShape = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sin) - (floorPolyNormalZ * cos)) * floorPolyNormalY); + + Player_HandleSlopes(play, this); } } else { func_808430E0(this); - D_80862B40 = FLOOR_EFFECT_0; + sPlayerFloorEffect = FLOOR_EFFECT_0; } if (floorPoly != NULL) { - this->unk_D66 = this->floorSfxOffset; - if (spAC != 0) { + this->prevFloorSfxOffset = this->floorSfxOffset; + + if (spAC) { this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG; return; } @@ -11056,18 +11115,18 @@ void func_80843178(PlayState* play, Player* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) { if (this->actor.depthInWater < 50.0f) { if (this->actor.depthInWater < 20.0f) { - this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_SE_PL_WALK_DIRT - SFX_FLAG - : NA_SE_PL_WALK_WATER0 - SFX_FLAG; + this->floorSfxOffset = (sPlayerFloorType == FLOOR_TYPE_13) ? NA_SE_PL_WALK_DIRT - SFX_FLAG + : NA_SE_PL_WALK_WATER0 - SFX_FLAG; } else { - this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_CODE_DIRT_DEEP - SFX_FLAG - : NA_SE_PL_WALK_WATER1 - SFX_FLAG; + this->floorSfxOffset = (sPlayerFloorType == FLOOR_TYPE_13) ? NA_CODE_DIRT_DEEP - SFX_FLAG + : NA_SE_PL_WALK_WATER1 - SFX_FLAG; } return; } } - if (this->stateFlags2 & PLAYER_STATE2_200) { + if (this->stateFlags2 & PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND) { this->floorSfxOffset = NA_SE_PL_WALK_SAND - SFX_FLAG; } else if (COLPOLY_GET_NORMAL(floorPoly->normal.y) > 0.5f) { this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, floorPoly, this->actor.floorBgId); @@ -11384,7 +11443,7 @@ void func_80844784(PlayState* play, Player* this) { s16 temp_v0; f32 temp_fv0_2; - if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sPlayerCurrentFloorType == FLOOR_TYPE_5) && + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sPlayerFloorType == FLOOR_TYPE_5) && (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)) { var_a3 = this->currentYaw; var_fv0 = this->linearVelocity; @@ -11540,7 +11599,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.home.pos); - temp_fv1 = fabsf(this->linearVelocity) * (fabsf(Math_SinS(this->unk_B6C) * 800.0f) + 100.0f); + temp_fv1 = fabsf(this->linearVelocity) * (fabsf(Math_SinS(this->floorPitch) * 800.0f) + 100.0f); Math_StepToF(&this->unk_AC0, 0.0f, CLAMP_MIN(temp_fv1, 300.0f)); @@ -11610,7 +11669,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Player_StopHorizontalMovement(this); Actor_MoveWithGravity(&this->actor); } - func_80843178(play, this); + Player_ProcessSceneCollision(play, this); } else { f32 temp_fa0; f32 var_fv1_2; @@ -11676,9 +11735,9 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if (!(this->stateFlags1 & PLAYER_STATE1_2) && (this->actor.parent == NULL)) { func_80844784(play, this); } - func_80843178(play, this); + Player_ProcessSceneCollision(play, this); } else { - sPlayerCurrentFloorType = FLOOR_TYPE_0; + sPlayerFloorType = FLOOR_TYPE_0; this->floorProperty = FLOOR_PROPERTY_0; if (this->stateFlags1 & PLAYER_STATE1_800000) { this->actor.floorPoly = this->rideActor->floorPoly; @@ -11688,7 +11747,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->pushedSpeed = 0.0f; } - func_8083562C(play, this, this->actor.floorPoly, this->actor.floorBgId); + Player_HandleExitsAndVoids(play, this, this->actor.floorPoly, this->actor.floorBgId); if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { f32 conveyorSpeed; s32 pad2; @@ -11704,7 +11763,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } Math_StepToF(&this->pushedSpeed, conveyorSpeed, conveyorSpeed * 0.1f); - Math_ScaledStepToS(&this->pushedYaw, D_80862B16, + Math_ScaledStepToS(&this->pushedYaw, sPlayerConveyorYaw, ((this->stateFlags1 & PLAYER_STATE1_8000000) ? 400.0f : 800.0f) * conveyorSpeed); } else if (this->pushedSpeed != 0.0f) { Math_StepToF(&this->pushedSpeed, 0.0f, (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 2.0f); @@ -11791,9 +11850,10 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } this->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_1000 | PLAYER_STATE1_400000); - this->stateFlags2 &= ~(PLAYER_STATE2_1 | PLAYER_STATE2_4 | PLAYER_STATE2_8 | PLAYER_STATE2_20 | - PLAYER_STATE2_40 | PLAYER_STATE2_100 | PLAYER_STATE2_200 | PLAYER_STATE2_1000 | - PLAYER_STATE2_4000 | PLAYER_STATE2_10000 | PLAYER_STATE2_400000 | PLAYER_STATE2_4000000); + this->stateFlags2 &= + ~(PLAYER_STATE2_1 | PLAYER_STATE2_4 | PLAYER_STATE2_8 | PLAYER_STATE2_20 | PLAYER_STATE2_40 | + PLAYER_STATE2_100 | PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND | PLAYER_STATE2_1000 | PLAYER_STATE2_4000 | + PLAYER_STATE2_10000 | PLAYER_STATE2_400000 | PLAYER_STATE2_4000000); this->stateFlags3 &= ~(PLAYER_STATE3_10 | PLAYER_STATE3_40 | PLAYER_STATE3_100 | PLAYER_STATE3_800 | PLAYER_STATE3_1000 | PLAYER_STATE3_100000 | PLAYER_STATE3_2000000 | PLAYER_STATE3_4000000 | PLAYER_STATE3_8000000 | PLAYER_STATE3_10000000); @@ -12563,19 +12623,21 @@ s32 func_80847A94(PlayState* play, Player* this, s32 arg2, f32* arg3) { f32 sp5C = rideActor->world.pos.y - 20.0f; Vec3f sp50; Vec3f sp44; - CollisionPoly* sp40; - CollisionPoly* sp3C; - s32 sp38; - s32 sp34; + CollisionPoly* wallPoly; + CollisionPoly* floorPoly; + s32 wallBgId; + s32 floorBgId; - *arg3 = func_80835CD8(play, this, &D_8085D588[arg2], &sp50, &sp3C, &sp34); + *arg3 = func_80835CD8(play, this, &D_8085D588[arg2], &sp50, &floorPoly, &floorBgId); if ((sp5C < *arg3) && (*arg3 < sp60)) { - if (!func_80835D58(play, this, &D_8085D5A0[arg2], &sp40, &sp38, &sp44)) { - if (!func_80835D58(play, this, &D_8085D5B8[arg2], &sp40, &sp38, &sp44)) { - this->actor.floorPoly = sp3C; - this->actor.floorBgId = sp38; - this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, sp3C, sp34); + if (!Player_PosVsWallLineTest(play, this, &D_8085D5A0[arg2], &wallPoly, &wallBgId, &sp44)) { + if (!Player_PosVsWallLineTest(play, this, &D_8085D5B8[arg2], &wallPoly, &wallBgId, &sp44)) { + this->actor.floorPoly = floorPoly; + //! @note: no poly is assigned to `wallBgId` when `Player_PosVsWallLineTest` fails. + //! Therefore, the default value `BGCHECK_SCENE` is assigned. + this->actor.floorBgId = wallBgId; + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, floorPoly, floorBgId); return true; } } @@ -14181,9 +14243,8 @@ AnimSfxEntry D_8085D60C[] = { void func_8084BFDC(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && (this->actor.depthInWater <= 0.0f)) { - if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) || - (sPlayerCurrentFloorType == FLOOR_TYPE_9) || - ((func_808340AC(sPlayerCurrentFloorType) >= 0) && + if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) || (sPlayerFloorType == FLOOR_TYPE_9) || + ((func_808340AC(sPlayerFloorType) >= 0) && !SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { func_808344C0(play, this); } @@ -14258,7 +14319,7 @@ void func_8084C16C(Player* this, PlayState* play) { (this->actor.velocity.y < 0.0f)) { if (this->unk_AE8 >= 0) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) { - if ((D_80862B18 > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) { + if ((sPlayerYDistToFloor > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) { func_80840980(this, NA_SE_VO_LI_FALL_S); this->stateFlags3 &= ~PLAYER_STATE3_10000; } @@ -14267,7 +14328,7 @@ void func_8084C16C(Player* this, PlayState* play) { this->unk_AE8 = -1; } } else { - if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (D_80862B18 > 280.0f)) { + if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) { this->unk_AE8 = -2; func_80840980(this, NA_SE_VO_LI_FALL_L); } @@ -14277,13 +14338,13 @@ void func_8084C16C(Player* this, PlayState* play) { (this->linearVelocity > 0.0f)) { if ((this->transformation != PLAYER_FORM_GORON) && ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0))) { - if ((this->wallHeight >= 150.0f) && (this->unk_AE3[this->unk_ADE] == 0)) { + if ((this->yDistToLedge >= 150.0f) && (this->unk_AE3[this->unk_ADE] == 0)) { if (func_8083D860(this, play)) { func_8084C124(play, this); } - } else if ((this->unk_B5C >= 2) && - ((this->wallHeight < (150.0f * this->ageProperties->unk_08)) && - (((this->actor.world.pos.y - this->actor.floorHeight) + this->wallHeight)) > + } else if ((this->ledgeClimbType >= PLAYER_LEDGE_CLIMB_2) && + ((this->yDistToLedge < (150.0f * this->ageProperties->unk_08)) && + (((this->actor.world.pos.y - this->actor.floorHeight) + this->yDistToLedge)) > (70.0f * this->ageProperties->unk_08))) { AnimationContext_DisableQueue(play); if (this->stateFlags3 & PLAYER_STATE3_10000) { @@ -14292,8 +14353,8 @@ void func_8084C16C(Player* this, PlayState* play) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); } - this->actor.world.pos.y += this->wallHeight; - func_80837CEC(play, this, this->actor.wallPoly, this->wallDistance, + this->actor.world.pos.y += this->yDistToLedge; + func_80837CEC(play, this, this->actor.wallPoly, this->distToInteractWall, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_38, this->modelAnimType)); this->currentYaw += 0x8000; this->actor.shape.rot.y = this->currentYaw; @@ -14621,7 +14682,7 @@ void func_8084D4EC(Player* this, PlayState* play) { if (this->skelAnime.animation == &gPlayerAnim_link_normal_250jump_start) { this->linearVelocity = 1.0f; if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { - f32 speed = this->wallHeight; + f32 speed = this->yDistToLedge; speed = CLAMP_MAX(speed, this->ageProperties->unk_0C); if (this->stateFlags1 & PLAYER_STATE1_8000000) { @@ -14746,8 +14807,8 @@ void func_8084D820(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_1) { sp5C = gSaveContext.entranceSpeed; if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { - this->unk_3A0.x = (Math_SinS(D_80862B16) * 400.0f) + this->actor.world.pos.x; - this->unk_3A0.z = (Math_CosS(D_80862B16) * 400.0f) + this->actor.world.pos.z; + this->unk_3A0.x = (Math_SinS(sPlayerConveyorYaw) * 400.0f) + this->actor.world.pos.x; + this->unk_3A0.z = (Math_CosS(sPlayerConveyorYaw) * 400.0f) + this->actor.world.pos.z; } } else { if (this->unk_AE8 < 0) { @@ -14902,11 +14963,11 @@ void func_8084E034(Player* this, PlayState* play) { Player_StopCutscene(this); play->func_18780(this, play); } else if (sp38 && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) { - s16 doorRot = (this->doorDirection < 0) ? doorActor->knobDoor.dyna.actor.world.rot.x - : doorActor->knobDoor.dyna.actor.world.rot.z; + s16 exitIndexPlusOne = (this->doorDirection < 0) ? doorActor->knobDoor.dyna.actor.world.rot.x + : doorActor->knobDoor.dyna.actor.world.rot.z; - if (doorRot != 0) { - func_808354A4(play, doorRot - 1, false); + if (exitIndexPlusOne != 0) { + func_808354A4(play, exitIndexPlusOne - 1, false); } } } @@ -15389,7 +15450,7 @@ void func_8084F4E8(Player* this, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, 6.0f, this->ageProperties->unk_00 + 15.0f, + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, 6.0f, this->ageProperties->ceilingCheckHeight + 15.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); func_8083DD1C(play, this, 268 * 0.1f, this->ageProperties->unk_3C, 50.0f, -20.0f); } @@ -15865,17 +15926,20 @@ void func_808508C8(Player* this, PlayState* play) { func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType], play); Player_AnimSfx_PlayFloorLand(this); } - } else if ((func_80850854(play, this) == 0) && - (func_80832F78(this, &sp34, &sp32, 0.0f, play), (sp34 != 0.0f))) { - if ((ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, sp32)) > 0x6000) && - !Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { - return; - } + } else if (!func_80850854(play, this)) { + func_80832F78(this, &sp34, &sp32, 0.0f, play); - if (func_8082FC24(this) || func_80847ED4(this)) { - func_80848048(play, this); - } else { - func_8083B73C(play, this, sp32); + if (sp34 != 0.0f) { + if ((ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, sp32)) > 0x6000) && + !Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + return; + } + + if (func_8082FC24(this) || func_80847ED4(this)) { + func_80848048(play, this); + } else { + func_8083B73C(play, this, sp32); + } } } @@ -15993,7 +16057,7 @@ void func_80850D68(Player* this, PlayState* play) { sp3E = sPlayerControlInput->rel.stick_y * 0xC8; if (this->unk_B8C != 0) { this->unk_B8C--; - sp3E = CLAMP_MAX(sp3E, (s16)(this->unk_B6C - 0xFA0)); + sp3E = CLAMP_MAX(sp3E, (s16)(this->floorPitch - 0xFA0)); } if ((this->unk_AAA >= -0x1555) && (this->actor.depthInWater < (this->ageProperties->unk_24 + 10.0f))) { @@ -16017,7 +16081,7 @@ void func_80850D68(Player* this, PlayState* play) { } } - if (D_80862B18 < 20.0f) { + if (sPlayerYDistToFloor < 20.0f) { func_80850D20(play, this); } } else { @@ -16037,7 +16101,7 @@ void func_80850D68(Player* this, PlayState* play) { if ((this->actor.floorBgId == BGCHECK_SCENE) || ((dynaActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId)) == NULL) || (dynaActor->actor.id != ACTOR_EN_TWIG)) { - this->unk_AAA += (s16)((-this->unk_B6C - this->unk_AAA) * 2); + this->unk_AAA += (s16)((-this->floorPitch - this->unk_AAA) * 2); this->unk_B8C = 0xF; } @@ -16910,7 +16974,7 @@ void func_80853850(Player* this, PlayState* play) { struct_8085D80C* sp4C; D_8085D7F8.z = D_8085D804[this->transformation]; - if (func_80835D58(play, this, &D_8085D7F8, &sp6C, &sp68, &sp5C)) { + if (Player_PosVsWallLineTest(play, this, &D_8085D7F8, &sp6C, &sp68, &sp5C)) { temp_fv1 = this->actor.world.pos.x - sp5C.x; temp_fa0 = this->actor.world.pos.z - sp5C.z; temp_fv0 = sqrtf(SQ(temp_fv1) + SQ(temp_fa0)); @@ -16918,8 +16982,8 @@ void func_80853850(Player* this, PlayState* play) { if (temp_fv0 != 0.0f) { temp_fv0 = 3.0f / temp_fv0; - this->actor.world.pos.x = this->actor.world.pos.x + (temp_fv1 * temp_fv0); - this->actor.world.pos.z = this->actor.world.pos.z + (temp_fa0 * temp_fv0); + this->actor.world.pos.x += temp_fv1 * temp_fv0; + this->actor.world.pos.z += temp_fa0 * temp_fv0; } } @@ -17100,7 +17164,7 @@ void func_808540A0(Player* this, PlayState* play) { void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction); void func_80854118(Player* this, PlayState* play) { - if (D_80862B18 < 150.0f) { + if (sPlayerYDistToFloor < 150.0f) { if (PlayerAnimation_Update(play, &this->skelAnime)) { if (this->unk_AE8 == 0) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { @@ -17790,7 +17854,7 @@ void func_80855E08(Player* this, PlayState* play) { f32 var_fv0; Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); - func_80843178(play, this); + Player_ProcessSceneCollision(play, this); var_fv0 = this->actor.world.pos.y - this->actor.floorHeight; var_fv0 = CLAMP_MAX(var_fv0, 20.0f); @@ -18558,11 +18622,11 @@ void func_80857BE8(Player* this, PlayState* play) { f32 sp84 = (((this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) || (this->floorSfxOffset == NA_SE_PL_WALK_ICE - SFX_FLAG) || (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG) || - (sPlayerCurrentFloorType == FLOOR_TYPE_5)) && + (sPlayerFloorType == FLOOR_TYPE_5)) && (spC0 >= 0x7D0)) ? 0.08f : this->unk_AE8 * 0.0003f; - f32 sp80 = (Math_SinS(this->unk_B6C) * 8.0f) + 0.6f; + f32 sp80 = (Math_SinS(this->floorPitch) * 8.0f) + 0.6f; s16 var_a3; s16 sp7C; Vec3f sp70; @@ -18615,7 +18679,7 @@ void func_80857BE8(Player* this, PlayState* play) { spB8 = sqrtf(SQ(spA4) + SQ(spA0)); if (this->unk_B86[1] != 0) { - if ((ABS_ALT(sp8E) + ABS_ALT(this->unk_B6C)) > 15000) { + if ((ABS_ALT(sp8E) + ABS_ALT(this->floorPitch)) > 0x3A98) { this->unk_B86[1] = 0; this->unk_AE7 = 4; this->unk_B8E = 0x14; @@ -18682,8 +18746,8 @@ void func_80857BE8(Player* this, PlayState* play) { } if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - this->linearVelocity = this->unk_B08 * Math_CosS(this->unk_B6C); - this->actor.velocity.y = this->unk_B08 * Math_SinS(this->unk_B6C); + this->linearVelocity = this->unk_B08 * Math_CosS(this->floorPitch); + this->actor.velocity.y = this->unk_B08 * Math_SinS(this->floorPitch); } if ((this->unk_B86[1] != 0) || @@ -20155,7 +20219,8 @@ void func_8085B74C(PlayState* play) { } func_80835324(play, player, 400.0f, - (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) ? D_80862B16 : player->actor.world.rot.y); + (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) ? sPlayerConveyorYaw + : player->actor.world.rot.y); player->stateFlags1 |= (PLAYER_STATE1_1 | PLAYER_STATE1_20000000); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d7c955ea4..214e1ef4e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4419,13 +4419,13 @@ 0x80835428:("func_80835428",), 0x808354A4:("func_808354A4",), 0x808355D8:("func_808355D8",), - 0x8083562C:("func_8083562C",), + 0x8083562C:("Player_HandleExitsAndVoids",), 0x80835BC8:("Player_TranslateAndRotateY",), 0x80835BF8:("func_80835BF8",), 0x80835C64:("Player_SpawnFairy",), 0x80835CD8:("func_80835CD8",), 0x80835D2C:("func_80835D2C",), - 0x80835D58:("func_80835D58",), + 0x80835D58:("Player_PosVsWallLineTest",), 0x80835DF8:("func_80835DF8",), 0x80835EAC:("Player_Door_Staircase",), 0x8083604C:("Player_Door_Sliding",), @@ -4532,7 +4532,7 @@ 0x8083CB58:("func_8083CB58",), 0x8083CBC4:("func_8083CBC4",), 0x8083CCB4:("func_8083CCB4",), - 0x8083CF68:("func_8083CF68",), + 0x8083CF68:("Player_HandleSlopes",), 0x8083D168:("func_8083D168",), 0x8083D23C:("func_8083D23C",), 0x8083D6DC:("func_8083D6DC",), @@ -4607,7 +4607,7 @@ 0x808425B4:("func_808425B4",), 0x808426F0:("Player_SetDoAction",), 0x808430E0:("func_808430E0",), - 0x80843178:("func_80843178",), + 0x80843178:("Player_ProcessSceneCollision",), 0x80843EC0:("Player_UpdateCamAndSeqModes",), 0x808442D8:("func_808442D8",), 0x808445C4:("func_808445C4",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 3376dbef4..81cb2e4cd 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -5013,7 +5013,7 @@ 0x8085D224:("D_8085D224","UNK_TYPE1","",0x30), 0x8085D254:("D_8085D254","u16","[4]",0x8), 0x8085D25C:("D_8085D25C","UNK_TYPE1","",0x1), - 0x8085D264:("D_8085D264","UNK_TYPE1","",0x1), + 0x8085D264:("sPlayerSlopeSlipAnims","UNK_TYPE1","",0x1), 0x8085D26C:("D_8085D26C","UNK_TYPE1","",0x1), 0x8085D270:("D_8085D270","UNK_TYPE1","",0x1), 0x8085D27C:("D_8085D27C","Vec3f","",0xC), @@ -5032,7 +5032,7 @@ 0x8085D340:("D_8085D340","UNK_TYPE1","",0x1), 0x8085D34C:("D_8085D34C","UNK_TYPE1","",0x1), 0x8085D354:("D_8085D354","UNK_TYPE1","",0x1), - 0x8085D358:("D_8085D358","Vec3f","",0xC), + 0x8085D358:("sInteractWallCheckOffset","Vec3f","",0xC), 0x8085D364:("D_8085D364","UNK_TYPE1","",0x1), 0x8085D370:("D_8085D370","UNK_TYPE1","",0x1), 0x8085D37C:("D_8085D37C","UNK_TYPE1","",0x1), @@ -5368,20 +5368,20 @@ 0x80862B00:("D_80862B00","UNK_TYPE1","",0x1), 0x80862B02:("D_80862B02","UNK_TYPE1","",0x1), 0x80862B04:("D_80862B04","UNK_TYPE1","",0x1), - 0x80862B08:("sPlayerCurrentFloorType","UNK_TYPE1","",0x1), - 0x80862B0C:("sPlayerCurrentWallFlags","UNK_TYPE1","",0x1), + 0x80862B08:("sPlayerFloorType","UNK_TYPE1","",0x1), + 0x80862B0C:("sPlayerTouchedWallFlags","UNK_TYPE1","",0x1), 0x80862B10:("sPlayerConveyorSpeedIndex","UNK_TYPE1","",0x1), 0x80862B14:("sPlayerIsOnFloorConveyor","UNK_TYPE1","",0x1), - 0x80862B16:("D_80862B16","UNK_TYPE1","",0x1), - 0x80862B18:("D_80862B18","f32","",0x4), + 0x80862B16:("sPlayerConveyorYaw","UNK_TYPE1","",0x1), + 0x80862B18:("sPlayerYDistToFloor","f32","",0x4), 0x80862B1C:("sPlayerPrevFloorProperty","UNK_TYPE1","",0x1), - 0x80862B20:("D_80862B20","UNK_TYPE1","",0x1), - 0x80862B24:("D_80862B24","UNK_TYPE1","",0x1), - 0x80862B28:("D_80862B28","UNK_TYPE1","",0x1), + 0x80862B20:("sPlayerShapeYawToTouchedWall","UNK_TYPE1","",0x1), + 0x80862B24:("sPlayerWorldYawToTouchedWall","UNK_TYPE1","",0x1), + 0x80862B28:("sPlayerFloorPitchShape","UNK_TYPE1","",0x1), 0x80862B2C:("D_80862B2C","UNK_TYPE1","",0x1), - 0x80862B30:("D_80862B30","UNK_TYPE1","",0x1), + 0x80862B30:("sPlayerInteractWallCheckResult","UNK_TYPE1","",0x1), 0x80862B3C:("D_80862B3C","f32","",0x4), - 0x80862B40:("D_80862B40","UNK_TYPE1","",0x1), + 0x80862B40:("sPlayerFloorEffect","UNK_TYPE1","",0x1), 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1), 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1), 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1), From 9b341a4d6a721b46baa81ee2f47815b6073f5096 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 24 Jun 2023 04:40:26 -0400 Subject: [PATCH 012/121] A few UB fixes (#1272) * Fix OoB in ObjDriftie * Fix OoB in EnHorseLinkChild * Fix negative shift in jpegdecode * more oob fixes * AVOID_UB * clean * huh? * change viint.h macros * objdriftice * ub labelling * review * review * fix z_parameter arrays * u32 cast * missing & --- include/ultra64/viint.h | 16 ++--- src/audio/lib/heap.c | 4 +- src/audio/lib/load.c | 2 + src/code/jpegdecoder.c | 2 +- src/code/z_parameter.c | 65 +++++++++++++------ src/code/z_vimode.c | 8 +-- .../z_en_horse_link_child.c | 10 +-- .../actors/ovl_Obj_Driftice/z_obj_driftice.c | 17 +++-- .../actors/ovl_Obj_Driftice/z_obj_driftice.h | 6 +- tools/disasm/variables.txt | 15 ++--- 10 files changed, 86 insertions(+), 59 deletions(-) diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h index 4fea2259a..6f61307eb 100644 --- a/include/ultra64/viint.h +++ b/include/ultra64/viint.h @@ -17,17 +17,17 @@ // For use in initializing OSViMode structures #define BURST(hsync_width, color_width, vsync_width, color_start) \ - (hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20)) -#define WIDTH(v) v -#define VSYNC(v) v -#define HSYNC(duration, leap) (duration | (leap << 16)) -#define LEAP(upper, lower) ((upper << 16) | lower) -#define START(start, end) ((start << 16) | end) + (((u32)(hsync_width) & 0xFF) | (((u32)(color_width) & 0xFF) << 8) | (((u32)(vsync_width) & 0xF) << 16) | (((u32)(color_start) & 0xFFFF) << 20)) +#define WIDTH(v) (v) +#define VSYNC(v) (v) +#define HSYNC(duration, leap) (((u32)(leap) << 16) | ((u32)(duration) & 0xFFFF)) +#define LEAP(upper, lower) (((u32)(upper) << 16) | ((u32)(lower) & 0xFFFF)) +#define START(start, end) (((u32)(start) << 16) | ((u32)(end) & 0xFFFF)) -#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1)) +#define FTOFIX(val, i, f) ((u32)((val) * (f32)(1 << (f))) & ((1 << ((i) + (f))) - 1)) #define F210(val) FTOFIX(val, 2, 10) -#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16)) +#define SCALE(scaleup, off) (F210((1.0f / (f32)(scaleup))) | (F210((f32)(off)) << 16)) #define VCURRENT(v) v #define ORIGIN(v) v diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 7a7cd5807..5d8dfee89 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1109,7 +1109,9 @@ void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size) { gAudioCtx.permanentEntries[index].size = size; //! @bug UB: missing return. "addr" is in v0 at this point, but doing an // explicit return uses an additional register. - // return addr; +#ifdef AVOID_UB + return addr; +#endif } void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr, s8 medium, s32 cache) { diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index af9de1cd1..34e8dec9c 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -738,6 +738,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate) { romAddr = table->entries[realId].romAddr; switch (cachePolicy) { case CACHE_LOAD_PERMANENT: + //! @bug UB: triggers an UB because this function is missing a return value. ramAddr = AudioHeap_AllocPermanent(tableType, realId, size); if (ramAddr == NULL) { return ramAddr; @@ -1108,6 +1109,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData, switch (cachePolicy) { case CACHE_LOAD_PERMANENT: + //! @bug UB: triggers an UB because this function is missing a return value. ramAddr = AudioHeap_AllocPermanent(tableType, realId, size); if (ramAddr == NULL) { return ramAddr; diff --git a/src/code/jpegdecoder.c b/src/code/jpegdecoder.c index 336e381f9..e6998adc9 100644 --- a/src/code/jpegdecoder.c +++ b/src/code/jpegdecoder.c @@ -156,7 +156,7 @@ s32 JpegDecoder_ParseNextSymbol(JpegHuffmanTable* hTable, s16* outCoeff, s8* out if (sym) { *outCoeff = JpegDecoder_ReadBits(sym); if (*outCoeff < (1 << (sym - 1))) { - *outCoeff += (-1 << sym) + 1; + *outCoeff += (0xFFFFFFFF << sym) + 1; } } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index c6a086276..8cec0a5b7 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -159,16 +159,33 @@ static Gfx sScreenFillSetupDL[] = { s16 D_801BF9B0 = 0; f32 D_801BF9B4[] = { 100.0f, 109.0f }; -s16 D_801BF9BC[] = { 0x226, 0x2A8, 0x2A8, 0x2A8 }; +s16 D_801BF9BC[] = { + 0x226, // EQUIP_SLOT_B + 0x2A8, // EQUIP_SLOT_C_LEFT + 0x2A8, // EQUIP_SLOT_C_DOWN + 0x2A8, // EQUIP_SLOT_C_RIGHT +}; s16 D_801BF9C4[] = { 0x9E, 0x9B }; s16 D_801BF9C8[] = { 0x17, 0x16 }; f32 D_801BF9CC[] = { -380.0f, -350.0f }; -s16 D_801BF9D4[] = { 0xA7, 0xE3 }; -s16 D_801BF9D8[] = { 0xF9, 0x10F }; -s16 D_801BF9DC[] = { 0x11, 0x12 }; -s16 D_801BF9E0[] = { 0x22, 0x12 }; -s16 D_801BF9E4[] = { 0x23F, 0x26C }; -s16 D_801BF9E8[] = { 0x26C, 0x26C }; +s16 D_801BF9D4[] = { + 0xA7, // EQUIP_SLOT_B + 0xE3, // EQUIP_SLOT_C_LEFT + 0xF9, // EQUIP_SLOT_C_DOWN + 0x10F, // EQUIP_SLOT_C_RIGHT +}; +s16 D_801BF9DC[] = { + 0x11, // EQUIP_SLOT_B + 0x12, // EQUIP_SLOT_C_LEFT + 0x22, // EQUIP_SLOT_C_DOWN + 0x12, // EQUIP_SLOT_C_RIGHT +}; +s16 D_801BF9E4[] = { + 0x23F, // EQUIP_SLOT_B + 0x26C, // EQUIP_SLOT_C_LEFT + 0x26C, // EQUIP_SLOT_C_DOWN + 0x26C, // EQUIP_SLOT_C_RIGHT +}; s16 sFinalHoursClockDigitsRed = 0; s16 sFinalHoursClockFrameEnvRed = 0; @@ -3848,8 +3865,12 @@ void Interface_DrawItemButtons(PlayState* play) { // Remnant of OoT 130, 136, 136, 136, 136, }; - static s16 D_801BFAF4[] = { 0x1D, 0x1B }; - static s16 D_801BFAF8[] = { 0x1B, 0x1B }; + static s16 D_801BFAF4[] = { + 0x1D, // EQUIP_SLOT_B + 0x1B, // EQUIP_SLOT_C_LEFT + 0x1B, // EQUIP_SLOT_C_DOWN + 0x1B, // EQUIP_SLOT_C_RIGHT + }; InterfaceContext* interfaceCtx = &play->interfaceCtx; Player* player = GET_PLAYER(play); PauseContext* pauseCtx = &play->pauseCtx; @@ -3863,21 +3884,27 @@ void Interface_DrawItemButtons(PlayState* play) { gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); // B Button Color & Texture - OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[0], - D_801BF9DC[0], D_801BFAF4[0], D_801BFAF4[0], D_801BF9E4[0] * 2, - D_801BF9E4[0] * 2, 100, 255, 120, interfaceCtx->bAlpha); + OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow( + OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[EQUIP_SLOT_B], D_801BF9DC[EQUIP_SLOT_B], + D_801BFAF4[EQUIP_SLOT_B], D_801BFAF4[EQUIP_SLOT_B], D_801BF9E4[EQUIP_SLOT_B] * 2, D_801BF9E4[EQUIP_SLOT_B] * 2, + 100, 255, 120, interfaceCtx->bAlpha); gDPPipeSync(OVERLAY_DISP++); // C-Left Button Color & Texture - OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[1], D_801BF9DC[1], D_801BFAF4[1], D_801BFAF4[1], - D_801BF9E4[1] * 2, D_801BF9E4[1] * 2, 255, 240, 0, interfaceCtx->cLeftAlpha); + OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_LEFT], D_801BF9DC[EQUIP_SLOT_C_LEFT], + D_801BFAF4[EQUIP_SLOT_C_LEFT], D_801BFAF4[EQUIP_SLOT_C_LEFT], + D_801BF9E4[EQUIP_SLOT_C_LEFT] * 2, D_801BF9E4[EQUIP_SLOT_C_LEFT] * 2, 255, + 240, 0, interfaceCtx->cLeftAlpha); // C-Down Button Color & Texture - OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[0], D_801BF9E0[0], D_801BFAF8[0], D_801BFAF8[0], - D_801BF9E4[2] * 2, D_801BF9E4[2] * 2, 255, 240, 0, interfaceCtx->cDownAlpha); + OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_DOWN], D_801BF9DC[EQUIP_SLOT_C_DOWN], + D_801BFAF4[EQUIP_SLOT_C_DOWN], D_801BFAF4[EQUIP_SLOT_C_DOWN], + D_801BF9E4[EQUIP_SLOT_C_DOWN] * 2, D_801BF9E4[EQUIP_SLOT_C_DOWN] * 2, 255, + 240, 0, interfaceCtx->cDownAlpha); // C-Right Button Color & Texture - OVERLAY_DISP = - Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[1], D_801BF9E0[1], D_801BFAF8[1], D_801BFAF8[1], - D_801BF9E4[3] * 2, D_801BF9E4[3] * 2, 255, 240, 0, interfaceCtx->cRightAlpha); + OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_RIGHT], D_801BF9DC[EQUIP_SLOT_C_RIGHT], + D_801BFAF4[EQUIP_SLOT_C_RIGHT], D_801BFAF4[EQUIP_SLOT_C_RIGHT], + D_801BF9E4[EQUIP_SLOT_C_RIGHT] * 2, D_801BF9E4[EQUIP_SLOT_C_RIGHT] * 2, 255, + 240, 0, interfaceCtx->cRightAlpha); if (!IS_PAUSE_STATE_GAMEOVER) { if ((play->pauseCtx.state != PAUSE_STATE_OFF) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) { diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 2ddd27775..3909c7a05 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -153,14 +153,14 @@ void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 ant viMode->comRegs.vSync++; if (tvType == OS_TV_MPAL) { viMode->comRegs.hSync += HSYNC(1, 4); - viMode->comRegs.leap += LEAP((u16)-4, (u16)-2); + viMode->comRegs.leap += LEAP(-4, -2); } } else { - viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2); + viMode->fldRegs[0].vStart += START(-3, -2); if (tvType == OS_TV_MPAL) { - viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1); + viMode->fldRegs[0].vBurst += BURST(-2, -1, 12, -1); } else if (tvType == OS_TV_PAL) { - viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0); + viMode->fldRegs[1].vBurst += BURST(-2, -1, 2, 0); } } 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 13812397b..d867d299f 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 @@ -39,10 +39,10 @@ ActorInit En_Horse_Link_Child_InitVars = { (ActorFunc)EnHorseLinkChild_Draw, }; -AnimationHeader* D_808DFEC0[] = { &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468 }; - -AnimationHeader* D_808DFEC8[] = { &object_horse_link_child_Anim_007D50, &object_horse_link_child_Anim_0043AC, - &object_horse_link_child_Anim_002F98 }; +AnimationHeader* D_808DFEC0[] = { + &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_007D50, + &object_horse_link_child_Anim_0043AC, &object_horse_link_child_Anim_002F98, +}; static ColliderJntSphElementInit sJntSphElementsInit[] = { { @@ -444,7 +444,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) { if (Math_CosS(sp36) < 0.0f) { this->unk_148 = 2; Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], D_808DFF18[this->unk_148], 0.0f, - Animation_GetLastFrame(D_808DFEC8[0]), ANIMMODE_ONCE, -5.0f); + Animation_GetLastFrame(D_808DFEC0[2]), ANIMMODE_ONCE, -5.0f); } else { func_808DF560(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 7d729495a..13a88568b 100644 --- a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c +++ b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c @@ -163,19 +163,19 @@ void func_80A66930(ObjDrifticeStruct2* arg0, ObjDriftice* this, s16* arg2, s16* temp_f20 = 0.01f; } - Math_StepToS(&arg0->unk_00[1], 1200.0f * temp_f20, 0x64); + Math_StepToS(&arg0->unk_02, 1200.0f * temp_f20, 0x64); phi_s0 = 2500.0f * temp_f20; - Math_StepToS(&arg0->unk_00[3], Math_CosS(arg0->unk_00[2] * 6.5536f) * (120.0f * temp_f20), 0x28); + Math_StepToS(&arg0->unk_06, Math_CosS(arg0->unk_04 * 6.5536f) * (120.0f * temp_f20), 0x28); Math_StepToF(&arg0->unk_08, 1.0f, 0.02f); } else { - Math_StepToS(&arg0->unk_00[1], 0, 0x96); + Math_StepToS(&arg0->unk_02, 0, 0x96); phi_s0 = 0; - Math_StepToS(&arg0->unk_00[3], 20, 7); + Math_StepToS(&arg0->unk_06, 20, 7); Math_StepToF(&arg0->unk_08, 0.0f, 0.02f); } - Math_ScaledStepToS(arg0->unk_00, this->dyna.actor.yawTowardsPlayer, arg0->unk_00[1]); - *arg3 = arg0->unk_00[0]; - Math_ScaledStepToS(&arg0->unk_00[2], phi_s0, arg0->unk_00[3]); + Math_ScaledStepToS(&arg0->unk_00, this->dyna.actor.yawTowardsPlayer, arg0->unk_02); + *arg3 = arg0->unk_00; + Math_ScaledStepToS(&arg0->unk_04, phi_s0, arg0->unk_06); for (i = 0; i < 2; i++) { temp_s0 = &arg0->unk_0C[i]; @@ -195,8 +195,7 @@ void func_80A66930(ObjDrifticeStruct2* arg0, ObjDriftice* this, s16* arg2, s16* temp_f22 *= arg0->unk_08; - //! FAKE: - *arg2 = arg0->unk_00[2] + (s32)((void)0, temp_f22); + *arg2 = (s32)temp_f22 + arg0->unk_04; } void func_80A66C4C(ObjDrifticeStruct4* arg0, ObjDriftice* this, s16* arg2, s16* arg3) { diff --git a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h index 19627c3df..f77e95eff 100644 --- a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h +++ b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h @@ -23,8 +23,10 @@ typedef struct { } ObjDrifticeStruct3; // size = 0x14 typedef struct { - /* 0x00 */ s16 unk_00[2]; - /* 0x04 */ f32 unk_04; + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; + /* 0x04 */ s16 unk_04; + /* 0x06 */ s16 unk_06; /* 0x08 */ f32 unk_08; /* 0x0C */ ObjDrifticeStruct3 unk_0C[2]; } ObjDrifticeStruct2; // size = 0x34 diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 81cb2e4cd..83d8d4db7 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1079,12 +1079,9 @@ 0x801BF9C4:("D_801BF9C4","UNK_TYPE1","",0x1), 0x801BF9C8:("D_801BF9C8","UNK_TYPE1","",0x1), 0x801BF9CC:("D_801BF9CC","UNK_TYPE1","",0x1), - 0x801BF9D4:("D_801BF9D4","UNK_TYPE4","",0x4), - 0x801BF9D8:("D_801BF9D8","UNK_TYPE4","",0x4), - 0x801BF9DC:("D_801BF9DC","UNK_TYPE4","",0x4), - 0x801BF9E0:("D_801BF9E0","UNK_TYPE4","",0x4), - 0x801BF9E4:("D_801BF9E4","UNK_TYPE4","",0x4), - 0x801BF9E8:("D_801BF9E8","UNK_TYPE4","",0x4), + 0x801BF9D4:("D_801BF9D4","UNK_TYPE4","",0x8), + 0x801BF9DC:("D_801BF9DC","UNK_TYPE4","",0x8), + 0x801BF9E4:("D_801BF9E4","UNK_TYPE4","",0x8), 0x801BF9EC:("sFinalHoursClockDigitsRed","UNK_TYPE4","",0x4), 0x801BF9F0:("sFinalHoursClockFrameEnvRed","UNK_TYPE2","",0x2), 0x801BF9F4:("sFinalHoursClockFrameEnvGreen","UNK_TYPE2","",0x2), @@ -1103,8 +1100,7 @@ 0x801BFAC4:("magicBorderIndices","UNK_TYPE1","",0x1), 0x801BFACC:("magicBorderColorTimerIndex","UNK_TYPE1","",0x1), 0x801BFAD4:("cUpLabelTextures","UNK_TYPE1","",0x1), - 0x801BFAF4:("D_801BFAF4","UNK_TYPE4","",0x4), - 0x801BFAF8:("D_801BFAF8","UNK_TYPE4","",0x4), + 0x801BFAF4:("D_801BFAF4","UNK_TYPE4","",0x8), 0x801BFAFC:("D_801BFAFC","UNK_TYPE4","",0x4), 0x801BFB04:("D_801BFB04","UNK_TYPE1","",0x1), 0x801BFB0C:("D_801BFB0C","UNK_TYPE1","",0x1), @@ -6856,8 +6852,7 @@ 0x808DE3E4:("D_808DE3E4","f32","",0x4), 0x808DE5B0:("D_808DE5B0","UNK_TYPE1","",0x1), 0x808DFEA0:("En_Horse_Link_Child_InitVars","UNK_TYPE1","",0x1), - 0x808DFEC0:("D_808DFEC0","UNK_TYPE4","",0x4), - 0x808DFEC8:("D_808DFEC8","UNK_TYPE4","",0x4), + 0x808DFEC0:("D_808DFEC0","UNK_TYPE4","",0x14), 0x808DFED4:("D_808DFED4","UNK_TYPE1","",0x1), 0x808DFEF8:("D_808DFEF8","UNK_TYPE1","",0x1), 0x808DFF08:("D_808DFF08","UNK_TYPE1","",0x1), From 21655f31c5278bb367dcb67ecea1104eb00f6142 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 25 Jun 2023 09:56:48 +1000 Subject: [PATCH 013/121] Audio Effects Cleanup (#1295) * audio effects cleanup * more cleanup * header comments * more docs * cleanup * file name fix * swap if * more cleanup * move comment * ADSR notes * fix bss, pr review --- include/audio/effects.h | 117 +++++++++++++ include/functions.h | 7 - include/z64audio.h | 97 ++--------- src/audio/lib/effects.c | 154 ++++++++++-------- src/audio/lib/heap.c | 3 +- src/audio/lib/playback.c | 39 ++--- src/audio/lib/seqplayer.c | 20 +-- src/audio/lib/thread.c | 3 +- src/code/z_sram_NES.c | 1 - src/overlays/actors/ovl_Boss_03/z_boss_03.c | 2 + .../actors/ovl_En_Wood02/z_en_wood02.c | 1 - tools/disasm/functions.txt | 18 +- tools/sizes/code_functions.csv | 18 +- 13 files changed, 264 insertions(+), 216 deletions(-) create mode 100644 include/audio/effects.h diff --git a/include/audio/effects.h b/include/audio/effects.h new file mode 100644 index 000000000..67741200f --- /dev/null +++ b/include/audio/effects.h @@ -0,0 +1,117 @@ +#ifndef AUDIO_EFFECTS_H +#define AUDIO_EFFECTS_H + +#include "PR/ultratypes.h" +#include "unk.h" + +struct Note; +struct SequencePlayer; + +/* Multi-Point ADSR Envelope (Attack, Decay, Sustain, Release) */ + +typedef enum AdsrStatus { + /* 0 */ ADSR_STATUS_DISABLED, + /* 1 */ ADSR_STATUS_INITIAL, + /* 2 */ ADSR_STATUS_START_LOOP, + /* 3 */ ADSR_STATUS_LOOP, + /* 4 */ ADSR_STATUS_FADE, + /* 5 */ ADSR_STATUS_HANG, + /* 6 */ ADSR_STATUS_DECAY, + /* 7 */ ADSR_STATUS_RELEASE, + /* 8 */ ADSR_STATUS_SUSTAIN +} AdsrStatus; + +typedef struct EnvelopePoint { + /* 0x0 */ s16 delay; + /* 0x2 */ s16 arg; +} EnvelopePoint; // size = 0x4 + +typedef struct AdsrSettings { + /* 0x0 */ u8 decayIndex; // index used to obtain adsr decay rate from adsrDecayTable + /* 0x1 */ u8 sustain; + /* 0x4 */ EnvelopePoint* envelope; +} AdsrSettings; // size = 0x8 + +typedef struct AdsrState { + union { + struct { + /* 0x00 */ u8 unused : 1; + /* 0x00 */ u8 hang : 1; + /* 0x00 */ u8 decay : 1; + /* 0x00 */ u8 release : 1; + /* 0x00 */ u8 status : 4; + } s; + /* 0x00 */ u8 asByte; + } action; + /* 0x01 */ u8 envelopeIndex; + /* 0x02 */ s16 delay; + /* 0x04 */ f32 sustain; + /* 0x08 */ f32 velocity; + /* 0x0C */ f32 fadeOutVel; + /* 0x10 */ f32 current; + /* 0x14 */ f32 target; + /* 0x18 */ UNK_TYPE1 pad18[4]; + /* 0x1C */ EnvelopePoint* envelope; +} AdsrState; // size = 0x20 + + +/* Vibrato */ + +typedef struct VibratoSubStruct { + /* 0x0 */ u16 vibratoRateStart; + /* 0x2 */ u16 vibratoDepthStart; + /* 0x4 */ u16 vibratoRateTarget; + /* 0x6 */ u16 vibratoDepthTarget; + /* 0x8 */ u16 vibratoRateChangeDelay; + /* 0xA */ u16 vibratoDepthChangeDelay; + /* 0xC */ u16 vibratoDelay; +} VibratoSubStruct; // size = 0xE + +typedef struct VibratoState { + /* 0x00 */ VibratoSubStruct* vibSubStruct; // Something else? + /* 0x04 */ u32 time; // 0x400 is 1 unit of time, 0x10000 is 1 period + /* 0x08 */ s16* curve; + /* 0x0C */ f32 depth; + /* 0x10 */ f32 rate; + /* 0x14 */ u8 active; + /* 0x16 */ u16 rateChangeTimer; + /* 0x18 */ u16 depthChangeTimer; + /* 0x1A */ u16 delay; +} VibratoState; // size = 0x1C + + +/* Portamento */ + +typedef enum PortamentoMode { + /* 0 */ PORTAMENTO_MODE_OFF, + /* 1 */ PORTAMENTO_MODE_1, + /* 2 */ PORTAMENTO_MODE_2, + /* 3 */ PORTAMENTO_MODE_3, + /* 4 */ PORTAMENTO_MODE_4, + /* 5 */ PORTAMENTO_MODE_5 +} PortamentoMode; + +#define PORTAMENTO_IS_SPECIAL(x) ((x).mode & 0x80) +#define PORTAMENTO_MODE(x) ((x).mode & ~0x80) + +// Pitch sliding by up to one octave in the positive direction. Negative +// direction is "supported" by setting extent to be negative. The code +// extrapolates exponentially in the wrong direction in that case, but that +// doesn't prevent seqplayer from doing it, AFAICT. +typedef struct Portamento { + /* 0x0 */ u8 mode; // bit 0x80 denotes something; the rest are an index 0-5 + /* 0x2 */ u16 cur; + /* 0x4 */ u16 speed; + /* 0x8 */ f32 extent; +} Portamento; // size = 0xC + +void AudioScript_SequencePlayerProcessSound(struct SequencePlayer* seqPlayer); + +void AudioEffects_InitAdsr(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut); +void AudioEffects_InitVibrato(struct Note* note); +void AudioEffects_InitPortamento(struct Note* note); + +f32 AudioEffects_UpdateAdsr(AdsrState* adsr); +void AudioEffects_UpdatePortamentoAndVibrato(struct Note* note); + +#endif diff --git a/include/functions.h b/include/functions.h index 52ba8b111..ac13a30f1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1825,13 +1825,6 @@ void AudioPlayback_AudioListRemove(AudioListItem* item); Note* AudioPlayback_AllocNote(SequenceLayer* layer); void AudioPlayback_NoteInitAll(void); -void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer); -void AudioEffects_NoteVibratoUpdate(Note* note); -void AudioEffects_NoteVibratoInit(Note* note); -void AudioEffects_NotePortamentoInit(Note* note); -void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut); -f32 AudioEffects_AdsrUpdate(AdsrState* adsr); - void AudioScript_SequenceChannelDisable(SequenceChannel* channel); void AudioScript_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer); void AudioScript_SequencePlayerDisable(SequencePlayer* seqPlayer); diff --git a/include/z64audio.h b/include/z64audio.h index c4943c09a..13e3165b7 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -5,6 +5,7 @@ #include "ultra64/os_voice.h" #include "audiothread_cmd.h" #include "libc/stddef.h" +#include "audio/effects.h" #define NO_LAYER ((SequenceLayer*)(-1)) @@ -111,18 +112,6 @@ typedef enum { /* 4 */ SOUNDMODE_SURROUND } SoundMode; -typedef enum { - /* 0 */ ADSR_STATE_DISABLED, - /* 1 */ ADSR_STATE_INITIAL, - /* 2 */ ADSR_STATE_START_LOOP, - /* 3 */ ADSR_STATE_LOOP, - /* 4 */ ADSR_STATE_FADE, - /* 5 */ ADSR_STATE_HANG, - /* 6 */ ADSR_STATE_DECAY, - /* 7 */ ADSR_STATE_RELEASE, - /* 8 */ ADSR_STATE_SUSTAIN -} AdsrStatus; - typedef enum { /* 0 */ MEDIUM_RAM, /* 1 */ MEDIUM_UNK, @@ -203,22 +192,6 @@ typedef struct NotePool { /* 0x30 */ AudioListItem active; } NotePool; // size = 0x40 -// Pitch sliding by up to one octave in the positive direction. Negative -// direction is "supported" by setting extent to be negative. The code -// extrapolates exponentially in the wrong direction in that case, but that -// doesn't prevent seqplayer from doing it, AFAICT. -typedef struct { - /* 0x0 */ u8 mode; // bit 0x80 denotes something; the rest are an index 0-5 - /* 0x2 */ u16 cur; - /* 0x4 */ u16 speed; - /* 0x8 */ f32 extent; -} Portamento; // size = 0xC - -typedef struct { - /* 0x0 */ s16 delay; - /* 0x2 */ s16 arg; -} EnvelopePoint; // size = 0x4 - typedef struct { /* 0x00 */ u32 start; /* 0x04 */ u32 loopEnd; // numSamples into the sample where the loop ends @@ -326,16 +299,16 @@ typedef struct { } Instrument; // size = 0x20 typedef struct { - /* 0x00 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable - /* 0x01 */ u8 pan; - /* 0x02 */ u8 isRelocated; // have tunedSample.sample and envelope been relocated (offsets to pointers) - /* 0x04 */ TunedSample tunedSample; - /* 0x0C */ EnvelopePoint* envelope; + /* 0x0 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable + /* 0x1 */ u8 pan; + /* 0x2 */ u8 isRelocated; // have tunedSample.sample and envelope been relocated (offsets to pointers) + /* 0x4 */ TunedSample tunedSample; + /* 0xC */ EnvelopePoint* envelope; } Drum; // size = 0x10 typedef struct { - /* 0x00 */ TunedSample tunedSample; -} SoundEffect; // size = 0x08 + /* 0x0 */ TunedSample tunedSample; +} SoundEffect; // size = 0x8 typedef struct { /* 0x00 */ u8 numInstruments; @@ -357,7 +330,7 @@ typedef struct { } SeqScriptState; // size = 0x1C // Also known as a Group, according to debug strings. -typedef struct { +typedef struct SequencePlayer { /* 0x000 */ u8 enabled : 1; /* 0x000 */ u8 finished : 1; /* 0x000 */ u8 muted : 1; @@ -400,34 +373,6 @@ typedef struct { /* 0x158 */ s8 seqScriptIO[8]; } SequencePlayer; // size = 0x160 -typedef struct { - /* 0x0 */ u8 decayIndex; // index used to obtain adsr decay rate from adsrDecayTable - /* 0x1 */ u8 sustain; - /* 0x4 */ EnvelopePoint* envelope; -} AdsrSettings; // size = 0x8 - -typedef struct { - union { - struct { - /* 0x00 */ u8 unused : 1; - /* 0x00 */ u8 hang : 1; - /* 0x00 */ u8 decay : 1; - /* 0x00 */ u8 release : 1; - /* 0x00 */ u8 state : 4; - } s; - /* 0x00 */ u8 asByte; - } action; - /* 0x01 */ u8 envIndex; - /* 0x02 */ s16 delay; - /* 0x04 */ f32 sustain; - /* 0x08 */ f32 velocity; - /* 0x0C */ f32 fadeOutVel; - /* 0x10 */ f32 current; - /* 0x14 */ f32 target; - /* 0x18 */ UNK_TYPE1 unk_18[4]; - /* 0x1C */ EnvelopePoint* envelope; -} AdsrState; // size = 0x20 - typedef union { struct { /* 0x0 */ u8 unused : 2; @@ -454,16 +399,6 @@ typedef struct { /* 0x14 */ s16* filterBuf; } NoteAttributes; // size = 0x18 -typedef struct VibratoSubStruct { - /* 0x0 */ u16 vibratoRateStart; - /* 0x2 */ u16 vibratoDepthStart; - /* 0x4 */ u16 vibratoRateTarget; - /* 0x6 */ u16 vibratoDepthTarget; - /* 0x8 */ u16 vibratoRateChangeDelay; - /* 0xA */ u16 vibratoDepthChangeDelay; - /* 0xC */ u16 vibratoDelay; -} VibratoSubStruct; // size = 0xE - // Also known as a SubTrack, according to sm64 debug strings. typedef struct SequenceChannel { /* 0x00 */ u8 enabled : 1; @@ -551,7 +486,7 @@ typedef struct SequenceLayer { /* 0x0A */ u16 bit_0 : 1; /* 0x0A */ u16 bit_1 : 1; /* 0x0A */ u16 bit_2 : 1; - /* 0x0A */ u16 bit_3 : 1; + /* 0x0A */ u16 useVibrato : 1; /* 0x0A */ u16 bit_4 : 1; /* 0x0A */ u16 bit_5 : 1; /* 0x0A */ u16 bit_6 : 1; @@ -623,18 +558,6 @@ typedef struct { /* 0x20 */ UNK_TYPE1 unk_20[0x4]; } NoteSynthesisState; // size = 0x24 -typedef struct { - /* 0x00 */ struct VibratoSubStruct* vibSubStruct; // Something else? - /* 0x04 */ u32 time; - /* 0x08 */ s16* curve; - /* 0x0C */ f32 depth; - /* 0x10 */ f32 rate; - /* 0x14 */ u8 active; - /* 0x16 */ u16 rateChangeTimer; - /* 0x18 */ u16 depthChangeTimer; - /* 0x1A */ u16 delay; -} VibratoState; // size = 0x1C - typedef enum { /* 0 */ PLAYBACK_STATUS_0, /* 1 */ PLAYBACK_STATUS_1, diff --git a/src/audio/lib/effects.c b/src/audio/lib/effects.c index 580b7fd22..93d895514 100644 --- a/src/audio/lib/effects.c +++ b/src/audio/lib/effects.c @@ -1,6 +1,18 @@ +/** + * @file effects.c + * + * The first half of this file processes sound on the seqPlayer, channel, and layer level + * once the .seq file is finished for this update. + * + * The second half of this file implements three types of audio effects over long periods of times: + * - Vibrato: regular, pulsating change of pitch + * - Portamento: pitch sliding from one note to another + * - Multi-Point ADSR Envelope: volume changing over time through Attack, Decay, Sustain, Release + */ #include "global.h" +#include "audio/effects.h" -void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 recalculateVolume, s32 applyBend) { +void AudioScript_SequenceChannelProcessSound(SequenceChannel* channel, s32 recalculateVolume, s32 applyBend) { f32 channelVolume; f32 chanFreqScale; s32 i; @@ -8,7 +20,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca if (channel->changes.s.volume || recalculateVolume) { channelVolume = channel->volume * channel->volumeScale * channel->seqPlayer->appliedFadeVolume; if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_SOFTEN)) { - channelVolume = channel->seqPlayer->muteVolumeScale * channelVolume; + channelVolume = channelVolume * channel->seqPlayer->muteVolumeScale; } channel->appliedVolume = SQ(channelVolume); } @@ -48,7 +60,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca channel->changes.asByte = 0; } -void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) { +void AudioScript_SequencePlayerProcessSound(SequencePlayer* seqPlayer) { s32 i; if ((seqPlayer->fadeTimer != 0) && (seqPlayer->skipTicks == 0)) { @@ -73,29 +85,32 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) { seqPlayer->appliedFadeVolume = seqPlayer->fadeVolume * seqPlayer->fadeVolumeScale; } - for (i = 0; i < ARRAY_COUNT(seqPlayer->channels); i++) { + for (i = 0; i < SEQ_NUM_CHANNELS; i++) { if (seqPlayer->channels[i]->enabled == true) { - AudioEffects_SequenceChannelProcessSound(seqPlayer->channels[i], seqPlayer->recalculateVolume, - seqPlayer->applyBend); + AudioScript_SequenceChannelProcessSound(seqPlayer->channels[i], seqPlayer->recalculateVolume, + seqPlayer->applyBend); } } seqPlayer->recalculateVolume = false; } -f32 AudioEffects_GetPortamentoFreqScale(Portamento* portamento) { - u32 loResCur; +/** + * @return freqScale + */ +f32 AudioEffects_UpdatePortamento(Portamento* portamento) { + u32 bendIndex; f32 portamentoFreq; portamento->cur += portamento->speed; - loResCur = (portamento->cur >> 8) & 0xFF; + bendIndex = (portamento->cur >> 8) & 0xFF; - if (loResCur >= 127) { - loResCur = 127; - portamento->mode = 0; + if (bendIndex >= 127) { + bendIndex = 127; + portamento->mode = PORTAMENTO_MODE_OFF; } - portamentoFreq = AUDIO_LERPIMP(1.0f, gBendPitchOneOctaveFrequencies[loResCur + 128], portamento->extent); + portamentoFreq = AUDIO_LERPIMP(1.0f, gBendPitchOneOctaveFrequencies[bendIndex + 128], portamento->extent); return portamentoFreq; } @@ -104,13 +119,17 @@ s16 AudioEffects_GetVibratoPitchChange(VibratoState* vib) { s32 index; vib->time += (s32)vib->rate; - index = (vib->time >> 10) & 0x3F; + // 0x400 is 1 unit of time, 0x10000 is 1 period + index = (vib->time / 0x400) % WAVE_SAMPLE_COUNT; return vib->curve[index]; } -f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { - static f32 activeVibratoFreqScaleSum = 0.0f; - static s32 activeVibratoCount = 0; +/** + * @return freqScale + */ +f32 AudioEffects_UpdateVibrato(VibratoState* vib) { + static f32 sActiveVibratoFreqScaleSum = 0.0f; + static s32 sActiveVibratoCount = 0; f32 pitchChange; f32 depth; f32 invDepth; @@ -124,7 +143,7 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { } if (subVib != NULL) { - if (vib->depthChangeTimer) { + if ((u32)vib->depthChangeTimer != 0) { if (vib->depthChangeTimer == 1) { vib->depth = (s32)subVib->vibratoDepthTarget; } else { @@ -138,7 +157,7 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { } } - if (vib->rateChangeTimer) { + if ((u32)vib->rateChangeTimer != 0) { if (vib->rateChangeTimer == 1) { vib->rate = (s32)subVib->vibratoRateTarget; } else { @@ -157,38 +176,40 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { return 1.0f; } - pitchChange = AudioEffects_GetVibratoPitchChange(vib) + 32768.0f; + pitchChange = (f32)AudioEffects_GetVibratoPitchChange(vib) + 0x8000; scaledDepth = vib->depth / 4096.0f; depth = scaledDepth + 1.0f; invDepth = 1.0f / depth; - // inverse linear interpolation - result = 1.0f / ((depth - invDepth) * pitchChange / 65536.0f + invDepth); + // Inverse linear interpolation + result = 1.0f / ((depth - invDepth) * pitchChange / 0x10000 + invDepth); - activeVibratoFreqScaleSum += result; - activeVibratoCount++; + sActiveVibratoFreqScaleSum += result; + sActiveVibratoCount++; return result; } -void AudioEffects_NoteVibratoUpdate(Note* note) { - if (note->playbackState.portamento.mode != 0) { - note->playbackState.portamentoFreqScale = AudioEffects_GetPortamentoFreqScale(¬e->playbackState.portamento); +void AudioEffects_UpdatePortamentoAndVibrato(Note* note) { + // Update Portamento + if (note->playbackState.portamento.mode != PORTAMENTO_MODE_OFF) { + note->playbackState.portamentoFreqScale = AudioEffects_UpdatePortamento(¬e->playbackState.portamento); } + // Update Vibrato if (note->playbackState.vibratoState.active) { - note->playbackState.vibratoFreqScale = AudioEffects_GetVibratoFreqScale(¬e->playbackState.vibratoState); + note->playbackState.vibratoFreqScale = AudioEffects_UpdateVibrato(¬e->playbackState.vibratoState); } } -void AudioEffects_NoteVibratoInit(Note* note) { +void AudioEffects_InitVibrato(Note* note) { NotePlaybackState* playbackState = ¬e->playbackState; VibratoState* vib = &playbackState->vibratoState; VibratoSubStruct* subVib; vib->active = true; - vib->curve = gWaveSamples[2]; + vib->curve = gWaveSamples[2]; // gSineWaveSample - if (playbackState->parentLayer->unk_0A.s.bit_3 == 1) { + if (playbackState->parentLayer->unk_0A.s.useVibrato == true) { vib->vibSubStruct = &playbackState->parentLayer->channel->vibrato; } else { vib->vibSubStruct = &playbackState->parentLayer->vibrato; @@ -213,12 +234,12 @@ void AudioEffects_NoteVibratoInit(Note* note) { vib->delay = subVib->vibratoDelay; } -void AudioEffects_NotePortamentoInit(Note* note) { +void AudioEffects_InitPortamento(Note* note) { note->playbackState.portamentoFreqScale = 1.0f; note->playbackState.portamento = note->playbackState.parentLayer->portamento; } -void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut) { +void AudioEffects_InitAdsr(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut) { adsr->action.asByte = 0; adsr->delay = 0; adsr->envelope = envelope; @@ -230,41 +251,44 @@ void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut // removed, but the function parameter was forgotten and remains.) } -f32 AudioEffects_AdsrUpdate(AdsrState* adsr) { - u8 state = adsr->action.s.state; +/** + * @return volumeScale + */ +f32 AudioEffects_UpdateAdsr(AdsrState* adsr) { + u8 status = adsr->action.s.status; - switch (state) { - case ADSR_STATE_DISABLED: + switch (status) { + case ADSR_STATUS_DISABLED: return 0.0f; - case ADSR_STATE_INITIAL: + case ADSR_STATUS_INITIAL: if (adsr->action.s.hang) { - adsr->action.s.state = ADSR_STATE_HANG; + adsr->action.s.status = ADSR_STATUS_HANG; break; } // fallthrough - case ADSR_STATE_START_LOOP: - adsr->envIndex = 0; - adsr->action.s.state = ADSR_STATE_LOOP; + case ADSR_STATUS_START_LOOP: + adsr->envelopeIndex = 0; + adsr->action.s.status = ADSR_STATUS_LOOP; // fallthrough retry: - case ADSR_STATE_LOOP: - adsr->delay = adsr->envelope[adsr->envIndex].delay; + case ADSR_STATUS_LOOP: + adsr->delay = adsr->envelope[adsr->envelopeIndex].delay; switch (adsr->delay) { case ADSR_DISABLE: - adsr->action.s.state = ADSR_STATE_DISABLED; + adsr->action.s.status = ADSR_STATUS_DISABLED; break; case ADSR_HANG: - adsr->action.s.state = ADSR_STATE_HANG; + adsr->action.s.status = ADSR_STATUS_HANG; break; case ADSR_GOTO: - adsr->envIndex = adsr->envelope[adsr->envIndex].arg; + adsr->envelopeIndex = adsr->envelope[adsr->envelopeIndex].arg; goto retry; case ADSR_RESTART: - adsr->action.s.state = ADSR_STATE_INITIAL; + adsr->action.s.status = ADSR_STATUS_INITIAL; break; default: @@ -272,60 +296,60 @@ f32 AudioEffects_AdsrUpdate(AdsrState* adsr) { if (adsr->delay == 0) { adsr->delay = 1; } - adsr->target = adsr->envelope[adsr->envIndex].arg / 32767.0f; - adsr->target = adsr->target * adsr->target; + adsr->target = adsr->envelope[adsr->envelopeIndex].arg / 32767.0f; + adsr->target = SQ(adsr->target); adsr->velocity = (adsr->target - adsr->current) / adsr->delay; - adsr->action.s.state = ADSR_STATE_FADE; - adsr->envIndex++; + adsr->action.s.status = ADSR_STATUS_FADE; + adsr->envelopeIndex++; break; } - if (adsr->action.s.state != ADSR_STATE_FADE) { + if (adsr->action.s.status != ADSR_STATUS_FADE) { break; } // fallthrough - case ADSR_STATE_FADE: + case ADSR_STATUS_FADE: adsr->current += adsr->velocity; adsr->delay--; if (adsr->delay <= 0) { - adsr->action.s.state = ADSR_STATE_LOOP; + adsr->action.s.status = ADSR_STATUS_LOOP; } // fallthrough - case ADSR_STATE_HANG: + case ADSR_STATUS_HANG: break; - case ADSR_STATE_DECAY: - case ADSR_STATE_RELEASE: + case ADSR_STATUS_DECAY: + case ADSR_STATUS_RELEASE: adsr->current -= adsr->fadeOutVel; - if (adsr->sustain != 0.0f && state == ADSR_STATE_DECAY) { + if ((adsr->sustain != 0.0f) && (status == ADSR_STATUS_DECAY)) { if (adsr->current < adsr->sustain) { adsr->current = adsr->sustain; adsr->delay = 128; - adsr->action.s.state = ADSR_STATE_SUSTAIN; + adsr->action.s.status = ADSR_STATUS_SUSTAIN; } break; } if (adsr->current < 0.00001f) { adsr->current = 0.0f; - adsr->action.s.state = ADSR_STATE_DISABLED; + adsr->action.s.status = ADSR_STATUS_DISABLED; } break; - case ADSR_STATE_SUSTAIN: + case ADSR_STATUS_SUSTAIN: adsr->delay--; if (adsr->delay == 0) { - adsr->action.s.state = ADSR_STATE_RELEASE; + adsr->action.s.status = ADSR_STATUS_RELEASE; } break; } if (adsr->action.s.decay) { - adsr->action.s.state = ADSR_STATE_DECAY; + adsr->action.s.status = ADSR_STATUS_DECAY; adsr->action.s.decay = false; } if (adsr->action.s.release) { - adsr->action.s.state = ADSR_STATE_RELEASE; + adsr->action.s.status = ADSR_STATUS_RELEASE; adsr->action.s.release = false; } diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 5d8dfee89..24bb7043d 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1,4 +1,5 @@ #include "global.h" +#include "audio/effects.h" void* AudioHeap_SearchRegularCaches(s32 tableType, s32 cache, s32 id); void AudioHeap_InitSampleCaches(size_t persistentSampleCacheSize, size_t temporarySampleCacheSize); @@ -870,7 +871,7 @@ s32 AudioHeap_ResetStep(void) { } else { for (i = 0; i < gAudioCtx.numNotes; i++) { if (gAudioCtx.notes[i].sampleState.bitField0.enabled && - gAudioCtx.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) { + gAudioCtx.notes[i].playbackState.adsr.action.s.status != ADSR_STATUS_DISABLED) { gAudioCtx.notes[i].playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv; gAudioCtx.notes[i].playbackState.adsr.action.s.release = true; diff --git a/src/audio/lib/playback.c b/src/audio/lib/playback.c index a626645c5..6bc5e3943 100644 --- a/src/audio/lib/playback.c +++ b/src/audio/lib/playback.c @@ -1,4 +1,5 @@ #include "global.h" +#include "audio/effects.h" void AudioPlayback_NoteSetResamplingRate(NoteSampleState* sampleState, f32 resamplingRateInput); void AudioPlayback_AudioListPushFront(AudioListItem* list, AudioListItem* item); @@ -134,15 +135,15 @@ void AudioPlayback_NoteSetResamplingRate(NoteSampleState* sampleState, f32 resam void AudioPlayback_NoteInit(Note* note) { if (note->playbackState.parentLayer->adsr.decayIndex == 0) { - AudioEffects_AdsrInit(¬e->playbackState.adsr, note->playbackState.parentLayer->channel->adsr.envelope, + AudioEffects_InitAdsr(¬e->playbackState.adsr, note->playbackState.parentLayer->channel->adsr.envelope, ¬e->playbackState.adsrVolScaleUnused); } else { - AudioEffects_AdsrInit(¬e->playbackState.adsr, note->playbackState.parentLayer->adsr.envelope, + AudioEffects_InitAdsr(¬e->playbackState.adsr, note->playbackState.parentLayer->adsr.envelope, ¬e->playbackState.adsrVolScaleUnused); } note->playbackState.status = PLAYBACK_STATUS_0; - note->playbackState.adsr.action.s.state = ADSR_STATE_INITIAL; + note->playbackState.adsr.action.s.status = ADSR_STATUS_INITIAL; note->sampleState = gDefaultSampleState; } @@ -156,7 +157,7 @@ void AudioPlayback_NoteDisable(Note* note) { note->sampleState.bitField0.finished = false; note->playbackState.parentLayer = NO_LAYER; note->playbackState.prevParentLayer = NO_LAYER; - note->playbackState.adsr.action.s.state = ADSR_STATE_DISABLED; + note->playbackState.adsr.action.s.status = ADSR_STATUS_DISABLED; note->playbackState.adsr.current = 0; } @@ -170,7 +171,7 @@ void AudioPlayback_ProcessNotes(void) { NotePlaybackState* playbackState; NoteSubAttributes subAttrs; u8 bookOffset; - f32 scale; + f32 adsrVolumeScale; s32 i; for (i = 0; i < gAudioCtx.numNotes; i++) { @@ -218,14 +219,14 @@ void AudioPlayback_ProcessNotes(void) { if (1) {} noteSampleState = ¬e->sampleState; if ((playbackState->status >= 1) || noteSampleState->bitField0.finished) { - if ((playbackState->adsr.action.s.state == ADSR_STATE_DISABLED) || + if ((playbackState->adsr.action.s.status == ADSR_STATUS_DISABLED) || noteSampleState->bitField0.finished) { if (playbackState->wantedParentLayer != NO_LAYER) { AudioPlayback_NoteDisable(note); if (playbackState->wantedParentLayer->channel != NULL) { AudioPlayback_NoteInitForLayer(note, playbackState->wantedParentLayer); - AudioEffects_NoteVibratoInit(note); - AudioEffects_NotePortamentoInit(note); + AudioEffects_InitVibrato(note); + AudioEffects_InitPortamento(note); AudioPlayback_AudioListRemove(¬e->listItem); AudioScript_AudioListPushBack(¬e->listItem.pool->active, ¬e->listItem); playbackState->wantedParentLayer = NO_LAYER; @@ -247,7 +248,7 @@ void AudioPlayback_ProcessNotes(void) { continue; } } - } else if (playbackState->adsr.action.s.state == ADSR_STATE_DISABLED) { + } else if (playbackState->adsr.action.s.status == ADSR_STATUS_DISABLED) { if (playbackState->parentLayer != NO_LAYER) { playbackState->parentLayer->bit1 = true; } @@ -257,8 +258,8 @@ void AudioPlayback_ProcessNotes(void) { continue; } - scale = AudioEffects_AdsrUpdate(&playbackState->adsr); - AudioEffects_NoteVibratoUpdate(note); + adsrVolumeScale = AudioEffects_UpdateAdsr(&playbackState->adsr); + AudioEffects_UpdatePortamentoAndVibrato(note); playbackStatus = playbackState->status; attrs = &playbackState->attributes; if ((playbackStatus == PLAYBACK_STATUS_1) || (playbackStatus == PLAYBACK_STATUS_2)) { @@ -320,7 +321,7 @@ void AudioPlayback_ProcessNotes(void) { subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale; subAttrs.frequency *= gAudioCtx.audioBufferParameters.resampleRate; - subAttrs.velocity *= scale; + subAttrs.velocity *= adsrVolumeScale; AudioPlayback_InitSampleState(note, sampleState, &subAttrs); noteSampleState->bitField1.bookOffset = bookOffset; skip:; @@ -490,14 +491,14 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) { if (note->playbackState.parentLayer != layer) { if (note->playbackState.parentLayer == NO_LAYER && note->playbackState.wantedParentLayer == NO_LAYER && - note->playbackState.prevParentLayer == layer && target != ADSR_STATE_DECAY) { + note->playbackState.prevParentLayer == layer && target != ADSR_STATUS_DECAY) { note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv; note->playbackState.adsr.action.s.release = true; } return; } - if (note->playbackState.adsr.action.s.state != ADSR_STATE_DECAY) { + if (note->playbackState.adsr.action.s.status != ADSR_STATUS_DECAY) { attrs->freqScale = layer->noteFreqScale; attrs->velocity = layer->noteVelocity; attrs->pan = layer->notePan; @@ -551,7 +552,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) { note->playbackState.prevParentLayer = note->playbackState.parentLayer; note->playbackState.parentLayer = NO_LAYER; - if (target == ADSR_STATE_RELEASE) { + if (target == ADSR_STATUS_RELEASE) { note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv; note->playbackState.adsr.action.s.release = true; note->playbackState.status = PLAYBACK_STATUS_2; @@ -568,18 +569,18 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) { } } - if (target == ADSR_STATE_DECAY) { + if (target == ADSR_STATUS_DECAY) { AudioPlayback_AudioListRemove(¬e->listItem); AudioPlayback_AudioListPushFront(¬e->listItem.pool->decaying, ¬e->listItem); } } void AudioPlayback_SeqLayerNoteDecay(SequenceLayer* layer) { - AudioPlayback_SeqLayerDecayRelease(layer, ADSR_STATE_DECAY); + AudioPlayback_SeqLayerDecayRelease(layer, ADSR_STATUS_DECAY); } void AudioPlayback_SeqLayerNoteRelease(SequenceLayer* layer) { - AudioPlayback_SeqLayerDecayRelease(layer, ADSR_STATE_RELEASE); + AudioPlayback_SeqLayerDecayRelease(layer, ADSR_STATUS_RELEASE); } /** @@ -600,7 +601,7 @@ s32 AudioPlayback_BuildSyntheticWave(Note* note, SequenceLayer* layer, s32 waveI } freqScale = layer->freqScale; - if ((layer->portamento.mode != 0) && (0.0f < layer->portamento.extent)) { + if ((layer->portamento.mode != PORTAMENTO_MODE_OFF) && (layer->portamento.extent > 0.0f)) { freqScale *= (layer->portamento.extent + 1.0f); } diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c index 270164972..34ec93a7b 100644 --- a/src/audio/lib/seqplayer.c +++ b/src/audio/lib/seqplayer.c @@ -15,20 +15,8 @@ */ #include "global.h" -#define PORTAMENTO_IS_SPECIAL(x) ((x).mode & 0x80) -#define PORTAMENTO_MODE(x) ((x).mode & ~0x80) - #define PROCESS_SCRIPT_END -1 -typedef enum { - /* 0 */ PORTAMENTO_MODE_OFF, - /* 1 */ PORTAMENTO_MODE_1, - /* 2 */ PORTAMENTO_MODE_2, - /* 3 */ PORTAMENTO_MODE_3, - /* 4 */ PORTAMENTO_MODE_4, - /* 5 */ PORTAMENTO_MODE_5 -} PortamentoMode; - u8 AudioScript_ScriptReadU8(SeqScriptState* state); s16 AudioScript_ScriptReadS16(SeqScriptState* state); u16 AudioScript_ScriptReadCompressedU16(SeqScriptState* state); @@ -634,7 +622,7 @@ s32 AudioScript_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSa note = layer->note; if (note->playbackState.parentLayer == layer) { - AudioEffects_NoteVibratoInit(note); + AudioEffects_InitVibrato(note); } } } @@ -642,7 +630,7 @@ s32 AudioScript_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSa if ((layer->note != NULL) && (layer->note->playbackState.parentLayer == layer)) { note = layer->note; - AudioEffects_NotePortamentoInit(note); + AudioEffects_InitPortamento(note); } return 0; @@ -2204,7 +2192,7 @@ void AudioScript_ProcessSequences(s32 arg0) { seqPlayer = &gAudioCtx.seqPlayers[i]; if (seqPlayer->enabled == true) { AudioScript_SequencePlayerProcessSequence(seqPlayer); - AudioEffects_SequencePlayerProcessSound(seqPlayer); + AudioScript_SequencePlayerProcessSound(seqPlayer); } } @@ -2214,7 +2202,7 @@ void AudioScript_ProcessSequences(s32 arg0) { void AudioScript_SkipForwardSequence(SequencePlayer* seqPlayer) { while (seqPlayer->skipTicks > 0) { AudioScript_SequencePlayerProcessSequence(seqPlayer); - AudioEffects_SequencePlayerProcessSound(seqPlayer); + AudioScript_SequencePlayerProcessSound(seqPlayer); seqPlayer->skipTicks--; } } diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c index 082e77a67..fe4804693 100644 --- a/src/audio/lib/thread.c +++ b/src/audio/lib/thread.c @@ -4,6 +4,7 @@ * Top-level file that coordinates all audio code on the audio thread. */ #include "global.h" +#include "audio/effects.h" AudioTask* AudioThread_UpdateImpl(void); void AudioThread_SetFadeOutTimer(s32 seqPlayerIndex, s32 fadeTimer); @@ -938,7 +939,7 @@ s32 AudioThread_CountAndReleaseNotes(s32 flags) { playbackState = ¬e->playbackState; if (note->sampleState.bitField0.enabled) { noteSampleState = ¬e->sampleState; - if (playbackState->adsr.action.s.state != ADSR_STATE_DISABLED) { + if (playbackState->adsr.action.s.status != ADSR_STATUS_DISABLED) { if (flags >= AUDIO_NOTE_SAMPLE_NOTES) { tunedSample = noteSampleState->tunedSample; if ((tunedSample == NULL) || noteSampleState->bitField1.isSyntheticWave) { diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 4da2f6963..5efb43896 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" 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 af79315db..5db259be1 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_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index cf4331ffa..8611c1c30 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -4,7 +4,6 @@ * Description: Trees, shrubs */ -#include "prevent_bss_reordering.h" #include "z_en_wood02.h" #include "objects/object_wood02/object_wood02.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 214e1ef4e..decceda75 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3757,16 +3757,16 @@ 0x801964F8:("AudioPlayback_AllocNoteFromActive",), 0x801965F0:("AudioPlayback_AllocNote",), 0x801968C4:("AudioPlayback_NoteInitAll",), - 0x80196A00:("AudioEffects_SequenceChannelProcessSound",), - 0x80196BC8:("AudioEffects_SequencePlayerProcessSound",), - 0x80196D20:("AudioEffects_GetPortamentoFreqScale",), + 0x80196A00:("AudioScript_SequenceChannelProcessSound",), + 0x80196BC8:("AudioScript_SequencePlayerProcessSound",), + 0x80196D20:("AudioEffects_UpdatePortamento",), 0x80196D7C:("AudioEffects_GetVibratoPitchChange",), - 0x80196DB4:("AudioEffects_GetVibratoFreqScale",), - 0x80196FEC:("AudioEffects_NoteVibratoUpdate",), - 0x80197048:("AudioEffects_NoteVibratoInit",), - 0x80197138:("AudioEffects_NotePortamentoInit",), - 0x80197164:("AudioEffects_AdsrInit",), - 0x80197188:("AudioEffects_AdsrUpdate",), + 0x80196DB4:("AudioEffects_UpdateVibrato",), + 0x80196FEC:("AudioEffects_UpdatePortamentoAndVibrato",), + 0x80197048:("AudioEffects_InitVibrato",), + 0x80197138:("AudioEffects_InitPortamento",), + 0x80197164:("AudioEffects_InitAdsr",), + 0x80197188:("AudioEffects_UpdateAdsr",), 0x801974D0:("AudioScript_GetScriptControlFlowArgument",), 0x80197538:("AudioScript_HandleScriptFlowControl",), 0x80197714:("AudioScript_InitSequenceChannel",), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 074eb35ec..85c087b37 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -3274,16 +3274,16 @@ asm/non_matchings/code/audio_playback/AudioPlayback_AllocNoteFromDecaying.s,Audi asm/non_matchings/code/audio_playback/AudioPlayback_AllocNoteFromActive.s,AudioPlayback_AllocNoteFromActive,0x801964F8,0x3E asm/non_matchings/code/audio_playback/AudioPlayback_AllocNote.s,AudioPlayback_AllocNote,0x801965F0,0xB5 asm/non_matchings/code/audio_playback/AudioPlayback_NoteInitAll.s,AudioPlayback_NoteInitAll,0x801968C4,0x4F -asm/non_matchings/code/audio_effects/AudioEffects_SequenceChannelProcessSound.s,AudioEffects_SequenceChannelProcessSound,0x80196A00,0x72 -asm/non_matchings/code/audio_effects/AudioEffects_SequencePlayerProcessSound.s,AudioEffects_SequencePlayerProcessSound,0x80196BC8,0x56 -asm/non_matchings/code/audio_effects/AudioEffects_GetPortamentoFreqScale.s,AudioEffects_GetPortamentoFreqScale,0x80196D20,0x17 +asm/non_matchings/code/audio_effects/AudioScript_SequenceChannelProcessSound.s,AudioScript_SequenceChannelProcessSound,0x80196A00,0x72 +asm/non_matchings/code/audio_effects/AudioScript_SequencePlayerProcessSound.s,AudioScript_SequencePlayerProcessSound,0x80196BC8,0x56 +asm/non_matchings/code/audio_effects/AudioEffects_UpdatePortamento.s,AudioEffects_UpdatePortamento,0x80196D20,0x17 asm/non_matchings/code/audio_effects/AudioEffects_GetVibratoPitchChange.s,AudioEffects_GetVibratoPitchChange,0x80196D7C,0xE -asm/non_matchings/code/audio_effects/AudioEffects_GetVibratoFreqScale.s,AudioEffects_GetVibratoFreqScale,0x80196DB4,0x8E -asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoUpdate.s,AudioEffects_NoteVibratoUpdate,0x80196FEC,0x17 -asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoInit.s,AudioEffects_NoteVibratoInit,0x80197048,0x3C -asm/non_matchings/code/audio_effects/AudioEffects_NotePortamentoInit.s,AudioEffects_NotePortamentoInit,0x80197138,0xB -asm/non_matchings/code/audio_effects/AudioEffects_AdsrInit.s,AudioEffects_AdsrInit,0x80197164,0x9 -asm/non_matchings/code/audio_effects/AudioEffects_AdsrUpdate.s,AudioEffects_AdsrUpdate,0x80197188,0xD2 +asm/non_matchings/code/audio_effects/AudioEffects_UpdateVibrato.s,AudioEffects_UpdateVibrato,0x80196DB4,0x8E +asm/non_matchings/code/audio_effects/AudioEffects_UpdatePortamentoAndVibrato.s,AudioEffects_UpdatePortamentoAndVibrato,0x80196FEC,0x17 +asm/non_matchings/code/audio_effects/AudioEffects_InitVibrato.s,AudioEffects_InitVibrato,0x80197048,0x3C +asm/non_matchings/code/audio_effects/AudioEffects_InitPortamento.s,AudioEffects_InitPortamento,0x80197138,0xB +asm/non_matchings/code/audio_effects/AudioEffects_InitAdsr.s,AudioEffects_InitAdsr,0x80197164,0x9 +asm/non_matchings/code/audio_effects/AudioEffects_UpdateAdsr.s,AudioEffects_UpdateAdsr,0x80197188,0xD2 asm/non_matchings/code/audio_seqplayer/AudioScript_GetScriptControlFlowArgument.s,AudioScript_GetScriptControlFlowArgument,0x801974D0,0x1A asm/non_matchings/code/audio_seqplayer/AudioScript_HandleScriptFlowControl.s,AudioScript_HandleScriptFlowControl,0x80197538,0x77 asm/non_matchings/code/audio_seqplayer/AudioScript_InitSequenceChannel.s,AudioScript_InitSequenceChannel,0x80197714,0x5B From 541199888cb8311d7700e8d37b999e9395b41232 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 25 Jun 2023 22:33:22 +1000 Subject: [PATCH 014/121] Setup for Player Cutscene Docs (#1270) * player cs docs setup * more docs * more docs * missed enums * more docs, but broken. Need to fix sPlayerCsModeAnimFuncs * fix * rm enum * more minor docs * PR suggestion * typo * csActionFunc * PR Suggestion * fix bss * fix bss --- include/z64player.h | 107 +- src/code/z_actor.c | 12 +- src/code/z_demo.c | 2 +- src/code/z_eventmgr.c | 6 +- src/code/z_player_lib.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 10 +- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 4 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 6 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 16 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- .../actors/ovl_player_actor/z_player.c | 1379 +++++++++-------- tools/disasm/functions.txt | 136 +- tools/disasm/variables.txt | 8 +- 15 files changed, 907 insertions(+), 789 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index 39767ada6..c06561648 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -600,7 +600,7 @@ typedef struct struct_80122744_arg1 { } struct_80122744_arg1; // size = 0x8 typedef enum PlayerCsMode { - /* 0x00 */ PLAYER_CSMODE_0, + /* 0x00 */ PLAYER_CSMODE_NONE, /* 0x01 */ PLAYER_CSMODE_1, /* 0x02 */ PLAYER_CSMODE_2, /* 0x03 */ PLAYER_CSMODE_3, @@ -743,6 +743,102 @@ typedef enum PlayerCsMode { /* 0x8C */ PLAYER_CSMODE_MAX } PlayerCsMode; +typedef enum PlayerCueId { + /* 0x00 */ PLAYER_CUEID_NONE, + /* 0x01 */ PLAYER_CUEID_1, + /* 0x02 */ PLAYER_CUEID_2, + /* 0x03 */ PLAYER_CUEID_3, + /* 0x04 */ PLAYER_CUEID_4, + /* 0x05 */ PLAYER_CUEID_5, + /* 0x06 */ PLAYER_CUEID_6, + /* 0x07 */ PLAYER_CUEID_7, + /* 0x08 */ PLAYER_CUEID_8, + /* 0x09 */ PLAYER_CUEID_9, + /* 0x0A */ PLAYER_CUEID_10, + /* 0x0B */ PLAYER_CUEID_11, + /* 0x0C */ PLAYER_CUEID_12, + /* 0x0D */ PLAYER_CUEID_13, + /* 0x0E */ PLAYER_CUEID_14, + /* 0x0F */ PLAYER_CUEID_15, + /* 0x10 */ PLAYER_CUEID_16, + /* 0x11 */ PLAYER_CUEID_17, + /* 0x12 */ PLAYER_CUEID_18, + /* 0x13 */ PLAYER_CUEID_19, + /* 0x14 */ PLAYER_CUEID_20, + /* 0x15 */ PLAYER_CUEID_21, + /* 0x16 */ PLAYER_CUEID_22, + /* 0x17 */ PLAYER_CUEID_23, + /* 0x18 */ PLAYER_CUEID_24, + /* 0x19 */ PLAYER_CUEID_25, + /* 0x1A */ PLAYER_CUEID_26, + /* 0x1B */ PLAYER_CUEID_27, + /* 0x1C */ PLAYER_CUEID_28, + /* 0x1D */ PLAYER_CUEID_29, + /* 0x1E */ PLAYER_CUEID_30, + /* 0x1F */ PLAYER_CUEID_31, + /* 0x20 */ PLAYER_CUEID_32, + /* 0x21 */ PLAYER_CUEID_33, + /* 0x22 */ PLAYER_CUEID_34, + /* 0x23 */ PLAYER_CUEID_35, + /* 0x24 */ PLAYER_CUEID_36, + /* 0x25 */ PLAYER_CUEID_37, + /* 0x26 */ PLAYER_CUEID_38, + /* 0x27 */ PLAYER_CUEID_39, + /* 0x28 */ PLAYER_CUEID_40, + /* 0x29 */ PLAYER_CUEID_41, + /* 0x2A */ PLAYER_CUEID_42, + /* 0x2B */ PLAYER_CUEID_43, + /* 0x2C */ PLAYER_CUEID_44, + /* 0x2D */ PLAYER_CUEID_45, + /* 0x2E */ PLAYER_CUEID_46, + /* 0x2F */ PLAYER_CUEID_47, + /* 0x30 */ PLAYER_CUEID_48, + /* 0x31 */ PLAYER_CUEID_49, + /* 0x32 */ PLAYER_CUEID_50, + /* 0x33 */ PLAYER_CUEID_51, + /* 0x34 */ PLAYER_CUEID_52, + /* 0x35 */ PLAYER_CUEID_53, + /* 0x36 */ PLAYER_CUEID_54, + /* 0x37 */ PLAYER_CUEID_55, + /* 0x38 */ PLAYER_CUEID_56, + /* 0x39 */ PLAYER_CUEID_57, + /* 0x3A */ PLAYER_CUEID_58, + /* 0x3B */ PLAYER_CUEID_59, + /* 0x3C */ PLAYER_CUEID_60, + /* 0x3D */ PLAYER_CUEID_61, + /* 0x3E */ PLAYER_CUEID_62, + /* 0x3F */ PLAYER_CUEID_63, + /* 0x40 */ PLAYER_CUEID_64, + /* 0x41 */ PLAYER_CUEID_65, + /* 0x42 */ PLAYER_CUEID_66, + /* 0x43 */ PLAYER_CUEID_67, + /* 0x44 */ PLAYER_CUEID_68, + /* 0x45 */ PLAYER_CUEID_69, + /* 0x46 */ PLAYER_CUEID_70, + /* 0x47 */ PLAYER_CUEID_71, + /* 0x48 */ PLAYER_CUEID_72, + /* 0x49 */ PLAYER_CUEID_73, + /* 0x4A */ PLAYER_CUEID_74, + /* 0x4B */ PLAYER_CUEID_75, + /* 0x4C */ PLAYER_CUEID_76, + /* 0x4D */ PLAYER_CUEID_77, + /* 0x4E */ PLAYER_CUEID_78, + /* 0x4F */ PLAYER_CUEID_79, + /* 0x50 */ PLAYER_CUEID_80, + /* 0x51 */ PLAYER_CUEID_81, + /* 0x52 */ PLAYER_CUEID_82, + /* 0x53 */ PLAYER_CUEID_83, + /* 0x54 */ PLAYER_CUEID_84, + /* 0x55 */ PLAYER_CUEID_85, + /* 0x56 */ PLAYER_CUEID_86, + /* 0x57 */ PLAYER_CUEID_87, + /* 0x58 */ PLAYER_CUEID_88, + /* 0x59 */ PLAYER_CUEID_89, + /* 0x5A */ PLAYER_CUEID_90, + /* 0x5B */ PLAYER_CUEID_91, + /* 0x5C */ PLAYER_CUEID_MAX +} PlayerCueId; + // #define PLAYER_STATE1_1 (1 << 0) @@ -1040,14 +1136,17 @@ typedef struct Player { /* 0x390 */ Actor* rideActor; /* 0x394 */ u8 csMode; // PlayerCsMode enum /* 0x395 */ u8 prevCsMode; // PlayerCsMode enum - /* 0x396 */ u8 unk_396; // currentActorActionId? + /* 0x396 */ u8 cueId; // PlayerCueId enum /* 0x397 */ u8 unk_397; // PlayerDoorType enum - /* 0x398 */ Actor* unk_398; // csActor? + /* 0x398 */ Actor* csActor; /* 0x39C */ UNK_TYPE1 unk_39C[0x4]; /* 0x3A0 */ Vec3f unk_3A0; /* 0x3AC */ Vec3f unk_3AC; /* 0x3B8 */ u16 unk_3B8; - /* 0x3BA */ s16 doorBgCamIndex; + /* 0x3BA */ union { + s16 doorBgCamIndex; + s16 unk_3BA; // When in a cutscene, boolean to determine if `PLAYER_STATE1_20000000` is set + }; /* 0x3BC */ s16 subCamId; /* 0x3BE */ char unk_3BE[2]; /* 0x3C0 */ Vec3f unk_3C0; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 9d1ec98a5..7e6ea1662 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1370,7 +1370,8 @@ void Actor_MountHorse(PlayState* play, Player* player, Actor* horse) { } s32 func_800B7200(Player* player) { - return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0); + return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || + (player->csMode != PLAYER_CSMODE_NONE); } void Actor_SpawnHorse(PlayState* play, Player* player) { @@ -1380,13 +1381,14 @@ void Actor_SpawnHorse(PlayState* play, Player* player) { s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); - if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_0))) { + if ((player->csMode == PLAYER_CSMODE_5) || + ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_NONE))) { return false; } player->csMode = csMode; - player->unk_398 = actor; - player->doorBgCamIndex = 0; + player->csActor = actor; + player->unk_3BA = false; return true; } @@ -1394,7 +1396,7 @@ s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); if (func_800B724C(play, actor, csMode)) { - player->doorBgCamIndex = 1; + player->unk_3BA = true; return true; } return false; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index aafb26cb6..d6f3b78b3 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -43,7 +43,7 @@ void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) { sCueTypeList[i] = 0; } - gDisablePlayerCsModeStartPos = 0; + gDisablePlayerCsModeStartPos = false; Audio_SetCutsceneFlag(false); } diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index fce034e65..87c8203cc 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -204,7 +204,7 @@ void CutsceneManager_End(void) { sCutsceneMgr.targetActor->flags &= ~ACTOR_FLAG_100000; // fallthrough case CS_START_1: - func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_END); + func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_END); sCutsceneMgr.startMethod = CS_START_0; break; @@ -335,7 +335,7 @@ s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor) { s16 startCsId = CutsceneManager_Start(csId, actor); if (startCsId >= 0) { - func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT); + func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_WAIT); if (sCutsceneMgr.length == 0) { CutsceneManager_Stop(sCutsceneMgr.csId); } @@ -351,7 +351,7 @@ s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor) { s16 startCsId = CutsceneManager_Start(csId, actor); if (startCsId >= 0) { - func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT); + func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_WAIT); if (sCutsceneMgr.length == 0) { CutsceneManager_Stop(sCutsceneMgr.csId); } diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index abab2f560..2573fc48a 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -495,7 +495,7 @@ void func_80123140(PlayState* play, Player* player) { s32 Player_InBlockingCsMode(PlayState* play, Player* player) { return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_20000000)) || - (player->csMode != PLAYER_CSMODE_0) || (play->transitionTrigger == TRANS_TRIGGER_START) || + (player->csMode != PLAYER_CSMODE_NONE) || (play->transitionTrigger == TRANS_TRIGGER_START) || (play->transitionMode != TRANS_MODE_OFF) || (player->stateFlags1 & PLAYER_STATE1_1) || (player->stateFlags3 & PLAYER_STATE3_80) || (play->actorCtx.unk268 != 0); } 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 5db259be1..2448ac73c 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -688,7 +688,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = PLAYER_CSMODE_0; + player->csMode = PLAYER_CSMODE_NONE; } func_809E344C(this, play); @@ -784,7 +784,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = PLAYER_CSMODE_0; + player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); } @@ -912,7 +912,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = PLAYER_CSMODE_0; + player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); func_800B8D50(play, NULL, 10.0f, this->actor.shape.rot.y, 0.0f, 0x20); } @@ -1754,7 +1754,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = PLAYER_CSMODE_0; + player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); } @@ -1906,7 +1906,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = PLAYER_CSMODE_0; + player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); } diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index fd945787d..8ad403366 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -154,7 +154,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { break; case 6: - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); play->nextEntrance = ENTRANCE(STOCK_POT_INN, 5); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; @@ -168,7 +168,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { s32 func_80C227E8(DmTag* this, PlayState* play) { if (this->unk_1A4 == 0) { - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); play->nextEntrance = ENTRANCE(STOCK_POT_INN, 4); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; 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 8af068753..be5d4f58f 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -478,7 +478,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 visionRange = gSaveContext.save.isNight ? 200.0f : 280.0f; - if (player->csMode == 0x1A) { + if (player->csMode == PLAYER_CSMODE_26) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, @@ -493,7 +493,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->picto.actor.shape.rot.y, 0x1800, visionRange, this->verticalDetectRange)) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { this->picto.actor.speed = 0.0f; - func_800B7298(play, &this->picto.actor, 0x1A); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26); Lib_PlaySfx(NA_SE_SY_FOUND); Message_StartTextbox(play, 0x1194, &this->picto.actor); this->actionFunc = EnGe2_SetupCharge; @@ -678,7 +678,7 @@ void EnGe2_GuardStationary(EnGe2* this, PlayState* play) { if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos, this->picto.actor.shape.rot.y, 0x4000, 720.0f, this->verticalDetectRange)) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { - func_800B7298(play, &this->picto.actor, 0x1A); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26); Lib_PlaySfx(NA_SE_SY_FOUND); Message_StartTextbox(play, 0x1194, &this->picto.actor); this->timer = 50; 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 5d14b12ae..287a50e45 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -663,7 +663,7 @@ s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) { (((this->stateFlags & ENHORSE_FLAG_19) || (this->stateFlags & ENHORSE_FLAG_29)) && !this->inRace) || (this->action == ENHORSE_ACTION_HBA) || (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || (play->csCtx.state != CS_STATE_IDLE) || (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) || - (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != PLAYER_CSMODE_0)) { + (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != PLAYER_CSMODE_NONE)) { return false; } return true; 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 d572c1331..09116d628 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -480,7 +480,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { } CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); - func_800B7298(play, &this->picto.actor, 0x15); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_21); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; @@ -537,7 +537,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->unk_2D8 = 0; this->picto.actor.world.pos.y = this->picto.actor.floorHeight; this->picto.actor.velocity.y = 0.0f; - func_800B7298(play, &this->picto.actor, 4); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4); Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ONGND); @@ -608,7 +608,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { case 7: if (this->unk_598 == 0) { - func_800B7298(play, &this->picto.actor, 6); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); CutsceneManager_Stop(this->csId); this->unk_59C = 0; this->subCamId = SUB_CAM_ID_DONE; @@ -673,7 +673,7 @@ void func_80B86804(EnKaizoku* this, PlayState* play) { CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor); } - func_800B7298(play, &this->picto.actor, 0x60); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_96); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->unk_2B2 = 30; this->picto.actor.flags &= ~ACTOR_FLAG_1; @@ -723,7 +723,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { case 2: if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - func_800B7298(play, &this->picto.actor, 6); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); CutsceneManager_Stop(this->csId); this->subCamId = SUB_CAM_ID_DONE; play->nextEntrance = play->setupExitList[this->exitIndex]; @@ -798,7 +798,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_18); - func_800B7298(play, &this->picto.actor, 0x85); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_133); this->unk_5A0 = 0; this->unk_598 = 0; this->unk_59C++; @@ -864,7 +864,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { play->envCtx.fillScreen = false; this->unk_59C = 0; this->subCamId = SUB_CAM_ID_DONE; - func_800B7298(play, &this->picto.actor, 6); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); CutsceneManager_Stop(this->csId); if (this->switchFlag >= 0) { Flags_SetSwitch(play, this->switchFlag); @@ -1684,7 +1684,7 @@ void func_80B8960C(EnKaizoku* this, PlayState* play) { } this->picto.actor.speed = 0.0f; this->unk_2D8 = 1; - func_800B7298(play, &this->picto.actor, 0x7B); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_123); Enemy_StartFinishingBlow(play, &this->picto.actor); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; 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 0e4790f1e..3d45b7a1c 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -527,7 +527,7 @@ void func_80A3F0B0(EnTest3* this, PlayState* play) { } void func_80A3F114(EnTest3* this, PlayState* play) { - if (this->player.csMode != PLAYER_CSMODE_0) { + if (this->player.csMode != PLAYER_CSMODE_NONE) { play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_END); } } @@ -1065,7 +1065,7 @@ void EnTest3_Update(Actor* thisx, PlayState* play2) { play->actorCtx.flags &= ~ACTORCTX_FLAG_4; } else if (this->player.actor.category == ACTORCAT_PLAYER) { func_80A409D4(this, play); - } else if (play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_0)) { + } else if (play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_NONE)) { if (this->unk_D88 >= 7) { Vec3f worldPos; 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 9ac11523c..9634ae21e 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -480,7 +480,7 @@ void func_80BAFDB4(EnZod* this, PlayState* play) { EnZod_UpdateAnimation(this); if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_Start(this->actor.csId, &this->actor); - func_800B7298(play, NULL, 0x44); + func_800B7298(play, NULL, PLAYER_CSMODE_68); Message_StartTextbox(play, 0x103A, &this->actor); this->actionFunc = EnZod_SetupRehearse; } else { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 7341fd5e8..5d46256ad 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -252,77 +252,76 @@ void Player_InitMode_D(PlayState* play, Player* this); void func_8083ADF0(PlayState* play, Player* this); void Player_InitMode_F(PlayState* play, Player* this); -void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); +/* Cutscene functions */ +void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_1(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_2(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_3(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_4(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_5(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_7(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_8(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_9(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_10(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_11(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_12(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_13(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_14(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_15(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_16(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_17(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_18(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_19(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_20(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_21(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_22(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_23(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_TranslateReverse(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_25(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_26(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_27(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_28(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_29(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_30(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_31(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_32(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_33(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_34(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_35(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_36(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_37(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_38(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_39(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_40(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_41(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_42(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_43(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_44(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_45(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_46(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_End(PlayState* play, Player* this, CsCmdActorCue* cue); +void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue); -void func_80859EBC(PlayState* play, Player* this, s32 arg2); - -void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859AD0(PlayState* play, Player* this, void* arg2); -void func_80859B28(PlayState* play, Player* this, void* arg2); -void func_8085ADA0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859C60(PlayState* play, Player* this, void* arg2); -void func_8085A710(PlayState* play, Player* this, void* anim); -void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A6C0(PlayState* play, Player* this, void* anim); -void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); -void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg); -void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A364(PlayState* play, Player* this, void* arg2); -void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A40C(PlayState* play, Player* this, void* arg2); -void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A4A4(PlayState* play, Player* this, void* arg2); -void func_8085A5DC(PlayState* play, Player* this, void* arg2); -void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2); -void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859AF8(PlayState* play, Player* this, void* arg2); -void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859EBC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); - -void func_8085A768(PlayState* play, Player* this, void* arg2); -void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); - -void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859CA0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A66C(PlayState* play, Player* this, void* arg2); -void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2); -void func_8085A530(PlayState* play, Player* this, void* arg2); -void func_8085A768(PlayState* play, Player* this, void* arg2); -void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2); -void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2); +void Player_CsAnim_1(PlayState* play, Player* this, void* arg2); // void* arg2 +void Player_CsAnim_2(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_3(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_4(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_5(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_6(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_7(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_8(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_9(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_10(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_11(PlayState* play, Player* this, void* cue); // CsCmdActorCue* cue +void Player_CsAnim_12(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_13(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_14(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_15(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_16(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_17(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim +void Player_CsAnim_18(PlayState* play, Player* this, void* entry); // AnimSfxEntry* entry +void Player_CsAnim_19(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim // ItemActions void func_8082F594(PlayState* play, Player* this); @@ -332,26 +331,6 @@ void func_8082F5C0(PlayState* play, Player* this); void func_8082F7F4(PlayState* play, Player* this); void Player_SpawnExplosive(PlayState* play, Player* this); -void func_80858DB4(PlayState* play, Player* this, void* anim); -void func_80858DDC(PlayState* play, Player* this, void* anim); -void func_80858E40(PlayState* play, Player* this, void* anim); -void func_80858E60(PlayState* play, Player* this, void* anim); -void func_80858E80(PlayState* play, Player* this, void* anim); -void func_80858EA0(PlayState* play, Player* this, void* anim); -void func_80858EFC(PlayState* play, Player* this, void* anim); -void func_80858F1C(PlayState* play, Player* this, void* anim); -void func_80858F3C(PlayState* play, Player* this, void* anim); -void func_80858F5C(PlayState* play, Player* this, void* anim); -void func_80858FBC(PlayState* play, Player* this, void* anim); -void func_80859028(PlayState* play, Player* this, void* anim); -void func_808591BC(PlayState* play, Player* this, void* anim); -void func_80858DFC(PlayState* play, Player* this, void* anim); -void func_80858EC0(PlayState* play, Player* this, void* anim); -void func_80858F7C(PlayState* play, Player* this, void* anim); -void func_80858F9C(PlayState* play, Player* this, void* anim); -void func_80859168(PlayState* play, Player* this, void* anim); -void func_80859210(PlayState* play, Player* this, void* arg2); - typedef struct struct_8085C2A4 { /* 0x0 */ PlayerAnimationHeader* unk_0; /* 0x4 */ PlayerAnimationHeader* unk_4; @@ -365,17 +344,44 @@ typedef struct BlureColors { /* 0xC */ u8 p2EndColor[4]; } BlureColors; // size = 0x10 -typedef void (*PlayerCueInterpreter)(PlayState*, Player*, CsCmdActorCue*); +typedef void (*PlayerCsAnim)(PlayState*, Player*, void*); +typedef void (*PlayerCsAction)(PlayState*, Player*, CsCmdActorCue*); -typedef struct struct_8085DA94 { - /* 0x0 */ s8 type; +typedef enum { + /* -1 */ PLAYER_CSTYPE_ACTION = -1, + /* 0x00 */ PLAYER_CSTYPE_NONE, + /* 0x01 */ PLAYER_CSTYPE_ANIM_1, + /* 0x02 */ PLAYER_CSTYPE_ANIM_2, + /* 0x03 */ PLAYER_CSTYPE_ANIM_3, + /* 0x04 */ PLAYER_CSTYPE_ANIM_4, + /* 0x05 */ PLAYER_CSTYPE_ANIM_5, + /* 0x06 */ PLAYER_CSTYPE_ANIM_6, + /* 0x07 */ PLAYER_CSTYPE_ANIM_7, + /* 0x08 */ PLAYER_CSTYPE_ANIM_8, + /* 0x09 */ PLAYER_CSTYPE_ANIM_9, + /* 0x0A */ PLAYER_CSTYPE_ANIM_10, + /* 0x0B */ PLAYER_CSTYPE_ANIM_11, + /* 0x0C */ PLAYER_CSTYPE_ANIM_12, + /* 0x0D */ PLAYER_CSTYPE_ANIM_13, + /* 0x0E */ PLAYER_CSTYPE_ANIM_14, + /* 0x0F */ PLAYER_CSTYPE_ANIM_15, + /* 0x10 */ PLAYER_CSTYPE_ANIM_16, + /* 0x11 */ PLAYER_CSTYPE_ANIM_17, + /* 0x12 */ PLAYER_CSTYPE_ANIM_18, + /* 0x13 */ PLAYER_CSTYPE_ANIM_19 +} PlayerCsType; + +typedef struct PlayerCsModeEntry { + /* 0x0 */ s8 type; // PlayerCsType enum /* 0x4 */ union { void* ptr; // Do not use, required in the absence of designated initialisors + PlayerCsAction csActionFunc; + void* csAnimArg2; // Can point to any of the below in the union PlayerAnimationHeader* anim; - PlayerCueInterpreter func; AnimSfxEntry* entry; + CsCmdActorCue* cue; }; -} struct_8085DA94; // size = 0x8 +} PlayerCsModeEntry; // size = 0x8 typedef struct struct_8085E368 { /* 0x0 */ Vec3s base; @@ -3702,7 +3708,8 @@ void func_808304BC(Player* this, PlayState* play) { if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) { if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) { if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) { - if ((this->csMode == PLAYER_CSMODE_0) && (play->unk_1887C == 0) && (play->activeCamId == CAM_ID_MAIN)) { + if ((this->csMode == PLAYER_CSMODE_NONE) && (play->unk_1887C == 0) && + (play->activeCamId == CAM_ID_MAIN)) { if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) { func_8082FE0C(this, play); } @@ -4592,7 +4599,7 @@ void func_80832888(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_40000000; } - if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0) || + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_NONE) || (this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (this->stateFlags3 & PLAYER_STATE3_80)) { this->unk_738 = 0; } else if (heldZ || (this->stateFlags2 & PLAYER_STATE2_2000) || (this->unk_A78 != NULL)) { @@ -5461,7 +5468,7 @@ s32 func_80834600(Player* this, PlayState* play) { return false; } else if ((this->unk_D6B != 0) || (this->invincibilityTimer > 0) || (this->stateFlags1 & PLAYER_STATE1_4000000) || - (this->csMode != PLAYER_CSMODE_0) || (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) || + (this->csMode != PLAYER_CSMODE_NONE) || (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) || (this->meleeWeaponQuads[1].base.atFlags & AT_HIT) || (this->cylinder.base.atFlags & AT_HIT) || (this->shieldCylinder.base.atFlags & AT_HIT)) { return false; @@ -5764,7 +5771,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol s32 sp30; if ((this == GET_PLAYER(play)) && !(this->stateFlags1 & PLAYER_STATE1_80) && !func_8082DA90(play) && - (this->csMode == PLAYER_CSMODE_0) && !(this->stateFlags1 & PLAYER_STATE1_1)) { + (this->csMode == PLAYER_CSMODE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_1)) { exitIndexPlusOne = 0; if (((poly != NULL) && @@ -6364,7 +6371,8 @@ FallImpactInfo sFallImpactInfos[] = { s32 func_80836F10(PlayState* play, Player* this) { s32 fallDistance; - if ((sPlayerFloorType == FLOOR_TYPE_6) || (sPlayerFloorType == FLOOR_TYPE_9) || (this->csMode != PLAYER_CSMODE_0)) { + if ((sPlayerFloorType == FLOOR_TYPE_6) || (sPlayerFloorType == FLOOR_TYPE_9) || + (this->csMode != PLAYER_CSMODE_NONE)) { fallDistance = 0; } else { fallDistance = this->fallDistance; @@ -6957,7 +6965,7 @@ s32 func_808387A0(PlayState* play, Player* this) { Player_StopCutscene(this); this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; Player_SetAction(play, this, func_8085B08C, 0); - if (this->doorBgCamIndex != 0) { + if (this->unk_3BA) { this->stateFlags1 |= PLAYER_STATE1_20000000; } func_8082DC38(this); @@ -8754,7 +8762,7 @@ s32 func_8083D23C(Player* this, PlayState* play) { func_8083D168(play, this, giEntry); this->getItemId = GI_NONE; } - } else if (this->csMode == PLAYER_CSMODE_0) { + } else if (this->csMode == PLAYER_CSMODE_NONE) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { if (this->getItemId != GI_NONE) { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { @@ -10047,27 +10055,25 @@ void func_80840F34(Player* this) { Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f); } -s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* playerAction, f32 arg3, s16 arg4, s32 arg5) { +s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* cue, f32 arg3, s16 arg4, s32 arg5) { if ((arg5 != 0) && (this->linearVelocity == 0.0f)) { return PlayerAnimation_Update(play, &this->skelAnime); } if (arg5 != 2) { f32 halfUpdateRate = R_UPDATE_RATE / 2.0f; - f32 curDiffX = playerAction->endPos.x - this->actor.world.pos.x; - f32 curDiffZ = playerAction->endPos.z - this->actor.world.pos.z; + f32 curDiffX = cue->endPos.x - this->actor.world.pos.x; + f32 curDiffZ = cue->endPos.z - this->actor.world.pos.z; f32 scaledCurDist = sqrtf(SQ(curDiffX) + SQ(curDiffZ)) / halfUpdateRate; - s32 framesLeft = (playerAction->endFrame - play->csCtx.curFrame) + 1; + s32 framesLeft = (cue->endFrame - play->csCtx.curFrame) + 1; arg4 = Math_Atan2S_XY(curDiffZ, curDiffX); if (arg5 == 1) { - f32 distX = playerAction->endPos.x - playerAction->startPos.x; - f32 distZ = playerAction->endPos.z - playerAction->startPos.z; - s32 temp = (((sqrtf(SQ(distX) + SQ(distZ)) / halfUpdateRate) / - (playerAction->endFrame - playerAction->startFrame)) / - 1.5f) * - 4.0f; + f32 distX = cue->endPos.x - cue->startPos.x; + f32 distZ = cue->endPos.z - cue->startPos.z; + s32 temp = + (((sqrtf(SQ(distX) + SQ(distZ)) / halfUpdateRate) / (cue->endFrame - cue->startFrame)) / 1.5f) * 4.0f; if (temp >= framesLeft) { arg3 = 0.0f; arg4 = this->actor.shape.rot.y; @@ -11144,7 +11150,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { seqMode = SEQ_MODE_DEFAULT; if (this->stateFlags1 & PLAYER_STATE1_100000) { seqMode = SEQ_MODE_STILL; - } else if (this->csMode != PLAYER_CSMODE_0) { + } else if (this->csMode != PLAYER_CSMODE_NONE) { Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL); } else { camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN) @@ -11323,99 +11329,103 @@ void Player_DetectSecrets(PlayState* play, Player* this) { } } -s8 D_8085D384[92] = { - /* 0 */ PLAYER_CSMODE_0, - /* 1 */ PLAYER_CSMODE_2, - /* 2 */ PLAYER_CSMODE_2, - /* 3 */ PLAYER_CSMODE_4, - /* 4 */ PLAYER_CSMODE_3, - /* 5 */ PLAYER_CSMODE_56, - /* 6 */ PLAYER_CSMODE_8, - /* 7 */ PLAYER_CSMODE_0, - /* 8 */ PLAYER_CSMODE_0, - /* 9 */ PLAYER_CSMODE_135, - /* 10 */ PLAYER_CSMODE_21, - /* 11 */ PLAYER_CSMODE_61, - /* 12 */ PLAYER_CSMODE_62, - /* 13 */ PLAYER_CSMODE_60, - /* 14 */ PLAYER_CSMODE_63, - /* 15 */ PLAYER_CSMODE_64, - /* 16 */ PLAYER_CSMODE_65, - /* 17 */ PLAYER_CSMODE_66, - /* 18 */ PLAYER_CSMODE_70, - /* 19 */ PLAYER_CSMODE_19, - /* 20 */ PLAYER_CSMODE_71, - /* 21 */ PLAYER_CSMODE_72, - /* 22 */ PLAYER_CSMODE_67, - /* 23 */ PLAYER_CSMODE_73, - /* 24 */ PLAYER_CSMODE_74, - /* 25 */ PLAYER_CSMODE_75, - /* 26 */ PLAYER_CSMODE_68, - /* 27 */ PLAYER_CSMODE_69, - /* 28 */ PLAYER_CSMODE_76, - /* 29 */ PLAYER_CSMODE_116, - /* 30 */ PLAYER_CSMODE_0, - /* 31 */ PLAYER_CSMODE_40, - /* 32 */ PLAYER_CSMODE_0, - /* 33 */ -PLAYER_CSMODE_52, // the only negative one - /* 34 */ PLAYER_CSMODE_42, - /* 35 */ PLAYER_CSMODE_43, - /* 36 */ PLAYER_CSMODE_57, - /* 37 */ PLAYER_CSMODE_81, - /* 38 */ PLAYER_CSMODE_41, - /* 39 */ PLAYER_CSMODE_53, - /* 40 */ PLAYER_CSMODE_54, - /* 41 */ PLAYER_CSMODE_44, - /* 42 */ PLAYER_CSMODE_55, - /* 43 */ PLAYER_CSMODE_45, - /* 44 */ PLAYER_CSMODE_46, - /* 45 */ PLAYER_CSMODE_47, - /* 46 */ PLAYER_CSMODE_48, - /* 47 */ PLAYER_CSMODE_49, - /* 48 */ PLAYER_CSMODE_50, - /* 49 */ PLAYER_CSMODE_51, - /* 50 */ PLAYER_CSMODE_77, - /* 51 */ PLAYER_CSMODE_78, - /* 52 */ PLAYER_CSMODE_79, - /* 53 */ PLAYER_CSMODE_80, - /* 54 */ PLAYER_CSMODE_81, - /* 55 */ PLAYER_CSMODE_82, - /* 56 */ PLAYER_CSMODE_83, - /* 57 */ PLAYER_CSMODE_84, - /* 58 */ PLAYER_CSMODE_85, - /* 59 */ PLAYER_CSMODE_86, - /* 60 */ PLAYER_CSMODE_87, - /* 61 */ PLAYER_CSMODE_88, - /* 62 */ PLAYER_CSMODE_89, - /* 63 */ PLAYER_CSMODE_90, - /* 64 */ PLAYER_CSMODE_91, - /* 65 */ PLAYER_CSMODE_92, - /* 66 */ PLAYER_CSMODE_94, - /* 67 */ PLAYER_CSMODE_95, - /* 68 */ PLAYER_CSMODE_100, - /* 69 */ PLAYER_CSMODE_101, - /* 70 */ PLAYER_CSMODE_98, - /* 71 */ PLAYER_CSMODE_99, - /* 72 */ PLAYER_CSMODE_102, - /* 73 */ PLAYER_CSMODE_103, - /* 74 */ PLAYER_CSMODE_104, - /* 75 */ PLAYER_CSMODE_112, - /* 76 */ PLAYER_CSMODE_113, - /* 77 */ PLAYER_CSMODE_117, - /* 78 */ PLAYER_CSMODE_104, - /* 79 */ PLAYER_CSMODE_104, - /* 80 */ PLAYER_CSMODE_105, - /* 81 */ PLAYER_CSMODE_106, - /* 82 */ PLAYER_CSMODE_107, - /* 83 */ PLAYER_CSMODE_108, - /* 84 */ PLAYER_CSMODE_109, - /* 85 */ PLAYER_CSMODE_110, - /* 86 */ PLAYER_CSMODE_118, - /* 87 */ PLAYER_CSMODE_119, - /* 88 */ PLAYER_CSMODE_120, - /* 89 */ PLAYER_CSMODE_114, - /* 90 */ PLAYER_CSMODE_111, - /* 91 */ PLAYER_CSMODE_122, +// Making a player csMode negative will behave as its positive counterpart +// except will disable setting the start position +#define DISABLE_PLAYER_CSMODE_START_POS(csMode) -(csMode) + +s8 sPlayerCsModes[PLAYER_CUEID_MAX] = { + /* PLAYER_CUEID_NONE */ PLAYER_CSMODE_NONE, + /* PLAYER_CUEID_1 */ PLAYER_CSMODE_2, + /* PLAYER_CUEID_2 */ PLAYER_CSMODE_2, + /* PLAYER_CUEID_3 */ PLAYER_CSMODE_4, + /* PLAYER_CUEID_4 */ PLAYER_CSMODE_3, + /* PLAYER_CUEID_5 */ PLAYER_CSMODE_56, + /* PLAYER_CUEID_6 */ PLAYER_CSMODE_8, + /* PLAYER_CUEID_7 */ PLAYER_CSMODE_NONE, + /* PLAYER_CUEID_8 */ PLAYER_CSMODE_NONE, + /* PLAYER_CUEID_9 */ PLAYER_CSMODE_135, + /* PLAYER_CUEID_10 */ PLAYER_CSMODE_21, + /* PLAYER_CUEID_11 */ PLAYER_CSMODE_61, + /* PLAYER_CUEID_12 */ PLAYER_CSMODE_62, + /* PLAYER_CUEID_13 */ PLAYER_CSMODE_60, + /* PLAYER_CUEID_14 */ PLAYER_CSMODE_63, + /* PLAYER_CUEID_15 */ PLAYER_CSMODE_64, + /* PLAYER_CUEID_16 */ PLAYER_CSMODE_65, + /* PLAYER_CUEID_17 */ PLAYER_CSMODE_66, + /* PLAYER_CUEID_18 */ PLAYER_CSMODE_70, + /* PLAYER_CUEID_19 */ PLAYER_CSMODE_19, + /* PLAYER_CUEID_20 */ PLAYER_CSMODE_71, + /* PLAYER_CUEID_21 */ PLAYER_CSMODE_72, + /* PLAYER_CUEID_22 */ PLAYER_CSMODE_67, + /* PLAYER_CUEID_23 */ PLAYER_CSMODE_73, + /* PLAYER_CUEID_24 */ PLAYER_CSMODE_74, + /* PLAYER_CUEID_25 */ PLAYER_CSMODE_75, + /* PLAYER_CUEID_26 */ PLAYER_CSMODE_68, + /* PLAYER_CUEID_27 */ PLAYER_CSMODE_69, + /* PLAYER_CUEID_28 */ PLAYER_CSMODE_76, + /* PLAYER_CUEID_29 */ PLAYER_CSMODE_116, + /* PLAYER_CUEID_30 */ PLAYER_CSMODE_NONE, + /* PLAYER_CUEID_31 */ PLAYER_CSMODE_40, + /* PLAYER_CUEID_32 */ PLAYER_CSMODE_NONE, + /* PLAYER_CUEID_33 */ DISABLE_PLAYER_CSMODE_START_POS(PLAYER_CSMODE_52), + /* PLAYER_CUEID_34 */ PLAYER_CSMODE_42, + /* PLAYER_CUEID_35 */ PLAYER_CSMODE_43, + /* PLAYER_CUEID_36 */ PLAYER_CSMODE_57, + /* PLAYER_CUEID_37 */ PLAYER_CSMODE_81, + /* PLAYER_CUEID_38 */ PLAYER_CSMODE_41, + /* PLAYER_CUEID_39 */ PLAYER_CSMODE_53, + /* PLAYER_CUEID_40 */ PLAYER_CSMODE_54, + /* PLAYER_CUEID_41 */ PLAYER_CSMODE_44, + /* PLAYER_CUEID_42 */ PLAYER_CSMODE_55, + /* PLAYER_CUEID_43 */ PLAYER_CSMODE_45, + /* PLAYER_CUEID_44 */ PLAYER_CSMODE_46, + /* PLAYER_CUEID_45 */ PLAYER_CSMODE_47, + /* PLAYER_CUEID_46 */ PLAYER_CSMODE_48, + /* PLAYER_CUEID_47 */ PLAYER_CSMODE_49, + /* PLAYER_CUEID_48 */ PLAYER_CSMODE_50, + /* PLAYER_CUEID_49 */ PLAYER_CSMODE_51, + /* PLAYER_CUEID_50 */ PLAYER_CSMODE_77, + /* PLAYER_CUEID_51 */ PLAYER_CSMODE_78, + /* PLAYER_CUEID_52 */ PLAYER_CSMODE_79, + /* PLAYER_CUEID_53 */ PLAYER_CSMODE_80, + /* PLAYER_CUEID_54 */ PLAYER_CSMODE_81, + /* PLAYER_CUEID_55 */ PLAYER_CSMODE_82, + /* PLAYER_CUEID_56 */ PLAYER_CSMODE_83, + /* PLAYER_CUEID_57 */ PLAYER_CSMODE_84, + /* PLAYER_CUEID_58 */ PLAYER_CSMODE_85, + /* PLAYER_CUEID_59 */ PLAYER_CSMODE_86, + /* PLAYER_CUEID_60 */ PLAYER_CSMODE_87, + /* PLAYER_CUEID_61 */ PLAYER_CSMODE_88, + /* PLAYER_CUEID_62 */ PLAYER_CSMODE_89, + /* PLAYER_CUEID_63 */ PLAYER_CSMODE_90, + /* PLAYER_CUEID_64 */ PLAYER_CSMODE_91, + /* PLAYER_CUEID_65 */ PLAYER_CSMODE_92, + /* PLAYER_CUEID_66 */ PLAYER_CSMODE_94, + /* PLAYER_CUEID_67 */ PLAYER_CSMODE_95, + /* PLAYER_CUEID_68 */ PLAYER_CSMODE_100, + /* PLAYER_CUEID_69 */ PLAYER_CSMODE_101, + /* PLAYER_CUEID_70 */ PLAYER_CSMODE_98, + /* PLAYER_CUEID_71 */ PLAYER_CSMODE_99, + /* PLAYER_CUEID_72 */ PLAYER_CSMODE_102, + /* PLAYER_CUEID_73 */ PLAYER_CSMODE_103, + /* PLAYER_CUEID_74 */ PLAYER_CSMODE_104, + /* PLAYER_CUEID_75 */ PLAYER_CSMODE_112, + /* PLAYER_CUEID_76 */ PLAYER_CSMODE_113, + /* PLAYER_CUEID_77 */ PLAYER_CSMODE_117, + /* PLAYER_CUEID_78 */ PLAYER_CSMODE_104, + /* PLAYER_CUEID_79 */ PLAYER_CSMODE_104, + /* PLAYER_CUEID_80 */ PLAYER_CSMODE_105, + /* PLAYER_CUEID_81 */ PLAYER_CSMODE_106, + /* PLAYER_CUEID_82 */ PLAYER_CSMODE_107, + /* PLAYER_CUEID_83 */ PLAYER_CSMODE_108, + /* PLAYER_CUEID_84 */ PLAYER_CSMODE_109, + /* PLAYER_CUEID_85 */ PLAYER_CSMODE_110, + /* PLAYER_CUEID_86 */ PLAYER_CSMODE_118, + /* PLAYER_CUEID_87 */ PLAYER_CSMODE_119, + /* PLAYER_CUEID_88 */ PLAYER_CSMODE_120, + /* PLAYER_CUEID_89 */ PLAYER_CSMODE_114, + /* PLAYER_CUEID_90 */ PLAYER_CSMODE_111, + /* PLAYER_CUEID_91 */ PLAYER_CSMODE_122, }; f32 D_8085D3E0[PLAYER_FORM_MAX] = { @@ -11808,10 +11818,11 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if (play->csCtx.state != CS_STATE_IDLE) { if ((this->csMode != PLAYER_CSMODE_5) && !(this->stateFlags1 & PLAYER_STATE1_800000)) { if (!(this->stateFlags2 & PLAYER_STATE2_80) && (this->actor.id == ACTOR_PLAYER)) { - if ((play->csCtx.playerCue != NULL) && (D_8085D384[play->csCtx.playerCue->id] != 0)) { + if ((play->csCtx.playerCue != NULL) && + (sPlayerCsModes[play->csCtx.playerCue->id] != PLAYER_CSMODE_NONE)) { func_800B7298(play, NULL, PLAYER_CSMODE_5); Player_StopHorizontalMovement(this); - } else if (((u32)this->csMode == PLAYER_CSMODE_0) && + } else if (((u32)this->csMode == PLAYER_CSMODE_NONE) && !(this->stateFlags2 & (PLAYER_STATE2_400 | PLAYER_STATE2_8000000)) && (play->csCtx.state != CS_STATE_STOP)) { func_800B7298(play, NULL, PLAYER_CSMODE_20); @@ -11821,7 +11832,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } } - if ((u32)this->csMode != PLAYER_CSMODE_0) { + if ((u32)this->csMode != PLAYER_CSMODE_NONE) { if ((this->csMode != PLAYER_CSMODE_END) || !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000 | PLAYER_STATE1_4000000))) { @@ -11833,10 +11844,10 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } } } else if (func_8085B08C != this->actionFunc) { - func_8085AACC(play, this, 0); + Player_CsAction_End(play, this, NULL); } } else { - this->prevCsMode = PLAYER_CSMODE_0; + this->prevCsMode = PLAYER_CSMODE_NONE; } func_8083BF54(play, this); @@ -12340,7 +12351,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { NULL, NULL, NULL); } else { OverrideLimbDrawFlex sp84 = Player_OverrideLimbDrawGameplayDefault; - s32 lod = ((this->csMode != PLAYER_CSMODE_0) || (this->actor.projectedPos.z < 320.0f)) ? 0 : 1; + s32 lod = ((this->csMode != PLAYER_CSMODE_NONE) || (this->actor.projectedPos.z < 320.0f)) ? 0 : 1; Vec3f sp74; //! FAKE @@ -12556,7 +12567,7 @@ s32 func_80847880(PlayState* play, Player* this) { if (play->sceneId == SCENE_20SICHITAI) { Player_SetAction(play, this, func_80854430, 0); play->unk_1887C = 0; - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; return true; } @@ -12566,7 +12577,7 @@ s32 func_80847880(PlayState* play, Player* this) { func_80831990(play, this, ITEM_BOW); } Player_AnimationPlayOnce(play, this, func_8082ED20(this)); - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; this->stateFlags1 |= PLAYER_STATE1_100000; Player_StopHorizontalMovement(this); func_80836D8C(this); @@ -15100,7 +15111,7 @@ void func_8084E724(Player* this, PlayState* play) { if (((this->unk_AA5 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || ((this->unk_AA5 != PLAYER_UNKAA5_2) && - ((((this->csMode != PLAYER_CSMODE_0) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) || + ((((this->csMode != PLAYER_CSMODE_NONE) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) || (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->targetedActor != NULL) || (func_8083868C(play, this) == CAM_MODE_NORMAL) || ((this->unk_AA5 == PLAYER_UNKAA5_3) && @@ -15732,7 +15743,7 @@ void func_8084FE7C(Player* this, PlayState* play) { AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.morphTable, this->skelAnime.jointTable); - if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0)) { + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_NONE)) { this->unk_AA5 = PLAYER_UNKAA5_0; this->unk_AE7 = 0; } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) { @@ -15797,7 +15808,7 @@ void func_8084FE7C(Player* this, PlayState* play) { } else { func_8084FD7C(play, this, &rideActor->actor); } - } else if ((this->csMode != PLAYER_CSMODE_0) || + } else if ((this->csMode != PLAYER_CSMODE_NONE) || (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && !func_80847BF0(this, play) && !func_80838A90(this, play))) { if (this->targetedActor != NULL) { @@ -15825,7 +15836,7 @@ void func_8084FE7C(Player* this, PlayState* play) { } if (this->csMode == PLAYER_CSMODE_END) { - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; } } @@ -16534,7 +16545,7 @@ void func_8085269C(Player* this, PlayState* play) { 0, play->msgCtx.ocarinaMode); if (actor != NULL) { this->stateFlags1 &= ~PLAYER_STATE1_20000000; - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; func_8085B28C(play, NULL, PLAYER_CSMODE_19); this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; } else { @@ -17161,7 +17172,7 @@ void func_808540A0(Player* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); } -void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction); +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue); void func_80854118(Player* this, PlayState* play) { if (sPlayerYDistToFloor < 150.0f) { @@ -18838,66 +18849,89 @@ void func_80858D48(PlayState* play, Player* this, PlayerAnimationHeader* anim) { Player_StopHorizontalMovement(this); } -void func_80858DB4(PlayState* play, Player* this, void* anim) { +PlayerCsAnim sPlayerCsModeAnimFuncs[] = { + NULL, // PLAYER_CSTYPE_NONE + Player_CsAnim_1, // PLAYER_CSTYPE_ANIM_1 + Player_CsAnim_2, // PLAYER_CSTYPE_ANIM_2 + Player_CsAnim_3, // PLAYER_CSTYPE_ANIM_3 + Player_CsAnim_4, // PLAYER_CSTYPE_ANIM_4 + Player_CsAnim_5, // PLAYER_CSTYPE_ANIM_5 + Player_CsAnim_6, // PLAYER_CSTYPE_ANIM_6 + Player_CsAnim_7, // PLAYER_CSTYPE_ANIM_7 + Player_CsAnim_8, // PLAYER_CSTYPE_ANIM_8 + Player_CsAnim_9, // PLAYER_CSTYPE_ANIM_9 + Player_CsAnim_10, // PLAYER_CSTYPE_ANIM_10 + Player_CsAnim_11, // PLAYER_CSTYPE_ANIM_11 + Player_CsAnim_12, // PLAYER_CSTYPE_ANIM_12 + Player_CsAnim_13, // PLAYER_CSTYPE_ANIM_13 + Player_CsAnim_14, // PLAYER_CSTYPE_ANIM_14 + Player_CsAnim_15, // PLAYER_CSTYPE_ANIM_15 + Player_CsAnim_16, // PLAYER_CSTYPE_ANIM_16 + Player_CsAnim_17, // PLAYER_CSTYPE_ANIM_17 + Player_CsAnim_18, // PLAYER_CSTYPE_ANIM_18 + Player_CsAnim_19, // PLAYER_CSTYPE_ANIM_19 +}; + +void Player_CsAnim_1(PlayState* play, Player* this, void* arg2) { Player_StopHorizontalMovement(this); } -void func_80858DDC(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_2(PlayState* play, Player* this, void* anim) { func_80858C84(play, this, anim); } -void func_80858DFC(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_14(PlayState* play, Player* this, void* anim) { func_8082E784(this); func_8082E5A8(play, this, anim); Player_StopHorizontalMovement(this); } -void func_80858E40(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_3(PlayState* play, Player* this, void* anim) { func_80858CC8(play, this, anim); } -void func_80858E60(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_4(PlayState* play, Player* this, void* anim) { func_80858D48(play, this, anim); } -void func_80858E80(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_5(PlayState* play, Player* this, void* anim) { func_8082EA60(play, this, anim); } -void func_80858EA0(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_6(PlayState* play, Player* this, void* anim) { func_8082EA10(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } -void func_80858EC0(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_19(PlayState* play, Player* this, void* anim) { Player_AnimationPlayOnceReverse(play, this, anim); func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } -void func_80858EFC(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_7(PlayState* play, Player* this, void* anim) { func_8082EB18(play, this, anim); } -void func_80858F1C(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_8(PlayState* play, Player* this, void* anim) { func_8082EAC8(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } -void func_80858F3C(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_9(PlayState* play, Player* this, void* anim) { Player_AnimationPlayOnce(play, this, anim); } -void func_80858F5C(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_10(PlayState* play, Player* this, void* anim) { Player_AnimationPlayLoop(play, this, anim); } -void func_80858F7C(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_15(PlayState* play, Player* this, void* anim) { func_8082DB90(play, this, anim); } -void func_80858F9C(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_16(PlayState* play, Player* this, void* anim) { func_8082DB60(play, this, anim); } -void func_80858FBC(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_11(PlayState* play, Player* this, void* cue) { PlayerAnimation_Update(play, &this->skelAnime); } @@ -18908,29 +18942,6 @@ void func_80858FE8(Player* this) { } } -void (*D_8085D990[])(PlayState*, Player*, void*) = { - /* 0 */ NULL, - /* 1 */ func_80858DB4, - /* 2 */ func_80858DDC, - /* 3 */ func_80858E40, - /* 4 */ func_80858E60, - /* 5 */ func_80858E80, - /* 6 */ func_80858EA0, - /* 7 */ func_80858EFC, - /* 8 */ func_80858F1C, - /* 9 */ func_80858F3C, - /* 10 */ func_80858F5C, - /* 11 */ func_80858FBC, - /* 12 */ func_80859028, - /* 13 */ func_808591BC, - /* 14 */ func_80858DFC, - /* 15 */ func_80858F7C, - /* 16 */ func_80858F9C, - /* 17 */ func_80859168, - /* 18 */ func_80859210, - /* 19 */ func_80858EC0, -}; - AnimSfxEntry D_8085D9E0[] = { ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 34, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_GENERAL, 45, NA_SE_PL_CALM_HIT, CONTINUE), @@ -19022,7 +19033,7 @@ AnimSfxEntry D_8085DA90[] = { ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_PL_SIT_ON_HORSE, STOP), }; -void func_80859028(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_12(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_80858D48(play, this, anim); this->unk_AE8 = 1; @@ -19045,31 +19056,31 @@ void func_80859028(PlayState* play, Player* this, void* anim) { } } -void func_80859168(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_17(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082E794(this); func_8082DB60(play, this, anim); } } -void func_808591BC(PlayState* play, Player* this, void* anim) { +void Player_CsAnim_13(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082EB18(play, this, anim); this->unk_AE8 = 1; } } -void func_80859210(PlayState* play, Player* this, void* arg2) { +void Player_CsAnim_18(PlayState* play, Player* this, void* entry) { PlayerAnimation_Update(play, &this->skelAnime); - Player_PlayAnimSfx(this, arg2); + Player_PlayAnimSfx(this, entry); } void func_80859248(Player* this) { - if ((this->unk_398 == NULL) || (this->unk_398->update == NULL)) { - this->unk_398 = NULL; + if ((this->csActor == NULL) || (this->csActor->update == NULL)) { + this->csActor = NULL; } - this->targetedActor = this->unk_398; - if (this->unk_398 != NULL) { + this->targetedActor = this->csActor; + if (this->csActor != NULL) { this->actor.shape.rot.y = func_8083C62C(this, 0); } } @@ -19106,7 +19117,293 @@ void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2) { +PlayerCsModeEntry sPlayerCsModeInitFuncs[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_NONE */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_1 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_1 } }, + /* PLAYER_CSMODE_2 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_3 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_4 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_bikkuri } }, + /* PLAYER_CSMODE_5 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_END */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_WAIT */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_1 } }, + /* PLAYER_CSMODE_8 */ { PLAYER_CSTYPE_ANIM_2, { &gPlayerAnim_link_demo_furimuki } }, + /* PLAYER_CSMODE_9 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_5 } }, + /* PLAYER_CSMODE_10 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_warp } }, + /* PLAYER_CSMODE_11 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_clink_demo_standup } }, + /* PLAYER_CSMODE_12 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_clink_demo_standup_wait } }, + /* PLAYER_CSMODE_13 */ { PLAYER_CSTYPE_ANIM_2, { &gPlayerAnim_link_demo_baru_op3 } }, + /* PLAYER_CSMODE_14 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_15 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_jibunmiru } }, + /* PLAYER_CSMODE_16 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_14 } }, + /* PLAYER_CSMODE_17 */ { PLAYER_CSTYPE_ANIM_2, { &gPlayerAnim_link_normal_okarina_end } }, + /* PLAYER_CSMODE_18 */ { PLAYER_CSTYPE_ANIM_16, { &gPlayerAnim_link_normal_hang_up_down } }, + /* PLAYER_CSMODE_19 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_16 } }, + /* PLAYER_CSMODE_20 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_1 } }, + /* PLAYER_CSMODE_21 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_clink_demo_mimawasi } }, + /* PLAYER_CSMODE_22 */ { PLAYER_CSTYPE_ANIM_6, { &gPlayerAnim_om_get_mae } }, + /* PLAYER_CSMODE_23 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_look_hand } }, + /* PLAYER_CSMODE_24 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_normal_wait_typeB_20f } }, + /* PLAYER_CSMODE_25 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_17 } }, + /* PLAYER_CSMODE_26 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_37 } }, + /* PLAYER_CSMODE_27 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_zeldamiru } }, + /* PLAYER_CSMODE_28 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_kenmiru1 } }, + /* PLAYER_CSMODE_29 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_kenmiru2 } }, + /* PLAYER_CSMODE_30 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_kenmiru2_modori } }, + /* PLAYER_CSMODE_31 */ { PLAYER_CSTYPE_ANIM_6, { &gameplay_keep_Linkanim_00D310 } }, + /* PLAYER_CSMODE_32 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_22 } }, + /* PLAYER_CSMODE_33 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_demo_rakka } }, + /* PLAYER_CSMODE_34 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_demo_pikupiku } }, + /* PLAYER_CSMODE_35 */ { PLAYER_CSTYPE_ANIM_3, { &gameplay_keep_Linkanim_00D2B8 } }, + /* PLAYER_CSMODE_36 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_25 } }, + /* PLAYER_CSMODE_37 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_27 } }, + /* PLAYER_CSMODE_38 */ { PLAYER_CSTYPE_ANIM_6, { &gameplay_keep_Linkanim_00D278 } }, + /* PLAYER_CSMODE_39 */ { PLAYER_CSTYPE_ANIM_6, { &gameplay_keep_Linkanim_00D288 } }, + /* PLAYER_CSMODE_40 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_rakuba } }, + /* PLAYER_CSMODE_41 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_bajyo_furikaeru } }, + /* PLAYER_CSMODE_42 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_okiagaru } }, + /* PLAYER_CSMODE_43 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_okiagaru_tatu } }, + /* PLAYER_CSMODE_44 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_bajyo_walk } }, + /* PLAYER_CSMODE_45 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_rakka } }, + /* PLAYER_CSMODE_46 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_sirimochi } }, + /* PLAYER_CSMODE_47 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_spotlight } }, + /* PLAYER_CSMODE_48 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_hensin } }, + /* PLAYER_CSMODE_49 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_dl_jibunmiru } }, + /* PLAYER_CSMODE_50 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_vs_yousei } }, + /* PLAYER_CSMODE_51 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_urusai } }, + /* PLAYER_CSMODE_52 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_53 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_lost_horse } }, + /* PLAYER_CSMODE_54 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_55 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_lost_horse2 } }, + /* PLAYER_CSMODE_56 */ { PLAYER_CSTYPE_ANIM_14, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_57 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_tobikakaru } }, + /* PLAYER_CSMODE_58 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_5 } }, + /* PLAYER_CSMODE_59 */ { PLAYER_CSTYPE_ANIM_5, { &gameplay_keep_Linkanim_00D0A0 } }, + /* PLAYER_CSMODE_60 */ { PLAYER_CSTYPE_ANIM_2, { &gPlayerAnim_cl_furafura } }, + /* PLAYER_CSMODE_61 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_cl_nigeru } }, + /* PLAYER_CSMODE_62 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_ononoki } }, + /* PLAYER_CSMODE_63 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_gaku } }, + /* PLAYER_CSMODE_64 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_fuwafuwa } }, + /* PLAYER_CSMODE_65 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_fuwafuwa_modori } }, + /* PLAYER_CSMODE_66 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_elf_tobidasi } }, + /* PLAYER_CSMODE_67 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_3 } }, + /* PLAYER_CSMODE_68 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_29 } }, + /* PLAYER_CSMODE_69 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_31 } }, + /* PLAYER_CSMODE_70 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_cl_tewofuru } }, + /* PLAYER_CSMODE_71 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_jibun_miru } }, + /* PLAYER_CSMODE_72 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_hoo } }, + /* PLAYER_CSMODE_73 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_yareyare } }, + /* PLAYER_CSMODE_74 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_yes } }, + /* PLAYER_CSMODE_75 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_no } }, + /* PLAYER_CSMODE_76 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_al_unun } }, + /* PLAYER_CSMODE_77 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_dl_yusaburu } }, + /* PLAYER_CSMODE_78 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_dl_kokeru } }, + /* PLAYER_CSMODE_79 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_powerup } }, + /* PLAYER_CSMODE_80 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_alink_rakkatyu } }, + /* PLAYER_CSMODE_81 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_kyoro } }, + /* PLAYER_CSMODE_82 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_alink_yurayura } }, + /* PLAYER_CSMODE_83 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_somukeru } }, + /* PLAYER_CSMODE_84 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_alink_fukitobu } }, + /* PLAYER_CSMODE_85 */ { PLAYER_CSTYPE_ANIM_3, { &gameplay_keep_Linkanim_00CFC8 } }, + /* PLAYER_CSMODE_86 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_alink_tereru } }, + /* PLAYER_CSMODE_87 */ { PLAYER_CSTYPE_ANIM_5, { &gameplay_keep_Linkanim_00D1D0 } }, + /* PLAYER_CSMODE_88 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_kaitenmiss } }, + /* PLAYER_CSMODE_89 */ { PLAYER_CSTYPE_ANIM_4, { &gameplay_keep_Linkanim_00CFC0 } }, + /* PLAYER_CSMODE_90 */ { PLAYER_CSTYPE_ANIM_4, { &gameplay_keep_Linkanim_00CFB8 } }, + /* PLAYER_CSMODE_91 */ { PLAYER_CSTYPE_ANIM_4, { &gameplay_keep_Linkanim_00D050 } }, + /* PLAYER_CSMODE_92 */ { PLAYER_CSTYPE_ANIM_4, { &gameplay_keep_Linkanim_00D048 } }, + /* PLAYER_CSMODE_93 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_42 } }, + /* PLAYER_CSMODE_94 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_ozigi } }, + /* PLAYER_CSMODE_95 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_ozigi_modori } }, + /* PLAYER_CSMODE_96 */ { PLAYER_CSTYPE_ANIM_9, { &gPlayerAnim_link_normal_back_downA } }, + /* PLAYER_CSMODE_97 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_35 } }, + /* PLAYER_CSMODE_98 */ { PLAYER_CSTYPE_ANIM_15, { &gPlayerAnim_cl_maskoff } }, + /* PLAYER_CSMODE_99 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_cl_kubisime } }, + /* PLAYER_CSMODE_100 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_alink_ee } }, + /* PLAYER_CSMODE_101 */ { PLAYER_CSTYPE_ANIM_3, { &gameplay_keep_Linkanim_00CFF0 } }, + /* PLAYER_CSMODE_102 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_40 } }, + /* PLAYER_CSMODE_103 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_45 } }, + /* PLAYER_CSMODE_104 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_dakisime } }, + /* PLAYER_CSMODE_105 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_kf_omen } }, + /* PLAYER_CSMODE_106 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_kf_dakiau } }, + /* PLAYER_CSMODE_107 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_kf_hanare } }, + /* PLAYER_CSMODE_108 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_kf_miseau } }, + /* PLAYER_CSMODE_109 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_kf_awase } }, + /* PLAYER_CSMODE_110 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_kf_tetunagu_loop } }, + /* PLAYER_CSMODE_111 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_keirei } }, + /* PLAYER_CSMODE_112 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_umanoru } }, + /* PLAYER_CSMODE_113 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_wakare } }, + /* PLAYER_CSMODE_114 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_alink_dance_loop } }, + /* PLAYER_CSMODE_115 */ { PLAYER_CSTYPE_ANIM_2, { &gPlayerAnim_link_demo_goma_furimuki } }, + /* PLAYER_CSMODE_116 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_link_uma_anim_fastrun } }, + /* PLAYER_CSMODE_117 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_cl_umamiage } }, + /* PLAYER_CSMODE_118 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_demo_suwari1 } }, + /* PLAYER_CSMODE_119 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_demo_suwari2 } }, + /* PLAYER_CSMODE_120 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_demo_suwari3 } }, + /* PLAYER_CSMODE_121 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_7 } }, + /* PLAYER_CSMODE_122 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_123 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_9 } }, + /* PLAYER_CSMODE_124 */ { PLAYER_CSTYPE_ANIM_7, { &gPlayerAnim_clink_demo_get1 } }, + /* PLAYER_CSMODE_125 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_clink_demo_get2 } }, + /* PLAYER_CSMODE_126 */ { PLAYER_CSTYPE_ANIM_5, { &gPlayerAnim_clink_demo_get3 } }, + /* PLAYER_CSMODE_127 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_gurad } }, + /* PLAYER_CSMODE_128 */ { PLAYER_CSTYPE_ANIM_4, { &gPlayerAnim_link_demo_sita_wait } }, + /* PLAYER_CSMODE_129 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_1kyoro } }, + /* PLAYER_CSMODE_130 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_2kyoro } }, + /* PLAYER_CSMODE_131 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_sagaru } }, + /* PLAYER_CSMODE_132 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_bouzen } }, + /* PLAYER_CSMODE_133 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_kamaeru } }, + /* PLAYER_CSMODE_134 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_hajikareru } }, + /* PLAYER_CSMODE_135 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_ken_miru } }, + /* PLAYER_CSMODE_136 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_L_mukinaoru } }, + /* PLAYER_CSMODE_137 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_demo_return_to_past } }, + /* PLAYER_CSMODE_138 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_last_hit_motion1 } }, + /* PLAYER_CSMODE_139 */ { PLAYER_CSTYPE_ANIM_3, { &gPlayerAnim_link_last_hit_motion2 } }, +}; + +PlayerCsModeEntry sPlayerCsModeUpdateFuncs[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_NONE */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_1 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_0 } }, + /* PLAYER_CSMODE_2 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_11 } }, + /* PLAYER_CSMODE_3 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_13 } }, + /* PLAYER_CSMODE_4 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_5 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_48 } }, + /* PLAYER_CSMODE_END */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_End } }, + /* PLAYER_CSMODE_WAIT */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_2 } }, + /* PLAYER_CSMODE_8 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA70 } }, + /* PLAYER_CSMODE_9 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_6 } }, + /* PLAYER_CSMODE_10 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_15 } }, + /* PLAYER_CSMODE_11 */ { PLAYER_CSTYPE_ANIM_18, { D_8085D9E0 } }, + /* PLAYER_CSMODE_12 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_13 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_14 */ { PLAYER_CSTYPE_NONE, { NULL } }, + /* PLAYER_CSMODE_15 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_16 */ { PLAYER_CSTYPE_ANIM_17, { &gPlayerAnim_link_normal_okarina_swing } }, + /* PLAYER_CSMODE_17 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_18 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_19 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_39 } }, + /* PLAYER_CSMODE_20 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_2 } }, + /* PLAYER_CSMODE_21 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_clink_demo_mimawasi_wait } }, + /* PLAYER_CSMODE_22 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_19 } }, + /* PLAYER_CSMODE_23 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_demo_look_hand_wait } }, + /* PLAYER_CSMODE_24 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_25 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_26 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_38 } }, + /* PLAYER_CSMODE_27 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_demo_zeldamiru_wait } }, + /* PLAYER_CSMODE_28 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_demo_kenmiru1_wait } }, + /* PLAYER_CSMODE_29 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_demo_kenmiru2_wait } }, + /* PLAYER_CSMODE_30 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_demo_link_nwait } }, + /* PLAYER_CSMODE_31 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00D318 } }, + /* PLAYER_CSMODE_32 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_23 } }, + /* PLAYER_CSMODE_33 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_TranslateReverse } }, + /* PLAYER_CSMODE_34 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_35 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00D2C0 } }, + /* PLAYER_CSMODE_36 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_26 } }, + /* PLAYER_CSMODE_37 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_28 } }, + /* PLAYER_CSMODE_38 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00D280 } }, + /* PLAYER_CSMODE_39 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00D290 } }, + /* PLAYER_CSMODE_40 */ { PLAYER_CSTYPE_ANIM_18, { D_8085D9F0 } }, + /* PLAYER_CSMODE_41 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_42 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA00 } }, + /* PLAYER_CSMODE_43 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_okiagaru_wait } }, + /* PLAYER_CSMODE_44 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_32 } }, + /* PLAYER_CSMODE_45 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA2C } }, + /* PLAYER_CSMODE_46 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_sirimochi_wait } }, + /* PLAYER_CSMODE_47 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_spotlight_wait } }, + /* PLAYER_CSMODE_48 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_al_hensin_loop } }, + /* PLAYER_CSMODE_49 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_dl_jibunmiru_wait } }, + /* PLAYER_CSMODE_50 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA50 } }, + /* PLAYER_CSMODE_51 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_52 */ { PLAYER_CSTYPE_ANIM_18, { D_8085D9FC } }, + /* PLAYER_CSMODE_53 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_54 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_32 } }, + /* PLAYER_CSMODE_55 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA1C } }, + /* PLAYER_CSMODE_56 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_57 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA0C } }, + /* PLAYER_CSMODE_58 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_8 } }, + /* PLAYER_CSMODE_59 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_60 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA28 } }, + /* PLAYER_CSMODE_61 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_32 } }, + /* PLAYER_CSMODE_62 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_63 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_64 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_al_fuwafuwa_loop } }, + /* PLAYER_CSMODE_65 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_33 } }, + /* PLAYER_CSMODE_66 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_67 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_4 } }, + /* PLAYER_CSMODE_68 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_30 } }, + /* PLAYER_CSMODE_69 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_70 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_71 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_33 } }, + /* PLAYER_CSMODE_72 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_73 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_74 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_75 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_76 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_77 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_78 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA78 } }, + /* PLAYER_CSMODE_79 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_alink_powerup_loop } }, + /* PLAYER_CSMODE_80 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_32 } }, + /* PLAYER_CSMODE_81 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_alink_kyoro_loop } }, + /* PLAYER_CSMODE_82 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_83 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_alink_somukeru_loop } }, + /* PLAYER_CSMODE_84 */ { PLAYER_CSTYPE_ANIM_18, { D_8085DA80 } }, + /* PLAYER_CSMODE_85 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00CFD0 } }, + /* PLAYER_CSMODE_86 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_87 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_88 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_89 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_90 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_91 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_92 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_93 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_43 } }, + /* PLAYER_CSMODE_94 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_alink_ozigi_loop } }, + /* PLAYER_CSMODE_95 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_96 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_34 } }, + /* PLAYER_CSMODE_97 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_36 } }, + /* PLAYER_CSMODE_98 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_46 } }, + /* PLAYER_CSMODE_99 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_100 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_alink_ee_loop } }, + /* PLAYER_CSMODE_101 */ { PLAYER_CSTYPE_ANIM_12, { &gameplay_keep_Linkanim_00CFF8 } }, + /* PLAYER_CSMODE_102 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_41 } }, + /* PLAYER_CSMODE_103 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_104 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_cl_dakisime_loop } }, + /* PLAYER_CSMODE_105 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_kf_omen_loop } }, + /* PLAYER_CSMODE_106 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_kf_dakiau_loop } }, + /* PLAYER_CSMODE_107 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_kf_hanare_loop } }, + /* PLAYER_CSMODE_108 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_109 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_110 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_111 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_kei_wait } }, + /* PLAYER_CSMODE_112 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_cl_umanoru_loop } }, + /* PLAYER_CSMODE_113 */ { PLAYER_CSTYPE_ANIM_13, { &gPlayerAnim_cl_wakare_loop } }, + /* PLAYER_CSMODE_114 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_115 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_44 } }, + /* PLAYER_CSMODE_116 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_117 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_32 } }, + /* PLAYER_CSMODE_118 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_119 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_120 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_121 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_8 } }, + /* PLAYER_CSMODE_122 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_12 } }, + /* PLAYER_CSMODE_123 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_10 } }, + /* PLAYER_CSMODE_125 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_124 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_126 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_127 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_link_demo_gurad_wait } }, + /* PLAYER_CSMODE_128 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_129 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_L_kw } }, + /* PLAYER_CSMODE_130 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_131 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_132 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_133 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_134 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_18 } }, + /* PLAYER_CSMODE_135 */ { PLAYER_CSTYPE_ANIM_11, { NULL } }, + /* PLAYER_CSMODE_136 */ { PLAYER_CSTYPE_ANIM_12, { &gPlayerAnim_L_kennasi_w } }, + /* PLAYER_CSMODE_137 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_20 } }, + /* PLAYER_CSMODE_138 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_21 } }, + /* PLAYER_CSMODE_139 */ { PLAYER_CSTYPE_ACTION, { Player_CsAction_21 } }, +}; + +void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80859248(this); if (func_801242B4(this)) { @@ -19121,13 +19418,13 @@ void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_1(PlayState* play, Player* this, CsCmdActorCue* cue) { if (this->stateFlags1 & PLAYER_STATE1_8000000) { func_8085929C(play, this, 0); } else { PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]; - if ((this->unk_396 == 6) || (this->unk_396 == 0x2E)) { + if ((this->cueId == PLAYER_CUEID_6) || (this->cueId == PLAYER_CUEID_46)) { Player_AnimationPlayOnce(play, this, anim); } else { func_8082E784(this); @@ -19138,7 +19435,7 @@ void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_2(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_80847880(play, this)) { return; } @@ -19156,7 +19453,7 @@ void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_3(PlayState* play, Player* this, CsCmdActorCue* cue) { if (this->actor.id == ACTOR_EN_TEST3) { func_80838830(this, OBJECT_GI_MSSA); this->stateFlags1 |= PLAYER_STATE1_400; @@ -19166,7 +19463,7 @@ void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2) { (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA : &gPlayerAnim_link_demo_get_itemA); } -void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_4(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; @@ -19175,7 +19472,7 @@ void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_5(PlayState* play, Player* this, CsCmdActorCue* cue) { f32 linearVelocity; s16 yaw; @@ -19202,7 +19499,7 @@ void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) { f32 sp24; if (R_PLAY_FILL_SCREEN_ON > 0) { @@ -19231,22 +19528,22 @@ void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_7(PlayState* play, Player* this, CsCmdActorCue* cue) { this->linearVelocity = 2.5f; func_80835BF8(&this->actor.world.pos, this->actor.shape.rot.y, 180.0f, &this->unk_3A0); } -void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_8(PlayState* play, Player* this, CsCmdActorCue* cue) { f32 sp1C = 2.5f; func_808411D4(play, this, &sp1C, 0xA); } -void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_9(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8083B23C(this, play); } -void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_10(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80859248(this); if (this->unk_AE8 != 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -19259,49 +19556,48 @@ void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859AD0(PlayState* play, Player* this, UNK_PTR arg2) { - func_80840F90(play, this, arg2, 0.0f, 0, 0); +void Player_CsAction_11(PlayState* play, Player* this, CsCmdActorCue* cue) { + func_80840F90(play, this, cue, 0.0f, 0, 0); } -void func_80859AF8(PlayState* play, Player* this, UNK_PTR arg2) { +void Player_CsAction_12(PlayState* play, Player* this, CsCmdActorCue* cue) { this->actor.shape.face = 0xF; - func_80840F90(play, this, arg2, 0.0f, 0, 0); + func_80840F90(play, this, cue, 0.0f, 0, 0); } -void func_80859B28(PlayState* play, Player* this, UNK_PTR arg2) { - func_80840F90(play, this, arg2, 0.0f, 0, 1); +void Player_CsAction_13(PlayState* play, Player* this, CsCmdActorCue* cue) { + func_80840F90(play, this, cue, 0.0f, 0, 1); } -void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_14(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80858CC8(play, this, &gPlayerAnim_link_normal_okarina_start); this->itemAction = PLAYER_IA_OCARINA; Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); } -void Player_Cutscene_Translate(PlayState* play, Player* this, CsCmdActorCue* playerAction) { - f32 startX = playerAction->startPos.x; - f32 startY = playerAction->startPos.y; - f32 startZ = playerAction->startPos.z; - f32 diffX = playerAction->endPos.x - startX; - f32 diffY = playerAction->endPos.y - startY; - f32 diffZ = playerAction->endPos.z - startZ; - f32 progress = (((f32)(play->csCtx.curFrame - playerAction->startFrame)) / - ((f32)(playerAction->endFrame - playerAction->startFrame))); +void Player_Cutscene_Translate(PlayState* play, Player* this, CsCmdActorCue* cue) { + f32 startX = cue->startPos.x; + f32 startY = cue->startPos.y; + f32 startZ = cue->startPos.z; + f32 diffX = cue->endPos.x - startX; + f32 diffY = cue->endPos.y - startY; + f32 diffZ = cue->endPos.z - startZ; + f32 progress = (((f32)(play->csCtx.curFrame - cue->startFrame)) / ((f32)(cue->endFrame - cue->startFrame))); this->actor.world.pos.x = (diffX * progress) + startX; this->actor.world.pos.y = (diffY * progress) + startY; this->actor.world.pos.z = (diffZ * progress) + startZ; } -void func_80859C60(PlayState* play, Player* this, void* arg2) { - if (arg2 != NULL) { - Player_Cutscene_Translate(play, this, arg2); +void Player_CsAction_15(PlayState* play, Player* this, CsCmdActorCue* cue) { + if (cue != NULL) { + Player_Cutscene_Translate(play, this, cue); } PlayerAnimation_Update(play, &this->skelAnime); } -void func_80859CA0(PlayState* play, Player* this, s32 arg2) { +void Player_CsAction_16(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); Player_StopHorizontalMovement(this); } @@ -19310,301 +19606,15 @@ void func_80859CE0(PlayState* play, Player* this, s32 arg2) { this->actor.draw = Player_Draw; } -void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_17(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80841358(play, this, false); func_8082DB90(play, this, &gPlayerAnim_link_demo_return_to_past); } -void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_18(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); } -struct_8085DA94 D_8085DA94[PLAYER_CSMODE_MAX] = { - /* PLAYER_CSMODE_0 */ { 0, { NULL } }, - /* PLAYER_CSMODE_1 */ { -1, { func_808594D0 } }, - /* PLAYER_CSMODE_2 */ { 0, { NULL } }, - /* PLAYER_CSMODE_3 */ { 0, { NULL } }, - /* PLAYER_CSMODE_4 */ { 3, { &gPlayerAnim_link_demo_bikkuri } }, - /* PLAYER_CSMODE_5 */ { 0, { NULL } }, - /* PLAYER_CSMODE_END */ { 0, { NULL } }, - /* PLAYER_CSMODE_WAIT */ { -1, { func_808594D0 } }, - /* PLAYER_CSMODE_8 */ { 2, { &gPlayerAnim_link_demo_furimuki } }, - /* PLAYER_CSMODE_9 */ { -1, { func_8085978C } }, - /* PLAYER_CSMODE_10 */ { 3, { &gPlayerAnim_link_demo_warp } }, - /* PLAYER_CSMODE_11 */ { 5, { &gPlayerAnim_clink_demo_standup } }, - /* PLAYER_CSMODE_12 */ { 7, { &gPlayerAnim_clink_demo_standup_wait } }, - /* PLAYER_CSMODE_13 */ { 2, { &gPlayerAnim_link_demo_baru_op3 } }, - /* PLAYER_CSMODE_14 */ { 0, { NULL } }, - /* PLAYER_CSMODE_15 */ { 3, { &gPlayerAnim_link_demo_jibunmiru } }, - /* PLAYER_CSMODE_16 */ { -1, { func_80859B54 } }, - /* PLAYER_CSMODE_17 */ { 2, { &gPlayerAnim_link_normal_okarina_end } }, - /* PLAYER_CSMODE_18 */ { 16, { &gPlayerAnim_link_normal_hang_up_down } }, - /* PLAYER_CSMODE_19 */ { -1, { func_80859CA0 } }, - /* PLAYER_CSMODE_20 */ { -1, { func_808594D0 } }, - /* PLAYER_CSMODE_21 */ { 3, { &gPlayerAnim_clink_demo_mimawasi } }, - /* PLAYER_CSMODE_22 */ { 6, { &gPlayerAnim_om_get_mae } }, - /* PLAYER_CSMODE_23 */ { 3, { &gPlayerAnim_link_demo_look_hand } }, - /* PLAYER_CSMODE_24 */ { 3, { &gPlayerAnim_link_normal_wait_typeB_20f } }, - /* PLAYER_CSMODE_25 */ { -1, { func_80859CFC } }, - /* PLAYER_CSMODE_26 */ { -1, { func_8085A66C } }, - /* PLAYER_CSMODE_27 */ { 3, { &gPlayerAnim_link_demo_zeldamiru } }, - /* PLAYER_CSMODE_28 */ { 3, { &gPlayerAnim_link_demo_kenmiru1 } }, - /* PLAYER_CSMODE_29 */ { 3, { &gPlayerAnim_link_demo_kenmiru2 } }, - /* PLAYER_CSMODE_30 */ { 3, { &gPlayerAnim_link_demo_kenmiru2_modori } }, - /* PLAYER_CSMODE_31 */ { 6, { &gameplay_keep_Linkanim_00D310 } }, - /* PLAYER_CSMODE_32 */ { -1, { func_80859FCC } }, - /* PLAYER_CSMODE_33 */ { 3, { &gPlayerAnim_demo_rakka } }, - /* PLAYER_CSMODE_34 */ { 4, { &gPlayerAnim_demo_pikupiku } }, - /* PLAYER_CSMODE_35 */ { 3, { &gameplay_keep_Linkanim_00D2B8 } }, - /* PLAYER_CSMODE_36 */ { -1, { func_8085A120 } }, - /* PLAYER_CSMODE_37 */ { -1, { func_8085A19C } }, - /* PLAYER_CSMODE_38 */ { 6, { &gameplay_keep_Linkanim_00D278 } }, - /* PLAYER_CSMODE_39 */ { 6, { &gameplay_keep_Linkanim_00D288 } }, - /* PLAYER_CSMODE_40 */ { 5, { &gPlayerAnim_rakuba } }, - /* PLAYER_CSMODE_41 */ { 5, { &gPlayerAnim_bajyo_furikaeru } }, - /* PLAYER_CSMODE_42 */ { 5, { &gPlayerAnim_okiagaru } }, - /* PLAYER_CSMODE_43 */ { 5, { &gPlayerAnim_okiagaru_tatu } }, - /* PLAYER_CSMODE_44 */ { 7, { &gPlayerAnim_bajyo_walk } }, - /* PLAYER_CSMODE_45 */ { 5, { &gPlayerAnim_rakka } }, - /* PLAYER_CSMODE_46 */ { 5, { &gPlayerAnim_sirimochi } }, - /* PLAYER_CSMODE_47 */ { 5, { &gPlayerAnim_spotlight } }, - /* PLAYER_CSMODE_48 */ { 3, { &gPlayerAnim_al_hensin } }, - /* PLAYER_CSMODE_49 */ { 5, { &gPlayerAnim_dl_jibunmiru } }, - /* PLAYER_CSMODE_50 */ { 5, { &gPlayerAnim_vs_yousei } }, - /* PLAYER_CSMODE_51 */ { 5, { &gPlayerAnim_urusai } }, - /* PLAYER_CSMODE_52 */ { 5, { &gPlayerAnim_okarinatori } }, - /* PLAYER_CSMODE_53 */ { 5, { &gPlayerAnim_lost_horse } }, - /* PLAYER_CSMODE_54 */ { 4, { &gPlayerAnim_lost_horse_wait } }, - /* PLAYER_CSMODE_55 */ { 5, { &gPlayerAnim_lost_horse2 } }, - /* PLAYER_CSMODE_56 */ { 14, { &gPlayerAnim_okarinatori } }, - /* PLAYER_CSMODE_57 */ { 5, { &gPlayerAnim_cl_tobikakaru } }, - /* PLAYER_CSMODE_58 */ { -1, { func_8085978C } }, - /* PLAYER_CSMODE_59 */ { 5, { &gameplay_keep_Linkanim_00D0A0 } }, - /* PLAYER_CSMODE_60 */ { 2, { &gPlayerAnim_cl_furafura } }, - /* PLAYER_CSMODE_61 */ { 7, { &gPlayerAnim_cl_nigeru } }, - /* PLAYER_CSMODE_62 */ { 5, { &gPlayerAnim_cl_ononoki } }, - /* PLAYER_CSMODE_63 */ { 3, { &gPlayerAnim_al_gaku } }, - /* PLAYER_CSMODE_64 */ { 3, { &gPlayerAnim_al_fuwafuwa } }, - /* PLAYER_CSMODE_65 */ { 3, { &gPlayerAnim_al_fuwafuwa_modori } }, - /* PLAYER_CSMODE_66 */ { 3, { &gPlayerAnim_al_elf_tobidasi } }, - /* PLAYER_CSMODE_67 */ { -1, { func_8085968C } }, - /* PLAYER_CSMODE_68 */ { -1, { func_8085A24C } }, - /* PLAYER_CSMODE_69 */ { -1, { func_8085A330 } }, - /* PLAYER_CSMODE_70 */ { 7, { &gPlayerAnim_cl_tewofuru } }, - /* PLAYER_CSMODE_71 */ { 5, { &gPlayerAnim_cl_jibun_miru } }, - /* PLAYER_CSMODE_72 */ { 5, { &gPlayerAnim_cl_hoo } }, - /* PLAYER_CSMODE_73 */ { 3, { &gPlayerAnim_al_yareyare } }, - /* PLAYER_CSMODE_74 */ { 3, { &gPlayerAnim_al_yes } }, - /* PLAYER_CSMODE_75 */ { 3, { &gPlayerAnim_al_no } }, - /* PLAYER_CSMODE_76 */ { 3, { &gPlayerAnim_al_unun } }, - /* PLAYER_CSMODE_77 */ { 7, { &gPlayerAnim_dl_yusaburu } }, - /* PLAYER_CSMODE_78 */ { 5, { &gPlayerAnim_dl_kokeru } }, - /* PLAYER_CSMODE_79 */ { 3, { &gPlayerAnim_alink_powerup } }, - /* PLAYER_CSMODE_80 */ { 4, { &gPlayerAnim_alink_rakkatyu } }, - /* PLAYER_CSMODE_81 */ { 3, { &gPlayerAnim_alink_kyoro } }, - /* PLAYER_CSMODE_82 */ { 4, { &gPlayerAnim_alink_yurayura } }, - /* PLAYER_CSMODE_83 */ { 3, { &gPlayerAnim_alink_somukeru } }, - /* PLAYER_CSMODE_84 */ { 5, { &gPlayerAnim_alink_fukitobu } }, - /* PLAYER_CSMODE_85 */ { 3, { &gameplay_keep_Linkanim_00CFC8 } }, - /* PLAYER_CSMODE_86 */ { 4, { &gPlayerAnim_alink_tereru } }, - /* PLAYER_CSMODE_87 */ { 5, { &gameplay_keep_Linkanim_00D1D0 } }, - /* PLAYER_CSMODE_88 */ { 3, { &gPlayerAnim_alink_kaitenmiss } }, - /* PLAYER_CSMODE_89 */ { 4, { &gameplay_keep_Linkanim_00CFC0 } }, - /* PLAYER_CSMODE_90 */ { 4, { &gameplay_keep_Linkanim_00CFB8 } }, - /* PLAYER_CSMODE_91 */ { 4, { &gameplay_keep_Linkanim_00D050 } }, - /* PLAYER_CSMODE_92 */ { 4, { &gameplay_keep_Linkanim_00D048 } }, - /* PLAYER_CSMODE_93 */ { -1, { func_8085A8C4 } }, - /* PLAYER_CSMODE_94 */ { 3, { &gPlayerAnim_alink_ozigi } }, - /* PLAYER_CSMODE_95 */ { 3, { &gPlayerAnim_alink_ozigi_modori } }, - /* PLAYER_CSMODE_96 */ { 9, { &gPlayerAnim_link_normal_back_downA } }, - /* PLAYER_CSMODE_97 */ { -1, { func_8085A530 } }, - /* PLAYER_CSMODE_98 */ { 15, { &gPlayerAnim_cl_maskoff } }, - /* PLAYER_CSMODE_99 */ { 7, { &gPlayerAnim_cl_kubisime } }, - /* PLAYER_CSMODE_100 */ { 3, { &gPlayerAnim_alink_ee } }, - /* PLAYER_CSMODE_101 */ { 3, { &gameplay_keep_Linkanim_00CFF0 } }, - /* PLAYER_CSMODE_102 */ { -1, { func_8085A768 } }, - /* PLAYER_CSMODE_103 */ { -1, { func_8085AA60 } }, - /* PLAYER_CSMODE_104 */ { 5, { &gPlayerAnim_cl_dakisime } }, - /* PLAYER_CSMODE_105 */ { 5, { &gPlayerAnim_kf_omen } }, - /* PLAYER_CSMODE_106 */ { 5, { &gPlayerAnim_kf_dakiau } }, - /* PLAYER_CSMODE_107 */ { 5, { &gPlayerAnim_kf_hanare } }, - /* PLAYER_CSMODE_108 */ { 5, { &gPlayerAnim_kf_miseau } }, - /* PLAYER_CSMODE_109 */ { 5, { &gPlayerAnim_kf_awase } }, - /* PLAYER_CSMODE_110 */ { 7, { &gPlayerAnim_kf_tetunagu_loop } }, - /* PLAYER_CSMODE_111 */ { 3, { &gPlayerAnim_link_keirei } }, - /* PLAYER_CSMODE_112 */ { 5, { &gPlayerAnim_cl_umanoru } }, - /* PLAYER_CSMODE_113 */ { 5, { &gPlayerAnim_cl_wakare } }, - /* PLAYER_CSMODE_114 */ { 4, { &gPlayerAnim_alink_dance_loop } }, - /* PLAYER_CSMODE_115 */ { 2, { &gPlayerAnim_link_demo_goma_furimuki } }, - /* PLAYER_CSMODE_116 */ { 7, { &gPlayerAnim_link_uma_anim_fastrun } }, - /* PLAYER_CSMODE_117 */ { 5, { &gPlayerAnim_cl_umamiage } }, - /* PLAYER_CSMODE_118 */ { 7, { &gPlayerAnim_demo_suwari1 } }, - /* PLAYER_CSMODE_119 */ { 7, { &gPlayerAnim_demo_suwari2 } }, - /* PLAYER_CSMODE_120 */ { 7, { &gPlayerAnim_demo_suwari3 } }, - /* PLAYER_CSMODE_121 */ { -1, { func_80859990 } }, - /* PLAYER_CSMODE_122 */ { 0, { NULL } }, - /* PLAYER_CSMODE_123 */ { -1, { func_80859A10 } }, - /* PLAYER_CSMODE_124 */ { 7, { &gPlayerAnim_clink_demo_get1 } }, - /* PLAYER_CSMODE_125 */ { 5, { &gPlayerAnim_clink_demo_get2 } }, - /* PLAYER_CSMODE_126 */ { 5, { &gPlayerAnim_clink_demo_get3 } }, - /* PLAYER_CSMODE_127 */ { 3, { &gPlayerAnim_link_demo_gurad } }, - /* PLAYER_CSMODE_128 */ { 4, { &gPlayerAnim_link_demo_sita_wait } }, - /* PLAYER_CSMODE_129 */ { 3, { &gPlayerAnim_L_1kyoro } }, - /* PLAYER_CSMODE_130 */ { 3, { &gPlayerAnim_L_2kyoro } }, - /* PLAYER_CSMODE_131 */ { 3, { &gPlayerAnim_L_sagaru } }, - /* PLAYER_CSMODE_132 */ { 3, { &gPlayerAnim_L_bouzen } }, - /* PLAYER_CSMODE_133 */ { 3, { &gPlayerAnim_L_kamaeru } }, - /* PLAYER_CSMODE_134 */ { 3, { &gPlayerAnim_L_hajikareru } }, - /* PLAYER_CSMODE_135 */ { 3, { &gPlayerAnim_L_ken_miru } }, - /* PLAYER_CSMODE_136 */ { 3, { &gPlayerAnim_L_mukinaoru } }, - /* PLAYER_CSMODE_137 */ { 3, { &gPlayerAnim_link_demo_return_to_past } }, - /* PLAYER_CSMODE_138 */ { 3, { &gPlayerAnim_link_last_hit_motion1 } }, - /* PLAYER_CSMODE_139 */ { 3, { &gPlayerAnim_link_last_hit_motion2 } }, -}; - -struct_8085DA94 D_8085DEF4[PLAYER_CSMODE_MAX] = { - /* PLAYER_CSMODE_0 */ { 0, { NULL } }, - /* PLAYER_CSMODE_1 */ { -1, { func_80859414 } }, - /* PLAYER_CSMODE_2 */ { -1, { func_80859AD0 } }, - /* PLAYER_CSMODE_3 */ { -1, { func_80859B28 } }, - /* PLAYER_CSMODE_4 */ { 11, { NULL } }, - /* PLAYER_CSMODE_5 */ { -1, { func_8085ADA0 } }, - /* PLAYER_CSMODE_END */ { -1, { func_8085AACC } }, - /* PLAYER_CSMODE_WAIT */ { -1, { func_808595B8 } }, - /* PLAYER_CSMODE_8 */ { 18, { D_8085DA70 } }, - /* PLAYER_CSMODE_9 */ { -1, { func_80859890 } }, - /* PLAYER_CSMODE_10 */ { -1, { func_80859C60 } }, - /* PLAYER_CSMODE_11 */ { 18, { D_8085D9E0 } }, - /* PLAYER_CSMODE_12 */ { 11, { NULL } }, - /* PLAYER_CSMODE_13 */ { 11, { NULL } }, - /* PLAYER_CSMODE_14 */ { 0, { NULL } }, - /* PLAYER_CSMODE_15 */ { 11, { NULL } }, - /* PLAYER_CSMODE_16 */ { 17, { &gPlayerAnim_link_normal_okarina_swing } }, - /* PLAYER_CSMODE_17 */ { 11, { NULL } }, - /* PLAYER_CSMODE_18 */ { 11, { NULL } }, - /* PLAYER_CSMODE_19 */ { -1, { func_8085A710 } }, - /* PLAYER_CSMODE_20 */ { -1, { func_808595B8 } }, - /* PLAYER_CSMODE_21 */ { 12, { &gPlayerAnim_clink_demo_mimawasi_wait } }, - /* PLAYER_CSMODE_22 */ { -1, { func_80859D70 } }, - /* PLAYER_CSMODE_23 */ { 12, { &gPlayerAnim_link_demo_look_hand_wait } }, - /* PLAYER_CSMODE_24 */ { 11, { NULL } }, - /* PLAYER_CSMODE_25 */ { 11, { NULL } }, - /* PLAYER_CSMODE_26 */ { -1, { func_8085A6C0 } }, - /* PLAYER_CSMODE_27 */ { 12, { &gPlayerAnim_link_demo_zeldamiru_wait } }, - /* PLAYER_CSMODE_28 */ { 12, { &gPlayerAnim_link_demo_kenmiru1_wait } }, - /* PLAYER_CSMODE_29 */ { 12, { &gPlayerAnim_link_demo_kenmiru2_wait } }, - /* PLAYER_CSMODE_30 */ { 12, { &gPlayerAnim_demo_link_nwait } }, - /* PLAYER_CSMODE_31 */ { 12, { &gameplay_keep_Linkanim_00D318 } }, - /* PLAYER_CSMODE_32 */ { -1, { func_80859FF4 } }, - /* PLAYER_CSMODE_33 */ { -1, { Player_Cutscene_TranslateReverse } }, - /* PLAYER_CSMODE_34 */ { 11, { NULL } }, - /* PLAYER_CSMODE_35 */ { 12, { &gameplay_keep_Linkanim_00D2C0 } }, - /* PLAYER_CSMODE_36 */ { -1, { func_8085A144 } }, - /* PLAYER_CSMODE_37 */ { -1, { func_8085A1D4 } }, - /* PLAYER_CSMODE_38 */ { 12, { &gameplay_keep_Linkanim_00D280 } }, - /* PLAYER_CSMODE_39 */ { 12, { &gameplay_keep_Linkanim_00D290 } }, - /* PLAYER_CSMODE_40 */ { 18, { D_8085D9F0 } }, - /* PLAYER_CSMODE_41 */ { 11, { NULL } }, - /* PLAYER_CSMODE_42 */ { 18, { D_8085DA00 } }, - /* PLAYER_CSMODE_43 */ { 13, { &gPlayerAnim_okiagaru_wait } }, - /* PLAYER_CSMODE_44 */ { -1, { func_8085A364 } }, - /* PLAYER_CSMODE_45 */ { 18, { D_8085DA2C } }, - /* PLAYER_CSMODE_46 */ { 12, { &gPlayerAnim_sirimochi_wait } }, - /* PLAYER_CSMODE_47 */ { 12, { &gPlayerAnim_spotlight_wait } }, - /* PLAYER_CSMODE_48 */ { 12, { &gPlayerAnim_al_hensin_loop } }, - /* PLAYER_CSMODE_49 */ { 12, { &gPlayerAnim_dl_jibunmiru_wait } }, - /* PLAYER_CSMODE_50 */ { 18, { D_8085DA50 } }, - /* PLAYER_CSMODE_51 */ { 11, { NULL } }, - /* PLAYER_CSMODE_52 */ { 18, { D_8085D9FC } }, - /* PLAYER_CSMODE_53 */ { 12, { &gPlayerAnim_lost_horse_wait } }, - /* PLAYER_CSMODE_54 */ { -1, { func_8085A364 } }, - /* PLAYER_CSMODE_55 */ { 18, { D_8085DA1C } }, - /* PLAYER_CSMODE_56 */ { 11, { NULL } }, - /* PLAYER_CSMODE_57 */ { 18, { D_8085DA0C } }, - /* PLAYER_CSMODE_58 */ { -1, { func_808599DC } }, - /* PLAYER_CSMODE_59 */ { 11, { NULL } }, - /* PLAYER_CSMODE_60 */ { 18, { D_8085DA28 } }, - /* PLAYER_CSMODE_61 */ { -1, { func_8085A364 } }, - /* PLAYER_CSMODE_62 */ { 11, { NULL } }, - /* PLAYER_CSMODE_63 */ { 11, { NULL } }, - /* PLAYER_CSMODE_64 */ { 12, { &gPlayerAnim_al_fuwafuwa_loop } }, - /* PLAYER_CSMODE_65 */ { -1, { func_8085A40C } }, - /* PLAYER_CSMODE_66 */ { 11, { NULL } }, - /* PLAYER_CSMODE_67 */ { -1, { func_80859708 } }, - /* PLAYER_CSMODE_68 */ { -1, { func_8085A2AC } }, - /* PLAYER_CSMODE_69 */ { 11, { NULL } }, - /* PLAYER_CSMODE_70 */ { 11, { NULL } }, - /* PLAYER_CSMODE_71 */ { -1, { func_8085A40C } }, - /* PLAYER_CSMODE_72 */ { 11, { NULL } }, - /* PLAYER_CSMODE_73 */ { 11, { NULL } }, - /* PLAYER_CSMODE_74 */ { 11, { NULL } }, - /* PLAYER_CSMODE_75 */ { 11, { NULL } }, - /* PLAYER_CSMODE_76 */ { 11, { NULL } }, - /* PLAYER_CSMODE_77 */ { 11, { NULL } }, - /* PLAYER_CSMODE_78 */ { 18, { D_8085DA78 } }, - /* PLAYER_CSMODE_79 */ { 12, { &gPlayerAnim_alink_powerup_loop } }, - /* PLAYER_CSMODE_80 */ { -1, { func_8085A364 } }, - /* PLAYER_CSMODE_81 */ { 12, { &gPlayerAnim_alink_kyoro_loop } }, - /* PLAYER_CSMODE_82 */ { 11, { NULL } }, - /* PLAYER_CSMODE_83 */ { 12, { &gPlayerAnim_alink_somukeru_loop } }, - /* PLAYER_CSMODE_84 */ { 18, { D_8085DA80 } }, - /* PLAYER_CSMODE_85 */ { 12, { &gameplay_keep_Linkanim_00CFD0 } }, - /* PLAYER_CSMODE_86 */ { 11, { NULL } }, - /* PLAYER_CSMODE_87 */ { 11, { NULL } }, - /* PLAYER_CSMODE_88 */ { 11, { NULL } }, - /* PLAYER_CSMODE_89 */ { 11, { NULL } }, - /* PLAYER_CSMODE_90 */ { 11, { NULL } }, - /* PLAYER_CSMODE_91 */ { 11, { NULL } }, - /* PLAYER_CSMODE_92 */ { 11, { NULL } }, - /* PLAYER_CSMODE_93 */ { -1, { func_8085A940 } }, - /* PLAYER_CSMODE_94 */ { 12, { &gPlayerAnim_alink_ozigi_loop } }, - /* PLAYER_CSMODE_95 */ { 11, { NULL } }, - /* PLAYER_CSMODE_96 */ { -1, { func_8085A4A4 } }, - /* PLAYER_CSMODE_97 */ { -1, { func_8085A5DC } }, - /* PLAYER_CSMODE_98 */ { -1, { func_8085AA84 } }, - /* PLAYER_CSMODE_99 */ { 11, { NULL } }, - /* PLAYER_CSMODE_100 */ { 12, { &gPlayerAnim_alink_ee_loop } }, - /* PLAYER_CSMODE_101 */ { 12, { &gameplay_keep_Linkanim_00CFF8 } }, - /* PLAYER_CSMODE_102 */ { -1, { func_8085A7C0 } }, - /* PLAYER_CSMODE_103 */ { 11, { NULL } }, - /* PLAYER_CSMODE_104 */ { 13, { &gPlayerAnim_cl_dakisime_loop } }, - /* PLAYER_CSMODE_105 */ { 13, { &gPlayerAnim_kf_omen_loop } }, - /* PLAYER_CSMODE_106 */ { 13, { &gPlayerAnim_kf_dakiau_loop } }, - /* PLAYER_CSMODE_107 */ { 13, { &gPlayerAnim_kf_hanare_loop } }, - /* PLAYER_CSMODE_108 */ { 11, { NULL } }, - /* PLAYER_CSMODE_109 */ { 11, { NULL } }, - /* PLAYER_CSMODE_110 */ { 11, { NULL } }, - /* PLAYER_CSMODE_111 */ { 12, { &gPlayerAnim_link_kei_wait } }, - /* PLAYER_CSMODE_112 */ { 13, { &gPlayerAnim_cl_umanoru_loop } }, - /* PLAYER_CSMODE_113 */ { 13, { &gPlayerAnim_cl_wakare_loop } }, - /* PLAYER_CSMODE_114 */ { 11, { NULL } }, - /* PLAYER_CSMODE_115 */ { -1, { func_8085AA10 } }, - /* PLAYER_CSMODE_116 */ { 11, { NULL } }, - /* PLAYER_CSMODE_117 */ { -1, { func_8085A364 } }, - /* PLAYER_CSMODE_118 */ { 11, { NULL } }, - /* PLAYER_CSMODE_119 */ { 11, { NULL } }, - /* PLAYER_CSMODE_120 */ { 11, { NULL } }, - /* PLAYER_CSMODE_121 */ { -1, { func_808599DC } }, - /* PLAYER_CSMODE_122 */ { -1, { func_80859AF8 } }, - /* PLAYER_CSMODE_123 */ { -1, { func_80859A44 } }, - /* PLAYER_CSMODE_124 */ { 11, { NULL } }, - /* PLAYER_CSMODE_125 */ { 11, { NULL } }, - /* PLAYER_CSMODE_126 */ { 11, { NULL } }, - /* PLAYER_CSMODE_127 */ { 12, { &gPlayerAnim_link_demo_gurad_wait } }, - /* PLAYER_CSMODE_128 */ { 11, { NULL } }, - /* PLAYER_CSMODE_129 */ { 12, { &gPlayerAnim_L_kw } }, - /* PLAYER_CSMODE_130 */ { 11, { NULL } }, - /* PLAYER_CSMODE_131 */ { 11, { NULL } }, - /* PLAYER_CSMODE_132 */ { 11, { NULL } }, - /* PLAYER_CSMODE_133 */ { 11, { NULL } }, - /* PLAYER_CSMODE_134 */ { -1, { func_80859D44 } }, - /* PLAYER_CSMODE_135 */ { 11, { NULL } }, - /* PLAYER_CSMODE_136 */ { 12, { &gPlayerAnim_L_kennasi_w } }, - /* PLAYER_CSMODE_137 */ { -1, { func_80859EBC } }, - /* PLAYER_CSMODE_138 */ { -1, { func_80859F4C } }, - /* PLAYER_CSMODE_139 */ { -1, { func_80859F4C } }, -}; - PlayerAnimationHeader* D_8085E354[PLAYER_FORM_MAX] = { &gPlayerAnim_L_okarina_get, // PLAYER_FORM_FIERCE_DEITY &gPlayerAnim_L_okarina_get, // PLAYER_FORM_GORON @@ -19624,12 +19634,12 @@ struct_8085E368 D_8085E368[PLAYER_FORM_MAX] = { Color_RGBA8 D_8085E3A4 = { 255, 255, 255, 0 }; Color_RGBA8 D_8085E3A8 = { 0, 128, 128, 0 }; -void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_19(PlayState* play, Player* this, CsCmdActorCue* cue) { struct_8085E368* posInfo; Vec3f effectPos; Vec3f randPos; - func_808591BC(play, this, D_8085E354[this->transformation]); + Player_CsAnim_13(play, this, D_8085E354[this->transformation]); if (this->rightHandType != 0xFF) { this->rightHandType = 0xFF; @@ -19643,9 +19653,9 @@ void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859EBC(PlayState* play, Player* this, s32 arg2) { +void Player_CsAction_20(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - func_8085AACC(play, this, arg2); + Player_CsAction_End(play, this, cue); } else if (this->unk_AE8 == 0) { Item_Give(play, ITEM_SWORD_RAZOR); func_80841358(play, this, false); @@ -19654,7 +19664,7 @@ void func_80859EBC(PlayState* play, Player* this, s32 arg2) { } } -void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_21(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8083FCF0(play, this, 0.0f, 99.0f, this->skelAnime.endFrame - 8.0f); } @@ -19663,13 +19673,13 @@ void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_22(PlayState* play, Player* this, CsCmdActorCue* cue) { if (this->transformation != PLAYER_FORM_DEKU) { gSaveContext.save.playerForm = PLAYER_FORM_DEKU; } } -void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_23(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); if (gSaveContext.save.playerForm != this->transformation) { this->actor.update = func_8012301C; @@ -19677,22 +19687,28 @@ void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg) { - CsCmdActorCue* playerAction = arg; - f32 xEnd = playerAction->endPos.x; - f32 yEnd = playerAction->endPos.y; - f32 zEnd = playerAction->endPos.z; +void Player_CsAction_TranslateReverse(PlayState* play, Player* this, CsCmdActorCue* cue) { + s32 pad; + f32 xEnd; + f32 yEnd; + f32 zEnd; f32 xDiff; f32 yDiff; f32 zDiff; f32 progress; - xDiff = playerAction->startPos.x - xEnd; - yDiff = playerAction->startPos.y - yEnd; - zDiff = playerAction->startPos.z - zEnd; + xEnd = cue->endPos.x; + yEnd = cue->endPos.y; + zEnd = cue->endPos.z; - progress = ((f32)(playerAction->endFrame - play->csCtx.curFrame)) / - ((f32)(playerAction->endFrame - playerAction->startFrame)); + xDiff = cue->startPos.x - xEnd; + yDiff = cue->startPos.y - yEnd; + zDiff = cue->startPos.z - zEnd; + + //! FAKE: + if (1) {} + + progress = ((f32)(cue->endFrame - play->csCtx.curFrame)) / ((f32)(cue->endFrame - cue->startFrame)); this->actor.world.pos.x = (xDiff * progress) + xEnd; this->actor.world.pos.y = (yDiff * progress) + yEnd; @@ -19700,13 +19716,13 @@ void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg) PlayerAnimation_Update(play, &this->skelAnime); } -void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_25(PlayState* play, Player* this, CsCmdActorCue* cue) { if (this->transformation != PLAYER_FORM_FIERCE_DEITY) { gSaveContext.save.playerForm = PLAYER_FORM_FIERCE_DEITY; } } -void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_26(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); if (gSaveContext.save.playerForm != this->transformation) { this->actor.update = func_8012301C; @@ -19714,24 +19730,24 @@ void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_27(PlayState* play, Player* this, CsCmdActorCue* cue) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_demo_rakka); this->unk_AAA = -0x8000; } -void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_28(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); this->actor.gravity = 0.0f; Math_StepToF(&this->actor.velocity.y, -this->actor.terminalVelocity, -((f32)REG(68) / 100.0f)); } -void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_29(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8082DB90(play, this, D_8085D17C[this->transformation]); this->itemAction = PLAYER_IA_OCARINA; Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); } -void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_30(PlayState* play, Player* this, CsCmdActorCue* cue) { if ((PlayerAnimation_Update(play, &this->skelAnime)) && (this->skelAnime.animation == D_8085D17C[this->transformation])) { func_808525C4(play, this); @@ -19742,12 +19758,12 @@ void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_31(PlayState* play, Player* this, CsCmdActorCue* cue) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } -void func_8085A364(PlayState* play, Player* this, void* arg2) { - Player_Cutscene_Translate(play, this, arg2); +void Player_CsAction_32(PlayState* play, Player* this, CsCmdActorCue* cue) { + Player_Cutscene_Translate(play, this, cue); if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082EB18(play, this, &gPlayerAnim_cl_umamiage_loop); } @@ -19761,9 +19777,9 @@ void func_8085A364(PlayState* play, Player* this, void* arg2) { } } -void func_8085A40C(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_33(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - func_80859CA0(play, this, arg2); + Player_CsAction_16(play, this, cue); } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa_modori) { Player_PlayAnimSfx(this, D_8085DA88); } else if (this->skelAnime.animation == &gPlayerAnim_cl_jibun_miru) { @@ -19771,7 +19787,7 @@ void func_8085A40C(PlayState* play, Player* this, void* arg2) { } } -void func_8085A4A4(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_34(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB); @@ -19782,13 +19798,13 @@ void func_8085A4A4(PlayState* play, Player* this, void* arg2) { } } -void func_8085A530(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_35(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_give_other, 1.0f, (play->sceneId == SCENE_ALLEY) ? IREG(56) : 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_give_other), ANIMMODE_ONCE, -8.0f); } -void func_8085A5DC(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_36(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { if (this->unk_AE8++ >= 0x15) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, @@ -19797,37 +19813,37 @@ void func_8085A5DC(PlayState* play, Player* this, void* arg2) { } } -void func_8085A66C(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_37(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_801242B4(this)) { func_8085929C(play, this, 0); } else { - func_80858E40(play, this, &gPlayerAnim_link_demo_kousan); + Player_CsAnim_3(play, this, &gPlayerAnim_link_demo_kousan); } } -void func_8085A6C0(PlayState* play, Player* this, void* anim) { +void Player_CsAction_38(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_801242B4(this)) { func_80859300(play, this, 0); } else { - func_80858FBC(play, this, anim); + Player_CsAnim_11(play, this, cue); } } -void func_8085A710(PlayState* play, Player* this, void* anim) { - func_80858FBC(play, this, anim); +void Player_CsAction_39(PlayState* play, Player* this, CsCmdActorCue* cue) { + Player_CsAnim_11(play, this, cue); if (func_8083D23C(this, play)) { play->csCtx.state = CS_STATE_STOP; CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } } -void func_8085A768(PlayState* play, Player* this, void* arg2) { +void Player_CsAction_40(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80838830(this, OBJECT_GI_RESERVE_C_01); - func_80858E40(play, this, &gPlayerAnim_link_normal_give_other); + Player_CsAnim_3(play, this, &gPlayerAnim_link_normal_give_other); this->stateFlags2 &= ~PLAYER_STATE2_1000000; } -void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_41(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { if (this->unk_AE8 == 0) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) || @@ -19850,7 +19866,7 @@ void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_42(PlayState* play, Player* this, CsCmdActorCue* cue) { if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) { R_PLAY_FILL_SCREEN_ON = 45; R_PLAY_FILL_SCREEN_R = 255; @@ -19861,7 +19877,7 @@ void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_43(PlayState* play, Player* this, CsCmdActorCue* cue) { if (R_PLAY_FILL_SCREEN_ON > 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; if (R_PLAY_FILL_SCREEN_ALPHA > 255) { @@ -19883,23 +19899,23 @@ void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2) { } } -void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_44(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) { CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); } } -void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_45(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80848640(play, this); } -void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_46(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { this->stateFlags2 |= PLAYER_STATE2_1000000; } } -void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2) { +void Player_CsAction_End(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_801242B4(this)) { func_808353DC(play, this); func_8082DC64(play, this); @@ -19910,30 +19926,30 @@ void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2) { } } - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; this->unk_AA5 = PLAYER_UNKAA5_0; } -void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction) { - this->actor.world.pos.x = playerAction->startPos.x; - this->actor.world.pos.y = playerAction->startPos.y; - this->actor.world.pos.z = playerAction->startPos.z; +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue) { + this->actor.world.pos.x = cue->startPos.x; + this->actor.world.pos.y = cue->startPos.y; + this->actor.world.pos.z = cue->startPos.z; - this->currentYaw = this->actor.shape.rot.y = playerAction->rot.y; + this->currentYaw = this->actor.shape.rot.y = cue->rot.y; } -void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* playerAction) { - f32 xDiff = playerAction->startPos.x - (s32)this->actor.world.pos.x; - f32 yDiff = playerAction->startPos.y - (s32)this->actor.world.pos.y; - f32 zDiff = playerAction->startPos.z - (s32)this->actor.world.pos.z; +void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* cue) { + f32 xDiff = cue->startPos.x - (s32)this->actor.world.pos.x; + f32 yDiff = cue->startPos.y - (s32)this->actor.world.pos.y; + f32 zDiff = cue->startPos.z - (s32)this->actor.world.pos.z; f32 dist; s16 temp_v0; - temp_v0 = (s16)playerAction->rot.y - this->actor.shape.rot.y; + temp_v0 = (s16)cue->rot.y - this->actor.shape.rot.y; dist = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff)); if (this->linearVelocity == 0.0f) { if ((dist > 50.0f) || (ABS_ALT(temp_v0) > 0x4000)) { - Player_Cutscene_SetPosAndYawToStart(this, playerAction); + Player_Cutscene_SetPosAndYawToStart(this, cue); } } @@ -19941,11 +19957,11 @@ void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* playerAction) { func_8082E784(this); } -void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, struct_8085DA94* arg3) { - if (arg3->type > 0) { - D_8085D990[arg3->type](play, this, arg3->anim); - } else if (arg3->type < 0) { - arg3->func(play, this, cue); +void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, PlayerCsModeEntry* csEntry) { + if (csEntry->type > PLAYER_CSTYPE_NONE) { + sPlayerCsModeAnimFuncs[csEntry->type](play, this, csEntry->csAnimArg2); + } else if (csEntry->type <= PLAYER_CSTYPE_ACTION) { + csEntry->csActionFunc(play, this, cue); } if ((D_80862B6C & 4) && !(this->skelAnime.moveFlags & ANIM_FLAG_4)) { @@ -19961,49 +19977,50 @@ void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) { } } -void func_8085ADA0(PlayState* play, Player* this, s32 arg2) { - CsCmdActorCue* cue = (this->actor.id == ACTOR_EN_TEST3) - ? play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_506)] - : play->csCtx.playerCue; +void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { + CsCmdActorCue* playerCue = (this->actor.id == ACTOR_EN_TEST3) + ? play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_506)] + : play->csCtx.playerCue; s32 var_a0 = false; s32 pad; s32 csMode; if ((play->csCtx.state == CS_STATE_IDLE) || (play->csCtx.state == CS_STATE_STOP) || (play->csCtx.state == CS_STATE_RUN_UNSTOPPABLE)) { - if ((D_8085D384[this->unk_396] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { + if ((sPlayerCsModes[this->cueId] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { this->unk_AA5 = PLAYER_UNKAA5_5; if (func_80838A90(this, play)) { - this->csMode = PLAYER_CSMODE_0; + this->csMode = PLAYER_CSMODE_NONE; } return; - } else { - var_a0 = true; + } - if (D_8085D384[this->unk_396] != PLAYER_CSMODE_16) { - this->csMode = PLAYER_CSMODE_END; - func_800B7298(play, NULL, PLAYER_CSMODE_END); - this->unk_396 = 0; - Player_StopHorizontalMovement(this); - return; - } + var_a0 = true; + + if (sPlayerCsModes[this->cueId] != PLAYER_CSMODE_16) { + this->csMode = PLAYER_CSMODE_END; + func_800B7298(play, NULL, PLAYER_CSMODE_END); + this->cueId = PLAYER_CUEID_NONE; + Player_StopHorizontalMovement(this); + return; } } - if (!var_a0 && (cue == NULL)) { + if (!var_a0 && (playerCue == NULL)) { this->actor.flags &= ~ACTOR_FLAG_40; return; } - if (!var_a0 && (this->unk_396 != cue->id)) { - csMode = D_8085D384[cue->id]; + if (!var_a0 && (this->cueId != playerCue->id)) { + csMode = sPlayerCsModes[playerCue->id]; - if ((csMode >= PLAYER_CSMODE_0) && (gDisablePlayerCsModeStartPos == 0)) { + // Negative csModes will skip this block + if ((csMode >= PLAYER_CSMODE_NONE) && !gDisablePlayerCsModeStartPos) { if ((csMode == PLAYER_CSMODE_2) || (csMode == PLAYER_CSMODE_3)) { - Player_Cutscene_8085ABA8(this, cue); + Player_Cutscene_8085ABA8(this, playerCue); } else { - Player_Cutscene_SetPosAndYawToStart(this, cue); + Player_Cutscene_SetPosAndYawToStart(this, playerCue); } } @@ -20017,18 +20034,18 @@ void func_8085ADA0(PlayState* play, Player* this, s32 arg2) { func_8082E794(this); func_8085AD5C(play, this, ABS_ALT(csMode)); - func_8085AC9C(play, this, cue, &D_8085DA94[ABS_ALT(csMode)]); + func_8085AC9C(play, this, playerCue, &sPlayerCsModeInitFuncs[ABS_ALT(csMode)]); this->unk_AE8 = 0; this->unk_AE7 = 0; - this->unk_396 = cue->id; + this->cueId = playerCue->id; } - csMode = D_8085D384[this->unk_396]; - func_8085AC9C(play, this, cue, &D_8085DEF4[ABS_ALT(csMode)]); + csMode = sPlayerCsModes[this->cueId]; + func_8085AC9C(play, this, playerCue, &sPlayerCsModeUpdateFuncs[ABS_ALT(csMode)]); - if ((u16)cue->rot.x != 0) { - Math_SmoothStepToS(&this->actor.focus.rot.x, (u16)cue->rot.x, 4, 0x2710, 0); + if ((u16)playerCue->rot.x != 0) { + Math_SmoothStepToS(&this->actor.focus.rot.x, (u16)playerCue->rot.x, 4, 0x2710, 0); func_80832754(this, false); } } @@ -20040,10 +20057,10 @@ void func_8085B08C(Player* this, PlayState* play) { this->prevCsMode = this->csMode; func_8085AD5C(play, this, this->csMode); - func_8085AC9C(play, this, NULL, &D_8085DA94[this->csMode]); + func_8085AC9C(play, this, NULL, &sPlayerCsModeInitFuncs[this->csMode]); } - func_8085AC9C(play, this, NULL, &D_8085DEF4[this->csMode]); + func_8085AC9C(play, this, NULL, &sPlayerCsModeUpdateFuncs[this->csMode]); } s32 Player_StartFishing(PlayState* play) { @@ -20082,7 +20099,7 @@ s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { Player* player = GET_PLAYER(play); if (this != NULL) { - if (csMode == PLAYER_CSMODE_0) { + if (csMode == PLAYER_CSMODE_NONE) { return func_8084E034 == this->actionFunc; } @@ -20100,7 +20117,7 @@ s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { func_8082DE50(play, player); Player_SetAction(play, player, func_8085B08C, 0); player->csMode = csMode; - player->unk_398 = &this->actor; + player->csActor = &this->actor; func_8082DAD4(player); return true; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index decceda75..1b1bcedb5 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4796,84 +4796,84 @@ 0x80858C84:("func_80858C84",), 0x80858CC8:("func_80858CC8",), 0x80858D48:("func_80858D48",), - 0x80858DB4:("func_80858DB4",), - 0x80858DDC:("func_80858DDC",), - 0x80858DFC:("func_80858DFC",), - 0x80858E40:("func_80858E40",), - 0x80858E60:("func_80858E60",), - 0x80858E80:("func_80858E80",), - 0x80858EA0:("func_80858EA0",), - 0x80858EC0:("func_80858EC0",), - 0x80858EFC:("func_80858EFC",), - 0x80858F1C:("func_80858F1C",), - 0x80858F3C:("func_80858F3C",), - 0x80858F5C:("func_80858F5C",), - 0x80858F7C:("func_80858F7C",), - 0x80858F9C:("func_80858F9C",), - 0x80858FBC:("func_80858FBC",), + 0x80858DB4:("Player_CsAnim_1",), + 0x80858DDC:("Player_CsAnim_2",), + 0x80858DFC:("Player_CsAnim_14",), + 0x80858E40:("Player_CsAnim_3",), + 0x80858E60:("Player_CsAnim_4",), + 0x80858E80:("Player_CsAnim_5",), + 0x80858EA0:("Player_CsAnim_6",), + 0x80858EC0:("Player_CsAnim_19",), + 0x80858EFC:("Player_CsAnim_7",), + 0x80858F1C:("Player_CsAnim_8",), + 0x80858F3C:("Player_CsAnim_9",), + 0x80858F5C:("Player_CsAnim_10",), + 0x80858F7C:("Player_CsAnim_15",), + 0x80858F9C:("Player_CsAnim_16",), + 0x80858FBC:("Player_CsAnim_11",), 0x80858FE8:("func_80858FE8",), - 0x80859028:("func_80859028",), - 0x80859168:("func_80859168",), - 0x808591BC:("func_808591BC",), - 0x80859210:("func_80859210",), + 0x80859028:("Player_CsAnim_12",), + 0x80859168:("Player_CsAnim_17",), + 0x808591BC:("Player_CsAnim_13",), + 0x80859210:("Player_CsAnim_18",), 0x80859248:("func_80859248",), 0x8085929C:("func_8085929C",), 0x80859300:("func_80859300",), - 0x80859414:("func_80859414",), - 0x808594D0:("func_808594D0",), - 0x808595B8:("func_808595B8",), - 0x8085968C:("func_8085968C",), - 0x80859708:("func_80859708",), - 0x8085978C:("func_8085978C",), - 0x80859890:("func_80859890",), - 0x80859990:("func_80859990",), - 0x808599DC:("func_808599DC",), - 0x80859A10:("func_80859A10",), - 0x80859A44:("func_80859A44",), - 0x80859AD0:("func_80859AD0",), - 0x80859AF8:("func_80859AF8",), - 0x80859B28:("func_80859B28",), - 0x80859B54:("func_80859B54",), + 0x80859414:("Player_CsAction_0",), + 0x808594D0:("Player_CsAction_1",), + 0x808595B8:("Player_CsAction_2",), + 0x8085968C:("Player_CsAction_3",), + 0x80859708:("Player_CsAction_4",), + 0x8085978C:("Player_CsAction_5",), + 0x80859890:("Player_CsAction_6",), + 0x80859990:("Player_CsAction_7",), + 0x808599DC:("Player_CsAction_8",), + 0x80859A10:("Player_CsAction_9",), + 0x80859A44:("Player_CsAction_10",), + 0x80859AD0:("Player_CsAction_11",), + 0x80859AF8:("Player_CsAction_12",), + 0x80859B28:("Player_CsAction_13",), + 0x80859B54:("Player_CsAction_14",), 0x80859BA8:("Player_Cutscene_Translate",), - 0x80859C60:("func_80859C60",), - 0x80859CA0:("func_80859CA0",), + 0x80859C60:("Player_CsAction_15",), + 0x80859CA0:("Player_CsAction_16",), 0x80859CE0:("func_80859CE0",), - 0x80859CFC:("func_80859CFC",), - 0x80859D44:("func_80859D44",), - 0x80859D70:("func_80859D70",), - 0x80859EBC:("func_80859EBC",), - 0x80859F4C:("func_80859F4C",), - 0x80859FCC:("func_80859FCC",), - 0x80859FF4:("func_80859FF4",), - 0x8085A04C:("Player_Cutscene_TranslateReverse",), - 0x8085A120:("func_8085A120",), - 0x8085A144:("func_8085A144",), - 0x8085A19C:("func_8085A19C",), - 0x8085A1D4:("func_8085A1D4",), - 0x8085A24C:("func_8085A24C",), - 0x8085A2AC:("func_8085A2AC",), - 0x8085A330:("func_8085A330",), - 0x8085A364:("func_8085A364",), - 0x8085A40C:("func_8085A40C",), - 0x8085A4A4:("func_8085A4A4",), - 0x8085A530:("func_8085A530",), - 0x8085A5DC:("func_8085A5DC",), - 0x8085A66C:("func_8085A66C",), - 0x8085A6C0:("func_8085A6C0",), - 0x8085A710:("func_8085A710",), - 0x8085A768:("func_8085A768",), - 0x8085A7C0:("func_8085A7C0",), - 0x8085A8C4:("func_8085A8C4",), - 0x8085A940:("func_8085A940",), - 0x8085AA10:("func_8085AA10",), - 0x8085AA60:("func_8085AA60",), - 0x8085AA84:("func_8085AA84",), - 0x8085AACC:("func_8085AACC",), + 0x80859CFC:("Player_CsAction_17",), + 0x80859D44:("Player_CsAction_18",), + 0x80859D70:("Player_CsAction_19",), + 0x80859EBC:("Player_CsAction_20",), + 0x80859F4C:("Player_CsAction_21",), + 0x80859FCC:("Player_CsAction_22",), + 0x80859FF4:("Player_CsAction_23",), + 0x8085A04C:("Player_CsAction_TranslateReverse",), + 0x8085A120:("Player_CsAction_25",), + 0x8085A144:("Player_CsAction_26",), + 0x8085A19C:("Player_CsAction_27",), + 0x8085A1D4:("Player_CsAction_28",), + 0x8085A24C:("Player_CsAction_29",), + 0x8085A2AC:("Player_CsAction_30",), + 0x8085A330:("Player_CsAction_31",), + 0x8085A364:("Player_CsAction_32",), + 0x8085A40C:("Player_CsAction_33",), + 0x8085A4A4:("Player_CsAction_34",), + 0x8085A530:("Player_CsAction_35",), + 0x8085A5DC:("Player_CsAction_36",), + 0x8085A66C:("Player_CsAction_37",), + 0x8085A6C0:("Player_CsAction_38",), + 0x8085A710:("Player_CsAction_39",), + 0x8085A768:("Player_CsAction_40",), + 0x8085A7C0:("Player_CsAction_41",), + 0x8085A8C4:("Player_CsAction_42",), + 0x8085A940:("Player_CsAction_43",), + 0x8085AA10:("Player_CsAction_44",), + 0x8085AA60:("Player_CsAction_45",), + 0x8085AA84:("Player_CsAction_46",), + 0x8085AACC:("Player_CsAction_End",), 0x8085AB58:("Player_Cutscene_SetPosAndYawToStart",), 0x8085ABA8:("Player_Cutscene_8085ABA8",), 0x8085AC9C:("func_8085AC9C",), 0x8085AD5C:("func_8085AD5C",), - 0x8085ADA0:("func_8085ADA0",), + 0x8085ADA0:("Player_CsAction_48",), 0x8085B08C:("func_8085B08C",), 0x8085B134:("Player_StartFishing",), 0x8085B170:("func_8085B170",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 83d8d4db7..1be723fc7 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -5033,7 +5033,7 @@ 0x8085D370:("D_8085D370","UNK_TYPE1","",0x1), 0x8085D37C:("D_8085D37C","UNK_TYPE1","",0x1), 0x8085D380:("D_8085D380","UNK_TYPE1","",0x1), - 0x8085D384:("D_8085D384","UNK_TYPE1","",0x1), + 0x8085D384:("sPlayerCsModes","UNK_TYPE1","",0x1), 0x8085D3E0:("D_8085D3E0","UNK_TYPE1","",0x1), 0x8085D3F4:("D_8085D3F4","UNK_TYPE1","",0x1), 0x8085D3F8:("D_8085D3F8","UNK_TYPE1","",0x1), @@ -5121,7 +5121,7 @@ 0x8085D96C:("D_8085D96C","UNK_TYPE1","",0x1), 0x8085D978:("D_8085D978","UNK_TYPE1","",0x1), 0x8085D984:("D_8085D984","UNK_TYPE1","",0x1), - 0x8085D990:("D_8085D990","UNK_TYPE1","",0x1), + 0x8085D990:("sPlayerCsModeAnimFuncs","UNK_TYPE1","",0x1), 0x8085D9E0:("D_8085D9E0","UNK_TYPE1","",0x1), 0x8085D9F0:("D_8085D9F0","UNK_TYPE1","",0x1), 0x8085D9FC:("D_8085D9FC","UNK_TYPE1","",0x1), @@ -5143,8 +5143,8 @@ 0x8085DA88:("D_8085DA88","UNK_TYPE1","",0x1), 0x8085DA8C:("D_8085DA8C","UNK_TYPE1","",0x1), 0x8085DA90:("D_8085DA90","UNK_TYPE1","",0x1), - 0x8085DA94:("D_8085DA94","UNK_TYPE1","",0x1), - 0x8085DEF4:("D_8085DEF4","UNK_TYPE1","",0x1), + 0x8085DA94:("sPlayerCsModeInitFuncs","UNK_TYPE1","",0x1), + 0x8085DEF4:("sPlayerCsModeUpdateFuncs","UNK_TYPE1","",0x1), 0x8085E354:("D_8085E354","UNK_TYPE1","",0x1), 0x8085E368:("D_8085E368","UNK_TYPE2","",0x2), 0x8085E3A4:("D_8085E3A4","UNK_TYPE1","",0x1), From 283a37affb2541face858b423cb899abde8b6c61 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 25 Jun 2023 05:44:42 -0700 Subject: [PATCH 015/121] Misc Cleanup 2 (#1306) * Cleanup undefined_syms.txt * removed unused from Bba textures * eyegore beamos textures * object_eg Unused -> Beamons * ssh * segment 0x07 --- assets/xml/objects/object_bba.xml | 24 +- assets/xml/objects/object_eg.xml | 20 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 7 +- undefined_syms.txt | 487 +--------------------- 4 files changed, 31 insertions(+), 507 deletions(-) diff --git a/assets/xml/objects/object_bba.xml b/assets/xml/objects/object_bba.xml index c3a5d0424..54706c2e3 100644 --- a/assets/xml/objects/object_bba.xml +++ b/assets/xml/objects/object_bba.xml @@ -52,18 +52,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_eg.xml b/assets/xml/objects/object_eg.xml index 26e5c86bc..28686f3ae 100644 --- a/assets/xml/objects/object_eg.xml +++ b/assets/xml/objects/object_eg.xml @@ -34,20 +34,20 @@ - - - - - - - - + + + + + + + + - - + + 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 358a8eeec..9bc9dc78c 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -6,6 +6,7 @@ #include "z_en_ssh.h" #include "objects/object_ssh/object_ssh.h" +#include "objects/object_st/object_st.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -627,8 +628,10 @@ void EnSsh_SetColliders(EnSsh* this, PlayState* play) { } void EnSsh_Init(Actor* thisx, PlayState* play) { - // @bug - this symbol no longer exists, reads from a random place in object_ssh_Tex_000190 instead - f32 frameCount = Animation_GetLastFrame(&D_06000304); + //! @bug: object_st_Anim_000304 is similar if not idential to object_ssh_Anim_001494. + //! They also shared the same offset into their respective object files in OoT. + //! However since object_ssh is the one loaded, this ends up reading garbage data from within object_ssh_Tex_000190. + f32 frameCount = Animation_GetLastFrame(&object_st_Anim_000304); s32 pad; EnSsh* this = THIS; diff --git a/undefined_syms.txt b/undefined_syms.txt index 8ae26753f..b94c899ff 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -141,415 +141,56 @@ aspMainDataEnd = aspMainDataStart + 0x2E0; // segment 0x01 D_01000000 = 0x01000000; -D_01000680 = 0x01000680; -D_01001280 = 0x01001280; -D_01001800 = 0x01001800; -D_01002720 = 0x01002720; -D_01002800 = 0x01002800; -D_01007980 = 0x01007980; -D_010220B0 = 0x010220B0; -D_010277B0 = 0x010277B0; -D_0102A030 = 0x0102A030; -D_0102A6B0 = 0x0102A6B0; -D_0102A7B0 = 0x0102A7B0; -D_0102AAB0 = 0x0102AAB0; -D_0102B170 = 0x0102B170; -D_0102B3B0 = 0x0102B3B0; -D_0102B8F0 = 0x0102B8F0; -D_0102FCB0 = 0x0102FCB0; -D_010308F0 = 0x010308F0; -D_010310F0 = 0x010310F0; -D_010311F0 = 0x010311F0; -D_01031408 = 0x01031408; -D_01031618 = 0x01031618; // segment 0x02 -D_02000000 = 0x02000000; -D_02000100 = 0x02000100; -D_02000200 = 0x02000200; -D_02000300 = 0x02000300; D_02000400 = 0x02000400; -D_02000500 = 0x02000500; -D_02000600 = 0x02000600; -D_02000700 = 0x02000700; -D_02000800 = 0x02000800; -D_02000900 = 0x02000900; -D_02000A00 = 0x02000A00; -D_02000BE0 = 0x02000BE0; -D_02000D60 = 0x02000D60; D_02000E60 = 0x02000E60; -D_02000F60 = 0x02000F60; -D_02001360 = 0x02001360; -D_02002360 = 0x02002360; D_02002460 = 0x02002460; D_020029A0 = 0x020029A0; D_02002AA0 = 0x02002AA0; -D_02002DE0 = 0x02002DE0; -D_020031E0 = 0x020031E0; -D_020038A0 = 0x020038A0; D_02003F20 = 0x02003F20; -D_02003FA0 = 0x02003FA0; -D_020042A0 = 0x020042A0; -D_020043A0 = 0x020043A0; -D_02004420 = 0x02004420; -D_020044A0 = 0x020044A0; -D_02004A20 = 0x02004A20; -D_02004AA0 = 0x02004AA0; -D_02004DA0 = 0x02004DA0; -D_02004E20 = 0x02004E20; -D_02004FA0 = 0x02004FA0; -D_02004FE0 = 0x02004FE0; -D_020054E0 = 0x020054E0; -D_02005720 = 0x02005720; -D_02005960 = 0x02005960; -D_02005F60 = 0x02005F60; -D_020063C0 = 0x020063C0; -D_02006B20 = 0x02006B20; D_0200B998 = 0x0200B998; // segment 0x03 - // segment 0x04 -D_04000320 = 0x04000320; -D_040003E0 = 0x040003E0; -D_040032B0 = 0x040032B0; -D_0400CF48 = 0x0400CF48; -D_0400CF58 = 0x0400CF58; -D_0400CF88 = 0x0400CF88; -D_0400CF98 = 0x0400CF98; -D_0400D028 = 0x0400D028; -D_0400D030 = 0x0400D030; -D_0400D090 = 0x0400D090; -D_0400D0A8 = 0x0400D0A8; -D_0400D0B0 = 0x0400D0B0; -D_0400D0B8 = 0x0400D0B8; -D_0400D0C8 = 0x0400D0C8; -D_0400D0D0 = 0x0400D0D0; -D_0400D100 = 0x0400D100; -D_0400D108 = 0x0400D108; -D_0400D218 = 0x0400D218; -D_0400D220 = 0x0400D220; -D_0400D228 = 0x0400D228; -D_0400D2D0 = 0x0400D2D0; -D_0400D300 = 0x0400D300; -D_0400D3E8 = 0x0400D3E8; -D_0400D3F8 = 0x0400D3F8; -D_0400D420 = 0x0400D420; -D_0400D488 = 0x0400D488; -D_0400D490 = 0x0400D490; -D_0400D4A8 = 0x0400D4A8; -D_0400D4B0 = 0x0400D4B0; -D_0400D4B8 = 0x0400D4B8; -D_0400D4C0 = 0x0400D4C0; -D_0400D4D8 = 0x0400D4D8; -D_0400D4F0 = 0x0400D4F0; -D_0400D4F8 = 0x0400D4F8; -D_0400D500 = 0x0400D500; -D_0400D520 = 0x0400D520; -D_0400D568 = 0x0400D568; -D_0400D5A8 = 0x0400D5A8; -D_0400D5B0 = 0x0400D5B0; -D_0400D638 = 0x0400D638; -D_0400D660 = 0x0400D660; -D_0400D698 = 0x0400D698; -D_0400D728 = 0x0400D728; -D_0400D8B0 = 0x0400D8B0; -D_0400D9C8 = 0x0400D9C8; -D_0400D9D0 = 0x0400D9D0; -D_0400D9D8 = 0x0400D9D8; -D_0400DA60 = 0x0400DA60; -D_0400DA68 = 0x0400DA68; -D_0400DA70 = 0x0400DA70; -D_0400DA88 = 0x0400DA88; -D_0400DAA0 = 0x0400DAA0; -D_0400DAA8 = 0x0400DAA8; -D_0400DAC0 = 0x0400DAC0; -D_0400DAC8 = 0x0400DAC8; -D_0400DAD0 = 0x0400DAD0; -D_0400DAD8 = 0x0400DAD8; -D_0400DAE0 = 0x0400DAE0; -D_0400DAF0 = 0x0400DAF0; -D_0400DB10 = 0x0400DB10; -D_0400DB18 = 0x0400DB18; -D_0400DB30 = 0x0400DB30; -D_0400DB68 = 0x0400DB68; -D_0400DBB0 = 0x0400DBB0; -D_0400DBE8 = 0x0400DBE8; -D_0400DC20 = 0x0400DC20; -D_0400DC28 = 0x0400DC28; -D_0400DC30 = 0x0400DC30; -D_0400DC48 = 0x0400DC48; -D_0400DC50 = 0x0400DC50; -D_0400DC60 = 0x0400DC60; -D_0400DC78 = 0x0400DC78; -D_0400DC80 = 0x0400DC80; -D_0400DC88 = 0x0400DC88; -D_0400DCA8 = 0x0400DCA8; -D_0400DCD0 = 0x0400DCD0; -D_0400DCD8 = 0x0400DCD8; -D_0400DCF8 = 0x0400DCF8; -D_0400DD10 = 0x0400DD10; -D_0400DD30 = 0x0400DD30; -D_0400DD38 = 0x0400DD38; -D_0400DD40 = 0x0400DD40; -D_0400DD50 = 0x0400DD50; -D_0400DD58 = 0x0400DD58; -D_0400DD68 = 0x0400DD68; -D_0400DD70 = 0x0400DD70; -D_0400DD78 = 0x0400DD78; -D_0400DD80 = 0x0400DD80; -D_0400DDB0 = 0x0400DDB0; -D_0400DDF0 = 0x0400DDF0; -D_0400DDF8 = 0x0400DDF8; -D_0400DE00 = 0x0400DE00; -D_0400DE08 = 0x0400DE08; -D_0400DE10 = 0x0400DE10; -D_0400DE28 = 0x0400DE28; -D_0400DE30 = 0x0400DE30; -D_0400DE48 = 0x0400DE48; -D_0400DE50 = 0x0400DE50; -D_0400DE58 = 0x0400DE58; -D_0400DE60 = 0x0400DE60; -D_0400DEA0 = 0x0400DEA0; -D_0400DEA8 = 0x0400DEA8; -D_0400DF78 = 0x0400DF78; -D_0400DF90 = 0x0400DF90; -D_0400DF98 = 0x0400DF98; -D_0400DFA0 = 0x0400DFA0; -D_0400DFA8 = 0x0400DFA8; -D_0400DFB0 = 0x0400DFB0; -D_0400DFB8 = 0x0400DFB8; -D_0400DFC0 = 0x0400DFC0; -D_0400DFC8 = 0x0400DFC8; -D_0400DFD0 = 0x0400DFD0; -D_0400DFD8 = 0x0400DFD8; -D_0400DFE0 = 0x0400DFE0; -D_0400DFE8 = 0x0400DFE8; -D_0400DFF0 = 0x0400DFF0; -D_0400DFF8 = 0x0400DFF8; -D_0400E000 = 0x0400E000; -D_0400E008 = 0x0400E008; -D_0400E050 = 0x0400E050; -D_0400E060 = 0x0400E060; -D_0400E070 = 0x0400E070; -D_0400E080 = 0x0400E080; -D_0400E088 = 0x0400E088; -D_0400E098 = 0x0400E098; -D_0400E118 = 0x0400E118; -D_0400E120 = 0x0400E120; -D_0400E150 = 0x0400E150; -D_0400E1F0 = 0x0400E1F0; -D_0400E1F8 = 0x0400E1F8; -D_0400E200 = 0x0400E200; -D_0400E208 = 0x0400E208; -D_0400E218 = 0x0400E218; -D_0400E230 = 0x0400E230; -D_0400E248 = 0x0400E248; -D_0400E260 = 0x0400E260; -D_0400E270 = 0x0400E270; -D_0400E278 = 0x0400E278; -D_0400E290 = 0x0400E290; -D_0400E298 = 0x0400E298; -D_0400E2A0 = 0x0400E2A0; -D_0400E2A8 = 0x0400E2A8; -D_0400E2B0 = 0x0400E2B0; -D_0400E2B8 = 0x0400E2B8; -D_0400E2C0 = 0x0400E2C0; -D_0400E2C8 = 0x0400E2C8; -D_0400E2D0 = 0x0400E2D0; -D_0400E2D8 = 0x0400E2D8; -D_0400E2E8 = 0x0400E2E8; -D_0400E2F0 = 0x0400E2F0; -D_0400E2F8 = 0x0400E2F8; -D_0400E318 = 0x0400E318; -D_0400E330 = 0x0400E330; -D_0400E348 = 0x0400E348; -D_0400E350 = 0x0400E350; -D_0400E398 = 0x0400E398; -D_0400E3A0 = 0x0400E3A0; -D_0400E3A8 = 0x0400E3A8; -D_0400E3B0 = 0x0400E3B0; -D_0400E3B8 = 0x0400E3B8; -D_0400E3C0 = 0x0400E3C0; -D_0400E3D8 = 0x0400E3D8; -D_0400E3E0 = 0x0400E3E0; -D_0400E3E8 = 0x0400E3E8; -D_0400E3F0 = 0x0400E3F0; -D_0400E3F8 = 0x0400E3F8; -D_0400E408 = 0x0400E408; -D_0400E410 = 0x0400E410; -D_0400E418 = 0x0400E418; -D_0400E430 = 0x0400E430; -D_04012860 = 0x04012860; -D_040128BC = 0x040128BC; -D_04014560 = 0x04014560; -D_04015DB0 = 0x04015DB0; -D_04015FA0 = 0x04015FA0; -D_04016360 = 0x04016360; -D_0401ACF0 = 0x0401ACF0; D_0401ED00 = 0x0401ED00; -D_0401F0F0 = 0x0401F0F0; -D_04020658 = 0x04020658; -D_04020BB8 = 0x04020BB8; -D_04020D00 = 0x04020D00; -D_040221B8 = 0x040221B8; -D_04023130 = 0x04023130; D_04023210 = 0x04023210; -D_04023288 = 0x04023288; D_04023348 = 0x04023348; D_040233B8 = 0x040233B8; D_04023428 = 0x04023428; -D_04023480 = 0x04023480; -D_040234F0 = 0x040234F0; -D_04025850 = 0x04025850; -D_04025970 = 0x04025970; -D_04025DD0 = 0x04025DD0; -D_04025EF0 = 0x04025EF0; -D_040268F0 = 0x040268F0; -D_04027CA0 = 0x04027CA0; -D_040281DC = 0x040281DC; -D_04028FEC = 0x04028FEC; -D_0402900C = 0x0402900C; -D_04029140 = 0x04029140; D_04029CB0 = 0x04029CB0; D_04029CF0 = 0x04029CF0; -D_04029D20 = 0x04029D20; -D_0402AF58 = 0x0402AF58; D_0402E510 = 0x0402E510; -D_0402E65C = 0x0402E65C; -D_0402F028 = 0x0402F028; -D_0402F0EC = 0x0402F0EC; D_04030100 = 0x04030100; -D_040301B0 = 0x040301B0; -D_040367B0 = 0x040367B0; -D_040377B0 = 0x040377B0; -D_04037850 = 0x04037850; -D_0403A0F0 = 0x0403A0F0; D_0403F230 = 0x0403F230; -D_0404F250 = 0x0404F250; -D_04050550 = 0x04050550; D_04050D10 = 0x04050D10; -D_040510B0 = 0x040510B0; D_04051180 = 0x04051180; D_04051238 = 0x04051238; -D_0405140C = 0x0405140C; -D_040527A0 = 0x040527A0; -D_040527F0 = 0x040527F0; -D_040528B0 = 0x040528B0; D_04054940 = 0x04054940; D_040549A8 = 0x040549A8; -D_04054A90 = 0x04054A90; -D_04054C90 = 0x04054C90; -D_04054F18 = 0x04054F18; -D_04058BA0 = 0x04058BA0; -D_0405AAB0 = 0x0405AAB0; -D_0405AED0 = 0x0405AED0; -D_0405BEF0 = 0x0405BEF0; -D_0405CEF0 = 0x0405CEF0; -D_0405E6F0 = 0x0405E6F0; -D_0405F6F0 = 0x0405F6F0; -D_0405FFC0 = 0x0405FFC0; -D_040617C0 = 0x040617C0; -D_040622C0 = 0x040622C0; -D_0406A800 = 0x0406A800; D_0406AB30 = 0x0406AB30; -D_0406B6A0 = 0x0406B6A0; -D_0406B730 = 0x0406B730; -D_0406BB0C = 0x0406BB0C; -D_0406EB70 = 0x0406EB70; -D_0406F380 = 0x0406F380; -D_0406F9F0 = 0x0406F9F0; -D_0406FAE0 = 0x0406FAE0; D_040706E0 = 0x040706E0; -D_04075A40 = 0x04075A40; D_04076BC0 = 0x04076BC0; -D_04079B10 = 0x04079B10; -D_0407AB10 = 0x0407AB10; -D_0407AB58 = 0x0407AB58; D_0407AB70 = 0x0407AB70; -D_0407AFB0 = 0x0407AFB0; D_0407D590 = 0x0407D590; -D_0407D650 = 0x0407D650; D_0407E8C0 = 0x0407E8C0; D_0407F218 = 0x0407F218; -D_04080FC8 = 0x04080FC8; -D_040815D0 = 0x040815D0; -D_04081628 = 0x04081628; -D_04083534 = 0x04083534; -D_04085640 = 0x04085640; -D_0408DBE0 = 0x0408DBE0; -D_0408EBE0 = 0x0408EBE0; -D_04091BE0 = 0x04091BE0; -D_04091CE0 = 0x04091CE0; -D_04091DE0 = 0x04091DE0; -D_04091FE0 = 0x04091FE0; -D_040921E0 = 0x040921E0; -D_040923E0 = 0x040923E0; // segment 0x05 -D_05001D20 = 0x05001D20; -D_05002FA0 = 0x05002FA0; -D_050061E8 = 0x050061E8; -D_05006420 = 0x05006420; -D_050066B0 = 0x050066B0; -D_05006760 = 0x05006760; -D_05007498 = 0x05007498; -D_050078A0 = 0x050078A0; -D_05007938 = 0x05007938; D_050085F0 = 0x050085F0; D_050089D0 = 0x050089D0; -D_050182A8 = 0x050182A8; -D_0501B370 = 0x0501B370; -D_0501BEE0 = 0x0501BEE0; -D_0501BFB8 = 0x0501BFB8; -D_0501C058 = 0x0501C058; -D_0501C118 = 0x0501C118; -D_05021EF0 = 0x05021EF0; -D_05023008 = 0x05023008; -D_0502324C = 0x0502324C; // segment 0x06 -// code - -D_06001254 = 0x06001254; -D_06001C60 = 0x06001C60; -D_06007390 = 0x06007390; -D_06008AA0 = 0x06008AA0; -D_06008C50 = 0x06008C50; -D_0600A348 = 0x0600A348; -D_0600E088 = 0x0600E088; -D_0600E2A0 = 0x0600E2A0; -D_0600FBB8 = 0x0600FBB8; -D_0600FC18 = 0x0600FC18; -D_0600FDF0 = 0x0600FDF0; -D_060110A8 = 0x060110A8; -D_06011210 = 0x06011210; -D_06011710 = 0x06011710; -D_06011760 = 0x06011760; -D_06011AB8 = 0x06011AB8; -D_06012A80 = 0x06012A80; -D_06013138 = 0x06013138; - -// ovl_Bg_Crace_Movebg - -D_060003A0 = 0x060003A0; -D_06000E00 = 0x06000E00; - // ovl_Bg_Dblue_Elevator D_060002C8 = 0x060002C8; D_060005C4 = 0x060005C4; -// ovl_Bg_Dkjail_Ivy - -D_06000080 = 0x06000080; -D_060011A8 = 0x060011A8; - // ovl_Bg_Dy_Yoseizo D_06008090 = 0x06008090; @@ -558,33 +199,8 @@ D_0600D228 = 0x0600D228; D_0601C6F4 = 0x0601C6F4; D_0601C8B4 = 0x0601C8B4; -// ovl_Bg_F40_Flift +// ovl_Bg_Lotus -D_06004038 = 0x06004038; -D_06004240 = 0x06004240; - -// ovl_Bg_F40_Swlift - -D_06003B08 = 0x06003B08; -D_06003E80 = 0x06003E80; - -// ovl_Bg_Haka_Bombwall - -D_06001680 = 0x06001680; - -// ovl_Bg_Ikana_Bombwall - -D_06000288 = 0x06000288; - -// ovl_Bg_Keikoku_Spr - -D_06000100 = 0x06000100; -D_060001F8 = 0x060001F8; -D_060003F8 = 0x060003F8; -D_06000500 = 0x06000500; -D_060005F8 = 0x060005F8; - -/* ovl_Bg_Lotus */ D_06000A20 = 0x06000A20; D_06000040 = 0x06000040; @@ -745,12 +361,6 @@ D_06009278 = 0x06009278; D_06012B70 = 0x06012B70; D_06013EA8 = 0x06013EA8; -// ovl_Eff_Stk - -D_06008920 = 0x06008920; -D_06008A38 = 0x06008A38; -D_06009F60 = 0x06009F60; - // ovl_En_An D_06000308 = 0x06000308; @@ -797,51 +407,15 @@ D_0600CB2C = 0x0600CB2C; D_0600CB84 = 0x0600CB84; D_0600CBC0 = 0x0600CBC0; -// ovl_En_Dnh - -D_06002950 = 0x06002950; - // ovl_En_Dt D_0600112C = 0x0600112C; D_0600B0CC = 0x0600B0CC; -// ovl_En_Egblock - -D_06001698 = 0x06001698; -D_06001820 = 0x06001820; -D_06001918 = 0x06001918; -D_06001BF8 = 0x06001BF8; - -// ovl_En_Egol - -D_06000040 = 0x06000040; -D_06001170 = 0x06001170; -D_060013B0 = 0x060013B0; -D_06001918 = 0x06001918; -D_060041F0 = 0x060041F0; -D_060094E4 = 0x060094E4; -D_06009664 = 0x06009664; -D_0600EE4C = 0x0600EE4C; - // ovl_En_Encount3 D_060009A0 = 0x060009A0; -// ovl_En_Estone - -D_06010240 = 0x06010240; - -// ovl_En_Ge2 - -D_0600030C = 0x0600030C; -D_06000460 = 0x06000460; -D_06001664 = 0x06001664; -D_06008DD8 = 0x06008DD8; -D_060091D0 = 0x060091D0; -D_06009D1C = 0x06009D1C; -D_0600A344 = 0x0600A344; - // ovl_En_Ge3 D_06001EFC = 0x06001EFC; @@ -1020,22 +594,6 @@ D_06006F38 = 0x06006F38; D_06006FD8 = 0x06006FD8; D_06009930 = 0x06009930; -// ovl_En_Slime - -D_060004C0 = 0x060004C0; -D_06000650 = 0x06000650; -D_06000828 = 0x06000828; -D_06000A10 = 0x06000A10; - -// ovl_En_Snowwd - -D_06000198 = 0x06000198; -D_06001AA0 = 0x06001AA0; - -// ovl_En_Ssh - -D_06000304 = 0x06000304; - // ovl_En_Takaraya D_06000968 = 0x06000968; @@ -1045,17 +603,6 @@ D_06009890 = 0x06009890; D_0600A280 = 0x0600A280; D_0600AD98 = 0x0600AD98; -// ovl_En_Test3 - -D_0600CB60 = 0x0600CB60; -D_0600EDD0 = 0x0600EDD0; -D_0600F7EC = 0x0600F7EC; - -// ovl_En_Tru - -D_0601A820 = 0x0601A820; -D_0601A830 = 0x0601A830; - // ovl_En_Wdhand D_060000F4 = 0x060000F4; @@ -1070,17 +617,6 @@ D_06001E20 = 0x06001E20; D_06013328 = 0x06013328; -// ovl_En_Zod - -D_06000D94 = 0x06000D94; -D_06007650 = 0x06007650; -D_0600D658 = 0x0600D658; - -// ovl_Item_B_Heart - -D_06001290 = 0x06001290; -D_06001470 = 0x06001470; - // ovl_Obj_Boyo D_06000300 = 0x06000300; @@ -1097,28 +633,20 @@ D_06002188 = 0x06002188; D_06000B70 = 0x06000B70; D_06000D60 = 0x06000D60; +// segment 0x07 // segment 0x08 D_08000000 = 0x08000000; +// segment 0x09 + // segment 0x0A -D_0A0001A0 = 0x0A0001A0; -D_0A000440 = 0x0A000440; -D_0A0004A0 = 0x0A0004A0; D_0A000D40 = 0x0A000D40; -D_0A0011F8 = 0x0A0011F8; -D_0A001CD8 = 0x0A001CD8; // segment 0x0B -D_0B000000 = 0x0B000000; -D_0B000090 = 0x0B000090; -D_0B0000E0 = 0x0B0000E0; -D_0B000130 = 0x0B000130; -D_0B000188 = 0x0B000188; - // segment 0x0C D_0C000000 = 0x0C000000; @@ -1128,16 +656,9 @@ D_0C000000 = 0x0C000000; D_0E000000 = 0x0E000000; // TODO the following are fake and are offsets into the structure at D_0E000000 -D_0E000048 = 0x0E000048; -D_0E000088 = 0x0E000088; D_0E000140 = 0x0E000140; D_0E0001C8 = 0x0E0001C8; -D_0E0002A0 = 0x0E0002A0; -D_0E0002A8 = 0x0E0002A8; -D_0E0002B0 = 0x0E0002B0; -D_0E0002B8 = 0x0E0002B8; D_0E0002C8 = 0x0E0002C8; -D_0E0002E0 = 0x0E0002E0; // segment 0x0F From a2c2c45a0e2c35ec30cfac888a0deb92f86b8d96 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 25 Jun 2023 16:49:39 -0700 Subject: [PATCH 016/121] Import some bss (#1301) * flg_set * EnItem00 * pad_801DC9C0 * EventMgr * sPad * files.txt * const s32 sPad --- include/variables.h | 6 -- spec | 4 - src/code/flg_set.c | 12 +-- src/code/pad_801DC9C0.c | 1 - src/code/z_en_item00.c | 74 ++++++++++--------- src/code/z_eventmgr.c | 7 ++ src/overlays/actors/ovl_En_Sda/z_en_sda.c | 2 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 2 +- tools/disasm/files.txt | 2 +- tools/disasm/variables.txt | 2 +- 10 files changed, 56 insertions(+), 56 deletions(-) delete mode 100644 src/code/pad_801DC9C0.c diff --git a/include/variables.h b/include/variables.h index a5d05901f..04e21ac0a 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2066,7 +2066,6 @@ extern u8 gSequenceTable[]; extern u8 gSampleBankTable[]; // bss -// extern UNK_TYPE1 D_801ED890; // extern UNK_TYPE1 D_801ED894; extern CollisionPoly* D_801ED8B0; extern s32 D_801ED8B4; @@ -2154,11 +2153,6 @@ extern UNK_TYPE D_801F4DDC; extern u8 gDisablePlayerCsModeStartPos; extern s16 gDungeonBossWarpSceneId; -extern ActorCutscene* sSceneCutsceneList; -extern s16 sSceneCutsceneCount; -extern u8 sWaitingCutsceneList[16]; -// extern UNK_TYPE1 D_801F4E08; -extern u8 sNextCutsceneList[16]; // extern UNK_TYPE1 D_801F4E20; extern u8 D_801F4E30; // extern UNK_TYPE1 D_801F4E31; diff --git a/spec b/spec index 3fb69b01f..53f31ca9b 100644 --- a/spec +++ b/spec @@ -434,7 +434,6 @@ beginseg include "build/data/code/gspS2DEX2.fifo.data.o" include "build/data/code/njpgdspMain.data.o" include "build/src/code/z_en_a_keep.o" - include "build/data/code/code_801E3FA0.bss.o" include "build/src/code/z_en_item00.o" include "build/src/code/z_eff_blure.o" include "build/src/code/z_eff_shield_particle.o" @@ -446,8 +445,6 @@ beginseg include "build/src/code/z_effect_soft_sprite_old_init.o" include "build/src/code/z_effect_soft_sprite_dlftbls.o" include "build/src/code/flg_set.o" - include "build/data/code/flg_set.bss.o" - include "build/src/code/pad_801DC9C0.o" include "build/src/code/z_DLF.o" include "build/src/code/z_actor.o" include "build/data/code/z_actor.bss.o" @@ -473,7 +470,6 @@ beginseg include "build/src/code/z_face_reaction.o" include "build/src/code/z_env_flags.o" include "build/src/code/z_eventmgr.o" - include "build/data/code/z_eventmgr.bss.o" include "build/src/code/z_fcurve_data.o" include "build/src/code/z_fcurve_data_skelanime.o" include "build/src/code/z_fireobj.o" diff --git a/src/code/flg_set.c b/src/code/flg_set.c index f7c8c261e..d437fd8b6 100644 --- a/src/code/flg_set.c +++ b/src/code/flg_set.c @@ -265,7 +265,7 @@ void FlagSet_Update(GameState* gameState) { } } -extern s32 D_801ED890; +s32 sFlagBitIndex; void FlagSet_Draw(GameState* gameState) { GraphicsContext* gfxCtx = gameState->gfxCtx; @@ -288,23 +288,23 @@ void FlagSet_Draw(GameState* gameState) { GfxPrint_SetPos(&printer, 12, 15); // Print the flag bits in the current byte, largest to smallest - for (D_801ED890 = 7; D_801ED890 >= 0; D_801ED890--) { + for (sFlagBitIndex = 7; sFlagBitIndex >= 0; sFlagBitIndex--) { // Highlight current flag bit in white, rest in grey - if ((u32)D_801ED890 == sCurrentBit) { + if (sFlagBitIndex == sCurrentBit) { GfxPrint_SetColor(&printer, 200, 200, 200, 255); } else { GfxPrint_SetColor(&printer, 100, 100, 100, 255); } // Display 1 if flag set and 0 if not - if (*sFlagEntries[sEntryIndex].value & (1 << D_801ED890)) { + if (*sFlagEntries[sEntryIndex].value & (1 << sFlagBitIndex)) { GfxPrint_Printf(&printer, "1"); } else { GfxPrint_Printf(&printer, "0"); } // Add a space after each group of 4 - if ((D_801ED890 % 4) == 0) { + if ((sFlagBitIndex % 4) == 0) { GfxPrint_Printf(&printer, " "); } } @@ -318,3 +318,5 @@ void FlagSet_Draw(GameState* gameState) { CLOSE_DISPS(gfxCtx); } + +static const s32 sPad[5] = { 0 }; diff --git a/src/code/pad_801DC9C0.c b/src/code/pad_801DC9C0.c deleted file mode 100644 index f386919de..000000000 --- a/src/code/pad_801DC9C0.c +++ /dev/null @@ -1 +0,0 @@ -static const char pad_801DC9C0[] = { 0 }; diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 69fe16fdc..6d26060d7 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -59,6 +59,8 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_STOP), }; +static s32 sBssPad; + void EnItem00_SetObject(EnItem00* this, PlayState* play, f32* shadowOffset, f32* shadowScale) { Actor_SetObjectDependency(play, &this->actor); Actor_SetScale(&this->actor, 0.5f); @@ -74,43 +76,43 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { f32 shadowOffset = 980.0f; f32 shadowScale = 6.0f; s32 getItemId = GI_NONE; - s32 sp30 = ENITEM00_GET_8000(&this->actor) ? 1 : 0; + s32 sp30 = ENITEM00_GET_8000(thisx) ? 1 : 0; - this->collectibleFlag = ENITEM00_GET_7F00(&this->actor); + this->collectibleFlag = ENITEM00_GET_7F00(thisx); - thisx->params &= 0xFF; // Has to be thisx to match + thisx->params &= 0xFF; if (Flags_GetCollectible(play, this->collectibleFlag)) { - if (this->actor.params == ITEM00_HEART_PIECE) { + if (thisx->params == ITEM00_HEART_PIECE) { sp30 = 0; this->collectibleFlag = 0; - this->actor.params = ITEM00_RECOVERY_HEART; + thisx->params = ITEM00_RECOVERY_HEART; } else { - Actor_Kill(&this->actor); + Actor_Kill(thisx); return; } } - if (this->actor.params == ITEM00_3_HEARTS) { - this->actor.params = ITEM00_RECOVERY_HEART; + if (thisx->params == ITEM00_3_HEARTS) { + thisx->params = ITEM00_RECOVERY_HEART; } - Actor_ProcessInitChain(&this->actor, sInitChain); - Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); + Actor_ProcessInitChain(thisx, sInitChain); + Collider_InitAndSetCylinder(play, &this->collider, thisx, &sCylinderInit); this->unk150 = 1; - switch (this->actor.params) { + switch (thisx->params) { case ITEM00_RUPEE_GREEN: case ITEM00_RUPEE_BLUE: case ITEM00_RUPEE_RED: - Actor_SetScale(&this->actor, 0.015f); + Actor_SetScale(thisx, 0.015f); this->unk154 = 0.015f; shadowOffset = 750.0f; break; case ITEM00_SMALL_KEY: this->unk150 = 0; - Actor_SetScale(&this->actor, 0.03f); + Actor_SetScale(thisx, 0.03f); this->unk154 = 0.03f; shadowOffset = 350.0f; break; @@ -118,18 +120,18 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { case ITEM00_HEART_PIECE: case ITEM00_HEART_CONTAINER: this->unk150 = 0; - Actor_SetScale(&this->actor, 0.02f); + Actor_SetScale(thisx, 0.02f); this->unk154 = 0.02f; shadowOffset = 650.0f; - if (this->actor.params == ITEM00_HEART_CONTAINER) { + if (thisx->params == ITEM00_HEART_CONTAINER) { sp30 = -1; } break; case ITEM00_RECOVERY_HEART: - this->actor.home.rot.z = Rand_CenteredFloat(0xFFFF); + thisx->home.rot.z = Rand_CenteredFloat(0xFFFF); shadowOffset = 430.0f; - Actor_SetScale(&this->actor, 0.02f); + Actor_SetScale(thisx, 0.02f); this->unk154 = 0.02f; break; @@ -137,7 +139,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { case ITEM00_ARROWS_30: case ITEM00_ARROWS_40: case ITEM00_ARROWS_50: - Actor_SetScale(&this->actor, 0.035f); + Actor_SetScale(thisx, 0.035f); this->unk154 = 0.035f; shadowOffset = 250.0f; break; @@ -149,25 +151,25 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { case ITEM00_MAGIC_SMALL: case ITEM00_NUTS_10: case ITEM00_BOMBS_0: - Actor_SetScale(&this->actor, 0.03f); + Actor_SetScale(thisx, 0.03f); this->unk154 = 0.03f; shadowOffset = 320.0f; break; case ITEM00_MAGIC_LARGE: - Actor_SetScale(&this->actor, 4.5f * 0.01f); + Actor_SetScale(thisx, 4.5f * 0.01f); this->unk154 = 4.5f * 0.01f; shadowOffset = 320.0f; break; case ITEM00_RUPEE_HUGE: - Actor_SetScale(&this->actor, 4.5f * 0.01f); + Actor_SetScale(thisx, 4.5f * 0.01f); this->unk154 = 4.5f * 0.01f; shadowOffset = 750.0f; break; case ITEM00_RUPEE_PURPLE: - Actor_SetScale(&this->actor, 0.03f); + Actor_SetScale(thisx, 0.03f); this->unk154 = 0.03f; shadowOffset = 750.0f; break; @@ -175,22 +177,22 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { case ITEM00_FLEXIBLE: case ITEM00_BIG_FAIRY: shadowOffset = 500.0f; - Actor_SetScale(&this->actor, 0.01f); + Actor_SetScale(thisx, 0.01f); this->unk154 = 0.01f; break; case ITEM00_SHIELD_HERO: - this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2); + thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_MAP: - this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP); + thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_COMPASS: - this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS); + thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; @@ -199,9 +201,9 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { } this->unk14E = 0; - ActorShape_Init(&this->actor.shape, shadowOffset, ActorShadow_DrawCircle, shadowScale); - this->actor.shape.shadowAlpha = 180; - this->actor.focus.pos = this->actor.world.pos; + ActorShape_Init(&thisx->shape, shadowOffset, ActorShadow_DrawCircle, shadowScale); + thisx->shape.shadowAlpha = 180; + thisx->focus.pos = thisx->world.pos; this->getItemId = GI_NONE; if (sp30 < 0) { @@ -219,11 +221,11 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { this->unk152 = 15; this->unk14C = 35; - this->actor.speed = 0.0f; - this->actor.velocity.y = 0.0f; - this->actor.gravity = 0.0f; + thisx->speed = 0.0f; + thisx->velocity.y = 0.0f; + thisx->gravity = 0.0f; - switch (this->actor.params) { + switch (thisx->params) { case ITEM00_RUPEE_GREEN: Item_Give(play, ITEM_RUPEE_GREEN); break; @@ -298,8 +300,8 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; } - if ((getItemId != GI_NONE) && !Actor_HasParent(&this->actor, play)) { - Actor_OfferGetItem(&this->actor, play, getItemId, 50.0f, 20.0f); + if ((getItemId != GI_NONE) && !Actor_HasParent(thisx, play)) { + Actor_OfferGetItem(thisx, play, getItemId, 50.0f, 20.0f); } this->actionFunc = func_800A6A40; @@ -373,7 +375,7 @@ static Vec3f sEffectVelocity = { 0.0f, 0.1f, 0.0f }; static Vec3f sEffectAccel = { 0.0f, 0.01f, 0.0f }; void func_800A6650(EnItem00* this, PlayState* play) { - u32 pad; + s32 pad; Vec3f pos; if (this->actor.params <= ITEM00_RUPEE_RED) { diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 87c8203cc..88ec794fc 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -55,6 +55,13 @@ CutsceneManager sCutsceneMgr = { CS_ID_NONE, 0, CS_ID_NONE, SUB_CAM_ID_DONE, NULL, CS_START_0, NULL, CAM_ID_MAIN, false, }; +ActorCutscene* sSceneCutsceneList; +s16 sSceneCutsceneCount; +u8 sWaitingCutsceneList[16]; +static s32 sBssPad; +u8 sNextCutsceneList[16]; +static s32 sBssPad2; + s16 CutsceneManager_SetHudVisibility(s16 csHudVisibility) { u16 hudVisibility; diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 909510329..122415814 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -68,7 +68,7 @@ Vec3f D_80947B10[] = { { -1.0f, -2.0f, -0.2f }, { 0.0f, -2.0f, -0.2f }, { 1.0f, -2.0f, -0.2f }, { 0.0f, -3.0f, -0.5f }, }; -static s32 sPad[2] = { 0, 0 }; +static s32 sPad[2] = { 0 }; #include "overlays/ovl_En_Sda/ovl_En_Sda.c" diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 2999899b9..6920f11fd 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -30,7 +30,7 @@ ActorInit En_Tanron1_InitVars = { (ActorFunc)EnTanron1_Draw, }; -static u64 sPad = { 0 }; +static s32 sPad[2] = { 0 }; #include "overlays/ovl_En_Tanron1/ovl_En_Tanron1.c" diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index df205189f..2774b0ca5 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -691,7 +691,7 @@ 0x801E3F40 : "njpgdspMain", # .bss section - 0x801E3FA0 : "code_801E3FA0", + 0x801E3FA0 : "z_en_item00", 0x801E3FB0 : "z_effect", 0x801ED890 : "flg_set", 0x801ED8A0 : "z_actor", diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 1be723fc7..92ff9a805 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -3799,7 +3799,7 @@ 0x801E3F40:("njpgdspMainDataStart","UNK_TYPE1","",0x1), 0x801E3FA0:("D_801E3FA0","UNK_TYPE1","",0x1), 0x801E3FB0:("sEffectContext","EffectContext","",0x98E0), - 0x801ED890:("D_801ED890","UNK_TYPE1","",0x1), + 0x801ED890:("sFlagBitIndex","UNK_TYPE1","",0x1), 0x801ED894:("D_801ED894","UNK_TYPE1","",0x1), 0x801ED8A0:("sActorFaultClient","UNK_TYPE1","",0x1), 0x801ED8B0:("D_801ED8B0","UNK_TYPE1","",0x1), From 22035890fa372f61dd9b907c2a0f9dc6bcd0ae19 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 25 Jun 2023 17:18:50 -0700 Subject: [PATCH 017/121] Idle + Main bss and cleanup (#1292) * Idle bss and cleanup * main bss and cleanup * format * Remove pad comment about sAudioMgr * PR * Missed a couple size_t changes * unused pads * static --- include/functions.h | 7 +- include/idle.h | 21 ++++ include/macros.h | 1 + include/main.h | 19 ++++ include/padmgr.h | 2 - include/ultra64/thread.h | 2 +- include/variables.h | 23 +--- include/z64audio.h | 1 + include/z64thread.h | 2 + spec | 3 - src/boot_O2_g3/boot_main.c | 1 + src/boot_O2_g3/idle.c | 105 +++++++++--------- src/boot_O2_g3/idle_extra_bss.c | 8 -- src/boot_O2_g3/viconfig.c | 11 +- src/boot_O2_g3/z_std_dma.c | 10 +- src/code/game.c | 1 + src/code/graph.c | 1 + src/code/main.c | 81 ++++++++------ src/code/sched.c | 11 +- src/code/sys_ucode.c | 6 - src/code/z_play.c | 1 + src/code/z_prenmi.c | 2 +- src/code/z_skin.c | 2 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 2 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 2 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 2 +- src/overlays/actors/ovl_En_Sda/z_en_sda.c | 2 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 1 - tools/disasm/functions.txt | 10 +- tools/disasm/variables.txt | 20 ++-- tools/sizes/boot_functions.csv | 10 +- 33 files changed, 199 insertions(+), 175 deletions(-) create mode 100644 include/idle.h create mode 100644 include/main.h delete mode 100644 src/boot_O2_g3/idle_extra_bss.c diff --git a/include/functions.h b/include/functions.h index ac13a30f1..0e8e418b2 100644 --- a/include/functions.h +++ b/include/functions.h @@ -4,8 +4,7 @@ #include "z64.h" void bootproc(void); -void Idle_ThreadEntry(void* arg); -void ViConfig_UpdateVi(u32 mode); +void ViConfig_UpdateVi(u32 black); void ViConfig_UpdateBlack(void); s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size); s32 DmaMgr_DmaHandler(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); @@ -1514,7 +1513,7 @@ ListAlloc* ListAlloc_Init(ListAlloc* this); // void ListAlloc_Alloc(void); // void ListAlloc_Free(void); void ListAlloc_FreeAll(ListAlloc* this); -void Main(void* arg); + void Sched_SwapFramebuffer(CfbInfo* cfbInfo); void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo); void Sched_HandleReset(SchedContext* sched); @@ -1536,7 +1535,7 @@ void Sched_SendAudioCancelMsg(SchedContext* sched); void Sched_SendGfxCancelMsg(SchedContext* sched); void Sched_FaultClient(void* param1, void* param2); void Sched_ThreadEntry(void* arg); -void Sched_Init(SchedContext* sched, void* stack, OSPri pri, UNK_TYPE arg3, UNK_TYPE arg4, IrqMgr* irqMgr); +void Sched_Init(SchedContext* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr); // void func_80177390(void); void func_801773A0(void* arg0); void func_801773C4(void* arg0); diff --git a/include/idle.h b/include/idle.h new file mode 100644 index 000000000..86efabe90 --- /dev/null +++ b/include/idle.h @@ -0,0 +1,21 @@ +#ifndef IDLE_H +#define IDLE_H + +#include "ultra64.h" +#include "irqmgr.h" + +extern IrqMgr gIrqMgr; +extern OSMesgQueue gPiMgrCmdQueue; +extern OSViMode gViConfigMode; +extern u8 gViConfigModeType; + +extern u8 D_80096B20; +extern vu8 gViConfigUseBlack; +extern u8 gViConfigAdditionalScanLines; +extern u32 gViConfigFeatures; +extern f32 gViConfigXScale; +extern f32 gViConfigYScale; + +void Idle_ThreadEntry(void* arg); + +#endif diff --git a/include/macros.h b/include/macros.h index 1755a398c..f28315815 100644 --- a/include/macros.h +++ b/include/macros.h @@ -3,6 +3,7 @@ #include "libc/stdint.h" #include "ultra64/convert.h" +#include "main.h" #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 diff --git a/include/main.h b/include/main.h new file mode 100644 index 000000000..ce794714f --- /dev/null +++ b/include/main.h @@ -0,0 +1,19 @@ +#ifndef MAIN_H +#define MAIN_H + +#include "ultra64.h" +#include "scheduler.h" +#include "padmgr.h" + +extern s32 gScreenWidth; +extern s32 gScreenHeight; +extern size_t gSystemHeapSize; + +extern u32 gSegments[NUM_SEGMENTS]; +extern SchedContext gSchedContext; +extern OSThread gGraphThread; +extern PadMgr gPadMgr; + +void Main(void* arg); + +#endif diff --git a/include/padmgr.h b/include/padmgr.h index 674c9bc4e..1a21e5052 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -56,8 +56,6 @@ typedef struct { /* 0x47E */ u8 isResetting; } PadMgr; // size = 0x480 -extern PadMgr gPadMgr; - // Initialization s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status); diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h index 62cbdcd1b..f060ca34b 100644 --- a/include/ultra64/thread.h +++ b/include/ultra64/thread.h @@ -3,7 +3,7 @@ #include "PR/ultratypes.h" -#define OS_PRIORITY_IDLE 10 +#define OS_PRIORITY_IDLE 0 #define OS_PRIORITY_MAIN 10 #define OS_PRIORITY_GRAPH 11 #define OS_PRIORITY_AUDIOMGR 12 diff --git a/include/variables.h b/include/variables.h index 04e21ac0a..7faaf58d4 100644 --- a/include/variables.h +++ b/include/variables.h @@ -18,15 +18,8 @@ extern u16 gFramebuffer1[SCREEN_HEIGHT][SCREEN_WIDTH]; // at 0x80000500 extern u8 D_80025D00[]; // data -extern u64 rspbootTextStart[]; -extern u8 D_80096B20; -extern vu8 gViConfigUseDefault; -extern u8 gViConfigAdditionalScanLines; -extern u32 gViConfigFeatures; -extern f32 gViConfigXScale; -extern f32 gViConfigYScale; extern OSPiHandle* gCartHandle; -extern u32 sDmaMgrDmaBuffSize; +extern size_t gDmaMgrDmaBuffSize; extern vs32 gIrqMgrResetStatus; extern volatile OSTime sIrqMgrResetTime; extern volatile OSTime sIrqMgrRetraceTime; @@ -274,11 +267,6 @@ extern char gBuildTeam[]; extern char gBuildDate[]; extern char gBuildMakeOption[]; -extern IrqMgr gIrqMgr; - -extern OSViMode gViConfigMode; -extern u8 D_8009B290; - extern u8 sYaz0DataBuffer[0x400]; extern u8* sYaz0CurDataEnd; extern u32 sYaz0CurRomStart; @@ -658,9 +646,7 @@ extern Input* D_801D0D60; extern u32 retryCount; extern u32 cfbIdx[3]; -extern s32 gScreenWidth; -extern s32 gScreenHeight; -extern u32 startHeapSize; + extern UNK_PTR D_801D1540; extern Vec3f gZeroVec3f; extern Vec3s gZeroVec3s; @@ -2257,11 +2243,6 @@ extern GfxMasterList* gGfxMasterDL; extern CfbInfo sGraphCfbInfos[3]; extern OSTime sGraphTaskStartTime; -extern u32 gSegments[NUM_SEGMENTS]; -extern SchedContext gSchedContext; - -extern OSThread gGraphThread; - extern FaultClient sSchedFaultClient; extern OSTime sRSPGFXStartTime; extern OSTime sRSPAudioStartTime; diff --git a/include/z64audio.h b/include/z64audio.h index 13e3165b7..1a813409f 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -6,6 +6,7 @@ #include "audiothread_cmd.h" #include "libc/stddef.h" #include "audio/effects.h" +#include "sequence.h" #define NO_LAYER ((SequenceLayer*)(-1)) diff --git a/include/z64thread.h b/include/z64thread.h index c0baba84f..ce63cfb15 100644 --- a/include/z64thread.h +++ b/include/z64thread.h @@ -6,6 +6,8 @@ #define Z_THREAD_ID_MAIN 3 #define Z_THREAD_ID_GRAPH 4 #define Z_THREAD_ID_SCHED 5 +#define Z_THREAD_ID_PADMGR 7 +#define Z_THREAD_ID_AUDIOMGR 10 #define Z_THREAD_ID_FLASHROM 13 #define Z_THREAD_ID_DMAMGR 18 #define Z_THREAD_ID_IRQMGR 19 diff --git a/spec b/spec index 53f31ca9b..4c1028b78 100644 --- a/spec +++ b/spec @@ -16,7 +16,6 @@ beginseg include "build/src/boot_O2_g3/boot_main.o" include "build/data/boot/rspboot.data.o" include "build/src/boot_O2_g3/idle.o" - include "build/src/boot_O2_g3/idle_extra_bss.o" include "build/src/boot_O2_g3/viconfig.o" include "build/data/boot/viconfig.data.o" include "build/src/boot_O2_g3/z_std_dma.o" @@ -563,8 +562,6 @@ beginseg include "build/src/code/graphalloc.o" include "build/src/code/listalloc.o" include "build/src/code/main.o" - include "build/data/code/main.data.o" - include "build/data/code/main.bss.o" include "build/src/code/padmgr.o" include "build/src/code/sched.o" include "build/src/code/speed_meter.o" diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index ed16c34e0..dcb66fefd 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "idle.h" #include "stack.h" #include "stackcheck.h" #include "z64thread.h" diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index f7c847449..ccdf98695 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -1,17 +1,10 @@ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "irqmgr.h" +#include "main.h" #include "stack.h" -#include "buffers.h" #include "stackcheck.h" #include "z64thread.h" -u8 D_80096B20 = 1; -vu8 gViConfigUseDefault = 1; -u8 gViConfigAdditionalScanLines = 0; -u32 gViConfigFeatures = 0x42; -f32 gViConfigXScale = 1.0f; -f32 gViConfigYScale = 1.0f; - +// Variables are put before most headers as a hacky way to bypass bss reordering IrqMgr gIrqMgr; STACK(sIrqMgrStack, 0x500); StackEntry sIrqMgrStackInfo; @@ -19,90 +12,101 @@ OSThread sMainThread; STACK(sMainStack, 0x900); StackEntry sMainStackInfo; OSMesg sPiMgrCmdBuff[50]; -OSMesgQueue gPiMgrCmdQ; +OSMesgQueue gPiMgrCmdQueue; +OSViMode gViConfigMode; +u8 gViConfigModeType; -void Idle_ClearMemory(void* begin, void* end) { +#include "global.h" +#include "buffers.h" +#include "idle.h" + +u8 D_80096B20 = 1; +vu8 gViConfigUseBlack = true; +u8 gViConfigAdditionalScanLines = 0; +u32 gViConfigFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF; +f32 gViConfigXScale = 1.0f; +f32 gViConfigYScale = 1.0f; + +void Main_ClearMemory(void* begin, void* end) { if (begin < end) { bzero(begin, (uintptr_t)end - (uintptr_t)begin); } } -void Idle_InitFramebuffer(u32* ptr, size_t numBytes, u32 value) { - s32 temp = sizeof(u32); - - while (numBytes) { - *ptr++ = value; - numBytes -= temp; +void Main_InitFramebuffer(u32* framebuffer, size_t numBytes, u32 value) { + for (; numBytes > 0; numBytes -= sizeof(u32)) { + *framebuffer++ = value; } } -void Idle_InitScreen(void) { - Idle_InitFramebuffer((u32*)gFramebuffer1, 0x25800, 0x00010001); - ViConfig_UpdateVi(0); +void Main_InitScreen(void) { + Main_InitFramebuffer((u32*)gFramebuffer1, sizeof(gFramebuffer1), + (GPACK_RGBA5551(0, 0, 0, 1) << 16) | GPACK_RGBA5551(0, 0, 0, 1)); + ViConfig_UpdateVi(false); osViSwapBuffer(gFramebuffer1); osViBlack(false); } -void Idle_InitMemory(void) { - u32 pad; +void Main_InitMemory(void) { + void* memStart = (void*)0x80000400; void* memEnd = OS_PHYSICAL_TO_K0(osMemSize); - Idle_ClearMemory(0x80000400, gFramebuffer1); - Idle_ClearMemory(D_80025D00, bootproc); - Idle_ClearMemory(gGfxSPTaskYieldBuffer, memEnd); + Main_ClearMemory(memStart, gFramebuffer1); + Main_ClearMemory(D_80025D00, bootproc); + Main_ClearMemory(gGfxSPTaskYieldBuffer, memEnd); } -void Idle_InitCodeAndMemory(void) { +void Main_Init(void) { DmaRequest dmaReq; - OSMesgQueue queue; - OSMesg mesg; - size_t oldSize; + OSMesgQueue mq; + OSMesg msg[1]; + size_t prevSize; - osCreateMesgQueue(&queue, &mesg, 1); + osCreateMesgQueue(&mq, msg, ARRAY_COUNT(msg)); - oldSize = sDmaMgrDmaBuffSize; - sDmaMgrDmaBuffSize = 0; + prevSize = gDmaMgrDmaBuffSize; + gDmaMgrDmaBuffSize = 0; DmaMgr_SendRequestImpl(&dmaReq, SEGMENT_START(code), SEGMENT_ROM_START(code), - SEGMENT_ROM_END(code) - SEGMENT_ROM_START(code), 0, &queue, 0); - Idle_InitScreen(); - Idle_InitMemory(); - osRecvMesg(&queue, NULL, OS_MESG_BLOCK); + SEGMENT_ROM_END(code) - SEGMENT_ROM_START(code), 0, &mq, NULL); + Main_InitScreen(); + Main_InitMemory(); + osRecvMesg(&mq, NULL, OS_MESG_BLOCK); - sDmaMgrDmaBuffSize = oldSize; + gDmaMgrDmaBuffSize = prevSize; - Idle_ClearMemory(SEGMENT_BSS_START(code), SEGMENT_BSS_END(code)); + Main_ClearMemory(SEGMENT_BSS_START(code), SEGMENT_BSS_END(code)); } void Main_ThreadEntry(void* arg) { StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr"); IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), Z_PRIORITY_IRQMGR, 1); DmaMgr_Start(); - Idle_InitCodeAndMemory(); + Main_Init(); Main(arg); DmaMgr_Stop(); } void Idle_InitVideo(void) { - osCreateViManager(254); + osCreateViManager(OS_PRIORITY_VIMGR); - gViConfigFeatures = 66; - gViConfigXScale = 1.0; - gViConfigYScale = 1.0; + gViConfigFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF; + gViConfigXScale = 1.0f; + gViConfigYScale = 1.0f; switch (osTvType) { case OS_TV_NTSC: - D_8009B290 = 2; + gViConfigModeType = OS_VI_NTSC_LAN1; gViConfigMode = osViModeNtscLan1; break; case OS_TV_MPAL: - D_8009B290 = 30; + gViConfigModeType = OS_VI_MPAL_LAN1; gViConfigMode = osViModeMpalLan1; break; case OS_TV_PAL: - D_8009B290 = 44; + gViConfigModeType = OS_VI_FPAL_LAN1; gViConfigMode = osViModeFpalLan1; gViConfigYScale = 0.833f; break; @@ -113,10 +117,11 @@ void Idle_InitVideo(void) { void Idle_ThreadEntry(void* arg) { Idle_InitVideo(); - osCreatePiManager(150, &gPiMgrCmdQ, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff)); + osCreatePiManager(OS_PRIORITY_PIMGR, &gPiMgrCmdQueue, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff)); StackCheck_Init(&sMainStackInfo, sMainStack, STACK_TOP(sMainStack), 0, 0x400, "main"); osCreateThread(&sMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, STACK_TOP(sMainStack), Z_PRIORITY_MAIN); osStartThread(&sMainThread); - osSetThreadPri(NULL, 0); + osSetThreadPri(NULL, OS_PRIORITY_IDLE); - do { } while (true); } + for (;;) {} +} diff --git a/src/boot_O2_g3/idle_extra_bss.c b/src/boot_O2_g3/idle_extra_bss.c deleted file mode 100644 index 24fc0083f..000000000 --- a/src/boot_O2_g3/idle_extra_bss.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "PR/ultratypes.h" -#include "ultra64/vi.h" - -// This file is currently required to fix bss reordering in idle.c. It is not resolved by prevent_bss_reordering.h . -// Hopefully it will not be permanent. - -OSViMode gViConfigMode; -u8 D_8009B290; diff --git a/src/boot_O2_g3/viconfig.c b/src/boot_O2_g3/viconfig.c index 6539421e6..ccba4e932 100644 --- a/src/boot_O2_g3/viconfig.c +++ b/src/boot_O2_g3/viconfig.c @@ -1,14 +1,17 @@ #include "global.h" +#include "idle.h" -void ViConfig_UpdateVi(u32 mode) { - if (mode != 0) { +void ViConfig_UpdateVi(u32 black) { + if (black) { switch (osTvType) { case OS_TV_MPAL: osViSetMode(&osViModeMpalLan1); break; + case OS_TV_PAL: osViSetMode(&osViModePalLan1); break; + case OS_TV_NTSC: default: osViSetMode(&osViModeNtscLan1); @@ -42,11 +45,11 @@ void ViConfig_UpdateVi(u32 mode) { } } - gViConfigUseDefault = mode; + gViConfigUseBlack = black; } void ViConfig_UpdateBlack(void) { - if (gViConfigUseDefault != 0) { + if (gViConfigUseBlack) { osViBlack(true); } else { osViBlack(false); diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 71b7ae846..477fd3f68 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -4,10 +4,10 @@ #include "stackcheck.h" #include "z64thread.h" -u32 sDmaMgrDmaBuffSize = 0x2000; +size_t gDmaMgrDmaBuffSize = 0x2000; StackEntry sDmaMgrStackInfo; -u16 numDmaEntries; +u16 sNumDmaEntries; OSMesgQueue sDmaMgrMsgQueue; OSMesg sDmaMgrMsgs[32]; OSThread sDmaMgrThread; @@ -18,7 +18,7 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) { OSMesgQueue queue; OSMesg msg[1]; s32 ret; - size_t buffSize = sDmaMgrDmaBuffSize; + size_t buffSize = gDmaMgrDmaBuffSize; osInvalDCache(ram, size); osCreateMesgQueue(&queue, msg, ARRAY_COUNT(msg)); @@ -127,7 +127,7 @@ void DmaMgr_ProcessMsg(DmaRequest* req) { index = DmaMgr_FindDmaIndex(vrom); - if ((index >= 0) && (index < numDmaEntries)) { + if ((index >= 0) && (index < sNumDmaEntries)) { dmaEntry = &dmadata[index]; if (dmaEntry->romEnd == 0) { if (dmaEntry->vromEnd < (vrom + size)) { @@ -225,7 +225,7 @@ void DmaMgr_Start(void) { idx++; } - numDmaEntries = idx; + sNumDmaEntries = idx; } osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs)); diff --git a/src/code/game.c b/src/code/game.c index 685b2f492..50139348c 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -1,5 +1,6 @@ #include "global.h" #include "audiomgr.h" +#include "idle.h" #include "system_malloc.h" #include "z64debug_text.h" #include "z64rumble.h" diff --git a/src/code/graph.c b/src/code/graph.c index f4f04fc1f..6d4665b39 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,6 +1,7 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" +#include "idle.h" #include "system_malloc.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" diff --git a/src/code/main.c b/src/code/main.c index 381c42fac..f969df70d 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,34 +1,41 @@ -/** - * This file has unmigrated bss. It is not practical to migrate it until we have a better way of dealing with bss - * reordering than just prevent_bss_reordering.h: there is too much of it to control, and it cannot be split into - * separate files since most of it is at addresses ending in 8. - */ - -#include "global.h" #include "audiomgr.h" -#include "buffers.h" +#include "idle.h" +#include "irqmgr.h" +#include "padmgr.h" +#include "scheduler.h" #include "stack.h" #include "stackcheck.h" #include "system_heap.h" #include "z64thread.h" -extern OSMesgQueue sSiIntMsgQ; -extern OSMesg sSiIntMsgBuf[1]; -extern u32 gSegments[NUM_SEGMENTS]; -extern SchedContext gSchedContext; -extern IrqMgrClient irqClient; -extern OSMesgQueue irqMgrMsgQ; -extern OSMesg irqMgrMsgBuf[60]; -extern OSThread gGraphThread; -extern STACK(sGraphStack, 0x1800); -extern STACK(sSchedStack, 0x600); -extern STACK(sAudioStack, 0x800); -extern STACK(sPadMgrStack, 0x500); -extern StackEntry sGraphStackInfo; -extern StackEntry sSchedStackInfo; -extern StackEntry sAudioStackInfo; -extern StackEntry sPadMgrStackInfo; -extern AudioMgr sAudioMgr; +// Variables are put before most headers as a hacky way to bypass bss reordering +OSMesgQueue sSerialEventQueue; +OSMesg sSerialMsgBuf[1]; +u32 gSegments[NUM_SEGMENTS]; +SchedContext gSchedContext; +IrqMgrClient sIrqClient; +OSMesgQueue sIrqMgrMsgQueue; +OSMesg sIrqMgrMsgBuf[60]; +OSThread gGraphThread; +STACK(sGraphStack, 0x1800); +STACK(sSchedStack, 0x600); +STACK(sAudioStack, 0x800); +STACK(sPadMgrStack, 0x500); +StackEntry sGraphStackInfo; +StackEntry sSchedStackInfo; +StackEntry sAudioStackInfo; +StackEntry sPadMgrStackInfo; +AudioMgr sAudioMgr; +static s32 sBssPad; +PadMgr gPadMgr; + +#include "main.h" +#include "buffers.h" +#include "global.h" + +s32 gScreenWidth = SCREEN_WIDTH; +s32 gScreenHeight = SCREEN_HEIGHT; +size_t gSystemHeapSize = 0; void Main(void* arg) { intptr_t fb; @@ -46,30 +53,31 @@ void Main(void* arg) { sysHeap = gSystemHeap; fb = 0x80780000; - startHeapSize = fb - sysHeap; - SystemHeap_Init(sysHeap, startHeapSize); + gSystemHeapSize = fb - sysHeap; + SystemHeap_Init(sysHeap, gSystemHeapSize); Regs_Init(); R_ENABLE_ARENA_DBG = 0; - osCreateMesgQueue(&sSiIntMsgQ, sSiIntMsgBuf, ARRAY_COUNT(sSiIntMsgBuf)); - osSetEventMesg(OS_EVENT_SI, &sSiIntMsgQ, NULL); + osCreateMesgQueue(&sSerialEventQueue, sSerialMsgBuf, ARRAY_COUNT(sSerialMsgBuf)); + osSetEventMesg(OS_EVENT_SI, &sSerialEventQueue, NULL); - osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf)); + osCreateMesgQueue(&sIrqMgrMsgQueue, sIrqMgrMsgBuf, ARRAY_COUNT(sIrqMgrMsgBuf)); StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched"); - Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr); + Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, gViConfigModeType, 1, &gIrqMgr); CIC6105_AddRomInfoFaultPage(); - IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ); + IrqMgr_AddClient(&gIrqMgr, &sIrqClient, &sIrqMgrMsgQueue); StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio"); - AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); + AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, Z_THREAD_ID_AUDIOMGR, &gSchedContext, + &gIrqMgr); StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr"); - PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack)); + PadMgr_Init(&sSerialEventQueue, &gIrqMgr, Z_THREAD_ID_PADMGR, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack)); AudioMgr_Unlock(&sAudioMgr); @@ -81,7 +89,7 @@ void Main(void* arg) { while (!exit) { msg = NULL; - osRecvMesg(&irqMgrMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK); + osRecvMesg(&sIrqMgrMsgQueue, (OSMesg*)&msg, OS_MESG_BLOCK); if (msg == NULL) { break; } @@ -90,12 +98,13 @@ void Main(void* arg) { case OS_SC_PRE_NMI_MSG: Nmi_SetPrenmiStart(); break; + case OS_SC_NMI_MSG: exit = true; break; } } - IrqMgr_RemoveClient(&gIrqMgr, &irqClient); + IrqMgr_RemoveClient(&gIrqMgr, &sIrqClient); osDestroyThread(&gGraphThread); } diff --git a/src/code/sched.c b/src/code/sched.c index 29c558ea7..fb7a0073c 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "idle.h" #include "stackcheck.h" #include "z64thread.h" @@ -20,14 +21,12 @@ u64* gAudioSPDataPtr; u32 gAudioSPDataSize; void Sched_SwapFramebuffer(CfbInfo* cfbInfo) { - s32 one = 1; - if (cfbInfo->swapBuffer != NULL) { osViSwapBuffer(cfbInfo->swapBuffer); cfbInfo->updateRate2 = cfbInfo->updateRate; if ((SREG(62) == 0) && (cfbInfo->viMode != NULL)) { - D_80096B20 = one; + D_80096B20 = 1; osViSetMode(cfbInfo->viMode); osViSetSpecialFeatures(cfbInfo->features); osViSetXScale(cfbInfo->xScale); @@ -43,7 +42,7 @@ void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo) { sched->shouldUpdateVi = false; if (gIrqMgrResetStatus == 0) { - ViConfig_UpdateVi(0); + ViConfig_UpdateVi(false); } } Sched_SwapFramebuffer(cfbInfo); @@ -53,7 +52,7 @@ void Sched_HandleReset(SchedContext* sched) { } void Sched_HandleStop(SchedContext* sched) { - ViConfig_UpdateVi(1); + ViConfig_UpdateVi(true); } /** @@ -600,7 +599,7 @@ void Sched_ThreadEntry(void* arg) { * Registers an IrqClient for the thread and fault client for the SchedContext. * Directs the OS to send SP and DP OS messages to interruptQ when the RSP or RDP signal task completion. */ -void Sched_Init(SchedContext* sched, void* stack, OSPri pri, UNK_TYPE arg3, UNK_TYPE arg4, IrqMgr* irqMgr) { +void Sched_Init(SchedContext* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr) { bzero(sched, sizeof(SchedContext)); sched->shouldUpdateVi = true; diff --git a/src/code/sys_ucode.c b/src/code/sys_ucode.c index f9433eab2..df59275e2 100644 --- a/src/code/sys_ucode.c +++ b/src/code/sys_ucode.c @@ -4,12 +4,6 @@ */ #include "global.h" -extern u64 rspbootTextStart[]; -extern u64 rspbootTextEnd[]; - -extern u64 gspF3DZEX2_NoN_PosLight_fifoTextStart[]; -extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[]; - u64* initialgspUcodeText = gspF3DZEX2_NoN_PosLight_fifoTextStart; u64* initialgspUcodeData = gspF3DZEX2_NoN_PosLight_fifoDataStart; diff --git a/src/code/z_play.c b/src/code/z_play.c index c19b3c277..ac9c1eacc 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,5 +1,6 @@ #include "global.h" #include "buffers.h" +#include "idle.h" #include "z64bombers_notebook.h" #include "z64debug_display.h" #include "z64quake.h" diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index 097d4d946..51f2d77f7 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -8,7 +8,7 @@ void PreNMI_Stop(PreNMIState* this) { void PreNMI_Update(PreNMIState* this) { if (this->timer == 0) { - ViConfig_UpdateVi(1); + ViConfig_UpdateVi(true); PreNMI_Stop(this); } else { this->timer--; diff --git a/src/code/z_skin.c b/src/code/z_skin.c index 0d3e0bf85..0b7c5d5a0 100644 --- a/src/code/z_skin.c +++ b/src/code/z_skin.c @@ -4,7 +4,7 @@ // 60 is an arbitrary number which specifies the max amount of limbs per skeleton this system supports MtxF gSkinLimbMatrices[60]; -static s32 sUnused; +static s32 sBssPad; void Skin_UpdateVertices(MtxF* mtx, SkinVertex* skinVertices, SkinLimbModif* modifEntry, Vtx* vtxBuf, Vec3f* pos) { SkinVertex* vertexEntry; diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 09b34792b..1d8ca14b0 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -57,7 +57,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP), }; -s32 sUnused; +static s32 sBssPad; void ArrowFire_SetupAction(ArrowFire* this, ArrowFireActionFunc actionFunc) { this->actionFunc = actionFunc; diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index acfe454b8..b3df6c265 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -21,7 +21,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play); #include "overlays/ovl_Arrow_Ice/ovl_Arrow_Ice.c" -s32 unused; // Needed for bss +static s32 sBssPad; ActorInit Arrow_Ice_InitVars = { ACTOR_ARROW_ICE, diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index d0b9ce3ba..8b4f8cad9 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -37,7 +37,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP), }; -static s32 sUnused; +static s32 sBssPad; void ArrowLight_SetupAction(ArrowLight* this, ArrowLightActionFunc actionFunc) { this->actionFunc = actionFunc; 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 4e4b9b9bc..18d670830 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 @@ -41,7 +41,7 @@ ActorInit Bg_Iknin_Susceil_InitVars = { (ActorFunc)BgIkninSusceil_Draw, }; -static s32 unused = 0; +static s32 sPad = 0; static f32 D_80C0B0E4 = 960.0f; static Vec2f D_80C0B0E8 = { -320.0f, 0.0f }; static s8 D_80C0B0F0[] = { 0x00, 0x00, 0x07, 0x0A, 0x0A, 0x0B, 0x0B, 0x00 }; diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 122415814..9334d2d29 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -68,7 +68,7 @@ Vec3f D_80947B10[] = { { -1.0f, -2.0f, -0.2f }, { 0.0f, -2.0f, -0.2f }, { 1.0f, -2.0f, -0.2f }, { 0.0f, -3.0f, -0.5f }, }; -static s32 sPad[2] = { 0 }; +static s32 sPad = 0; #include "overlays/ovl_En_Sda/ovl_En_Sda.c" diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 6920f11fd..69bfc8b7b 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -30,7 +30,7 @@ ActorInit En_Tanron1_InitVars = { (ActorFunc)EnTanron1_Draw, }; -static s32 sPad[2] = { 0 }; +static s32 sPad = 0; #include "overlays/ovl_En_Tanron1/ovl_En_Tanron1.c" 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 64dbaa034..2354f9f62 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -3,7 +3,6 @@ * Overlay: ovl_Obj_Hunsui * Description: Switch-Activated Geyser */ -#include "prevent_bss_reordering.h" #include "z_obj_hunsui.h" #include "objects/object_hunsui/object_hunsui.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1b1bcedb5..9e0afdbe9 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2,11 +2,11 @@ { 0x80080000:("entrypoint",), 0x80080060:("bootproc",), - 0x80080150:("Idle_ClearMemory",), - 0x80080180:("Idle_InitFramebuffer",), - 0x8008019C:("Idle_InitScreen",), - 0x800801EC:("Idle_InitMemory",), - 0x80080250:("Idle_InitCodeAndMemory",), + 0x80080150:("Main_ClearMemory",), + 0x80080180:("Main_InitFramebuffer",), + 0x8008019C:("Main_InitScreen",), + 0x800801EC:("Main_InitMemory",), + 0x80080250:("Main_Init",), 0x80080300:("Main_ThreadEntry",), 0x8008038C:("Idle_InitVideo",), 0x80080514:("Idle_ThreadEntry",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 92ff9a805..d856a56dd 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -18,7 +18,7 @@ 0x80096B30:("gViConfigXScale","f32","",0x4), 0x80096B34:("gViConfigYScale","f32","",0x4), 0x80096B40:("gCartHandle","OSPiHandle*","",0x4), - 0x80096B50:("sDmaMgrDmaBuffSize","u32","",0x4), + 0x80096B50:("gDmaMgrDmaBuffSize","u32","",0x4), 0x80096B60:("gIrqMgrResetStatus","vs32","",0x4), 0x80096B68:("sIrqMgrResetTime","volatile OSTime","",0x8), 0x80096B70:("sIrqMgrRetraceTime","volatile OSTime","",0x8), @@ -295,11 +295,11 @@ 0x8009A840:("sMainStack","u8","[2304]",0x900), 0x8009B140:("sMainStackInfo","StackEntry","",0x1c), 0x8009B160:("sPiMgrCmdBuff","OSMesg","[50]",0xc8), - 0x8009B228:("gPiMgrCmdQ","OSMesgQueue","",0x18), + 0x8009B228:("gPiMgrCmdQueue","OSMesgQueue","",0x18), 0x8009B240:("gViConfigMode","OSViMode","",0x50), - 0x8009B290:("D_8009B290","u8","",0x1), + 0x8009B290:("gViConfigModeType","u8","",0x1), 0x8009B2A0:("sDmaMgrStackInfo","StackEntry","",0x1c), - 0x8009B2BC:("numDmaEntries","u16","",0x2), + 0x8009B2BC:("sNumDmaEntries","u16","",0x2), 0x8009B2C0:("sDmaMgrMsgQueue","OSMesgQueue","",0x18), 0x8009B2D8:("sDmaMgrMsgs","OSMesg","[32]",0x80), 0x8009B358:("sDmaMgrThread","OSThread","",0x1b0), @@ -2157,7 +2157,7 @@ 0x801D150C:("gFramerateDivisorThird","f32","",0x4), 0x801D1520:("gScreenWidth","s32","",0x4), 0x801D1524:("gScreenHeight","s32","",0x4), - 0x801D1528:("startHeapSize","UNK_TYPE4","",0x4), + 0x801D1528:("gSystemHeapSize","UNK_TYPE4","",0x4), 0x801D1530:("sPadMgrInstance","PadMgr*","",0x4), 0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4), 0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4), @@ -4035,13 +4035,13 @@ 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), 0x801F80F8:("sGraphCfbInfos","UNK_TYPE1","",0x1), 0x801F8150:("sGraphTaskStartTime","u64","",0x8), - 0x801F8160:("sSiIntMsgQ","OSMesgQueue","",0x18), - 0x801F8178:("sSiIntMsgBuf","OSMesg","[1]",0x4), + 0x801F8160:("sSerialEventQueue","OSMesgQueue","",0x18), + 0x801F8178:("sSerialMsgBuf","OSMesg","[1]",0x4), 0x801F8180:("gSegments","u32","[16]",0x40), 0x801F81C0:("gSchedContext","SchedContext","",0x338), - 0x801F84F8:("irqClient","IrqMgrClient","",0x8), - 0x801F8500:("irqMgrMsgQ","OSMesgQueue","",0x18), - 0x801F8518:("irqMgrMsgBuf","OSMesg","[60]",0xf0), + 0x801F84F8:("sIrqClient","IrqMgrClient","",0x8), + 0x801F8500:("sIrqMgrMsgQueue","OSMesgQueue","",0x18), + 0x801F8518:("sIrqMgrMsgBuf","OSMesg","[60]",0xf0), 0x801F8608:("gGraphThread","OSThread","",0x1b0), 0x801F87B8:("sGraphStack","u8","[6144]",0x1800), 0x801F9FB8:("sSchedStack","u8","[1536]",0x600), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 276d4954c..c94e9cc72 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -1,9 +1,9 @@ asm/non_matchings/boot/boot_main/bootproc.s,bootproc,0x80080060,0x3C -asm/non_matchings/boot/idle/Idle_ClearMemory.s,Idle_ClearMemory,0x80080150,0xC -asm/non_matchings/boot/idle/Idle_InitFramebuffer.s,Idle_InitFramebuffer,0x80080180,0x7 -asm/non_matchings/boot/idle/Idle_InitScreen.s,Idle_InitScreen,0x8008019C,0x14 -asm/non_matchings/boot/idle/Idle_InitMemory.s,Idle_InitMemory,0x800801EC,0x19 -asm/non_matchings/boot/idle/Idle_InitCodeAndMemory.s,Idle_InitCodeAndMemory,0x80080250,0x2C +asm/non_matchings/boot/idle/Main_ClearMemory.s,Main_ClearMemory,0x80080150,0xC +asm/non_matchings/boot/idle/Main_InitFramebuffer.s,Main_InitFramebuffer,0x80080180,0x7 +asm/non_matchings/boot/idle/Main_InitScreen.s,Main_InitScreen,0x8008019C,0x14 +asm/non_matchings/boot/idle/Main_InitMemory.s,Main_InitMemory,0x800801EC,0x19 +asm/non_matchings/boot/idle/Main_Init.s,Main_Init,0x80080250,0x2C asm/non_matchings/boot/idle/Main_ThreadEntry.s,Main_ThreadEntry,0x80080300,0x23 asm/non_matchings/boot/idle/Idle_InitVideo.s,Idle_InitVideo,0x8008038C,0x62 asm/non_matchings/boot/idle/Idle_ThreadEntry.s,Idle_ThreadEntry,0x80080514,0x33 From f54a9b283144eba21ba413e4fdc98a6f8484a655 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 28 Jun 2023 20:49:15 -0700 Subject: [PATCH 018/121] Some Gameplay keep docs (starts at the top) (#1310) * bottles * hookshot * swords * masks * remove _tex from outnames * Headers * 003400 Vtx * unknown mask * LinkMask name based on renders --- assets/xml/objects/gameplay_keep.xml | 135 ++++++++++-------- src/code/z_player_lib.c | 10 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 2 +- 3 files changed, 80 insertions(+), 67 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 8a78a1709..8b1c482c2 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -1,77 +1,90 @@  - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1288,8 +1301,8 @@ - - + + diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2573fc48a..e30dec3f1 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -2529,9 +2529,9 @@ Gfx* D_801C0B20[] = { 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 + gFierceDeityMaskDL, // PLAYER_MASK_FIERCE_DEITY + gGoronMaskDL, // PLAYER_MASK_GORON + gZoraMaskDL, // PLAYER_MASK_ZORA gDekuMaskDL, // PLAYER_MASK_DEKU object_mask_boy_DL_000900, object_mask_goron_DL_0014A0, @@ -3322,10 +3322,10 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) { 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++, gBottleContentsDL); } - gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0003E0); + gSPDisplayList(POLY_XLU_DISP++, gBottleGlassDL); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index ba91165c8..ba30287f5 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -327,7 +327,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) { f0 = sqrtf(SQ(sp68.y) + sp48); Matrix_Scale(0.015f, 0.015f, f0 * 0.01f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_0008D0); + gSPDisplayList(POLY_OPA_DISP++, gHookshotChainDL); func_801229A0(play, player); CLOSE_DISPS(play->state.gfxCtx); From 5c7d7451023adb53e75f306cbdf4728d60e1ef16 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 2 Jul 2023 07:31:54 -0700 Subject: [PATCH 019/121] Some partial objects cleanup (#1313) * tanron1 * gm * tanron4 * sekihi * dkjail * dor02 * dor04 * blobs * comments * parens * Unknown --- assets/xml/objects/object_dkjail_obj.xml | 9 +++-- assets/xml/objects/object_dor02.xml | 3 +- assets/xml/objects/object_dor04.xml | 3 +- assets/xml/objects/object_gm.xml | 4 +- assets/xml/objects/object_sekihig.xml | 27 +++++++------ assets/xml/objects/object_sekihil.xml | 27 +++++++------ assets/xml/objects/object_sekihin.xml | 28 +++++++------- assets/xml/objects/object_sekihiz.xml | 11 +++--- assets/xml/objects/object_tanron1.xml | 4 +- assets/xml/objects/object_tanron4.xml | 38 +++++++++---------- assets/xml/objects/object_zog.xml | 2 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 2 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 37 ++++++++++-------- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 2 +- .../actors/ovl_En_Tanron4/z_en_tanron4.h | 4 +- 15 files changed, 109 insertions(+), 92 deletions(-) diff --git a/assets/xml/objects/object_dkjail_obj.xml b/assets/xml/objects/object_dkjail_obj.xml index d0d2775c3..0827c3814 100644 --- a/assets/xml/objects/object_dkjail_obj.xml +++ b/assets/xml/objects/object_dkjail_obj.xml @@ -1,9 +1,10 @@  + - - - - + + + + diff --git a/assets/xml/objects/object_dor02.xml b/assets/xml/objects/object_dor02.xml index 3cc3d1411..402fdd499 100644 --- a/assets/xml/objects/object_dor02.xml +++ b/assets/xml/objects/object_dor02.xml @@ -1,6 +1,7 @@  + - + diff --git a/assets/xml/objects/object_dor04.xml b/assets/xml/objects/object_dor04.xml index 4e78d9efe..afb348c7d 100644 --- a/assets/xml/objects/object_dor04.xml +++ b/assets/xml/objects/object_dor04.xml @@ -1,6 +1,7 @@  + - + diff --git a/assets/xml/objects/object_gm.xml b/assets/xml/objects/object_gm.xml index 50c852ade..80edb8aeb 100644 --- a/assets/xml/objects/object_gm.xml +++ b/assets/xml/objects/object_gm.xml @@ -1,6 +1,6 @@  + - - + diff --git a/assets/xml/objects/object_sekihig.xml b/assets/xml/objects/object_sekihig.xml index bb995bed4..de104df55 100644 --- a/assets/xml/objects/object_sekihig.xml +++ b/assets/xml/objects/object_sekihig.xml @@ -1,16 +1,19 @@  + - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_sekihil.xml b/assets/xml/objects/object_sekihil.xml index fb9903875..3dbb57774 100644 --- a/assets/xml/objects/object_sekihil.xml +++ b/assets/xml/objects/object_sekihil.xml @@ -1,16 +1,19 @@  + - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_sekihin.xml b/assets/xml/objects/object_sekihin.xml index 104f5f133..300a9ad58 100644 --- a/assets/xml/objects/object_sekihin.xml +++ b/assets/xml/objects/object_sekihin.xml @@ -1,17 +1,19 @@  + - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_sekihiz.xml b/assets/xml/objects/object_sekihiz.xml index 9563d8b42..806279c98 100644 --- a/assets/xml/objects/object_sekihiz.xml +++ b/assets/xml/objects/object_sekihiz.xml @@ -1,9 +1,10 @@  + - - - - - + + + + + diff --git a/assets/xml/objects/object_tanron1.xml b/assets/xml/objects/object_tanron1.xml index 99a39e534..d5ec3be03 100644 --- a/assets/xml/objects/object_tanron1.xml +++ b/assets/xml/objects/object_tanron1.xml @@ -1,6 +1,6 @@  + - - + diff --git a/assets/xml/objects/object_tanron4.xml b/assets/xml/objects/object_tanron4.xml index 491e9a587..ea342d448 100644 --- a/assets/xml/objects/object_tanron4.xml +++ b/assets/xml/objects/object_tanron4.xml @@ -1,30 +1,30 @@  - + - - - - - + + + + + - - + + - - - - - - - - - - + + + + + + + + + + - + diff --git a/assets/xml/objects/object_zog.xml b/assets/xml/objects/object_zog.xml index 8d9e6ebdb..b6d9d26ed 100644 --- a/assets/xml/objects/object_zog.xml +++ b/assets/xml/objects/object_zog.xml @@ -19,7 +19,7 @@ - + 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 70bc5931f..344fcce84 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 @@ -123,7 +123,7 @@ void BgDkjailIvy_Init(Actor* thisx, PlayState* play) { if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) { Actor_Kill(&this->dyna.actor); } else { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_dkjail_obj_Colheader_0011A8); + DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol); Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); this->alpha = 255; 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 b6717aac0..e26c1769e 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -39,40 +39,44 @@ ActorInit En_Sekihi_InitVars = { static s16 sObjectIds[] = { OBJECT_SEKIHIL, OBJECT_SEKIHIG, OBJECT_SEKIHIN, OBJECT_SEKIHIZ, OBJECT_ZOG }; static Gfx* sOpaDLists[] = { - gGraveTriforceSymbolDL, gGraveGoronSymbolDL, gGraveKokiriSymbolDL, gTombSongOfSoaringDL, gMikauGraveDL, + gSunsSongGraveTriforceDL, gSunsSongGraveGoronDL, gSunsSongGraveKokiriDL, gSongOfSoaringPedestalDL, gMikauGraveDL, }; static Gfx* sXluDLists[] = { - gSunSongTriforceSymbolDL, gSunSongGoronSymbolDL, gSunSongKokiriSymbolDL, gSekihizEmptyDL, gMikauGraveDirtDL, + gSunsSongGraveTriforceSymbolsDL, + gSunsSongGraveGoronSymbolsDL, + gSunsSongGraveKokiriSymbolsDL, + gSongOfSoaringPedestalEmptyDL, + gMikauGraveDirtDL, }; static u16 sTextIds[] = { 0, 0, 0, 0, 0x1018 }; void EnSekihi_Init(Actor* thisx, PlayState* play) { EnSekihi* this = THIS; - s32 params = ENSIKIHI_GET_TYPE(thisx); + s32 type = ENSIKIHI_GET_TYPE(thisx); s32 objectIndex; s32 pad; - if ((params < SEKIHI_TYPE_0 || params >= SEKIHI_TYPE_MAX) || sOpaDLists[params] == NULL) { + if (((type < SEKIHI_TYPE_0) || (type >= SEKIHI_TYPE_MAX)) || (sOpaDLists[type] == NULL)) { Actor_Kill(&this->dyna.actor); return; } - if ((params == SEKIHI_TYPE_4) && + if ((type == 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); } - objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[params]); + objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]); if (objectIndex >= 0) { this->objectIndex = objectIndex; } this->actionFunc = func_80A44DE8; - this->opaDList = sOpaDLists[params]; - this->xluDList = sXluDLists[params]; - this->dyna.actor.textId = sTextIds[params]; + this->opaDList = sOpaDLists[type]; + this->xluDList = sXluDLists[type]; + this->dyna.actor.textId = sTextIds[type]; this->dyna.actor.focus.pos.y = this->dyna.actor.world.pos.y + 60.0f; Actor_SetScale(&this->dyna.actor, 0.1f); } @@ -85,16 +89,17 @@ void EnSekihi_Destroy(Actor* thisx, PlayState* play) { void func_80A44DE8(EnSekihi* this, PlayState* play) { CollisionHeader* colHeader = NULL; - s32 params; + s32 type; CollisionHeader* colHeaders[] = { - &gSekihilCol, &gSekihigCol, &gSekihinCol, &gSekihizCol, &gObjectZogCol, + &gSunsSongGraveTriforceCol, &gSunsSongGraveGoronCol, &gSunsSongGraveKokiriCol, + &gSongOfSoaringPedestalCol, &gMikauGraveCol, }; - params = ENSIKIHI_GET_TYPE(&this->dyna.actor); + type = ENSIKIHI_GET_TYPE(&this->dyna.actor); if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { this->dyna.actor.objBankIndex = this->objectIndex; this->dyna.actor.draw = EnSekihi_Draw; - if (params == SEKIHI_TYPE_4) { + if (type == SEKIHI_TYPE_4) { this->actionFunc = func_80A450B0; } else { this->actionFunc = EnSekihi_DoNothing; @@ -102,12 +107,12 @@ void func_80A44DE8(EnSekihi* this, PlayState* play) { Actor_SetObjectDependency(play, &this->dyna.actor); DynaPolyActor_Init(&this->dyna, 0); - if (colHeaders[params] != NULL) { - CollisionHeader_GetVirtual(colHeaders[params], &colHeader); + if (colHeaders[type] != NULL) { + CollisionHeader_GetVirtual(colHeaders[type], &colHeader); } this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - if ((params == SEKIHI_TYPE_4) && (INV_CONTENT(ITEM_MASK_ZORA) != ITEM_MASK_ZORA)) { + if ((type == SEKIHI_TYPE_4) && (INV_CONTENT(ITEM_MASK_ZORA) != ITEM_MASK_ZORA)) { Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index 074eaec79..8ea471603 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -48,7 +48,7 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) { EnTanron4* this = THIS; SkelAnime_InitFlex(play, &this->skelAnime, &gSeagullSkel, &gSeagullFlapAnim, this->jointTable, this->morphTable, - OBJECT_TANRON4_LIMB_MAX); + SEAGULL_LIMB_RIGHT_WING_MAX); thisx->flags &= ~ACTOR_FLAG_1; thisx->speed = 3.0f + KREG(48); diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h index 36a48c91a..93183dda9 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h @@ -19,8 +19,8 @@ typedef struct EnTanron4 { /* 0x15C */ s16 rollTarget; /* 0x160 */ f32 timeInfluence; /* 0x164 */ SkelAnime skelAnime; - /* 0x1A8 */ Vec3s jointTable[OBJECT_TANRON4_LIMB_MAX]; - /* 0x1EA */ Vec3s morphTable[OBJECT_TANRON4_LIMB_MAX]; + /* 0x1A8 */ Vec3s jointTable[SEAGULL_LIMB_RIGHT_WING_MAX]; + /* 0x1EA */ Vec3s morphTable[SEAGULL_LIMB_RIGHT_WING_MAX]; /* 0x022C */ EnTanron4ActionFunc actionFunc; } EnTanron4; // size = 0x230 From 5fd8afd1db04ce088e0989c4f1800782d22078db Mon Sep 17 00:00:00 2001 From: Stuff is on GitLab Date: Mon, 3 Jul 2023 12:38:15 +0200 Subject: [PATCH 020/121] fix: wrong offset-comments in GraphicsContext (#1314) * fix: wrong offset-comments in GraphicsContext * fix: match gfx member names to offsets --- include/gfx.h | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/include/gfx.h b/include/gfx.h index dfbd78d74..b9bbb744d 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -126,31 +126,31 @@ typedef struct GraphicsContext { /* 0x05C */ OSMesgQueue queue; /* 0x074 */ char unk_74[0x04]; /* 0x078 */ OSScTask task; - /* 0x0E0 */ char unk_E0[0xD0]; - /* 0x1B0 */ Gfx* workBuffer; - /* 0x1B4 */ TwoHeadGfxArena work; - /* 0x1C4 */ Gfx* debugBuffer; - /* 0x1C8 */ TwoHeadGfxArena debug; - /* 0x1D8 */ UNK_TYPE1 unk_1D8[0xAC]; - /* 0x284 */ OSViMode* viMode; - /* 0x288 */ void* zbuffer; - /* 0x28C */ char unk_28C[0x1C]; - /* 0x2A8 */ TwoHeadGfxArena overlay; // "Zelda 4" - /* 0x2B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" - /* 0x2C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" - /* 0x2D8 */ u32 gfxPoolIdx; - /* 0x2DC */ u16* curFrameBuffer; - /* 0x2E0 */ char unk_2E0[0x4]; - /* 0x2E4 */ u32 viConfigFeatures; - /* 0x2E8 */ char unk_2E8[0x2]; - /* 0x2EA */ u8 updateViMode; - /* 0x2EB */ u8 framebufferIndex; - /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2F0 */ u32 callbackArg; - /* 0x2F4 */ f32 xScale; - /* 0x2F8 */ f32 yScale; - /* 0x2FC */ GfxMasterList* masterList; -} GraphicsContext; // size = 0x300 + /* 0x0D0 */ char unk_D0[0xD0]; + /* 0x1A0 */ Gfx* workBuffer; + /* 0x1A4 */ TwoHeadGfxArena work; + /* 0x1B4 */ Gfx* debugBuffer; + /* 0x1B8 */ TwoHeadGfxArena debug; + /* 0x1C8 */ UNK_TYPE1 unk_1C8[0xAC]; + /* 0x274 */ OSViMode* viMode; + /* 0x278 */ void* zbuffer; + /* 0x27C */ char unk_27C[0x1C]; + /* 0x298 */ TwoHeadGfxArena overlay; // "Zelda 4" + /* 0x2A8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" + /* 0x2B8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" + /* 0x2C8 */ u32 gfxPoolIdx; + /* 0x2CC */ u16* curFrameBuffer; + /* 0x2D0 */ char unk_2D0[0x4]; + /* 0x2D4 */ u32 viConfigFeatures; + /* 0x2D8 */ char unk_2D8[0x2]; + /* 0x2DA */ u8 updateViMode; + /* 0x2DB */ u8 framebufferIndex; + /* 0x2DC */ void (*callback)(struct GraphicsContext*, u32); + /* 0x2E0 */ u32 callbackArg; + /* 0x2E4 */ f32 xScale; + /* 0x2E8 */ f32 yScale; + /* 0x2EC */ GfxMasterList* masterList; +} GraphicsContext; // size = 0x2F0 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); From 3b1b054e933009f4567c4170da2d2fa76a04a5b5 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 3 Jul 2023 22:08:30 +0200 Subject: [PATCH 021/121] Object names rename/comments from the OoT equivalent (#1282) * object_fu(Bean Seller) * object_bombf (Bomb flower) * object_ds2 (Potion Shop Guy) * object_fu (guruguru) * object_hata (Red Flag on Post) * object_lightswitch (Sun Switch) * object_rr (Like Like) * Tower Collapse Bars? * object_vm (Beamos) * ups * object_fu EnumName * improvements * Offset * improvements * object_ms enums and outnames * missing prefix * improvements * improvements --- assets/xml/objects/object_bombf.xml | 17 +-- assets/xml/objects/object_fu.xml | 105 ++++++++++-------- assets/xml/objects/object_hata.xml | 81 ++++++++------ assets/xml/objects/object_lightswitch.xml | 7 +- assets/xml/objects/object_ms.xml | 67 ++++++----- assets/xml/objects/object_rr.xml | 8 +- assets/xml/objects/object_vm.xml | 63 ++++++----- assets/xml/objects/object_zg.xml | 8 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 6 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 8 +- src/overlays/actors/ovl_En_Hata/z_en_hata.c | 11 +- src/overlays/actors/ovl_En_Hata/z_en_hata.h | 4 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 29 +++-- 15 files changed, 231 insertions(+), 187 deletions(-) diff --git a/assets/xml/objects/object_bombf.xml b/assets/xml/objects/object_bombf.xml index f27d67bc1..ca635875b 100644 --- a/assets/xml/objects/object_bombf.xml +++ b/assets/xml/objects/object_bombf.xml @@ -1,11 +1,14 @@  - - - - - - - + + + + + + + + + + diff --git a/assets/xml/objects/object_fu.xml b/assets/xml/objects/object_fu.xml index fb41a85e8..c70db90e8 100644 --- a/assets/xml/objects/object_fu.xml +++ b/assets/xml/objects/object_fu.xml @@ -1,52 +1,61 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_hata.xml b/assets/xml/objects/object_hata.xml index 9271520b7..3b82840d3 100644 --- a/assets/xml/objects/object_hata.xml +++ b/assets/xml/objects/object_hata.xml @@ -1,39 +1,50 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_lightswitch.xml b/assets/xml/objects/object_lightswitch.xml index 0a374033b..4318488be 100644 --- a/assets/xml/objects/object_lightswitch.xml +++ b/assets/xml/objects/object_lightswitch.xml @@ -2,10 +2,11 @@ + - - - + + + diff --git a/assets/xml/objects/object_ms.xml b/assets/xml/objects/object_ms.xml index 93828c76f..f861e6a37 100644 --- a/assets/xml/objects/object_ms.xml +++ b/assets/xml/objects/object_ms.xml @@ -1,32 +1,43 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_rr.xml b/assets/xml/objects/object_rr.xml index dbdba55c5..df974bb35 100644 --- a/assets/xml/objects/object_rr.xml +++ b/assets/xml/objects/object_rr.xml @@ -1,8 +1,8 @@  - - - - + + + + diff --git a/assets/xml/objects/object_vm.xml b/assets/xml/objects/object_vm.xml index bf13f3b40..8fb9fde20 100644 --- a/assets/xml/objects/object_vm.xml +++ b/assets/xml/objects/object_vm.xml @@ -1,30 +1,41 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_zg.xml b/assets/xml/objects/object_zg.xml index e5cb1dd5d..6ff35fe48 100644 --- a/assets/xml/objects/object_zg.xml +++ b/assets/xml/objects/object_zg.xml @@ -1,8 +1,8 @@  - - - - + + + + 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 51025b530..b0b87afdc 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -477,8 +477,8 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) { if (ENBOMBF_GET(&this->actor) != ENBOMBF_0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_bombf_DL_000340); - gSPDisplayList(POLY_OPA_DISP++, object_bombf_DL_000530); + gSPDisplayList(POLY_OPA_DISP++, gBombFlowerLeavesDL); + gSPDisplayList(POLY_OPA_DISP++, gBombFlowerBaseLeavesDL); Matrix_Translate(0.0f, 1000.0f, 0.0f, MTXMODE_APPLY); Matrix_Scale(this->unk_204, this->unk_204, this->unk_204, MTXMODE_APPLY); @@ -495,7 +495,7 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gfx)); } - gSPDisplayList(POLY_OPA_DISP++, object_bombf_DL_000408); + gSPDisplayList(POLY_OPA_DISP++, gBombFlowerBombAndSparkDL); } else { Collider_UpdateSpheres(0, &this->colliderJntSph); } 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 cb9545d7a..bee2ffda8 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -62,18 +62,18 @@ static ColliderCylinderInit sCylinderInit = { { 15, 20, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { &object_fu_Anim_000B04, &object_fu_Anim_00057C }; +static AnimationHeader* sAnimations[] = { &gGuruGuruPlayStillAnim, &gGuruGuruPlayAndMoveHeadAnim }; static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP }; static f32 sPlaySpeeds[] = { 1.0f, 1.0f }; -static TexturePtr sEyeTextures[] = { object_fu_Tex_005F20, object_fu_Tex_006320 }; -static TexturePtr sMouthTextures[] = { object_fu_Tex_006720, object_fu_Tex_006920 }; +static TexturePtr sEyeTextures[] = { gGuruGuruEyeClosedTex, gGuruGuruEyeAngryTex }; +static TexturePtr sMouthTextures[] = { gGuruGuruMouthOpenTex, gGuruGuruMouthAngryTex }; void EnGuruguru_Init(Actor* thisx, PlayState* play) { EnGuruguru* this = THIS; this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_fu_Skel_006C90, &object_fu_Anim_000B04, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable, this->morphTable, 16); this->actor.targetMode = 0; if (this->actor.params != 2) { diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c index e5b806b90..e9cfb258e 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -33,13 +33,12 @@ void EnHata_Init(Actor* thisx, PlayState* play) { s32 rand; f32 endFrame; - SkelAnime_Init(play, &this->skelAnime, &object_hata_Skel_002FD0, NULL, this->jointTable, this->morphTable, - OBJECT_HATA_LIMB_MAX); - endFrame = Animation_GetLastFrame(&object_hata_Anim_000444); - Animation_Change(&this->skelAnime, &object_hata_Anim_000444, 1.0f, 0.0f, endFrame, ANIMMODE_LOOP, 0.0f); + SkelAnime_Init(play, &this->skelAnime, &gFlagpoleSkel, NULL, this->jointTable, this->morphTable, FLAGPOLE_LIMB_MAX); + endFrame = Animation_GetLastFrame(&gFlagpoleFlapAnim); + Animation_Change(&this->skelAnime, &gFlagpoleFlapAnim, 1.0f, 0.0f, endFrame, ANIMMODE_LOOP, 0.0f); rand = Rand_ZeroFloat(endFrame); this->skelAnime.curFrame = rand; - DynaPolyActor_LoadMesh(play, &this->dyna, &object_hata_Colheader_0000C0); + DynaPolyActor_LoadMesh(play, &this->dyna, &gFlagpoleCol); Actor_SetScale(&this->dyna.actor, 0.013f); this->dyna.actor.uncullZoneScale = 500.0f; this->dyna.actor.uncullZoneDownward = 500.0f; @@ -84,7 +83,7 @@ void EnHata_Update(Actor* thisx, PlayState* play2) { s32 EnHata_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnHata* this = THIS; - if ((limbIndex == OBJECT_HATA_LIMB_04) || (limbIndex == OBJECT_HATA_LIMB_0D)) { + if ((limbIndex == FLAGPOLE_LIMB_FLAG1_HOIST_END_BASE) || (limbIndex == FLAGPOLE_LIMB_FLAG2_HOIST_END_BASE)) { rot->y += this->unk_29C; rot->z += this->unk_2A0; } diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.h b/src/overlays/actors/ovl_En_Hata/z_en_hata.h index 155460f60..60e3edba8 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.h +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.h @@ -9,8 +9,8 @@ struct EnHata; typedef struct EnHata { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ SkelAnime skelAnime; - /* 0x1A0 */ Vec3s jointTable[OBJECT_HATA_LIMB_MAX]; - /* 0x21E */ Vec3s morphTable[OBJECT_HATA_LIMB_MAX]; + /* 0x1A0 */ Vec3s jointTable[FLAGPOLE_LIMB_MAX]; + /* 0x21E */ Vec3s morphTable[FLAGPOLE_LIMB_MAX]; /* 0x29C */ s16 unk_29C; /* 0x29E */ UNK_TYPE1 pad_29E[2]; /* 0x2A0 */ s16 unk_2A0; 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 c8c6975a7..41334cc7e 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -61,7 +61,7 @@ void EnMs_Init(Actor* thisx, PlayState* play) { EnMs* this = THIS; Actor_ProcessInitChain(thisx, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime, &object_ms_Skel_003DC0, &object_ms_Anim_0005EC, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gBeanSalesmanSkel, &gBeanSalesmanEatingAnim, this->jointTable, this->morphTable, 9); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); 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 71efe8cf9..daa23f1a3 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -936,7 +936,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { this->collider2.dim.pos.y = ((this->unk_228.y - spA4.y) * 0.85f) + spA4.y; this->collider2.dim.pos.z = ((this->unk_228.z - spA4.z) * 0.85f) + spA4.z; - gSPDisplayList(POLY_OPA_DISP++, object_rr_DL_000470); + gSPDisplayList(POLY_OPA_DISP++, gLikeLikeDL); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->actor.scale.y * 66.66667f * this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, 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 dc2e89a6e..68f7411f3 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -167,8 +167,7 @@ void EnVm_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); - SkelAnime_Init(play, &this->skelAnime, &object_vm_Skel_003F60, &object_vm_Anim_000068, this->jointTable, - this->morphTable, 11); + SkelAnime_Init(play, &this->skelAnime, &gBeamosSkel, &gBeamosAnim, this->jointTable, this->morphTable, 11); Collider_InitAndSetTris(play, &this->colliderTris, &this->actor, &sTrisInit, this->colliderTrisElements); Collider_InitAndSetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, this->colliderJntSphElements); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -199,9 +198,9 @@ void EnVm_Destroy(Actor* thisx, PlayState* play) { } void func_808CC420(EnVm* this) { - f32 lastFrame = Animation_GetLastFrame(&object_vm_Anim_000068); + f32 lastFrame = Animation_GetLastFrame(&gBeamosAnim); - Animation_Change(&this->skelAnime, &object_vm_Anim_000068, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gBeamosAnim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); this->actionFunc = func_808CC490; } @@ -231,7 +230,7 @@ void func_808CC490(EnVm* this, PlayState* play) { } void func_808CC5C4(EnVm* this) { - Animation_PlayLoopSetSpeed(&this->skelAnime, &object_vm_Anim_000068, 2.0f); + Animation_PlayLoopSetSpeed(&this->skelAnime, &gBeamosAnim, 2.0f); this->unk_214 = 10; this->actionFunc = func_808CC610; } @@ -266,7 +265,7 @@ void func_808CC610(EnVm* this, PlayState* play) { void func_808CC788(EnVm* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_BIMOS_AIM); - Animation_Change(&this->skelAnime, &object_vm_Anim_000068, 3.0f, 3.0f, 7.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gBeamosAnim, 3.0f, 3.0f, 7.0f, ANIMMODE_ONCE, 0.0f); this->unk_214 = 305; this->unk_220 = 0.06f; this->colliderTris.base.atFlags &= ~AT_HIT; @@ -322,8 +321,8 @@ void func_808CC820(EnVm* this, PlayState* play) { } void func_808CCA10(EnVm* this) { - Animation_Change(&this->skelAnime, &object_vm_Anim_000068, -1.0f, Animation_GetLastFrame(&object_vm_Anim_000068), - 0.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gBeamosAnim, -1.0f, Animation_GetLastFrame(&gBeamosAnim), 0.0f, ANIMMODE_ONCE, + 0.0f); this->unk_214 = 100; this->unk_210 = 0; this->unk_224 = 0.0f; @@ -343,7 +342,7 @@ void func_808CCAA4(EnVm* this, PlayState* play) { } void func_808CCB08(EnVm* this) { - Animation_PlayOnce(&this->skelAnime, &object_vm_Anim_000068); + Animation_PlayOnce(&this->skelAnime, &gBeamosAnim); this->unk_214 = -1; this->actionFunc = func_808CCB50; } @@ -365,8 +364,8 @@ void func_808CCB50(EnVm* this, PlayState* play) { } void func_808CCBE4(EnVm* this, PlayState* play) { - Animation_Change(&this->skelAnime, &object_vm_Anim_000068, -1.0f, Animation_GetLastFrame(&object_vm_Anim_000068), - 0.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gBeamosAnim, -1.0f, Animation_GetLastFrame(&gBeamosAnim), 0.0f, ANIMMODE_ONCE, + 0.0f); Enemy_StartFinishingBlow(play, &this->actor); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 33); this->unk_214 = 33; @@ -462,10 +461,10 @@ void EnVm_Update(Actor* thisx, PlayState* play) { s32 EnVm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnVm* this = THIS; - if (limbIndex == OBJECT_VM_LIMB_02) { + if (limbIndex == BEAMOS_LIMB_HEAD_ROOT) { rot->x += this->unk_216; rot->y += this->unk_218; - } else if ((limbIndex == OBJECT_VM_LIMB_0A) && (this->actionFunc == func_808CCCF0)) { + } else if ((limbIndex == BEAMOS_LIMB_BODY) && (this->actionFunc == func_808CCCF0)) { *dList = NULL; } return false; @@ -481,7 +480,7 @@ void EnVm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Collider_UpdateSpheres(limbIndex, &this->colliderJntSph); - if (limbIndex == OBJECT_VM_LIMB_02) { + if (limbIndex == BEAMOS_LIMB_HEAD_ROOT) { sp4C = NULL; Matrix_MultZero(&this->actor.focus.pos); @@ -549,7 +548,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) { Matrix_Scale(this->unk_220, this->unk_220, this->unk_224 * 0.0015f, MTXMODE_APPLY); gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(&gfx[2], object_vm_DL_002728); + gSPDisplayList(&gfx[2], gBeamosLaserDL); POLY_OPA_DISP = &gfx[3]; } From 0c4f2524d83a9bdb74a34cb507fae16318006948 Mon Sep 17 00:00:00 2001 From: louist103 <35883445+louist103@users.noreply.github.com> Date: Tue, 4 Jul 2023 00:44:57 -0700 Subject: [PATCH 022/121] Obj_wind (#1309) * Initial decomp done * Matched * format * PR Fixes * Fixes * Fixes * Update src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * new names * Format --------- Co-authored-by: louist103 Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 2 +- spec | 3 +- src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c | 137 ++++++++++++++++-- src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h | 5 +- tools/disasm/variables.txt | 2 +- 5 files changed, 135 insertions(+), 14 deletions(-) diff --git a/include/functions.h b/include/functions.h index 0e8e418b2..66365fefe 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1570,7 +1570,7 @@ void Check_RegionIsSupported(void); f32 Math3D_Normalize(Vec3f* vec); s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint); s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6); -void func_80179A44(Vec3f* arg0, PosRot* arg1, Vec3f* arg2); +f32 func_80179A44(Vec3f* arg0, PosRot* arg1, Vec3f* arg2); void func_80179B34(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32* arg7, f32* arg8); // UNK_TYPE4 func_80179B94(f32 fParm1, f32 fParm2, f32 fParm5, f32 param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, Vec3f* param_9); // void func_80179D74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); diff --git a/spec b/spec index 4c1028b78..781efb202 100644 --- a/spec +++ b/spec @@ -3644,8 +3644,7 @@ beginseg name "ovl_Obj_Wind" compress include "build/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.o" - include "build/data/ovl_Obj_Wind/ovl_Obj_Wind.data.o" - include "build/data/ovl_Obj_Wind/ovl_Obj_Wind.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Wind/ovl_Obj_Wind_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c index 5f53030f3..3b6b90731 100644 --- a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c +++ b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c @@ -5,6 +5,7 @@ */ #include "z_obj_wind.h" +#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10) @@ -15,7 +16,6 @@ void ObjWind_Destroy(Actor* thisx, PlayState* play); void ObjWind_Update(Actor* thisx, PlayState* play); void ObjWind_Draw(Actor* thisx, PlayState* play); -#if 0 ActorInit Obj_Wind_InitVars = { ACTOR_OBJ_WIND, ACTORCAT_ITEMACTION, @@ -28,21 +28,140 @@ ActorInit Obj_Wind_InitVars = { (ActorFunc)ObjWind_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80B24480[] = { +static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 4000, ICHAIN_STOP), }; -#endif +void ObjWind_Init(Actor* thisx, PlayState* play) { + ObjWind* this = (ObjWind*)thisx; + s32 pad; + WaterBox* waterbox; + f32 ySurface; -extern InitChainEntry D_80B24480[]; + Actor_ProcessInitChain(&this->actor, sInitChain); + if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface, + &waterbox) && + (this->actor.world.pos.y < ySurface)) { + this->isUnderWater = true; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Wind/ObjWind_Init.s") +void ObjWind_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Wind/ObjWind_Destroy.s") +typedef struct ObjWindStruct { + /* 0x0 */ s16 unk_0; + /* 0x2 */ s16 unk_2; + /* 0x4 */ s16 unk_4; + /* 0x6 */ s16 unk_6; + /* 0x8 */ s16 unk_8; +} ObjWindStruct; // size = 0xA -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Wind/ObjWind_Update.s") +static ObjWindStruct D_80B2448C[] = { + { 530, 90, 3000, 2000, 0 }, { 1120, 100, 2000, 1000, 0 }, { 620, 100, 2000, 1000, 0 }, + { 1620, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, { 400, 100, 2000, 1000, 0 }, + { 400, 100, 2000, 1000, 0 }, { 600, 120, 3000, 2000, 0 }, { 500, 80, 3000, 2000, 0 }, + { 400, 60, 2000, 2000, 0 }, { 470, 70, 2000, 1000, 0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Wind/ObjWind_Draw.s") +static s32 D_80B245CC = -1; + +void ObjWind_Update(Actor* thisx, PlayState* play) { + ObjWind* this = (ObjWind*)thisx; + ObjWindStruct* entry = &D_80B2448C[OBJ_WIND_GET_TYPE(thisx)]; + Player* player; + f32 upZ; + f32 upY; + f32 upX; + Vec3f posCopy; + Vec3f nearestPoint; + Vec3f sp54; + f32 upXZ; // reused temp + f32 distToNearestPoint; + + if (D_80B245CC != DREG(85)) { + if ((DREG(85) >= 0) && (DREG(85) < ARRAY_COUNT(D_80B2448C))) { + DREG(80) = D_80B2448C[DREG(85)].unk_0; + DREG(81) = D_80B2448C[DREG(85)].unk_2; + DREG(82) = D_80B2448C[DREG(85)].unk_4; + DREG(83) = D_80B2448C[DREG(85)].unk_6; + DREG(84) = D_80B2448C[DREG(85)].unk_8; + D_80B245CC = DREG(85); + } + } else { + D_80B2448C[DREG(85)].unk_0 = DREG(80); + D_80B2448C[DREG(85)].unk_2 = DREG(81); + D_80B2448C[DREG(85)].unk_4 = DREG(82); + D_80B2448C[DREG(85)].unk_6 = DREG(83); + D_80B2448C[DREG(85)].unk_8 = DREG(84); + } + + if ((OBJ_WIND_GET_SWITCH_FLAG(thisx) == 0x7F) || !Flags_GetSwitch(play, OBJ_WIND_GET_SWITCH_FLAG(thisx))) { + player = GET_PLAYER(play); + Math_Vec3f_Copy(&posCopy, &this->actor.world.pos); + upY = Math_CosS(this->actor.shape.rot.x); + upXZ = Math_SinS(this->actor.shape.rot.x); + upX = Math_SinS(this->actor.shape.rot.y) * upXZ; + upZ = Math_CosS(this->actor.shape.rot.y) * upXZ; + distToNearestPoint = func_80179A44(&posCopy, &player->actor.world, &nearestPoint); + if ((distToNearestPoint >= 0.0f) && (distToNearestPoint < entry->unk_0)) { + upXZ = Math_Vec3f_DistXYZAndStoreDiff(&player->actor.world.pos, &nearestPoint, &sp54); + if (upXZ < entry->unk_2) { + f32 var_fa0; + f32 windSpeedXZ = 1.0f; // reused temp + f32 windMagnitude; + f32 temp_ft0; + f32 windSpeedX; + f32 windSpeedY; + f32 windSpeedZ; + + var_fa0 = 1.0f - distToNearestPoint / entry->unk_0; + windMagnitude = ((f32)entry->unk_4 / 100.0f) * + ((var_fa0 * (1.0f - upXZ / entry->unk_2)) + ((f32)entry->unk_8 / 100.0f)); + if ((distToNearestPoint / entry->unk_0) > 0.8f) { + var_fa0 = windSpeedXZ - 1.0f; + } + temp_ft0 = ((f32)entry->unk_6 / 100.0f) * (upXZ / entry->unk_2 * var_fa0); + if (upXZ != 0.0f) { + // FAKE: + if (1) {} + upXZ = 1.0f / upXZ; + } + temp_ft0 *= upXZ; + windSpeedX = (upX * windMagnitude) + (sp54.x * temp_ft0); + windSpeedY = (upY * windMagnitude) + (sp54.y * temp_ft0); + windSpeedZ = (upZ * windMagnitude) + (sp54.z * temp_ft0); + player->windSpeed = sqrtf(SQ(windSpeedX) + SQ(windSpeedY) + SQ(windSpeedZ)); + player->windAngleY = Math_Atan2S_XY(windSpeedZ, windSpeedX); + + windSpeedXZ = sqrtf(SQ(windSpeedX) + SQ(windSpeedZ)); + player->windAngleX = Math_Atan2S_XY(windSpeedXZ, windSpeedY); + } + } + } + this->actor.scale.x = (f32)entry->unk_2 / 50.0f; + this->actor.scale.z = (f32)entry->unk_2 / 50.0f; + this->actor.scale.y = (f32)entry->unk_0 / 400.0f; +} + +void ObjWind_Draw(Actor* thisx, PlayState* play) { + ObjWind* this = (ObjWind*)thisx; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gameplay_keep_Matanimheader_07F218)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_07E8C0); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h index 08db8914a..7c1ecc66e 100644 --- a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h +++ b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h @@ -3,11 +3,14 @@ #include "global.h" +#define OBJ_WIND_GET_TYPE(thisx) (((thisx)->params >> 7) & 0x1F) +#define OBJ_WIND_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + struct ObjWind; typedef struct ObjWind { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x4]; + /* 0x144 */ u8 isUnderWater; } ObjWind; // size = 0x148 #endif // Z_OBJ_WIND_H diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d856a56dd..04d893310 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -13845,7 +13845,7 @@ 0x80B23C70:("D_80B23C70","f32","",0x4), 0x80B23E80:("Obj_Dowsing_InitVars","UNK_TYPE1","",0x1), 0x80B24460:("Obj_Wind_InitVars","UNK_TYPE1","",0x1), - 0x80B24480:("D_80B24480","UNK_TYPE1","",0x1), + 0x80B24480:("sInitChain","UNK_TYPE1","",0x1), 0x80B2448C:("D_80B2448C","UNK_TYPE1","",0x1), 0x80B245CC:("D_80B245CC","UNK_TYPE4","",0x4), 0x80B245D0:("D_80B245D0","f32","",0x4), From 0f572acbda00bb46cf0079ea851ef1d2fa17290b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 4 Jul 2023 17:58:02 +1000 Subject: [PATCH 023/121] `map_static_name` docs (#1298) * map static docs * adjust comment * improve comments * PR Suggestions * map point * adjust comments --- assets/xml/archives/map_name_static.xml | 41 +++++++++++-------- include/z64item.h | 18 ++++++++ include/z64scene.h | 1 + .../ovl_kaleido_scope/z_kaleido_map.c | 39 +++++++++--------- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 5 ++- 5 files changed, 68 insertions(+), 36 deletions(-) diff --git a/assets/xml/archives/map_name_static.xml b/assets/xml/archives/map_name_static.xml index 980eb890e..fe392eb03 100644 --- a/assets/xml/archives/map_name_static.xml +++ b/assets/xml/archives/map_name_static.xml @@ -1,20 +1,29 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/z64item.h b/include/z64item.h index c37ba02c8..19c86f0a1 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -308,6 +308,24 @@ typedef enum ItemId { /* 0xA1 */ ITEM_GOLD_DUST_2, /* 0xA2 */ ITEM_HYLIAN_LOACH_2, /* 0xA3 */ ITEM_SEAHORSE_CAUGHT, + // First entries of `MAP_POINT` must be continguous with `RegionId` + /* 0xA4 */ ITEM_MAP_POINT_GREAT_BAY, + /* 0xA5 */ ITEM_MAP_POINT_ZORA_HALL, + /* 0xA6 */ ITEM_MAP_POINT_ROMANI_RANCH, + /* 0xA7 */ ITEM_MAP_POINT_DEKU_PALACE, + /* 0xA8 */ ITEM_MAP_POINT_WOODFALL, + /* 0xA9 */ ITEM_MAP_POINT_CLOCK_TOWN, + /* 0xAA */ ITEM_MAP_POINT_SNOWHEAD, + /* 0xAB */ ITEM_MAP_POINT_IKANA_GRAVEYARD, + /* 0xAC */ ITEM_MAP_POINT_IKANA_CANYON, + /* 0xAD */ ITEM_MAP_POINT_GORON_VILLAGE, + /* 0xAE */ ITEM_MAP_POINT_STONE_TOWER, + // Remaining map points are unique to owl warps + /* 0xAF */ ITEM_MAP_POINT_GREAT_BAY_COAST, + /* 0xBO */ ITEM_MAP_POINT_SOUTHERN_SWAMP, + /* 0xB1 */ ITEM_MAP_POINT_MOUNTAIN_VILLAGE, + /* 0xB2 */ ITEM_MAP_POINT_MILK_ROAD, + /* 0xB3 */ ITEM_MAP_POINT_ZORA_CAPE, /* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST /* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN /* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO diff --git a/include/z64scene.h b/include/z64scene.h index 55c959b31..e0f186cd8 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -559,6 +559,7 @@ typedef union { // Sets cursor point options on the world map typedef enum { + /* -1 */ REGION_NONE = -1, /* 0x0 */ REGION_GREAT_BAY, /* 0x1 */ REGION_ZORA_HALL, /* 0x2 */ REGION_ROMANI_RANCH, 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 6f6b000e7..b4ed531f8 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 @@ -764,8 +764,8 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { } } - // Find the regionId that player is currently in - // Loop over regionId (n) and regionIdIndex (j) + // Find the region that player is currently in + // Loop over region (n) and regionIndex (j) while (true) { if ((gSceneIdsPerRegion[n][j] == 0xFFFF)) { n++; @@ -824,16 +824,16 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { } u16 sOwlWarpPauseItems[] = { - 0xAF, // OWL_WARP_GREAT_BAY_COAST - 0xB3, // OWL_WARP_ZORA_CAPE - 0xAA, // OWL_WARP_SNOWHEAD - 0xB1, // OWL_WARP_MOUNTAIN_VILLAGE - 0xA9, // OWL_WARP_CLOCK_TOWN - 0xB2, // OWL_WARP_MILK_ROAD - 0xA8, // OWL_WARP_WOODFALL - 0xB0, // OWL_WARP_SOUTHERN_SWAMP - 0xAC, // OWL_WARP_IKANA_CANYON - 0xAE, // OWL_WARP_STONE_TOWER + ITEM_MAP_POINT_GREAT_BAY_COAST, // OWL_WARP_GREAT_BAY_COAST + ITEM_MAP_POINT_ZORA_CAPE, // OWL_WARP_ZORA_CAPE + ITEM_MAP_POINT_SNOWHEAD, // OWL_WARP_SNOWHEAD + ITEM_MAP_POINT_MOUNTAIN_VILLAGE, // OWL_WARP_MOUNTAIN_VILLAGE + ITEM_MAP_POINT_CLOCK_TOWN, // OWL_WARP_CLOCK_TOWN + ITEM_MAP_POINT_MILK_ROAD, // OWL_WARP_MILK_ROAD + ITEM_MAP_POINT_WOODFALL, // OWL_WARP_WOODFALL + ITEM_MAP_POINT_SOUTHERN_SWAMP, // OWL_WARP_SOUTHERN_SWAMP + ITEM_MAP_POINT_IKANA_CANYON, // OWL_WARP_IKANA_CANYON + ITEM_MAP_POINT_STONE_TOWER, // OWL_WARP_STONE_TOWER }; void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { @@ -874,7 +874,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; - if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] < REGION_GREAT_BAY) { + if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] <= REGION_NONE) { KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; break; @@ -896,13 +896,13 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if (pauseCtx->stickAdjX > 30) { - pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = -1; + pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = REGION_NONE; pauseCtx->cursorSpecialPos = 0; pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++; - if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] > REGION_STONE_TOWER) { + if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] >= REGION_MAX) { KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT); pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; break; @@ -921,13 +921,13 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { sStickAdjTimer = 0; } } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 11; + pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = REGION_MAX; pauseCtx->cursorSpecialPos = 0; pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; - if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] < 0) { + if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] <= REGION_NONE) { KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE; break; @@ -979,8 +979,9 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { sStickAdjTimer++; } - //! TODO: Is the `0xA4` here related to `0xA3` being the last recored item in the `ItemId` enum? - pauseCtx->cursorItem[PAUSE_MAP] = sOwlWarpPauseItems[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]] - 0xA4; + // Offset from `ITEM_MAP_POINT_GREAT_BAY` is to get the correct ordering in `map_name_static` + pauseCtx->cursorItem[PAUSE_MAP] = + sOwlWarpPauseItems[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]] - ITEM_MAP_POINT_GREAT_BAY; // Used as cursor vtxIndex pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; 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 7f891ca35..5915c9fbe 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 @@ -246,6 +246,7 @@ void Kaleido_LoadMapNameStatic(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); } +//! note: nothing from `map_name_static` is of size `0xA00` in US 1.0 void Kaleido_LoadMapNameStaticLarge(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); } @@ -2890,7 +2891,9 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); func_8011552C(play, DO_ACTION_INFO); - if (((void)0, gSaveContext.worldMapArea) < 0x16) { + + //! note: `worldMapArea` never set to a value other than 0 + if (((void)0, gSaveContext.worldMapArea) < 22) { Kaleido_LoadMapNameStaticLarge(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); } From 857a0cfdaf29755b763eda075b7ac9c4a204b0e4 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 4 Jul 2023 23:52:36 +1000 Subject: [PATCH 024/121] `item_name_static` documented and `ItemId` updates (#1304) * WIP * map static * finish english names * jpn * revert map name * name prefix * boss to big * more comments * item enums * more items * more * PR Suggestions * PR Suggestion --- assets/xml/archives/icon_item_static.xml | 2 +- assets/xml/archives/item_name_static.xml | 273 ++++++------ include/z64actor.h | 10 +- include/z64item.h | 76 ++-- include/z64player.h | 12 +- src/code/code_8012EC80.c | 46 +- src/code/z_draw.c | 10 +- src/code/z_elf_message.c | 2 +- src/code/z_en_item00.c | 403 ++++++++++++++---- src/code/z_fireobj.c | 2 +- src/code/z_parameter.c | 244 +++++------ src/code/z_play.c | 2 +- src/code/z_player_lib.c | 24 +- src/code/z_sram_NES.c | 78 ++-- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 2 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 2 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 2 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 6 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 8 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 26 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 4 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 2 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 2 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 2 +- src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 2 +- .../actors/ovl_player_actor/z_player.c | 170 ++++---- .../ovl_kaleido_scope/z_kaleido_debug.c | 16 +- .../ovl_kaleido_scope/z_kaleido_item.c | 140 +++--- .../ovl_kaleido_scope/z_kaleido_mask.c | 2 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 +- tools/gitable.py | 64 +-- tools/namefixer.py | 10 +- 44 files changed, 964 insertions(+), 706 deletions(-) diff --git a/assets/xml/archives/icon_item_static.xml b/assets/xml/archives/icon_item_static.xml index 697ca431e..3480d704a 100644 --- a/assets/xml/archives/icon_item_static.xml +++ b/assets/xml/archives/icon_item_static.xml @@ -14,7 +14,7 @@ - + diff --git a/assets/xml/archives/item_name_static.xml b/assets/xml/archives/item_name_static.xml index 280d8862a..da0b903a0 100644 --- a/assets/xml/archives/item_name_static.xml +++ b/assets/xml/archives/item_name_static.xml @@ -1,124 +1,157 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/z64actor.h b/include/z64actor.h index e08a477e6..c25033e4a 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -208,10 +208,10 @@ typedef enum Item00Type { /* 0x09 */ ITEM00_ARROWS_40, /* 0x0A */ ITEM00_ARROWS_50, /* 0x0B */ ITEM00_BOMBS_B, - /* 0x0C */ ITEM00_NUTS_1, - /* 0x0D */ ITEM00_STICK, - /* 0x0E */ ITEM00_MAGIC_LARGE, - /* 0x0F */ ITEM00_MAGIC_SMALL, + /* 0x0C */ ITEM00_DEKU_NUTS_1, + /* 0x0D */ ITEM00_DEKU_STICK, + /* 0x0E */ ITEM00_MAGIC_JAR_BIG, + /* 0x0F */ ITEM00_MAGIC_JAR_SMALL, /* 0x10 */ ITEM00_MASK, /* 0x11 */ ITEM00_SMALL_KEY, /* 0x12 */ ITEM00_FLEXIBLE, @@ -219,7 +219,7 @@ typedef enum Item00Type { /* 0x14 */ ITEM00_RUPEE_PURPLE, /* 0x15 */ ITEM00_3_HEARTS, /* 0x16 */ ITEM00_SHIELD_HERO, - /* 0x17 */ ITEM00_NUTS_10, + /* 0x17 */ ITEM00_DEKU_NUTS_10, /* 0x18 */ ITEM00_NOTHING, /* 0x19 */ ITEM00_BOMBS_0, /* 0x1A */ ITEM00_BIG_FAIRY, diff --git a/include/z64item.h b/include/z64item.h index 19c86f0a1..7cc31eeca 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -44,8 +44,8 @@ typedef enum { /* 3 */ UPG_SCALE, /* 4 */ UPG_WALLET, /* 5 */ UPG_BULLET_BAG, - /* 6 */ UPG_STICKS, - /* 7 */ UPG_NUTS + /* 6 */ UPG_DEKU_STICKS, + /* 7 */ UPG_DEKU_NUTS } UpgradeType; typedef enum { @@ -100,13 +100,13 @@ typedef enum { /* 0x05 */ SLOT_TRADE_DEED, /* 0x06 */ SLOT_BOMB, /* 0x07 */ SLOT_BOMBCHU, - /* 0x08 */ SLOT_STICK, - /* 0x09 */ SLOT_NUT, + /* 0x08 */ SLOT_DEKU_STICK, + /* 0x09 */ SLOT_DEKU_NUT, /* 0x0A */ SLOT_MAGIC_BEANS, /* 0x0B */ SLOT_TRADE_KEY_MAMA, /* 0x0C */ SLOT_POWDER_KEG, - /* 0x0D */ SLOT_PICTO_BOX, - /* 0x0E */ SLOT_LENS, + /* 0x0D */ SLOT_PICTOGRAPH_BOX, + /* 0x0E */ SLOT_LENS_OF_TRUTH, /* 0x0F */ SLOT_HOOKSHOT, /* 0x10 */ SLOT_SWORD_GREAT_FAIRY, /* 0x11 */ SLOT_TRADE_COUPLE, @@ -144,7 +144,7 @@ typedef enum { } InventorySlot; typedef enum ItemId { - /* 0x00 */ ITEM_OCARINA, + /* 0x00 */ ITEM_OCARINA_OF_TIME, /* 0x01 */ ITEM_BOW, /* 0x02 */ ITEM_ARROW_FIRE, /* 0x03 */ ITEM_ARROW_ICE, @@ -152,13 +152,13 @@ typedef enum ItemId { /* 0x05 */ ITEM_OCARINA_FAIRY, /* 0x06 */ ITEM_BOMB, /* 0x07 */ ITEM_BOMBCHU, - /* 0x08 */ ITEM_STICK, - /* 0x09 */ ITEM_NUT, + /* 0x08 */ ITEM_DEKU_STICK, + /* 0x09 */ ITEM_DEKU_NUT, /* 0x0A */ ITEM_MAGIC_BEANS, /* 0x0B */ ITEM_SLINGSHOT, /* 0x0C */ ITEM_POWDER_KEG, - /* 0x0D */ ITEM_PICTO_BOX, - /* 0x0E */ ITEM_LENS, + /* 0x0D */ ITEM_PICTOGRAPH_BOX, + /* 0x0E */ ITEM_LENS_OF_TRUTH, /* 0x0F */ ITEM_HOOKSHOT, /* 0x10 */ ITEM_SWORD_GREAT_FAIRY, /* 0x11 */ ITEM_LONGSHOT, // OoT Leftover @@ -218,9 +218,9 @@ typedef enum ItemId { /* 0x47 */ ITEM_MASK_BLAST, /* 0x48 */ ITEM_MASK_SCENTS, /* 0x49 */ ITEM_MASK_GIANT, - /* 0x4A */ ITEM_BOW_ARROW_FIRE, - /* 0x4B */ ITEM_BOW_ARROW_ICE, - /* 0x4C */ ITEM_BOW_ARROW_LIGHT, + /* 0x4A */ ITEM_BOW_FIRE, + /* 0x4B */ ITEM_BOW_ICE, + /* 0x4C */ ITEM_BOW_LIGHT, /* 0x4D */ ITEM_SWORD_KOKIRI, /* 0x4E */ ITEM_SWORD_RAZOR, /* 0x4F */ ITEM_SWORD_GILDED, @@ -265,8 +265,8 @@ typedef enum ItemId { /* 0x76 */ ITEM_DUNGEON_MAP, /* 0x77 */ ITEM_STRAY_FAIRIES, /* 0x78 */ ITEM_KEY_SMALL, - /* 0x79 */ ITEM_MAGIC_SMALL, - /* 0x7A */ ITEM_MAGIC_LARGE, + /* 0x79 */ ITEM_MAGIC_JAR_SMALL, + /* 0x7A */ ITEM_MAGIC_JAR_BIG, /* 0x7B */ ITEM_HEART_PIECE_2, /* 0x7C */ ITEM_INVALID_1, /* 0x7D */ ITEM_INVALID_2, @@ -283,10 +283,10 @@ typedef enum ItemId { /* 0x88 */ ITEM_RUPEE_PURPLE, /* 0x89 */ ITEM_RUPEE_SILVER, /* 0x8A */ ITEM_RUPEE_HUGE, - /* 0x8B */ ITEM_STICKS_5, - /* 0x8C */ ITEM_STICKS_10, - /* 0x8D */ ITEM_NUTS_5, - /* 0x8E */ ITEM_NUTS_10, + /* 0x8B */ ITEM_DEKU_STICKS_5, + /* 0x8C */ ITEM_DEKU_STICKS_10, + /* 0x8D */ ITEM_DEKU_NUTS_5, + /* 0x8E */ ITEM_DEKU_NUTS_10, /* 0x8F */ ITEM_BOMBS_5, /* 0x90 */ ITEM_BOMBS_10, /* 0x91 */ ITEM_BOMBS_20, @@ -299,10 +299,10 @@ typedef enum ItemId { /* 0x98 */ ITEM_BOMBCHUS_10, /* 0x99 */ ITEM_BOMBCHUS_1, /* 0x9A */ ITEM_BOMBCHUS_5, - /* 0x9B */ ITEM_STICK_UPGRADE_20, - /* 0x9C */ ITEM_STICK_UPGRADE_30, - /* 0x9D */ ITEM_NUT_UPGRADE_30, - /* 0x9E */ ITEM_NUT_UPGRADE_40, + /* 0x9B */ ITEM_DEKU_STICK_UPGRADE_20, + /* 0x9C */ ITEM_DEKU_STICK_UPGRADE_30, + /* 0x9D */ ITEM_DEKU_NUT_UPGRADE_30, + /* 0x9E */ ITEM_DEKU_NUT_UPGRADE_40, /* 0x9F */ ITEM_CHATEAU_2, /* 0xA0 */ ITEM_MILK, /* 0xA1 */ ITEM_GOLD_DUST_2, @@ -353,8 +353,8 @@ typedef enum GetItemId { /* 0x0B */ GI_0B, /* 0x0C */ GI_HEART_PIECE, /* 0x0D */ GI_HEART_CONTAINER, - /* 0x0E */ GI_MAGIC_SMALL, - /* 0x0F */ GI_MAGIC_LARGE, + /* 0x0E */ GI_MAGIC_JAR_SMALL, + /* 0x0F */ GI_MAGIC_JAR_BIG, /* 0x10 */ GI_10, /* 0x11 */ GI_STRAY_FAIRY, /* 0x12 */ GI_12, @@ -364,7 +364,7 @@ typedef enum GetItemId { /* 0x16 */ GI_BOMBS_10, /* 0x17 */ GI_BOMBS_20, /* 0x18 */ GI_BOMBS_30, - /* 0x19 */ GI_STICKS_1, + /* 0x19 */ GI_DEKU_STICKS_1, /* 0x1A */ GI_BOMBCHUS_10, /* 0x1B */ GI_BOMB_BAG_20, /* 0x1C */ GI_BOMB_BAG_30, @@ -379,9 +379,9 @@ typedef enum GetItemId { /* 0x25 */ GI_ARROW_FIRE, /* 0x26 */ GI_ARROW_ICE, /* 0x27 */ GI_ARROW_LIGHT, - /* 0x28 */ GI_NUTS_1, - /* 0x29 */ GI_NUTS_5, - /* 0x2A */ GI_NUTS_10, + /* 0x28 */ GI_DEKU_NUTS_1, + /* 0x29 */ GI_DEKU_NUTS_5, + /* 0x2A */ GI_DEKU_NUTS_10, /* 0x2B */ GI_2B, /* 0x2C */ GI_2C, /* 0x2D */ GI_2D, @@ -405,8 +405,8 @@ typedef enum GetItemId { /* 0x3F */ GI_COMPASS, /* 0x40 */ GI_40, /* 0x41 */ GI_HOOKSHOT, - /* 0x42 */ GI_LENS, - /* 0x43 */ GI_PICTO_BOX, + /* 0x42 */ GI_LENS_OF_TRUTH, + /* 0x43 */ GI_PICTOGRAPH_BOX, /* 0x44 */ GI_44, /* 0x45 */ GI_45, /* 0x46 */ GI_46, @@ -415,7 +415,7 @@ typedef enum GetItemId { /* 0x49 */ GI_49, /* 0x4A */ GI_4A, /* 0x4B */ GI_4B, - /* 0x4C */ GI_OCARINA, + /* 0x4C */ GI_OCARINA_OF_TIME, /* 0x4D */ GI_4D, /* 0x4E */ GI_4E, /* 0x4F */ GI_4F, @@ -547,7 +547,7 @@ typedef enum GetItemDrawId { /* 0x0E */ GID_MASK_CIRCUS_LEADER, /* 0x0F */ GID_MASK_BREMEN, /* 0x10 */ GID_MASK_ALL_NIGHT, - /* 0x11 */ GID_NUTS, + /* 0x11 */ GID_DEKU_NUTS, /* 0x12 */ GID_HEART_CONTAINER, /* 0x13 */ GID_HEART_PIECE, /* 0x14 */ GID_QUIVER_30, @@ -556,10 +556,10 @@ typedef enum GetItemDrawId { /* 0x17 */ GID_BOMB_BAG_20, /* 0x18 */ GID_BOMB_BAG_30, /* 0x19 */ GID_BOMB_BAG_40, - /* 0x1A */ GID_STICK, + /* 0x1A */ GID_DEKU_STICK, /* 0x1B */ GID_DUNGEON_MAP, - /* 0x1C */ GID_MAGIC_SMALL, - /* 0x1D */ GID_MAGIC_LARGE, + /* 0x1C */ GID_MAGIC_JAR_SMALL, + /* 0x1D */ GID_MAGIC_JAR_BIG, /* 0x1E */ GID_BOMB, /* 0x1F */ GID_STONE_OF_AGONY, /* 0x20 */ GID_WALLET_ADULT, @@ -646,7 +646,7 @@ typedef enum GetItemDrawId { /* 0x71 */ GID_MASK_POSTMAN, /* 0x72 */ GID_MASK_GIANT, /* 0x73 */ GID_CHATEAU, - /* 0x74 */ GID_PICTO_BOX, + /* 0x74 */ GID_PICTOGRAPH_BOX, /* 0x75 */ GID_MASK_FIERCE_DEITY, /* 0x76 */ GID_MAX } GetItemDrawId; diff --git a/include/z64player.h b/include/z64player.h index c06561648..29f9f7697 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -61,7 +61,7 @@ typedef enum PlayerItemAction { /* 0x04 */ PLAYER_IA_SWORD_RAZOR, /* 0x05 */ PLAYER_IA_SWORD_GILDED, /* 0x06 */ PLAYER_IA_SWORD_TWO_HANDED, - /* 0x07 */ PLAYER_IA_STICK, + /* 0x07 */ PLAYER_IA_DEKU_STICK, /* 0x08 */ PLAYER_IA_ZORA_FINS, /* 0x09 */ PLAYER_IA_BOW, /* 0x0A */ PLAYER_IA_BOW_FIRE, @@ -73,8 +73,8 @@ typedef enum PlayerItemAction { /* 0x0F */ PLAYER_IA_POWDER_KEG, /* 0x10 */ PLAYER_IA_BOMBCHU, /* 0x11 */ PLAYER_IA_11, - /* 0x12 */ PLAYER_IA_NUT, - /* 0x13 */ PLAYER_IA_PICTO_BOX, + /* 0x12 */ PLAYER_IA_DEKU_NUT, + /* 0x13 */ PLAYER_IA_PICTOGRAPH_BOX, /* 0x14 */ PLAYER_IA_OCARINA, /* 0x15 */ PLAYER_IA_BOTTLE_MIN, /* 0x15 */ PLAYER_IA_BOTTLE_EMPTY = PLAYER_IA_BOTTLE_MIN, @@ -141,7 +141,7 @@ typedef enum PlayerItemAction { /* 0x50 */ PLAYER_IA_MASK_ZORA, /* 0x51 */ PLAYER_IA_MASK_DEKU, /* 0x51 */ PLAYER_IA_MASK_MAX = PLAYER_IA_MASK_DEKU, - /* 0x52 */ PLAYER_IA_LENS, + /* 0x52 */ PLAYER_IA_LENS_OF_TRUTH, /* 0x53 */ PLAYER_IA_MAX } PlayerItemAction; @@ -165,7 +165,7 @@ typedef enum PlayerMeleeWeapon { /* 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_TWO_HANDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED), - /* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK), + /* 5 */ PLAYER_MELEEWEAPON_DEKU_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_DEKU_STICK), /* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS), /* 7 */ PLAYER_MELEEWEAPON_MAX } PlayerMeleeWeapon; @@ -414,7 +414,7 @@ typedef enum PlayerModelGroup { /* 7 */ PLAYER_MODELGROUP_EXPLOSIVES, /* 8 */ PLAYER_MODELGROUP_8, /* 9 */ PLAYER_MODELGROUP_HOOKSHOT, - /* 10 */ PLAYER_MODELGROUP_STICK, + /* 10 */ PLAYER_MODELGROUP_DEKU_STICK, /* 11 */ PLAYER_MODELGROUP_INSTRUMENT, /* 12 */ PLAYER_MODELGROUP_BOTTLE, /* 13 */ PLAYER_MODELGROUP_13, diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index 37039a05d..dc334c93e 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -98,7 +98,7 @@ u32 gGsFlagsShift[] = { }; TexturePtr gItemIcons[] = { - gItemIconOcarinaOfTimeTex, // ITEM_OCARINA + gItemIconOcarinaOfTimeTex, // ITEM_OCARINA_OF_TIME gItemIconBowTex, // ITEM_BOW gItemIconFireArrowTex, // ITEM_ARROW_FIRE gItemIconIceArrowTex, // ITEM_ARROW_ICE @@ -106,13 +106,13 @@ TexturePtr gItemIcons[] = { gItemIconFairyOcarinaTex, // ITEM_OCARINA_FAIRY gItemIconBombTex, // ITEM_BOMB gItemIconBombchuTex, // ITEM_BOMBCHU - gItemIconDekuStickTex, // ITEM_STICK - gItemIconDekuNutTex, // ITEM_NUT + gItemIconDekuStickTex, // ITEM_DEKU_STICK + gItemIconDekuNutTex, // ITEM_DEKU_NUT gItemIconMagicBeansTex, // ITEM_MAGIC_BEANS gItemIconSlingshotTex, // ITEM_SLINGSHOT gItemIconPowderKegTex, // ITEM_POWDER_KEG - gItemIconPictoBoxTex, // ITEM_PICTO_BOX - gItemIconLensofTruthTex, // ITEM_LENS + gItemIconPictographBoxTex, // ITEM_PICTOGRAPH_BOX + gItemIconLensofTruthTex, // ITEM_LENS_OF_TRUTH gItemIconHookshotTex, // ITEM_HOOKSHOT gItemIconGreatFairysSwordTex, // ITEM_SWORD_GREAT_FAIRY gItemIconLongshotTex, // ITEM_LONGSHOT @@ -172,9 +172,9 @@ TexturePtr gItemIcons[] = { gItemIconBlastMaskTex, // ITEM_MASK_BLAST gItemIconMaskOfScentsTex, // ITEM_MASK_SCENTS gItemIconGiantsMaskTex, // ITEM_MASK_GIANT - gItemIconBowFireTex, // ITEM_BOW_ARROW_FIRE - gItemIconBowIceTex, // ITEM_BOW_ARROW_ICE - gItemIconBowLightTex, // ITEM_BOW_ARROW_LIGHT + gItemIconBowFireTex, // ITEM_BOW_FIRE + gItemIconBowIceTex, // ITEM_BOW_ICE + gItemIconBowLightTex, // ITEM_BOW_LIGHT gItemIconKokiriSwordTex, // ITEM_SWORD_KOKIRI gItemIconRazorSwordTex, // ITEM_SWORD_RAZOR gItemIconGildedSwordTex, // ITEM_SWORD_GILDED @@ -219,8 +219,8 @@ TexturePtr gItemIcons[] = { gQuestIconCompassTex, // ITEM_DUNGEON_MAP gQuestIconGoldSkulltula2Tex, // ITEM_STRAY_FAIRIES gQuestIconSmallKeyTex, // ITEM_KEY_SMALL - gQuestIconSmallMagicJarTex, // ITEM_MAGIC_SMALL - gQuestIconBigMagicJarTex, // ITEM_MAGIC_LARGE + gQuestIconSmallMagicJarTex, // ITEM_MAGIC_JAR_SMALL + gQuestIconBigMagicJarTex, // ITEM_MAGIC_JAR_BIG gItemIconHeartPiece1Tex, // ITEM_HEART_PIECE_2 gItemIconHeartPiece2Tex, // ITEM_INVALID_1 gItemIconHeartPiece3Tex, // ITEM_INVALID_2 @@ -233,7 +233,7 @@ TexturePtr gItemIcons[] = { // Used to map item IDs to inventory slots u8 gItemSlots[] = { - SLOT_OCARINA, // ITEM_OCARINA + SLOT_OCARINA, // ITEM_OCARINA_OF_TIME SLOT_BOW, // ITEM_BOW SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE SLOT_ARROW_ICE, // ITEM_ARROW_ICE @@ -241,13 +241,13 @@ u8 gItemSlots[] = { SLOT_TRADE_DEED, // ITEM_OCARINA_FAIRY SLOT_BOMB, // ITEM_BOMB SLOT_BOMBCHU, // ITEM_BOMBCHU - SLOT_STICK, // ITEM_STICK - SLOT_NUT, // ITEM_NUT + SLOT_DEKU_STICK, // ITEM_DEKU_STICK + SLOT_DEKU_NUT, // ITEM_DEKU_NUT SLOT_MAGIC_BEANS, // ITEM_MAGIC_BEANS SLOT_TRADE_KEY_MAMA, // ITEM_SLINGSHOT SLOT_POWDER_KEG, // ITEM_POWDER_KEG - SLOT_PICTO_BOX, // ITEM_PICTO_BOX - SLOT_LENS, // ITEM_LENS + SLOT_PICTOGRAPH_BOX, // ITEM_PICTOGRAPH_BOX + SLOT_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH SLOT_HOOKSHOT, // ITEM_HOOKSHOT SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY SLOT_BOTTLE_1, // ITEM_LONGSHOT @@ -307,13 +307,13 @@ u8 gItemSlots[] = { SLOT_MASK_BLAST, // ITEM_MASK_BLAST SLOT_MASK_SCENTS, // ITEM_MASK_SCENTS SLOT_MASK_GIANT, // ITEM_MASK_GIANT - SLOT_BOW, // ITEM_BOW_ARROW_FIRE - SLOT_BOW, // ITEM_BOW_ARROW_ICE - SLOT_BOW, // ITEM_BOW_ARROW_LIGHT + SLOT_BOW, // ITEM_BOW_FIRE + SLOT_BOW, // ITEM_BOW_ICE + SLOT_BOW, // ITEM_BOW_LIGHT }; s16 gItemPrices[] = { - 0, // ITEM_OCARINA + 0, // ITEM_OCARINA_OF_TIME 0, // ITEM_BOW 0, // ITEM_ARROW_FIRE 0, // ITEM_ARROW_ICE @@ -321,13 +321,13 @@ s16 gItemPrices[] = { 0, // ITEM_OCARINA_FAIRY 0, // ITEM_BOMB 0, // ITEM_BOMBCHU - 0, // ITEM_STICK - 0, // ITEM_NUT + 0, // ITEM_DEKU_STICK + 0, // ITEM_DEKU_NUT 0, // ITEM_MAGIC_BEANS 0, // ITEM_SLINGSHOT 0, // ITEM_POWDER_KEG - 0, // ITEM_PICTO_BOX - 0, // ITEM_LENS + 0, // ITEM_PICTOGRAPH_BOX + 0, // ITEM_LENS_OF_TRUTH 0, // ITEM_HOOKSHOT 0, // ITEM_SWORD_GREAT_FAIRY 0, // ITEM_LONGSHOT diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 43b9c35b5..2a56e0ba5 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -154,7 +154,7 @@ static DrawItemTableEntry sDrawItemTable[] = { { GetItem_DrawOpa01, { gGiBremenMaskDL, gGiBremenMaskEmptyDL } }, // GID_MASK_ALL_NIGHT, OBJECT_GI_MASK06 { GetItem_DrawOpa0Xlu1, { gGiAllNightMaskEyesDL, gGiAllNightMaskFaceDL } }, - // GID_NUTS, OBJECT_GI_NUTS + // GID_DEKU_NUTS, OBJECT_GI_NUTS { GetItem_DrawDekuNuts, { gGiNutDL } }, // GID_HEART_CONTAINER, OBJECT_GI_HEARTS { GetItem_DrawXlu01, { gGiHeartBorderDL, gGiHeartContainerDL } }, @@ -172,13 +172,13 @@ static DrawItemTableEntry sDrawItemTable[] = { { GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag30BagColorDL, gGiBombBag30RingColorDL, gGiBombBagRingDL } }, // GID_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH { GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag40BagColorDL, gGiBombBag40RingColorDL, gGiBombBagRingDL } }, - // GID_STICK, OBJECT_GI_STICK + // GID_DEKU_STICK, OBJECT_GI_STICK { GetItem_DrawOpa0, { gGiStickDL } }, // GID_DUNGEON_MAP, OBJECT_GI_MAP { GetItem_DrawOpa0, { gGiDungeonMapDL } }, - // GID_MAGIC_SMALL, OBJECT_GI_MAGICPOT + // GID_MAGIC_JAR_SMALL, OBJECT_GI_MAGICPOT { GetItem_DrawOpa0, { gGiMagicJarSmallDL } }, - // GID_MAGIC_LARGE, OBJECT_GI_MAGICPOT + // GID_MAGIC_JAR_BIG, OBJECT_GI_MAGICPOT { GetItem_DrawOpa0, { gGiMagicJarLargeDL } }, // GID_BOMB, OBJECT_GI_BOMB_1 { GetItem_DrawOpa0, { gGiBombDL } }, @@ -367,7 +367,7 @@ static DrawItemTableEntry sDrawItemTable[] = { { GetItem_DrawOpa01, { gGiGiantMaskEmptyDL, gGiGiantMaskDL } }, // GID_CHATEAU, OBJECT_GI_BOTTLE_21 { GetItem_DrawOpa0Xlu1, { gGiChateauRomaniBottleEmptyDL, gGiChateauRomaniBottleDL } }, - // GID_PICTO_BOX, OBJECT_GI_CAMERA + // GID_PICTOGRAPH_BOX, OBJECT_GI_CAMERA { GetItem_DrawOpa0Xlu1, { gGiPictoBoxFrameDL, gGiPictoBoxBodyAndLensDL } }, // GID_MASK_FIERCE_DEITY, OBJECT_GI_MASK03 { GetItem_DrawOpa01, { gGiFierceDeityMaskFaceDL, gGiFierceDeityMaskHairAndHatDL } }, diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index 75112a6b5..a7e97c3bd 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -13,7 +13,7 @@ * Gets the relevant text ID for Tatl hints in first cycle. */ u16 QuestHint_GetTatlTextId(PlayState* play) { - if (INV_CONTENT(ITEM_OCARINA) == ITEM_OCARINA) { + if (INV_CONTENT(ITEM_OCARINA_OF_TIME) == ITEM_OCARINA_OF_TIME) { return 0; } diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 6d26060d7..a13499f46 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -146,17 +146,17 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { case ITEM00_BOMBS_A: case ITEM00_BOMBS_B: - case ITEM00_NUTS_1: - case ITEM00_STICK: - case ITEM00_MAGIC_SMALL: - case ITEM00_NUTS_10: + case ITEM00_DEKU_NUTS_1: + case ITEM00_DEKU_STICK: + case ITEM00_MAGIC_JAR_SMALL: + case ITEM00_DEKU_NUTS_10: case ITEM00_BOMBS_0: Actor_SetScale(thisx, 0.03f); this->unk154 = 0.03f; shadowOffset = 320.0f; break; - case ITEM00_MAGIC_LARGE: + case ITEM00_MAGIC_JAR_BIG: Actor_SetScale(thisx, 4.5f * 0.01f); this->unk154 = 4.5f * 0.01f; shadowOffset = 320.0f; @@ -276,24 +276,24 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { Item_Give(play, ITEM_ARROWS_50); break; - case ITEM00_MAGIC_LARGE: - Item_Give(play, ITEM_MAGIC_LARGE); + case ITEM00_MAGIC_JAR_BIG: + Item_Give(play, ITEM_MAGIC_JAR_BIG); break; - case ITEM00_MAGIC_SMALL: - Item_Give(play, ITEM_MAGIC_SMALL); + case ITEM00_MAGIC_JAR_SMALL: + Item_Give(play, ITEM_MAGIC_JAR_SMALL); break; case ITEM00_SMALL_KEY: Item_Give(play, ITEM_KEY_SMALL); break; - case ITEM00_NUTS_1: - getItemId = GI_NUTS_1; + case ITEM00_DEKU_NUTS_1: + getItemId = GI_DEKU_NUTS_1; break; - case ITEM00_NUTS_10: - getItemId = GI_NUTS_10; + case ITEM00_DEKU_NUTS_10: + getItemId = GI_DEKU_NUTS_10; break; default: @@ -328,7 +328,7 @@ void func_800A640C(EnItem00* this, PlayState* play) { ((this->actor.params == ITEM00_RECOVERY_HEART) && (this->unk152 < 0)) || (this->actor.params == ITEM00_HEART_PIECE) || (this->actor.params == ITEM00_HEART_CONTAINER)) { this->actor.shape.rot.y = this->actor.shape.rot.y + 960; - } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_NUTS_10) && + } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_DEKU_NUTS_10) && (this->actor.params < ITEM00_BOMBS_0)) { if (this->unk152 == -1) { if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x - 0x4000, 2, 3000, 1500)) { @@ -423,7 +423,7 @@ void func_800A6780(EnItem00* this, PlayState* play) { if (this->actor.params <= ITEM00_RUPEE_RED) { this->actor.shape.rot.y += 0x3C0; - } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_NUTS_10) && + } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_DEKU_NUTS_10) && (this->actor.params != ITEM00_BOMBS_0)) { this->actor.world.rot.x -= 0x2BC; this->actor.shape.rot.y += 0x190; @@ -570,16 +570,16 @@ void EnItem00_Update(Actor* thisx, PlayState* play) { Item_Give(play, ITEM_RUPEE_HUGE); break; - case ITEM00_STICK: - getItemId = GI_STICKS_1; + case ITEM00_DEKU_STICK: + getItemId = GI_DEKU_STICKS_1; break; - case ITEM00_NUTS_1: - getItemId = GI_NUTS_1; + case ITEM00_DEKU_NUTS_1: + getItemId = GI_DEKU_NUTS_1; break; - case ITEM00_NUTS_10: - getItemId = GI_NUTS_10; + case ITEM00_DEKU_NUTS_10: + getItemId = GI_DEKU_NUTS_10; break; case ITEM00_RECOVERY_HEART: @@ -624,12 +624,12 @@ void EnItem00_Update(Actor* thisx, PlayState* play) { getItemId = GI_HEART_CONTAINER; break; - case ITEM00_MAGIC_LARGE: - Item_Give(play, ITEM_MAGIC_LARGE); + case ITEM00_MAGIC_JAR_BIG: + Item_Give(play, ITEM_MAGIC_JAR_BIG); break; - case ITEM00_MAGIC_SMALL: - Item_Give(play, ITEM_MAGIC_SMALL); + case ITEM00_MAGIC_JAR_SMALL: + Item_Give(play, ITEM_MAGIC_JAR_SMALL); break; case ITEM00_SHIELD_HERO: @@ -743,12 +743,12 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) { case ITEM00_ARROWS_40: case ITEM00_ARROWS_50: case ITEM00_BOMBS_B: - case ITEM00_NUTS_1: - case ITEM00_STICK: - case ITEM00_MAGIC_LARGE: - case ITEM00_MAGIC_SMALL: + case ITEM00_DEKU_NUTS_1: + case ITEM00_DEKU_STICK: + case ITEM00_MAGIC_JAR_BIG: + case ITEM00_MAGIC_JAR_SMALL: case ITEM00_SMALL_KEY: - case ITEM00_NUTS_10: + case ITEM00_DEKU_NUTS_10: case ITEM00_BOMBS_0: EnItem00_DrawSprite(this, play); break; @@ -825,7 +825,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - if (this->actor.params == ITEM00_NUTS_10) { + if (this->actor.params == ITEM00_DEKU_NUTS_10) { texIndex = 6; } else if (this->actor.params == ITEM00_BOMBS_0) { texIndex = 1; @@ -886,7 +886,7 @@ s16 func_800A7650(s16 dropId) { (((dropId == ITEM00_ARROWS_10) || (dropId == ITEM00_ARROWS_30) || (dropId == ITEM00_ARROWS_40) || (dropId == ITEM00_ARROWS_50)) && (INV_CONTENT(ITEM_BOW) == ITEM_NONE)) || - (((dropId == ITEM00_MAGIC_LARGE) || (dropId == ITEM00_MAGIC_SMALL)) && + (((dropId == ITEM00_MAGIC_JAR_BIG) || (dropId == ITEM00_MAGIC_JAR_SMALL)) && (gSaveContext.save.saveInfo.playerData.magicLevel == 0))) { return ITEM00_NO_DROP; } @@ -1024,61 +1024,278 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { } u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = { - ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, - ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, - ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, - ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_MASK, - ITEM00_MASK, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, - ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RUPEE_BLUE, - ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, - ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, - ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, - ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, - ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, - ITEM00_ARROWS_30, ITEM00_ARROWS_30, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, - ITEM00_MAGIC_LARGE, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_BOMBS_A, - ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, - ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, - ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, - ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, - ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, - ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NUTS_1, ITEM00_NUTS_1, - ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_STICK, - ITEM00_STICK, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, - ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP, - ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_30, ITEM00_BOMBS_A, ITEM00_NO_DROP, - ITEM00_STICK, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, - ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_MAGIC_SMALL, - ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_NO_DROP, ITEM00_NO_DROP, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_BLUE, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_BOMBS_A, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RUPEE_GREEN, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_NO_DROP, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_GREEN, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_BOMBS_A, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RUPEE_GREEN, + ITEM00_NO_DROP, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_RED, + ITEM00_NO_DROP, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_BOMBS_A, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_RUPEE_RED, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_30, + ITEM00_ARROWS_30, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_BOMBS_A, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_MAGIC_JAR_BIG, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_DEKU_NUTS_1, + ITEM00_DEKU_NUTS_1, + ITEM00_NO_DROP, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_DEKU_STICK, + ITEM00_DEKU_STICK, + ITEM00_NO_DROP, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RUPEE_GREEN, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_BLUE, + ITEM00_RUPEE_RED, + ITEM00_NO_DROP, + ITEM00_ARROWS_10, + ITEM00_ARROWS_10, + ITEM00_ARROWS_30, + ITEM00_BOMBS_A, + ITEM00_NO_DROP, + ITEM00_DEKU_STICK, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_FLEXIBLE, + ITEM00_RUPEE_GREEN, + ITEM00_RECOVERY_HEART, + ITEM00_RECOVERY_HEART, + ITEM00_MAGIC_JAR_SMALL, + ITEM00_MASK, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, + ITEM00_NO_DROP, }; u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = { @@ -1122,7 +1339,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP dropId = ITEM00_RECOVERY_HEART; break; case PLAYER_FORM_GORON: - dropId = ITEM00_MAGIC_SMALL; + dropId = ITEM00_MAGIC_JAR_SMALL; break; default: dropId = ITEM00_RUPEE_GREEN; @@ -1169,13 +1386,13 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP } else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) && (gSaveContext.save.saveInfo.playerData.magic == 0)) { params = 0xD0; - dropId = ITEM00_MAGIC_LARGE; + dropId = ITEM00_MAGIC_JAR_BIG; dropQuantity = 1; } 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; + dropId = ITEM00_MAGIC_JAR_BIG; dropQuantity = 1; } else if (AMMO(ITEM_BOW) < 6) { params = 0xA0; @@ -1230,10 +1447,10 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP s32 D_801AE194[32] = { ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE, ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD, - ITEM00_RECOVERY_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL, - ITEM00_MAGIC_LARGE, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10, + ITEM00_RECOVERY_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_JAR_SMALL, + ITEM00_MAGIC_JAR_BIG, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_DEKU_NUTS_10, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, - ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, + ITEM00_DEKU_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_30, }; diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 98d14874b..9c69fb6a0 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -112,7 +112,7 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) { (waterY - fire->position.y > 6500.0f * fire->yScale)) { FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_NOT_LIT); } - if ((fire->flags & FIRE_FLAG_INTERACT_STICK) && (player->heldItemAction == PLAYER_IA_STICK)) { + if ((fire->flags & FIRE_FLAG_INTERACT_STICK) && (player->heldItemAction == PLAYER_IA_DEKU_STICK)) { Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist); if (Math3D_LengthSquared(&dist) < SQ(20.0f)) { sp40 = true; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 8cec0a5b7..a79071603 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -104,25 +104,25 @@ s16 sMagicBorderRatio = 2; s16 sMagicBorderStep = 1; s16 sExtraItemBases[] = { - ITEM_STICK, // ITEM_STICKS_5 - ITEM_STICK, // ITEM_STICKS_10 - ITEM_NUT, // ITEM_NUTS_5 - ITEM_NUT, // ITEM_NUTS_10 - ITEM_BOMB, // ITEM_BOMBS_5 - ITEM_BOMB, // ITEM_BOMBS_10 - ITEM_BOMB, // ITEM_BOMBS_20 - ITEM_BOMB, // ITEM_BOMBS_30 - ITEM_BOW, // ITEM_ARROWS_10 - ITEM_BOW, // ITEM_ARROWS_30 - ITEM_BOW, // ITEM_ARROWS_40 - ITEM_BOMBCHU, // ITEM_ARROWS_50 !@bug this data is missing an ITEM_BOW, offsetting the rest by 1 - ITEM_BOMBCHU, // ITEM_BOMBCHUS_20 - ITEM_BOMBCHU, // ITEM_BOMBCHUS_10 - ITEM_BOMBCHU, // ITEM_BOMBCHUS_1 - ITEM_STICK, // ITEM_BOMBCHUS_5 - ITEM_STICK, // ITEM_STICK_UPGRADE_20 - ITEM_NUT, // ITEM_STICK_UPGRADE_30 - ITEM_NUT, // ITEM_NUT_UPGRADE_30 + ITEM_DEKU_STICK, // ITEM_DEKU_STICKS_5 + ITEM_DEKU_STICK, // ITEM_DEKU_STICKS_10 + ITEM_DEKU_NUT, // ITEM_DEKU_NUTS_5 + ITEM_DEKU_NUT, // ITEM_DEKU_NUTS_10 + ITEM_BOMB, // ITEM_BOMBS_5 + ITEM_BOMB, // ITEM_BOMBS_10 + ITEM_BOMB, // ITEM_BOMBS_20 + ITEM_BOMB, // ITEM_BOMBS_30 + ITEM_BOW, // ITEM_ARROWS_10 + ITEM_BOW, // ITEM_ARROWS_30 + ITEM_BOW, // ITEM_ARROWS_40 + ITEM_BOMBCHU, // ITEM_ARROWS_50 !@bug this data is missing an ITEM_BOW, offsetting the rest by 1 + ITEM_BOMBCHU, // ITEM_BOMBCHUS_20 + ITEM_BOMBCHU, // ITEM_BOMBCHUS_10 + ITEM_BOMBCHU, // ITEM_BOMBCHUS_1 + ITEM_DEKU_STICK, // ITEM_BOMBCHUS_5 + ITEM_DEKU_STICK, // ITEM_DEKU_STICK_UPGRADE_20 + ITEM_DEKU_NUT, // ITEM_DEKU_STICK_UPGRADE_30 + ITEM_DEKU_NUT, // ITEM_DEKU_NUT_UPGRADE_30 }; s16 sEnvHazard = PLAYER_ENV_HAZARD_NONE; @@ -1707,7 +1707,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { if (CHECK_EVENTINF(EVENTINF_41)) { // Related to swamp boat (non-minigame)? for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { - if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX) || (msgCtx->msgMode != 0)) { + if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != 0)) { if (gSaveContext.buttonStatus[i] == BTN_ENABLED) { restoreHudVisibility = true; } @@ -1792,8 +1792,8 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } else if (CHECK_EVENTINF(EVENTINF_34)) { // Deku playground minigame if (player->stateFlags3 & PLAYER_STATE3_1000000) { - if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT; + if (gSaveContext.save.saveInfo.inventory.items[SLOT_DEKU_NUT] == ITEM_DEKU_NUT) { + BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); } else { gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED; @@ -1820,9 +1820,9 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } } else if (player->stateFlags3 & PLAYER_STATE3_1000000) { // Nuts on B (from flying as Deku Link) - 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; + if (gSaveContext.save.saveInfo.inventory.items[SLOT_DEKU_NUT] == ITEM_DEKU_NUT) { + if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_DEKU_NUT) { + BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; restoreHudVisibility = true; @@ -1838,7 +1838,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; } } else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) && - (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) { + (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_DEKU_NUT)) { // Nuts on B (as Deku Link) BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_FD; gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED; @@ -1909,7 +1909,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } else if (player->stateFlags1 & PLAYER_STATE1_200000) { // First person view for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { - if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS) { + if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS_OF_TRUTH) { if (gSaveContext.buttonStatus[i] == BTN_ENABLED) { restoreHudVisibility = true; } @@ -2077,7 +2077,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) || ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) || - (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) { + (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) { if (gSaveContext.buttonStatus[i] == BTN_ENABLED) { restoreHudVisibility = true; } @@ -2088,7 +2088,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) || ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) || - (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) { + (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) { if (gSaveContext.buttonStatus[i] == BTN_DISABLED) { restoreHudVisibility = true; } @@ -2115,14 +2115,14 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } if (interfaceCtx->restrictions.pictoBox != 0) { - if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) { + if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) { if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED restoreHudVisibility = true; } gSaveContext.buttonStatus[i] = BTN_DISABLED; } } else if (interfaceCtx->restrictions.pictoBox == 0) { - if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) { + if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) { if (gSaveContext.buttonStatus[i] == BTN_DISABLED) { restoreHudVisibility = true; } @@ -2135,10 +2135,10 @@ void Interface_UpdateButtonsPart2(PlayState* play) { (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) && - (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) && + (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA_OF_TIME) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) && - (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) { + (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) { if ((gSaveContext.buttonStatus[i] == BTN_ENABLED)) { restoreHudVisibility = true; @@ -2150,10 +2150,10 @@ void Interface_UpdateButtonsPart2(PlayState* play) { (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) && - (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) && + (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA_OF_TIME) && !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) && - (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) { + (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) { if ((gSaveContext.buttonStatus[i] == BTN_DISABLED)) { restoreHudVisibility = true; @@ -2517,8 +2517,8 @@ u8 Item_Give(PlayState* play, u8 item) { u8 slot; slot = SLOT(item); - if (item >= ITEM_STICKS_5) { - slot = SLOT(sExtraItemBases[item - ITEM_STICKS_5]); + if (item >= ITEM_DEKU_STICKS_5) { + slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]); } if (item == ITEM_SKULL_TOKEN) { @@ -2642,84 +2642,84 @@ u8 Item_Give(PlayState* play, u8 item) { Inventory_ChangeUpgrade(UPG_WALLET, 2); return ITEM_NONE; - } else if (item == ITEM_STICK_UPGRADE_20) { - if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) { - INV_CONTENT(ITEM_STICK) = ITEM_STICK; + } else if (item == ITEM_DEKU_STICK_UPGRADE_20) { + if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) { + INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK; } - Inventory_ChangeUpgrade(UPG_STICKS, 2); - AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 2); + Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 2); + AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 2); return ITEM_NONE; - } else if (item == ITEM_STICK_UPGRADE_30) { - if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) { - INV_CONTENT(ITEM_STICK) = ITEM_STICK; + } else if (item == ITEM_DEKU_STICK_UPGRADE_30) { + if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) { + INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK; } - Inventory_ChangeUpgrade(UPG_STICKS, 3); - AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 3); + Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 3); + AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 3); return ITEM_NONE; - } else if (item == ITEM_NUT_UPGRADE_30) { - if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) { - INV_CONTENT(ITEM_NUT) = ITEM_NUT; + } else if (item == ITEM_DEKU_NUT_UPGRADE_30) { + if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) { + INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT; } - Inventory_ChangeUpgrade(UPG_NUTS, 2); - AMMO(ITEM_NUT) = CAPACITY(UPG_NUTS, 2); + Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 2); + AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 2); return ITEM_NONE; - } else if (item == ITEM_NUT_UPGRADE_40) { - if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) { - INV_CONTENT(ITEM_NUT) = ITEM_NUT; + } else if (item == ITEM_DEKU_NUT_UPGRADE_40) { + if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) { + INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT; } - Inventory_ChangeUpgrade(UPG_NUTS, 3); - AMMO(ITEM_NUT) = CAPACITY(UPG_NUTS, 3); + Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 3); + AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 3); return ITEM_NONE; - } else if (item == ITEM_STICK) { - if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) { - Inventory_ChangeUpgrade(UPG_STICKS, 1); - AMMO(ITEM_STICK) = 1; + } else if (item == ITEM_DEKU_STICK) { + if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) { + Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1); + AMMO(ITEM_DEKU_STICK) = 1; } else { - AMMO(ITEM_STICK)++; - if (AMMO(ITEM_STICK) > CUR_CAPACITY(UPG_STICKS)) { - AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS); + AMMO(ITEM_DEKU_STICK)++; + if (AMMO(ITEM_DEKU_STICK) > CUR_CAPACITY(UPG_DEKU_STICKS)) { + AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS); } } - } else if ((item == ITEM_STICKS_5) || (item == ITEM_STICKS_10)) { - if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) { - Inventory_ChangeUpgrade(UPG_STICKS, 1); - AMMO(ITEM_STICK) = sAmmoRefillCounts[item - ITEM_STICKS_5]; + } else if ((item == ITEM_DEKU_STICKS_5) || (item == ITEM_DEKU_STICKS_10)) { + if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) { + Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1); + AMMO(ITEM_DEKU_STICK) = sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5]; } else { - AMMO(ITEM_STICK) += sAmmoRefillCounts[item - ITEM_STICKS_5]; - if (AMMO(ITEM_STICK) > CUR_CAPACITY(UPG_STICKS)) { - AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS); + AMMO(ITEM_DEKU_STICK) += sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5]; + if (AMMO(ITEM_DEKU_STICK) > CUR_CAPACITY(UPG_DEKU_STICKS)) { + AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS); } } - item = ITEM_STICK; + item = ITEM_DEKU_STICK; - } else if (item == ITEM_NUT) { - if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) { - Inventory_ChangeUpgrade(UPG_NUTS, 1); - AMMO(ITEM_NUT) = 1; + } else if (item == ITEM_DEKU_NUT) { + if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) { + Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1); + AMMO(ITEM_DEKU_NUT) = 1; } else { - AMMO(ITEM_NUT)++; - if (AMMO(ITEM_NUT) > CUR_CAPACITY(UPG_NUTS)) { - AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS); + AMMO(ITEM_DEKU_NUT)++; + if (AMMO(ITEM_DEKU_NUT) > CUR_CAPACITY(UPG_DEKU_NUTS)) { + AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS); } } - } else if ((item == ITEM_NUTS_5) || (item == ITEM_NUTS_10)) { - if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) { - Inventory_ChangeUpgrade(UPG_NUTS, 1); - AMMO(ITEM_NUT) += sAmmoRefillCounts[item - ITEM_NUTS_5]; + } else if ((item == ITEM_DEKU_NUTS_5) || (item == ITEM_DEKU_NUTS_10)) { + if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) { + Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1); + AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5]; } else { - AMMO(ITEM_NUT) += sAmmoRefillCounts[item - ITEM_NUTS_5]; - if (AMMO(ITEM_NUT) > CUR_CAPACITY(UPG_NUTS)) { - AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS); + AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5]; + if (AMMO(ITEM_DEKU_NUT) > CUR_CAPACITY(UPG_DEKU_NUTS)) { + AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS); } } - item = ITEM_NUT; + item = ITEM_DEKU_NUT; } else if (item == ITEM_POWDER_KEG) { if (INV_CONTENT(ITEM_POWDER_KEG) != ITEM_POWDER_KEG) { @@ -2782,8 +2782,8 @@ u8 Item_Give(PlayState* play, u8 item) { } return ITEM_BOW; - } else if (item == ITEM_OCARINA) { - INV_CONTENT(ITEM_OCARINA) = ITEM_OCARINA; + } else if (item == ITEM_OCARINA_OF_TIME) { + INV_CONTENT(ITEM_OCARINA_OF_TIME) = ITEM_OCARINA_OF_TIME; return ITEM_NONE; } else if (item == ITEM_MAGIC_BEANS) { @@ -2805,7 +2805,7 @@ u8 Item_Give(PlayState* play, u8 item) { Health_ChangeBy(play, 0x10); return item; - } else if (item == ITEM_MAGIC_SMALL) { + } else if (item == ITEM_MAGIC_JAR_SMALL) { Magic_Add(play, MAGIC_NORMAL_METER / 2); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_12_80); @@ -2813,7 +2813,7 @@ u8 Item_Give(PlayState* play, u8 item) { } return item; - } else if (item == ITEM_MAGIC_LARGE) { + } else if (item == ITEM_MAGIC_JAR_BIG) { Magic_Add(play, MAGIC_NORMAL_METER); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_12_80); @@ -2941,8 +2941,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) { u8 bottleSlot; slot = SLOT(item); - if (item >= ITEM_STICKS_5) { - slot = SLOT(sExtraItemBases[item - ITEM_STICKS_5]); + if (item >= ITEM_DEKU_STICKS_5) { + slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]); } if (item == ITEM_SKULL_TOKEN) { @@ -2969,8 +2969,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) { } else if (item == ITEM_KEY_SMALL) { return ITEM_NONE; - } else if ((item == ITEM_OCARINA) || (item == ITEM_BOMBCHU) || (item == ITEM_HOOKSHOT) || (item == ITEM_LENS) || - (item == ITEM_SWORD_GREAT_FAIRY) || (item == ITEM_PICTO_BOX)) { + } else if ((item == ITEM_OCARINA_OF_TIME) || (item == ITEM_BOMBCHU) || (item == ITEM_HOOKSHOT) || + (item == ITEM_LENS_OF_TRUTH) || (item == ITEM_SWORD_GREAT_FAIRY) || (item == ITEM_PICTOGRAPH_BOX)) { if (INV_CONTENT(item) == ITEM_NONE) { return ITEM_NONE; } @@ -3004,7 +3004,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) { } return 0; - } else if ((item >= ITEM_STICK_UPGRADE_20) && (item <= ITEM_NUT_UPGRADE_40)) { + } else if ((item >= ITEM_DEKU_STICK_UPGRADE_20) && (item <= ITEM_DEKU_NUT_UPGRADE_40)) { return ITEM_NONE; } else if ((item >= ITEM_BOMB_BAG_30) && (item <= ITEM_WALLET_GIANT)) { @@ -3025,7 +3025,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) { } else if (item == ITEM_RECOVERY_HEART) { return ITEM_RECOVERY_HEART; - } else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) { + } else if ((item == ITEM_MAGIC_JAR_SMALL) || (item == ITEM_MAGIC_JAR_BIG)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { return ITEM_NONE; } @@ -3295,22 +3295,22 @@ void Rupees_ChangeBy(s16 rupeeChange) { } void Inventory_ChangeAmmo(s16 item, s16 ammoChange) { - if (item == ITEM_STICK) { - AMMO(ITEM_STICK) += ammoChange; + if (item == ITEM_DEKU_STICK) { + AMMO(ITEM_DEKU_STICK) += ammoChange; - if (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) { - AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS); - } else if (AMMO(ITEM_STICK) < 0) { - AMMO(ITEM_STICK) = 0; + if (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS)) { + AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS); + } else if (AMMO(ITEM_DEKU_STICK) < 0) { + AMMO(ITEM_DEKU_STICK) = 0; } - } else if (item == ITEM_NUT) { - AMMO(ITEM_NUT) += ammoChange; + } else if (item == ITEM_DEKU_NUT) { + AMMO(ITEM_DEKU_NUT) += ammoChange; - if (AMMO(ITEM_NUT) >= CUR_CAPACITY(UPG_NUTS)) { - AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS); - } else if (AMMO(ITEM_NUT) < 0) { - AMMO(ITEM_NUT) = 0; + if (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS)) { + AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS); + } else if (AMMO(ITEM_DEKU_NUT) < 0) { + AMMO(ITEM_DEKU_NUT) = 0; } } else if (item == ITEM_BOMBCHU) { @@ -3665,9 +3665,9 @@ void Magic_Update(PlayState* play) { 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) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS)) || + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS_OF_TRUTH) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS_OF_TRUTH) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS_OF_TRUTH)) || !play->actorCtx.lensActive) { // Deactivate Lens of Truth and set magic state to idle play->actorCtx.lensActive = false; @@ -4010,17 +4010,17 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { i = ((void)0, GET_CUR_FORM_BTN_ITEM(button)); - if ((i == ITEM_STICK) || (i == ITEM_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) || - ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) || - (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTO_BOX)) { + if ((i == ITEM_DEKU_STICK) || (i == ITEM_DEKU_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) || + ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) || + (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTOGRAPH_BOX)) { - if ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) { + if ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) { i = ITEM_BOW; } ammo = AMMO(i); - if (i == ITEM_PICTO_BOX) { + if (i == ITEM_PICTOGRAPH_BOX) { if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) { ammo = 0; } else { @@ -4036,10 +4036,10 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { ammo = play->unk_1887C - 1; } else if (((i == ITEM_BOW) && (AMMO(i) == CUR_CAPACITY(UPG_QUIVER))) || ((i == ITEM_BOMB) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) || - ((i == ITEM_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_STICKS))) || - ((i == ITEM_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_NUTS))) || + ((i == ITEM_DEKU_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_STICKS))) || + ((i == ITEM_DEKU_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_NUTS))) || ((i == ITEM_BOMBCHU) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) || - ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTO_BOX) && (ammo == 1)) || + ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTOGRAPH_BOX) && (ammo == 1)) || ((i == ITEM_MAGIC_BEANS) && (ammo == 20))) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha); } @@ -4090,7 +4090,7 @@ void Interface_DrawBButtonIcons(PlayState* play) { ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) < ITEM_SWORD_KOKIRI) || (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) > ITEM_SWORD_GILDED)) && BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) && - (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT))) { + (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_DEKU_NUT))) { if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || (player->transformation == PLAYER_FORM_HUMAN)) { if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) { Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment, EQUIP_SLOT_B); @@ -6950,7 +6950,7 @@ void Interface_Update(PlayState* play) { 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; + BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_DEKU_NUT; } Magic_Update(play); diff --git a/src/code/z_play.c b/src/code/z_play.c index ac9c1eacc..a97cf9f8e 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -2149,7 +2149,7 @@ void Play_Init(GameState* thisx) { } // "First cycle" Termina Field - if (INV_CONTENT(ITEM_OCARINA) != ITEM_OCARINA) { + if (INV_CONTENT(ITEM_OCARINA_OF_TIME) != ITEM_OCARINA_OF_TIME) { if ((scene == ENTR_SCENE_TERMINA_FIELD) && (((void)0, gSaveContext.save.entrance) != ENTRANCE(TERMINA_FIELD, 10))) { gSaveContext.nextCutsceneIndex = 0xFFF4; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index e30dec3f1..d87905117 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -655,12 +655,12 @@ PlayerItemAction func_80123810(PlayState* play) { u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NONE PLAYER_MODELGROUP_13, // PLAYER_IA_LAST_USED - PLAYER_MODELGROUP_STICK, // PLAYER_IA_FISHING_ROD + PLAYER_MODELGROUP_DEKU_STICK, // PLAYER_IA_FISHING_ROD PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_TWO_HANDED - PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK + PLAYER_MODELGROUP_DEKU_STICK, // PLAYER_IA_DEKU_STICK PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_FIRE @@ -671,8 +671,8 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_POWDER_KEG PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMBCHU PLAYER_MODELGROUP_8, // PLAYER_IA_11 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT - PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTO_BOX + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEKU_NUT + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTOGRAPH_BOX PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_IA_OCARINA PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH @@ -735,7 +735,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GORON PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ZORA PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DEKU - PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS_OF_TRUTH }; PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction) { @@ -808,7 +808,7 @@ PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = { /* PLAYER_MODELGROUP_HOOKSHOT */ { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_HOOKSHOT, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, - /* PLAYER_MODELGROUP_STICK */ + /* PLAYER_MODELGROUP_DEKU_STICK */ { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_INSTRUMENT */ @@ -1367,7 +1367,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y Vec3f diff; s32 pad; - if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { + if ((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (player->unk_B28 != 0)) { Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, pos, &diff); return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange); } @@ -1446,7 +1446,7 @@ PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) { s32 Player_IsHoldingTwoHandedWeapon(Player* player) { // Relies on the itemActions for two-handed weapons being contiguous. - if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_STICK)) { + if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_DEKU_STICK)) { return true; } @@ -3291,7 +3291,7 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) { CLOSE_DISPS(play->state.gfxCtx); } - } else if (player->itemAction == PLAYER_IA_STICK) { + } else if (player->itemAction == PLAYER_IA_DEKU_STICK) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -3415,17 +3415,17 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G 3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR 4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED 5500.0f, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED - -1.0f, // PLAYER_MELEEWEAPON_STICK + -1.0f, // PLAYER_MELEEWEAPON_DEKU_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->itemAction == PLAYER_IA_DEKU_STICK) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) { - if (player->itemAction == PLAYER_IA_STICK) { + if (player->itemAction == PLAYER_IA_DEKU_STICK) { D_801C0994->x = player->unk_B0C * 5000.0f; } else { D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)]; diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 5efb43896..33276f717 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -267,30 +267,30 @@ u32 gSramSlotOffsets[] = { }; u8 gAmmoItems[] = { - ITEM_NONE, // SLOT_OCARINA - ITEM_BOW, // SLOT_BOW - ITEM_NONE, // SLOT_ARROW_FIRE - ITEM_NONE, // SLOT_ARROW_ICE - ITEM_NONE, // SLOT_ARROW_LIGHT - ITEM_NONE, // SLOT_TRADE_DEED - ITEM_BOMB, // SLOT_BOMB - ITEM_BOMBCHU, // SLOT_BOMBCHU - ITEM_STICK, // SLOT_STICK - ITEM_NUT, // SLOT_NUT - ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS - ITEM_NONE, // SLOT_TRADE_KEY_MAMA - ITEM_POWDER_KEG, // SLOT_POWDER_KEG - ITEM_PICTO_BOX, // SLOT_PICTO_BOX - ITEM_NONE, // SLOT_LENS - ITEM_NONE, // SLOT_HOOKSHOT - ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY - ITEM_NONE, // SLOT_TRADE_COUPLE - ITEM_NONE, // SLOT_BOTTLE_1 - ITEM_NONE, // SLOT_BOTTLE_2 - ITEM_NONE, // SLOT_BOTTLE_3 - ITEM_NONE, // SLOT_BOTTLE_4 - ITEM_NONE, // SLOT_BOTTLE_5 - ITEM_NONE, // SLOT_BOTTLE_6 + ITEM_NONE, // SLOT_OCARINA + ITEM_BOW, // SLOT_BOW + ITEM_NONE, // SLOT_ARROW_FIRE + ITEM_NONE, // SLOT_ARROW_ICE + ITEM_NONE, // SLOT_ARROW_LIGHT + ITEM_NONE, // SLOT_TRADE_DEED + ITEM_BOMB, // SLOT_BOMB + ITEM_BOMBCHU, // SLOT_BOMBCHU + ITEM_DEKU_STICK, // SLOT_DEKU_STICK + ITEM_DEKU_NUT, // SLOT_DEKU_NUT + ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS + ITEM_NONE, // SLOT_TRADE_KEY_MAMA + ITEM_POWDER_KEG, // SLOT_POWDER_KEG + ITEM_PICTOGRAPH_BOX, // SLOT_PICTOGRAPH_BOX + ITEM_NONE, // SLOT_LENS_OF_TRUTH + ITEM_NONE, // SLOT_HOOKSHOT + ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY + ITEM_NONE, // SLOT_TRADE_COUPLE + ITEM_NONE, // SLOT_BOTTLE_1 + ITEM_NONE, // SLOT_BOTTLE_2 + ITEM_NONE, // SLOT_BOTTLE_3 + ITEM_NONE, // SLOT_BOTTLE_4 + ITEM_NONE, // SLOT_BOTTLE_5 + ITEM_NONE, // SLOT_BOTTLE_6 }; // Stores flash start page number @@ -506,14 +506,14 @@ void Sram_SaveEndOfCycle(PlayState* play) { SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO); } } - if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) { - item = INV_CONTENT(ITEM_NUT); + if (INV_CONTENT(ITEM_DEKU_NUT) == ITEM_DEKU_NUT) { + item = INV_CONTENT(ITEM_DEKU_NUT); if (AMMO(item) != 0) { SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO); } } - if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) { - item = INV_CONTENT(ITEM_STICK); + if (INV_CONTENT(ITEM_DEKU_STICK) == ITEM_DEKU_STICK) { + item = INV_CONTENT(ITEM_DEKU_STICK); if (AMMO(item) != 0) { SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO); } @@ -527,7 +527,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { for (i = 0; i < ARRAY_COUNT(gAmmoItems); i++) { if (gAmmoItems[i] != ITEM_NONE) { - if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) { + if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTOGRAPH_BOX)) { item = gSaveContext.save.saveInfo.inventory.items[i]; AMMO(item) = 0; } @@ -607,7 +607,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { Inventory_DeleteItem(ITEM_LONGSHOT, SLOT_TRADE_COUPLE); for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) { - if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES) { + if ((GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) { SET_CUR_FORM_BTN_ITEM(j, ITEM_NONE); Interface_LoadItemIconImpl(play, j); } @@ -884,10 +884,10 @@ SavePlayerData sSaveDebugPlayerData = { ItemEquips sSaveDebugItemEquips = { { - { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_POTION_RED, ITEM_OCARINA }, - { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_GORON, ITEM_OCARINA }, - { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_ZORA, ITEM_OCARINA }, - { ITEM_NUT, ITEM_NUT, ITEM_MASK_DEKU, ITEM_OCARINA }, + { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_POTION_RED, ITEM_OCARINA_OF_TIME }, + { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_GORON, ITEM_OCARINA_OF_TIME }, + { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME }, + { ITEM_DEKU_NUT, ITEM_DEKU_NUT, ITEM_MASK_DEKU, ITEM_OCARINA_OF_TIME }, }, { { SLOT_OCARINA, SLOT_BOW, SLOT_BOTTLE_2, SLOT_OCARINA }, @@ -901,7 +901,7 @@ ItemEquips sSaveDebugItemEquips = { Inventory sSaveDebugInventory = { // items { - ITEM_OCARINA, + ITEM_OCARINA_OF_TIME, ITEM_BOW, ITEM_ARROW_FIRE, ITEM_ARROW_ICE, @@ -909,13 +909,13 @@ Inventory sSaveDebugInventory = { ITEM_MOONS_TEAR, ITEM_BOMB, ITEM_BOMBCHU, - ITEM_STICK, - ITEM_NUT, + ITEM_DEKU_STICK, + ITEM_DEKU_NUT, ITEM_MAGIC_BEANS, ITEM_ROOM_KEY, ITEM_POWDER_KEG, - ITEM_PICTO_BOX, - ITEM_LENS, + ITEM_PICTOGRAPH_BOX, + ITEM_LENS_OF_TRUTH, ITEM_HOOKSHOT, ITEM_SWORD_GREAT_FAIRY, ITEM_LETTER_TO_KAFEI, 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 c11df8af1..9f5a9c42d 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -450,7 +450,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) { this->dyna.actor.world.pos.z; } func_809CEE74(this); - } else if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { + } else if ((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (player->unk_B28 != 0)) { Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &this->dyna.actor.world.pos, &sp3C); sp38 = Math_SinS(-this->dyna.actor.shape.rot.x); sp34 = Math_CosS(-this->dyna.actor.shape.rot.x); 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 2f933c751..231f76d6c 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -148,7 +148,7 @@ void DmChar02_Update(Actor* thisx, PlayState* play) { this->unk_2F0 = this->unk_2F0; this->actionFunc(this, play); if (!Actor_HasParent(&this->actor, play)) { - Actor_OfferGetItem(&this->actor, play, GI_OCARINA, 30.0f, 80.0f); + Actor_OfferGetItem(&this->actor, play, GI_OCARINA_OF_TIME, 30.0f, 80.0f); } else { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; Actor_Kill(&this->actor); 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 7304be442..6b2b37a41 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -178,7 +178,7 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { break; case 2: - if (INV_CONTENT(ITEM_OCARINA) == ITEM_OCARINA) { + if (INV_CONTENT(ITEM_OCARINA_OF_TIME) == ITEM_OCARINA_OF_TIME) { Actor_Kill(&this->actor); return; } 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 946f1a03a..5af8eeda7 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -2601,7 +2601,7 @@ void EnBigslime_ApplyDamageEffectBigslime(EnBigslime* this, PlayState* play) { if (randFloat < 0.15f) { Item_DropCollectible(play, &this->actor.world.pos, ITEM00_ARROWS_10); } else if (randFloat < 0.3f) { - Item_DropCollectible(play, &this->actor.world.pos, ITEM00_MAGIC_SMALL); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_MAGIC_JAR_SMALL); } this->itemDropTimer = 40; } diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index ce859ad53..e65e48929 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -286,7 +286,7 @@ void func_8091C794(EnButte* this, PlayState* play) { func_8091C0A0(this, &D_8091D324[this->unk_24E]); } - if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->heldItemAction == PLAYER_IA_STICK) && + if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_252 <= 0) && ((Math3D_XZDistanceSquared(player->actor.world.pos.x, player->actor.world.pos.z, this->actor.home.pos.x, this->actor.home.pos.z) < SQ(120.0f)) || @@ -355,8 +355,8 @@ void func_8091CBB4(EnButte* this, PlayState* play) { distSq = Math3D_XZDistanceSquared(this->actor.world.pos.x, this->actor.world.pos.z, this->actor.home.pos.x, this->actor.home.pos.z); - if ((player->heldItemAction != PLAYER_IA_STICK) || !(fabsf(player->actor.speed) < 1.8f) || (this->unk_252 > 0) || - !(distSq < SQ(320.0f))) { + if ((player->heldItemAction != PLAYER_IA_DEKU_STICK) || !(fabsf(player->actor.speed) < 1.8f) || + (this->unk_252 > 0) || !(distSq < SQ(320.0f))) { func_8091C748(this); } else if ((distSq > SQ(240.0f)) && (Math3D_XZDistanceSquared(player->meleeWeaponInfo[0].tip.x, player->meleeWeaponInfo[0].tip.z, 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 3df11604e..6bf3aabb3 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -914,10 +914,10 @@ void EnDekubaba_ShrinkDie(EnDekubaba* this, PlayState* play) { (s32)(this->size * 100.0f)); if (!this->actor.dropFlag) { - Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_DEKU_NUTS_1); if (this->actor.params == DEKUBABA_BIG) { - Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1); - Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_DEKU_NUTS_1); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_DEKU_NUTS_1); } } else { Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x30); @@ -1059,7 +1059,7 @@ void EnDekubaba_DeadStickDrop(EnDekubaba* this, PlayState* play) { return; } - Actor_OfferGetItemNearby(&this->actor, play, GI_STICKS_1); + Actor_OfferGetItemNearby(&this->actor, play, GI_DEKU_STICKS_1); } /* Update and associated functions */ 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 1859cf83f..b99f23c7d 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -78,12 +78,12 @@ static ShopItemEntry sShopItemEntries[] = { EnGirlA_BuyBottleItem, EnGirlA_BuyFanfare }, { OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, func_800B8050, 1, 0x06AE, 0x06AF, GI_SHIELD_HERO, EnGirlA_CanBuyShieldHero, EnGirlA_BuyShieldHero, EnGirlA_BuyFanfare }, - { OBJECT_GI_STICK, GID_STICK, NULL, 1, 0x06B4, 0x06B5, GI_STICKS_1, EnGirlA_CanBuyStick, EnGirlA_BuyStick, + { OBJECT_GI_STICK, GID_DEKU_STICK, NULL, 1, 0x06B4, 0x06B5, GI_DEKU_STICKS_1, EnGirlA_CanBuyStick, EnGirlA_BuyStick, EnGirlA_BuyFanfare }, { OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, func_800B8050, 30, 0x06B8, 0x06B9, GI_ARROWS_30, EnGirlA_CanBuyArrows, EnGirlA_BuyArrows, EnGirlA_BuyFanfare }, - { OBJECT_GI_NUTS, GID_NUTS, func_800B8118, 10, 0x06B0, 0x06B1, GI_NUTS_10, EnGirlA_CanBuyNuts, EnGirlA_BuyNuts, - EnGirlA_BuyFanfare }, + { OBJECT_GI_NUTS, GID_DEKU_NUTS, func_800B8118, 10, 0x06B0, 0x06B1, GI_DEKU_NUTS_10, EnGirlA_CanBuyNuts, + EnGirlA_BuyNuts, EnGirlA_BuyFanfare }, { OBJECT_GI_LIQUID, GID_POTION_RED, func_800B8050, 1, 0x06AC, 0x06AD, GI_POTION_RED, EnGirlA_CanBuyPotionRed, EnGirlA_BuyBottleItem, EnGirlA_BuyFanfare }, { OBJECT_GI_BOTTLE_04, GID_FAIRY, func_800B8050, 1, 0x06D3, 0x06D4, GI_FAIRY, EnGirlA_CanBuyFairy, @@ -94,9 +94,9 @@ static ShopItemEntry sShopItemEntries[] = { EnGirlA_BuyArrows, EnGirlA_BuyFanfare }, { OBJECT_GI_LIQUID, GID_POTION_GREEN, func_800B8050, 1, 0x06CF, 0x06D0, GI_POTION_GREEN, EnGirlA_CanBuyPotionGreen, EnGirlA_BuyBottleItem, EnGirlA_BuyFanfare }, - { OBJECT_GI_NUTS, GID_NUTS, func_800B8118, 10, 0x06CD, 0x06CE, GI_NUTS_10, EnGirlA_CanBuyNuts, EnGirlA_BuyNuts, - EnGirlA_BuyFanfare }, - { OBJECT_GI_STICK, GID_STICK, NULL, 1, 0x06D1, 0x06D2, GI_STICKS_1, EnGirlA_CanBuyStick, EnGirlA_BuyStick, + { OBJECT_GI_NUTS, GID_DEKU_NUTS, func_800B8118, 10, 0x06CD, 0x06CE, GI_DEKU_NUTS_10, EnGirlA_CanBuyNuts, + EnGirlA_BuyNuts, EnGirlA_BuyFanfare }, + { OBJECT_GI_STICK, GID_DEKU_STICK, NULL, 1, 0x06D1, 0x06D2, GI_DEKU_STICKS_1, EnGirlA_CanBuyStick, EnGirlA_BuyStick, EnGirlA_BuyFanfare }, { OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, func_800B8050, 1, 0x06CB, 0x06CC, GI_SHIELD_HERO, EnGirlA_CanBuyShieldHero, EnGirlA_BuyShieldHero, EnGirlA_BuyFanfare }, @@ -234,13 +234,13 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) { - if ((CUR_CAPACITY(UPG_NUTS) != 0) && (CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT))) { + if ((CUR_CAPACITY(UPG_DEKU_NUTS) != 0) && (CUR_CAPACITY(UPG_DEKU_NUTS) <= AMMO(ITEM_DEKU_NUT))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } - if (Item_CheckObtainability(ITEM_NUT) == ITEM_NONE) { + if (Item_CheckObtainability(ITEM_DEKU_NUT) == ITEM_NONE) { return CANBUY_RESULT_SUCCESS_1; } return CANBUY_RESULT_SUCCESS_2; @@ -257,13 +257,13 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) { - if ((CUR_CAPACITY(UPG_STICKS) != 0) && (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS))) { + if ((CUR_CAPACITY(UPG_DEKU_STICKS) != 0) && (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } - if (Item_CheckObtainability(ITEM_STICK) == ITEM_NONE) { + if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) { return CANBUY_RESULT_SUCCESS_1; } return CANBUY_RESULT_SUCCESS_2; @@ -415,11 +415,11 @@ void EnGirlA_BuyArrows(PlayState* play, EnGirlA* this) { void EnGirlA_BuyNuts(PlayState* play, EnGirlA* this) { switch (this->itemParams) { case 5: - Item_Give(play, ITEM_NUTS_5); + Item_Give(play, ITEM_DEKU_NUTS_5); break; case 10: - Item_Give(play, ITEM_NUTS_10); + Item_Give(play, ITEM_DEKU_NUTS_10); break; default: @@ -434,7 +434,7 @@ void EnGirlA_BuyShieldHero(PlayState* play, EnGirlA* this) { } void EnGirlA_BuyStick(PlayState* play, EnGirlA* this) { - Item_Give(play, ITEM_STICK); + Item_Give(play, ITEM_DEKU_STICK); Rupees_ChangeBy(-play->msgCtx.unk1206C); } 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 b9d226e01..f51726e37 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -466,7 +466,7 @@ void EnKarebaba_ShrinkDie(EnKarebaba* this, PlayState* play) { } } else { if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.0005f)) { - Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_DEKU_NUTS_1); EnKarebaba_SetupDead(this); } else { EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 1, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -499,7 +499,7 @@ void EnKarebaba_DeadItemDrop(EnKarebaba* this, PlayState* play) { if (Actor_HasParent(&this->actor, play) || (this->timer == 0)) { EnKarebaba_SetupDead(this); } else { - Actor_OfferGetItemNearby(&this->actor, play, GI_STICKS_1); + Actor_OfferGetItemNearby(&this->actor, play, GI_DEKU_STICKS_1); } } diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 79c2e5cba..133624f0f 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -724,7 +724,7 @@ void EnNb_Update(Actor* thisx, PlayState* play) { EnNb_UpdateSkelAnime(this); func_80BC0800(this); if (Actor_IsFacingPlayer(&this->actor, 0x38E0)) { - func_8013C964(&this->actor, play, this->unk_274, 30.0f, ITEM_OCARINA, + func_8013C964(&this->actor, play, this->unk_274, 30.0f, ITEM_OCARINA_OF_TIME, this->stateFlags & (EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4)); } func_80BBFF24(this, play); 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 2fef8b0eb..e53d94b94 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.saveInfo.inventory.items[ITEM_LENS] == ITEM_LENS) { + if (gSaveContext.save.saveInfo.inventory.items[ITEM_LENS_OF_TRUTH] == ITEM_LENS_OF_TRUTH) { Actor_Kill(&this->actor); return; } 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 fcce6b288..0a3eee798 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -685,7 +685,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { EnScopenuts* this = THIS; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40) && - (gSaveContext.save.saveInfo.inventory.items[ITEM_OCARINA] == ITEM_NONE)) { + (gSaveContext.save.saveInfo.inventory.items[ITEM_OCARINA_OF_TIME] == ITEM_NONE)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index f9344ce05..93a663838 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -293,7 +293,7 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) { if (this->unk_1D8 & 7) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_1D8 &= ~0x180; - if (player->exchangeItemId == PLAYER_IA_PICTO_BOX) { + if (player->exchangeItemId == PLAYER_IA_PICTOGRAPH_BOX) { this->unk_1D8 |= 0x80; this->unk_2E4 = player->exchangeItemId; } else if (player->exchangeItemId != PLAYER_IA_NONE) { 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 5cb8f6ddc..6b4ef0974 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -776,7 +776,7 @@ void EnSlime_Dead(EnSlime* this, PlayState* play) { 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); + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_MAGIC_JAR_SMALL); } else if (this->actor.params == EN_SLIME_TYPE_RED) { Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RECOVERY_HEART); } 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 c06486417..42e7ca540 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 @@ -205,7 +205,7 @@ static EnTalkGibudRequestedItem sRequestedItemTable[] = { { PLAYER_IA_BOTTLE_SPRING_WATER, ITEM_SPRING_WATER, 1, true }, { PLAYER_IA_BOTTLE_FISH, ITEM_FISH, 1, true }, { PLAYER_IA_BOTTLE_BUG, ITEM_BUG, 1, true }, - { PLAYER_IA_NUT, ITEM_NUT, 10, false }, + { PLAYER_IA_DEKU_NUT, ITEM_DEKU_NUT, 10, false }, { PLAYER_IA_BOMB, ITEM_BOMB, 10, false }, { PLAYER_IA_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true }, { PLAYER_IA_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true }, diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 69bfc8b7b..798844bb8 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -149,7 +149,7 @@ void EnTanron1_Update(Actor* thisx, PlayState* play) { break; } - if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { + if ((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (player->unk_B28 != 0)) { this->unk_14C.x = player->meleeWeaponInfo[0].tip.x; this->unk_14C.y = player->meleeWeaponInfo[0].tip.y; this->unk_14C.z = player->meleeWeaponInfo[0].tip.z; 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 290bb2775..e9c43fca8 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -462,7 +462,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) { if (this->unk_1A0 == 0) { Item_Give(play, ITEM_ARROWS_10); } else { - Item_Give(play, ITEM_MAGIC_LARGE); + Item_Give(play, ITEM_MAGIC_JAR_BIG); } Actor_Kill(&this->actor); Audio_PlaySfx(NA_SE_SY_GET_ITEM); 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 3d45b7a1c..e28cc8d5a 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -457,7 +457,7 @@ void EnTest3_Init(Actor* thisx, PlayState* play2) { this->player.transformation = PLAYER_FORM_HUMAN; this->player.ageProperties = &sAgeProperties; this->player.heldItemAction = PLAYER_IA_NONE; - this->player.heldItemId = ITEM_OCARINA; + this->player.heldItemId = ITEM_OCARINA_OF_TIME; Player_SetModelGroup(&this->player, 3); play->playerInit(&this->player, play, &object_test3_Skel_00F7EC); 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 a404ac817..7be972f8f 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -324,7 +324,7 @@ void func_80AE04FC(EnTsn* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); this->actionFunc = func_80AE0704; - if (itemAction == PLAYER_IA_PICTO_BOX) { + if (itemAction == PLAYER_IA_PICTOGRAPH_BOX) { if (CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) { if (Snap_CheckFlag(PICTO_VALID_PIRATE_GOOD)) { player->actor.textId = 0x107B; 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 5ffccb77b..fde240d22 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -961,7 +961,7 @@ void func_80B985EC(EnZot* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); - if ((itemAction == PLAYER_IA_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) && + if ((itemAction == PLAYER_IA_PICTOGRAPH_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) && Snap_CheckFlag(PICTO_VALID_LULU_HEAD)) { if (Snap_CheckFlag(PICTO_VALID_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTO_VALID_LULU_LEFT_ARM)) { player->actor.textId = 0x12AE; 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 c366a6982..ff308a478 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -529,7 +529,7 @@ s32 func_80B30480(ObjSpidertent* this, PlayState* play, Vec3f* arg2) { Vec3f sp58; f32 sp54; - if (player->heldItemAction == PLAYER_IA_STICK) { + if (player->heldItemAction == PLAYER_IA_DEKU_STICK) { if (player->unk_B28 > 0) { for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++) { triNorm = &this->collider.elements[i].dim; diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index bb92d3465..5dc86c745 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -197,7 +197,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { if (this->flameCollider.info.acHitInfo->toucher.dmgFlags & 0x820) { interaction = OBJ_SYOKUDAI_INTERACTION_ARROW_FA; } - } else if (player->heldItemAction == PLAYER_IA_STICK) { + } else if (player->heldItemAction == PLAYER_IA_DEKU_STICK) { Vec3f stickTipSeparationVec; Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &thisx->world.pos, &stickTipSeparationVec); diff --git a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c index 5af34152a..b11454095 100644 --- a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c +++ b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c @@ -69,7 +69,7 @@ void ObjYasi_Update(Actor* thisx, PlayState* play) { dropPos.x = this->dyna.actor.world.pos.x; dropPos.y = this->dyna.actor.world.pos.y + 280.0f; dropPos.z = this->dyna.actor.world.pos.z; - Item_DropCollectible(play, &dropPos, ITEM00_NUTS_1); + Item_DropCollectible(play, &dropPos, ITEM00_DEKU_NUTS_1); } } this->dyna.actor.home.rot.y = GET_PLAYER(play)->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 89c9477e0..815b21b9b 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -158,7 +158,7 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { spawnPos.x = 700.0f; spawnPos.y = -800.0f; spawnPos.z = 7261.0f; - collectible = (EnItem00*)Item_DropCollectible(play, &spawnPos, ITEM00_MAGIC_LARGE); + collectible = (EnItem00*)Item_DropCollectible(play, &spawnPos, ITEM00_MAGIC_JAR_BIG); if (collectible != NULL) { collectible->unk152 = 0x1770; collectible->actor.speed = 0.0f; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 5d46256ad..51ebe113c 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -2096,12 +2096,12 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { // GI_HEART_CONTAINER GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xD, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), - // GI_MAGIC_SMALL - GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE, - GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_SMALL), CHEST_ANIM_SHORT), - // GI_MAGIC_LARGE - GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xF, - GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_LARGE), CHEST_ANIM_SHORT), + // GI_MAGIC_JAR_SMALL + GET_ITEM(ITEM_MAGIC_JAR_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_JAR_SMALL, 0xE, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_JAR_SMALL), CHEST_ANIM_SHORT), + // GI_MAGIC_JAR_BIG + GET_ITEM(ITEM_MAGIC_JAR_BIG, OBJECT_GI_MAGICPOT, GID_MAGIC_JAR_BIG, 0xF, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_JAR_BIG), CHEST_ANIM_SHORT), // GI_10 GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x10, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), @@ -2123,8 +2123,8 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x17, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), // GI_BOMBS_30 GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x18, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), - // GI_STICKS_1 - GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x19, GIFIELD(0, ITEM00_STICK), CHEST_ANIM_SHORT), + // GI_DEKU_STICKS_1 + GET_ITEM(ITEM_DEKU_STICK, OBJECT_GI_STICK, GID_DEKU_STICK, 0x19, GIFIELD(0, ITEM00_DEKU_STICK), CHEST_ANIM_SHORT), // GI_BOMBCHUS_10 GET_ITEM(ITEM_BOMBCHUS_10, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x1A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), @@ -2166,33 +2166,33 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { // GI_ARROW_LIGHT GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x27, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), - // GI_NUTS_1 - GET_ITEM(ITEM_NUT, OBJECT_GI_NUTS, GID_NUTS, 0x28, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), - // GI_NUTS_5 - GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x29, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), - // GI_NUTS_10 - GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x2A, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_DEKU_NUTS_1 + GET_ITEM(ITEM_DEKU_NUT, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x28, GIFIELD(0, ITEM00_DEKU_NUTS_1), CHEST_ANIM_SHORT), + // GI_DEKU_NUTS_5 + GET_ITEM(ITEM_DEKU_NUTS_5, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x29, GIFIELD(0, ITEM00_DEKU_NUTS_1), CHEST_ANIM_SHORT), + // GI_DEKU_NUTS_10 + GET_ITEM(ITEM_DEKU_NUTS_10, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x2A, GIFIELD(0, ITEM00_DEKU_NUTS_1), CHEST_ANIM_SHORT), // GI_2B - GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2B, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x2B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_2C - GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x2C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_2D - GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0x2D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_DEKU_NUTS, 0x2D, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_BOMBCHUS_20 GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x2E, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_2F - GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x2F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_DEKU_STICK, 0x2F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_30 - GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x30, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_DEKU_STICK, 0x30, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_31 - GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x31, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_SHORT), + GET_ITEM(ITEM_DEKU_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_DEKU_STICK, 0x31, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), // GI_SHIELD_HERO GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x32, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), @@ -2240,14 +2240,14 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { // GI_HOOKSHOT GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x41, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), - // GI_LENS - GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x42, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_LONG), - // GI_PICTO_BOX - GET_ITEM(ITEM_PICTO_BOX, OBJECT_GI_CAMERA, GID_PICTO_BOX, 0x43, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + // GI_LENS_OF_TRUTH + GET_ITEM(ITEM_LENS_OF_TRUTH, OBJECT_GI_GLASSES, GID_LENS, 0x42, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_PICTOGRAPH_BOX + GET_ITEM(ITEM_PICTOGRAPH_BOX, OBJECT_GI_CAMERA, GID_PICTOGRAPH_BOX, 0x43, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), // GI_44 - GET_ITEM(ITEM_PICTO_BOX, OBJECT_UNSET_0, GID_NONE, 0x44, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + GET_ITEM(ITEM_PICTOGRAPH_BOX, OBJECT_UNSET_0, GID_NONE, 0x44, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), // GI_45 GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x45, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), @@ -2263,9 +2263,9 @@ GetItemEntry sGetItemTable[GI_MAX - 1] = { GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4A, 0, 0), // GI_4B GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4B, 0, 0), - // GI_OCARINA - GET_ITEM(ITEM_OCARINA, OBJECT_GI_OCARINA, GID_OCARINA, 0x4C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), - CHEST_ANIM_LONG), + // GI_OCARINA_OF_TIME + GET_ITEM(ITEM_OCARINA_OF_TIME, OBJECT_GI_OCARINA, GID_OCARINA, 0x4C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), // GI_4D GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4D, 0, 0), // GI_4E @@ -2878,24 +2878,24 @@ void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) { } s8 sItemItemActions[] = { - PLAYER_IA_OCARINA, // ITEM_OCARINA, + PLAYER_IA_OCARINA, // ITEM_OCARINA_OF_TIME, PLAYER_IA_BOW, // ITEM_BOW, PLAYER_IA_BOW_FIRE, // ITEM_ARROW_FIRE, PLAYER_IA_BOW_ICE, // ITEM_ARROW_ICE, PLAYER_IA_BOW_LIGHT, // ITEM_ARROW_LIGHT, - PLAYER_IA_PICTO_BOX, // ITEM_OCARINA_FAIRY, + PLAYER_IA_PICTOGRAPH_BOX, // ITEM_OCARINA_FAIRY, PLAYER_IA_BOMB, // ITEM_BOMB, PLAYER_IA_BOMBCHU, // ITEM_BOMBCHU, - PLAYER_IA_STICK, // ITEM_STICK, - PLAYER_IA_NUT, // ITEM_NUT, + PLAYER_IA_DEKU_STICK, // ITEM_DEKU_STICK, + PLAYER_IA_DEKU_NUT, // ITEM_DEKU_NUT, PLAYER_IA_MAGIC_BEANS, // ITEM_MAGIC_BEANS, - PLAYER_IA_PICTO_BOX, // ITEM_SLINGSHOT, + PLAYER_IA_PICTOGRAPH_BOX, // ITEM_SLINGSHOT, PLAYER_IA_POWDER_KEG, // ITEM_POWDER_KEG, - PLAYER_IA_PICTO_BOX, // ITEM_PICTO_BOX, - PLAYER_IA_LENS, // ITEM_LENS, + PLAYER_IA_PICTOGRAPH_BOX, // ITEM_PICTOGRAPH_BOX, + PLAYER_IA_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH, PLAYER_IA_HOOKSHOT, // ITEM_HOOKSHOT, PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_GREAT_FAIRY, - PLAYER_IA_PICTO_BOX, // ITEM_LONGSHOT, // OoT Leftover + PLAYER_IA_PICTOGRAPH_BOX, // ITEM_LONGSHOT, // OoT Leftover PLAYER_IA_BOTTLE_EMPTY, // ITEM_BOTTLE, PLAYER_IA_BOTTLE_POTION_RED, // ITEM_POTION_RED, PLAYER_IA_BOTTLE_POTION_GREEN, // ITEM_POTION_GREEN, @@ -2952,9 +2952,9 @@ s8 sItemItemActions[] = { PLAYER_IA_MASK_BLAST, // ITEM_MASK_BLAST, PLAYER_IA_MASK_SCENTS, // ITEM_MASK_SCENTS, PLAYER_IA_MASK_GIANT, // ITEM_MASK_GIANT, - PLAYER_IA_BOW_FIRE, // ITEM_BOW_ARROW_FIRE, - PLAYER_IA_BOW_ICE, // ITEM_BOW_ARROW_ICE, - PLAYER_IA_BOW_LIGHT, // ITEM_BOW_ARROW_LIGHT, + PLAYER_IA_BOW_FIRE, // ITEM_BOW_FIRE, + PLAYER_IA_BOW_ICE, // ITEM_BOW_ICE, + PLAYER_IA_BOW_LIGHT, // ITEM_BOW_LIGHT, PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI, PLAYER_IA_SWORD_RAZOR, // ITEM_SWORD_RAZOR, PLAYER_IA_SWORD_GILDED, // ITEM_SWORD_GILDED, @@ -2986,7 +2986,7 @@ void func_8082F5A4(PlayState* play, Player* this) { void func_8082F5C0(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_8; - if (this->heldItemAction == PLAYER_IA_NUT) { + if (this->heldItemAction == PLAYER_IA_DEKU_NUT) { this->unk_B28 = -2; } else { this->unk_B28 = -1; @@ -3002,7 +3002,7 @@ PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { func_808487B8, // PLAYER_IA_SWORD_RAZOR func_808487B8, // PLAYER_IA_SWORD_GILDED func_808487B8, // PLAYER_IA_SWORD_TWO_HANDED - func_80848780, // PLAYER_IA_STICK + func_80848780, // PLAYER_IA_DEKU_STICK func_80848780, // PLAYER_IA_ZORA_FINS func_80848B6C, // PLAYER_IA_BOW func_80848B6C, // PLAYER_IA_BOW_FIRE @@ -3013,8 +3013,8 @@ PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { func_808490B4, // PLAYER_IA_POWDER_KEG func_808490B4, // PLAYER_IA_BOMBCHU func_808491B4, // PLAYER_IA_11 - func_80848B6C, // PLAYER_IA_NUT - func_80848780, // PLAYER_IA_PICTO_BOX + func_80848B6C, // PLAYER_IA_DEKU_NUT + func_80848780, // PLAYER_IA_PICTOGRAPH_BOX func_80848780, // PLAYER_IA_OCARINA func_80848780, // PLAYER_IA_BOTTLE_EMPTY func_80848780, // PLAYER_IA_BOTTLE_FISH @@ -3077,7 +3077,7 @@ PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { func_80848780, // PLAYER_IA_MASK_GORON func_80848780, // PLAYER_IA_MASK_ZORA func_80848780, // PLAYER_IA_MASK_DEKU - func_80848780, // PLAYER_IA_LENS + func_80848780, // PLAYER_IA_LENS_OF_TRUTH }; // sPlayerItemActionInits? @@ -3089,7 +3089,7 @@ void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { func_8082F594, // PLAYER_IA_SWORD_RAZOR func_8082F594, // PLAYER_IA_SWORD_GILDED func_8082F594, // PLAYER_IA_SWORD_TWO_HANDED - func_8082F5A4, // PLAYER_IA_STICK + func_8082F5A4, // PLAYER_IA_DEKU_STICK func_8082F8A0, // PLAYER_IA_ZORA_FINS func_8082F5C0, // PLAYER_IA_BOW func_8082F5C0, // PLAYER_IA_BOW_FIRE @@ -3100,8 +3100,8 @@ void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { Player_SpawnExplosive, // PLAYER_IA_POWDER_KEG Player_SpawnExplosive, // PLAYER_IA_BOMBCHU func_8082F8A0, // PLAYER_IA_11 - func_8082F5C0, // PLAYER_IA_NUT - func_8082F594, // PLAYER_IA_PICTO_BOX + func_8082F5C0, // PLAYER_IA_DEKU_NUT + func_8082F594, // PLAYER_IA_PICTOGRAPH_BOX func_8082F594, // PLAYER_IA_OCARINA func_8082F594, // PLAYER_IA_BOTTLE_EMPTY func_8082F594, // PLAYER_IA_BOTTLE_FISH @@ -3164,7 +3164,7 @@ void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { func_8082F594, // PLAYER_IA_MASK_GORON func_8082F594, // PLAYER_IA_MASK_ZORA func_8082F594, // PLAYER_IA_MASK_DEKU - func_8082F594, // PLAYER_IA_LENS + func_8082F594, // PLAYER_IA_LENS_OF_TRUTH }; void func_8082F5FC(Player* this, Actor* actor) { @@ -3725,8 +3725,8 @@ void func_808304BC(Player* this, PlayState* play) { // EN_ARROW ammo related? s32 func_808305BC(PlayState* play, Player* this, ItemId* item, ArrowType* typeParam) { - if (this->heldItemAction == PLAYER_IA_NUT) { - *item = ITEM_NUT; + if (this->heldItemAction == PLAYER_IA_DEKU_NUT) { + *item = ITEM_DEKU_NUT; *typeParam = (this->transformation == PLAYER_FORM_DEKU) ? ARROW_TYPE_DEKU_BUBBLE : ARROW_TYPE_SLINGSHOT; } else { *item = ITEM_BOW; @@ -4263,7 +4263,7 @@ void func_808318C0(PlayState* play) { // Toggle Lens from a button press void func_80831944(PlayState* play, Player* this) { - if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS) { + if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) { func_808318C0(play); } } @@ -4291,7 +4291,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) && (itemAction != PLAYER_IA_NONE)) || (itemAction == PLAYER_IA_OCARINA) || ((itemAction > PLAYER_IA_BOTTLE_MIN) && itemAction < PLAYER_IA_MASK_MIN) || - ((itemAction == PLAYER_IA_PICTO_BOX) && (this->talkActor != NULL) && + ((itemAction == PLAYER_IA_PICTOGRAPH_BOX) && (this->talkActor != NULL) && (this->exchangeItemId > PLAYER_IA_NONE))) { if (var_v1) { PlayerTransformation playerForm = (itemAction < PLAYER_IA_MASK_FIERCE_DEITY) @@ -4315,7 +4315,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { this->itemAction = itemAction; this->unk_AA5 = PLAYER_UNKAA5_5; } - } else if (((itemAction == PLAYER_IA_STICK) && (AMMO(ITEM_STICK) == 0)) || + } else if (((itemAction == PLAYER_IA_DEKU_STICK) && (AMMO(ITEM_DEKU_STICK) == 0)) || (((play->unk_1887D != 0) || (play->unk_1887E != 0)) && (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 5)) || ((play->unk_1887D == 0) && (play->unk_1887E == 0) && @@ -4323,15 +4323,15 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { Audio_PlaySfx(NA_SE_SY_ERROR); - } else if (itemAction == PLAYER_IA_LENS) { + } else if (itemAction == PLAYER_IA_LENS_OF_TRUTH) { func_808318C0(play); - } else if (itemAction == PLAYER_IA_PICTO_BOX) { + } else if (itemAction == PLAYER_IA_PICTOGRAPH_BOX) { if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { Audio_PlaySfx(NA_SE_SY_ERROR); } - } else if ((itemAction == PLAYER_IA_NUT) && + } else if ((itemAction == PLAYER_IA_DEKU_NUT) && ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { - if (AMMO(ITEM_NUT) != 0) { + if (AMMO(ITEM_DEKU_NUT) != 0) { func_8083A658(play, this); } else { Audio_PlaySfx(NA_SE_SY_ERROR); @@ -4870,7 +4870,7 @@ s32 func_808333CC(Player* this) { s8 temp2; s32 i; - if (this->heldItemAction == PLAYER_IA_STICK) { + if (this->heldItemAction == PLAYER_IA_DEKU_STICK) { return false; } @@ -4965,7 +4965,7 @@ PlayerMeleeWeaponAnimation func_808335F4(Player* this) { } } - if (this->heldItemAction == PLAYER_IA_STICK) { + if (this->heldItemAction == PLAYER_IA_DEKU_STICK) { meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H; } } @@ -4994,7 +4994,7 @@ MeleeWeaponDamageInfo D_8085D09C[PLAYER_MELEEWEAPON_MAX] = { { DMG_SWORD, 4, 8, 2, 4 }, // PLAYER_MELEEWEAPON_SWORD_RAZOR { DMG_SWORD, 4, 8, 3, 6 }, // PLAYER_MELEEWEAPON_SWORD_GILDED { DMG_SWORD, 4, 8, 4, 8 }, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED - { DMG_DEKU_STICK, 0, 0, 2, 4 }, // PLAYER_MELEEWEAPON_STICK + { DMG_DEKU_STICK, 0, 0, 2, 4 }, // PLAYER_MELEEWEAPON_DEKU_STICK { DMG_ZORA_PUNCH, 1, 2, 0, 0 }, // PLAYER_MELEEWEAPON_ZORA_FINS }; @@ -7054,7 +7054,7 @@ u8 D_8085D1A4[PLAYER_IA_MAX] = { GI_SWORD_RAZOR, // PLAYER_IA_SWORD_RAZOR GI_SWORD_GILDED, // PLAYER_IA_SWORD_GILDED GI_SWORD_GREAT_FAIRY, // PLAYER_IA_SWORD_TWO_HANDED - GI_STICKS_1, // PLAYER_IA_STICK + GI_DEKU_STICKS_1, // PLAYER_IA_DEKU_STICK GI_SWORD_KOKIRI, // PLAYER_IA_ZORA_FINS GI_QUIVER_30, // PLAYER_IA_BOW GI_ARROW_FIRE, // PLAYER_IA_BOW_FIRE @@ -7065,9 +7065,9 @@ u8 D_8085D1A4[PLAYER_IA_MAX] = { GI_POWDER_KEG, // PLAYER_IA_POWDER_KEG GI_BOMBCHUS_10, // PLAYER_IA_BOMBCHU GI_40, // PLAYER_IA_11 - GI_NUTS_1, // PLAYER_IA_NUT - GI_PICTO_BOX, // PLAYER_IA_PICTO_BOX - GI_OCARINA, // PLAYER_IA_OCARINA + GI_DEKU_NUTS_1, // PLAYER_IA_DEKU_NUT + GI_PICTOGRAPH_BOX, // PLAYER_IA_PICTOGRAPH_BOX + GI_OCARINA_OF_TIME, // PLAYER_IA_OCARINA GI_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY GI_FISH, // PLAYER_IA_BOTTLE_FISH GI_75, // PLAYER_IA_BOTTLE_SPRING_WATER @@ -7129,7 +7129,7 @@ u8 D_8085D1A4[PLAYER_IA_MAX] = { GI_MASK_GORON, // PLAYER_IA_MASK_GORON GI_MASK_ZORA, // PLAYER_IA_MASK_ZORA GI_MASK_DEKU, // PLAYER_IA_MASK_DEKU - GI_LENS, // PLAYER_IA_LENS + GI_LENS_OF_TRUTH, // PLAYER_IA_LENS_OF_TRUTH }; PlayerAnimationHeader* D_8085D1F8[] = { @@ -7178,7 +7178,7 @@ s32 func_80838A90(Player* this, PlayState* play) { } gSaveContext.save.equippedMask = this->currentMask; } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) || - (this->itemAction == PLAYER_IA_PICTO_BOX) || + (this->itemAction == PLAYER_IA_PICTOGRAPH_BOX) || ((this->itemAction != this->unk_B2B) && ((this->itemAction == PLAYER_IA_BOTTLE_BIG_POE) || ((this->itemAction >= PLAYER_IA_BOTTLE_ZORA_EGG) && @@ -7758,7 +7758,7 @@ s32 func_8083A580(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_400000) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { if ((this->unk_ADC > 0) && (((this->transformation == PLAYER_FORM_ZORA)) || - ((this->unk_ADC == 1) && (this->heldItemAction != PLAYER_IA_STICK)))) { + ((this->unk_ADC == 1) && (this->heldItemAction != PLAYER_IA_DEKU_STICK)))) { if (this->transformation == PLAYER_FORM_ZORA) { func_80830E30(this, play); } else { @@ -9671,13 +9671,13 @@ void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { } void func_8083FEF4(PlayState* play, Player* this) { - Inventory_ChangeAmmo(ITEM_STICK, -1); + Inventory_ChangeAmmo(ITEM_DEKU_STICK, -1); func_80831990(play, this, ITEM_NONE); } s32 func_8083FF30(PlayState* play, Player* this) { - if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B0C > 0.5f)) { - if (AMMO(ITEM_STICK) != 0) { + if ((this->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_B0C > 0.5f)) { + if (AMMO(ITEM_DEKU_STICK) != 0) { EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], BINANG_ADD(this->actor.shape.rot.y, 0x8000)); this->unk_B0C = 0.5f; @@ -11265,7 +11265,7 @@ void func_808442D8(PlayState* play, Player* this) { var_fa0 = 1.0f; if (DECR(this->unk_B28) == 0) { - Inventory_ChangeAmmo(ITEM_STICK, -1); + Inventory_ChangeAmmo(ITEM_DEKU_STICK, -1); this->unk_B28 = 1; this->unk_B0C = 0.0f; var_fa0 = 0.0f; @@ -11659,7 +11659,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->lightInfo.params.point.radius = -1; } - if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { + if ((this->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_B28 != 0)) { func_808442D8(play, this); } else if (this->heldItemAction == PLAYER_IA_FISHING_ROD) { if (this->unk_B28 < 0) { @@ -12859,7 +12859,7 @@ s32 func_808482E0(PlayState* play, Player* this) { Audio_PlayFanfare(seqId); } } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { - if (this->getItemId == GI_OCARINA) { + if (this->getItemId == GI_OCARINA_OF_TIME) { // zelda teaching song of time cs? play->nextEntrance = ENTRANCE(CUTSCENE, 0); gSaveContext.nextCutsceneIndex = 0xFFF2; @@ -12964,7 +12964,7 @@ s32 func_80848808(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->unk_284) || ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && - (this->heldItemAction != PLAYER_IA_STICK) && (play->unk_1887C == 0))))) { + (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0))))) { func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; @@ -16590,7 +16590,7 @@ void func_80852B28(Player* this, PlayState* play) { this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y, this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z, 0xFA0, this->actor.shape.rot.y, 0, ARROW_TYPE_DEKU_NUT) != NULL) { - Inventory_ChangeAmmo(ITEM_NUT, -1); + Inventory_ChangeAmmo(ITEM_DEKU_NUT, -1); this->unk_D57 = 4; } @@ -17273,7 +17273,7 @@ void func_80854430(Player* this, PlayState* play) { } else { this->stateFlags1 &= ~PLAYER_STATE1_100000; if ((play->sceneId == SCENE_20SICHITAI) && - (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTO_BOX)) { + (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) { s32 requiredScopeTemp; play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; @@ -18249,7 +18249,7 @@ void func_80856918(Player* this, PlayState* play) { Audio_PlaySfx_AtPosWithTimer(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f))); if ((this->boomerangActor == NULL) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { - if (AMMO(ITEM_NUT) == 0) { + if (AMMO(ITEM_DEKU_NUT) == 0) { Audio_PlaySfx(NA_SE_SY_ERROR); } else { this->boomerangActor = @@ -18259,7 +18259,7 @@ void func_80856918(Player* this, PlayState* play) { if (this->boomerangActor != NULL) { this->boomerangActor->velocity.x = this->actor.velocity.x * 1.5f; this->boomerangActor->velocity.z = this->actor.velocity.z * 1.5f; - Inventory_ChangeAmmo(ITEM_NUT, -1); + Inventory_ChangeAmmo(ITEM_DEKU_NUT, -1); Actor_PlaySfx(this->boomerangActor, NA_SE_PL_DEKUNUTS_DROP_BOMB); } } 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 0ab31533c..e658251e4 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 @@ -97,7 +97,7 @@ SectionPosition sSectionPositions[] = { s16 sSlotItems[] = { // Items Row 1 - ITEM_OCARINA, + ITEM_OCARINA_OF_TIME, ITEM_BOW, ITEM_ARROW_FIRE, ITEM_ARROW_ICE, @@ -106,14 +106,14 @@ s16 sSlotItems[] = { // Items Row 2 ITEM_BOMB, ITEM_BOMBCHU, - ITEM_STICK, - ITEM_NUT, + ITEM_DEKU_STICK, + ITEM_DEKU_NUT, ITEM_MAGIC_BEANS, ITEM_SLINGSHOT, // Items Row 3 ITEM_POWDER_KEG, - ITEM_PICTO_BOX, - ITEM_LENS, + ITEM_PICTOGRAPH_BOX, + ITEM_LENS_OF_TRUTH, ITEM_HOOKSHOT, ITEM_SWORD_GREAT_FAIRY, ITEM_LONGSHOT, @@ -427,7 +427,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { for (j = 0, rectLeft = 44; j < 6; j++, slot++, rectLeft += 23) { counterDigits[3] = 0; counterDigits[2] = 0; - if ((slot == SLOT_BOW) || ((slot >= SLOT_BOMB) && (slot <= SLOT_NUT)) || (slot == SLOT_POWDER_KEG) || + if ((slot == SLOT_BOW) || ((slot >= SLOT_BOMB) && (slot <= SLOT_DEKU_NUT)) || (slot == SLOT_POWDER_KEG) || (slot == SLOT_MAGIC_BEANS)) { counterDigits[3] = AMMO(gAmmoItems[slot]); } else if ((slot == SLOT_TRADE_DEED) || (slot == SLOT_TRADE_KEY_MAMA) || (slot == SLOT_TRADE_COUPLE)) { @@ -778,8 +778,8 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { if (sCurSection < INV_EDITOR_SECTION_BOSS) { // Items slot = sCurSection - INV_EDITOR_SECTION_ITEMS; - if ((slot == SLOT_BOW) || ((slot >= SLOT_BOMB) && (slot <= SLOT_NUT)) || (slot == SLOT_POWDER_KEG) || - (slot == SLOT_MAGIC_BEANS)) { + if ((slot == SLOT_BOW) || ((slot >= SLOT_BOMB) && (slot <= SLOT_DEKU_NUT)) || + (slot == SLOT_POWDER_KEG) || (slot == SLOT_MAGIC_BEANS)) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { Inventory_DeleteItem(gAmmoItems[slot], SLOT(gAmmoItems[slot])); AMMO(gAmmoItems[slot]) = 0; 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 a4bd52d32..dc5e96da2 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 @@ -26,13 +26,13 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { false, // SLOT_TRADE_DEED false, // SLOT_BOMB false, // SLOT_BOMBCHU - false, // SLOT_STICK - false, // SLOT_NUT + false, // SLOT_DEKU_STICK + false, // SLOT_DEKU_NUT false, // SLOT_MAGIC_BEANS false, // SLOT_TRADE_KEY_MAMA false, // SLOT_POWDER_KEG - false, // SLOT_PICTO_BOX - false, // SLOT_LENS + false, // SLOT_PICTOGRAPH_BOX + false, // SLOT_LENS_OF_TRUTH false, // SLOT_HOOKSHOT false, // SLOT_SWORD_GREAT_FAIRY false, // SLOT_TRADE_COUPLE @@ -53,13 +53,13 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_TRADE_DEED false, // SLOT_BOMB false, // SLOT_BOMBCHU - false, // SLOT_STICK - false, // SLOT_NUT + false, // SLOT_DEKU_STICK + false, // SLOT_DEKU_NUT false, // SLOT_MAGIC_BEANS true, // SLOT_TRADE_KEY_MAMA true, // SLOT_POWDER_KEG - true, // SLOT_PICTO_BOX - true, // SLOT_LENS + true, // SLOT_PICTOGRAPH_BOX + true, // SLOT_LENS_OF_TRUTH false, // SLOT_HOOKSHOT false, // SLOT_SWORD_GREAT_FAIRY true, // SLOT_TRADE_COUPLE @@ -80,13 +80,13 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_TRADE_DEED false, // SLOT_BOMB false, // SLOT_BOMBCHU - false, // SLOT_STICK - false, // SLOT_NUT + false, // SLOT_DEKU_STICK + false, // SLOT_DEKU_NUT false, // SLOT_MAGIC_BEANS true, // SLOT_TRADE_KEY_MAMA false, // SLOT_POWDER_KEG - true, // SLOT_PICTO_BOX - true, // SLOT_LENS + true, // SLOT_PICTOGRAPH_BOX + true, // SLOT_LENS_OF_TRUTH false, // SLOT_HOOKSHOT false, // SLOT_SWORD_GREAT_FAIRY true, // SLOT_TRADE_COUPLE @@ -107,13 +107,13 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_TRADE_DEED false, // SLOT_BOMB false, // SLOT_BOMBCHU - false, // SLOT_STICK - true, // SLOT_NUT + false, // SLOT_DEKU_STICK + true, // SLOT_DEKU_NUT false, // SLOT_MAGIC_BEANS true, // SLOT_TRADE_KEY_MAMA false, // SLOT_POWDER_KEG - true, // SLOT_PICTO_BOX - true, // SLOT_LENS + true, // SLOT_PICTOGRAPH_BOX + true, // SLOT_LENS_OF_TRUTH false, // SLOT_HOOKSHOT false, // SLOT_SWORD_GREAT_FAIRY true, // SLOT_TRADE_COUPLE @@ -134,13 +134,13 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_TRADE_DEED true, // SLOT_BOMB true, // SLOT_BOMBCHU - true, // SLOT_STICK - true, // SLOT_NUT + true, // SLOT_DEKU_STICK + true, // SLOT_DEKU_NUT true, // SLOT_MAGIC_BEANS true, // SLOT_TRADE_KEY_MAMA false, // SLOT_POWDER_KEG - true, // SLOT_PICTO_BOX - true, // SLOT_LENS + true, // SLOT_PICTOGRAPH_BOX + true, // SLOT_LENS_OF_TRUTH true, // SLOT_HOOKSHOT true, // SLOT_SWORD_GREAT_FAIRY true, // SLOT_TRADE_COUPLE @@ -157,22 +157,22 @@ s16 sAmmoRectLeft[] = { 95, // SLOT_BOW 62, // SLOT_BOMB 95, // SLOT_BOMBCHU - 128, // SLOT_STICK - 161, // SLOT_NUT + 128, // SLOT_DEKU_STICK + 161, // SLOT_DEKU_NUT 194, // SLOT_MAGIC_BEANS 62, // SLOT_POWDER_KEG - 95, // SLOT_PICTO_BOX + 95, // SLOT_PICTOGRAPH_BOX }; s16 sAmmoRectHeight[] = { 85, // SLOT_BOW 117, // SLOT_BOMB 117, // SLOT_BOMBCHU - 117, // SLOT_STICK - 117, // SLOT_NUT + 117, // SLOT_DEKU_STICK + 117, // SLOT_DEKU_NUT 117, // SLOT_MAGIC_BEANS 150, // SLOT_POWDER_KEG - 150, // SLOT_PICTO_BOX + 150, // SLOT_PICTOGRAPH_BOX }; void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, s16 item, u16 ammoIndex) { @@ -181,7 +181,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, OPEN_DISPS(gfxCtx); - if (item == ITEM_PICTO_BOX) { + if (item == ITEM_PICTOGRAPH_BOX) { if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) { ammo = 0; } else { @@ -204,10 +204,10 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 130, 130, 130, pauseCtx->alpha); } else if (((item == ITEM_BOMB) && (AMMO(item) == CUR_CAPACITY(UPG_BOMB_BAG))) || ((item == ITEM_BOW) && (AMMO(item) == CUR_CAPACITY(UPG_QUIVER))) || - ((item == ITEM_STICK) && (AMMO(item) == CUR_CAPACITY(UPG_STICKS))) || - ((item == ITEM_NUT) && (AMMO(item) == CUR_CAPACITY(UPG_NUTS))) || + ((item == ITEM_DEKU_STICK) && (AMMO(item) == CUR_CAPACITY(UPG_DEKU_STICKS))) || + ((item == ITEM_DEKU_NUT) && (AMMO(item) == CUR_CAPACITY(UPG_DEKU_NUTS))) || ((item == ITEM_BOMBCHU) && (AMMO(item) == CUR_CAPACITY(UPG_BOMB_BAG))) || - ((item == ITEM_POWDER_KEG) && (ammo == 1)) || ((item == ITEM_PICTO_BOX) && (ammo == 1)) || + ((item == ITEM_POWDER_KEG) && (ammo == 1)) || ((item == ITEM_PICTOGRAPH_BOX) && (ammo == 1)) || ((item == ITEM_MAGIC_BEANS) && (ammo == 20))) { // Ammo at capacity gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 255, 0, pauseCtx->alpha); @@ -725,7 +725,7 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { sEquipMagicArrowBowSlotHoldTimer--; if (sEquipMagicArrowBowSlotHoldTimer == 0) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; sEquipAnimTimer = 6; pauseCtx->equipAnimScale = 320; @@ -802,9 +802,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT); @@ -819,9 +819,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT); @@ -837,19 +837,19 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { // Special case for magic arrows if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8)) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) == ITEM_BOW) || - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_ARROW_LIGHT))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_LIGHT))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_ARROW_LIGHT)) { + if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT); C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = C_SLOT_EQUIP(0, EQUIP_SLOT_C_LEFT); Interface_LoadItemIcon(play, EQUIP_SLOT_C_DOWN); - } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_ARROW_LIGHT)) { + } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT); C_SLOT_EQUIP(0, EQUIP_SLOT_C_RIGHT) = C_SLOT_EQUIP(0, EQUIP_SLOT_C_LEFT); Interface_LoadItemIcon(play, EQUIP_SLOT_C_RIGHT); @@ -866,9 +866,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN); @@ -883,9 +883,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN); @@ -901,18 +901,18 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { // Special case for magic arrows if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8)) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) == ITEM_BOW) || - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_ARROW_LIGHT))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_LIGHT))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_ARROW_LIGHT)) { + if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN); Interface_LoadItemIcon(play, EQUIP_SLOT_C_LEFT); - } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_ARROW_LIGHT)) { + } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN); Interface_LoadItemIcon(play, EQUIP_SLOT_C_RIGHT); } @@ -928,9 +928,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT); @@ -945,9 +945,9 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8) && (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) == ITEM_BOW) || - (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) >= ITEM_BOW_ARROW_FIRE) && - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) <= ITEM_BOW_ARROW_LIGHT)))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + (((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) >= ITEM_BOW_FIRE) && + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) & 0xFF) <= ITEM_BOW_LIGHT)))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT); @@ -963,18 +963,18 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { // Special case for magic arrows if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipTargetItem < 0xB8)) { if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) == ITEM_BOW) || - ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_ARROW_LIGHT))) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) <= ITEM_BOW_LIGHT))) { + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_ARROW_LIGHT)) { + if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT); Interface_LoadItemIcon(play, EQUIP_SLOT_C_LEFT); - } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_ARROW_FIRE) && - (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_ARROW_LIGHT)) { + } else if ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) >= ITEM_BOW_FIRE) && + (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) <= ITEM_BOW_LIGHT)) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT); Interface_LoadItemIcon(play, EQUIP_SLOT_C_DOWN); } 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 949b3de59..99c08a06a 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 @@ -647,7 +647,7 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) { sMaskEquipMagicArrowBowSlotHoldTimer--; if (sMaskEquipMagicArrowBowSlotHoldTimer == 0) { - pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_ARROW_FIRE; + pauseCtx->equipTargetItem -= 0xB5 - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; sMaskEquipAnimTimer = 6; pauseCtx->equipAnimScale = 320; 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 5915c9fbe..35925171c 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 @@ -2857,7 +2857,7 @@ void KaleidoScope_Update(PlayState* play) { gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); - for (itemId = 0; itemId <= ITEM_BOW_ARROW_FIRE; itemId++) { + for (itemId = 0; itemId <= ITEM_BOW_FIRE; itemId++) { if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) { KaleidoScope_GrayOutTextureRGBA32(Lib_SegmentedToVirtual(gItemIcons[(s32)itemId]), 0x400); } diff --git a/tools/gitable.py b/tools/gitable.py index a3b41f6e8..c5b8bc9ec 100755 --- a/tools/gitable.py +++ b/tools/gitable.py @@ -13,7 +13,7 @@ GETITEMENTRY_LENGTH = struct.calcsize(GETITEMENTRY_FORMAT) # MM US: 0x2E964 itemId_names = { - 0x00: "ITEM_OCARINA", + 0x00: "ITEM_OCARINA_OF_TIME", 0x01: "ITEM_BOW", 0x02: "ITEM_ARROW_FIRE", 0x03: "ITEM_ARROW_ICE", @@ -21,13 +21,13 @@ itemId_names = { 0x05: "ITEM_OCARINA_FAIRY", 0x06: "ITEM_BOMB", 0x07: "ITEM_BOMBCHU", - 0x08: "ITEM_STICK", - 0x09: "ITEM_NUT", + 0x08: "ITEM_DEKU_STICK", + 0x09: "ITEM_DEKU_NUT", 0x0A: "ITEM_MAGIC_BEANS", 0x0B: "ITEM_SLINGSHOT", 0x0C: "ITEM_POWDER_KEG", - 0x0D: "ITEM_PICTO_BOX", - 0x0E: "ITEM_LENS", + 0x0D: "ITEM_PICTOGRAPH_BOX", + 0x0E: "ITEM_LENS_OF_TRUTH", 0x0F: "ITEM_HOOKSHOT", 0x10: "ITEM_SWORD_GREAT_FAIRY", 0x11: "ITEM_LONGSHOT", @@ -87,9 +87,9 @@ itemId_names = { 0x47: "ITEM_MASK_BLAST", 0x48: "ITEM_MASK_SCENTS", 0x49: "ITEM_MASK_GIANT", - 0x4A: "ITEM_BOW_ARROW_FIRE", - 0x4B: "ITEM_BOW_ARROW_ICE", - 0x4C: "ITEM_BOW_ARROW_LIGHT", + 0x4A: "ITEM_BOW_FIRE", + 0x4B: "ITEM_BOW_ICE", + 0x4C: "ITEM_BOW_LIGHT", 0x4D: "ITEM_SWORD_KOKIRI", 0x4E: "ITEM_SWORD_RAZOR", 0x4F: "ITEM_SWORD_GILDED", @@ -132,8 +132,8 @@ itemId_names = { 0x76: "ITEM_DUNGEON_MAP", 0x77: "ITEM_STRAY_FAIRIES", 0x78: "ITEM_KEY_SMALL", - 0x79: "ITEM_MAGIC_SMALL", - 0x7A: "ITEM_MAGIC_LARGE", + 0x79: "ITEM_MAGIC_JAR_SMALL", + 0x7A: "ITEM_MAGIC_JAR_BIG", 0x7B: "ITEM_HEART_PIECE_2", 0x7C: "ITEM_INVALID_1", 0x7D: "ITEM_INVALID_2", @@ -150,10 +150,10 @@ itemId_names = { 0x88: "ITEM_RUPEE_PURPLE", 0x89: "ITEM_RUPEE_SILVER", 0x8A: "ITEM_RUPEE_HUGE", - 0x8B: "ITEM_STICKS_5", - 0x8C: "ITEM_STICKS_10", - 0x8D: "ITEM_NUTS_5", - 0x8E: "ITEM_NUTS_10", + 0x8B: "ITEM_DEKU_STICKS_5", + 0x8C: "ITEM_DEKU_STICKS_10", + 0x8D: "ITEM_DEKU_NUTS_5", + 0x8E: "ITEM_DEKU_NUTS_10", 0x8F: "ITEM_BOMBS_5", 0x90: "ITEM_BOMBS_10", 0x91: "ITEM_BOMBS_20", @@ -166,10 +166,10 @@ itemId_names = { 0x98: "ITEM_BOMBCHUS_10", 0x99: "ITEM_BOMBCHUS_1", 0x9A: "ITEM_BOMBCHUS_5", - 0x9B: "ITEM_STICK_UPGRADE_20", - 0x9C: "ITEM_STICK_UPGRADE_30", - 0x9D: "ITEM_NUT_UPGRADE_30", - 0x9E: "ITEM_NUT_UPGRADE_40", + 0x9B: "ITEM_DEKU_STICK_UPGRADE_20", + 0x9C: "ITEM_DEKU_STICK_UPGRADE_30", + 0x9D: "ITEM_DEKU_NUT_UPGRADE_30", + 0x9E: "ITEM_DEKU_NUT_UPGRADE_40", 0x9F: "ITEM_CHATEAU_2", 0xA0: "ITEM_MILK", 0xA1: "ITEM_GOLD_DUST_2", @@ -198,15 +198,15 @@ getItemId_names = { 0x0A: "GI_RECOVERY_HEART", 0x0C: "GI_HEART_PIECE", 0x0D: "GI_HEART_CONTAINER", - 0x0E: "GI_MAGIC_SMALL", - 0x0F: "GI_MAGIC_LARGE", + 0x0E: "GI_MAGIC_JAR_SMALL", + 0x0F: "GI_MAGIC_JAR_BIG", 0x11: "GI_STRAY_FAIRY", 0x14: "GI_BOMBS_1", 0x15: "GI_BOMBS_5", 0x16: "GI_BOMBS_10", 0x17: "GI_BOMBS_20", 0x18: "GI_BOMBS_30", - 0x19: "GI_STICKS_1", + 0x19: "GI_DEKU_STICKS_1", 0x1A: "GI_BOMBCHUS_10", 0x1B: "GI_BOMB_BAG_20", 0x1C: "GI_BOMB_BAG_30", @@ -221,9 +221,9 @@ getItemId_names = { 0x25: "GI_ARROW_FIRE", 0x26: "GI_ARROW_ICE", 0x27: "GI_ARROW_LIGHT", - 0x28: "GI_NUTS_1", - 0x29: "GI_NUTS_5", - 0x2A: "GI_NUTS_10", + 0x28: "GI_DEKU_NUTS_1", + 0x29: "GI_DEKU_NUTS_5", + 0x2A: "GI_DEKU_NUTS_10", 0x2E: "GI_BOMBCHUS_20", 0x32: "GI_SHIELD_HERO", 0x33: "GI_SHIELD_MIRROR", @@ -241,9 +241,9 @@ getItemId_names = { 0x3F: "GI_COMPASS", 0x40: "GI_40", 0x41: "GI_HOOKSHOT", - 0x42: "GI_LENS", - 0x43: "GI_PICTO_BOX", - 0x4C: "GI_OCARINA", + 0x42: "GI_LENS_OF_TRUTH", + 0x43: "GI_PICTOGRAPH_BOX", + 0x4C: "GI_OCARINA_OF_TIME", 0x50: "GI_BOMBERS_NOTEBOOK", 0x52: "GI_SKULL_TOKEN", 0x55: "GI_REMAINS_ODOLWA", @@ -354,7 +354,7 @@ getItemDrawId_names = { 0x0E: "GID_MASK_CIRCUS_LEADER", 0x0F: "GID_MASK_BREMEN", 0x10: "GID_MASK_ALL_NIGHT", - 0x11: "GID_NUTS", + 0x11: "GID_DEKU_NUTS", 0x12: "GID_HEART_CONTAINER", 0x13: "GID_HEART_PIECE", 0x14: "GID_QUIVER_30", @@ -363,10 +363,10 @@ getItemDrawId_names = { 0x17: "GID_BOMB_BAG_20", 0x18: "GID_BOMB_BAG_30", 0x19: "GID_BOMB_BAG_40", - 0x1A: "GID_STICK", + 0x1A: "GID_DEKU_STICK", 0x1B: "GID_DUNGEON_MAP", - 0x1C: "GID_MAGIC_SMALL", - 0x1D: "GID_MAGIC_LARGE", + 0x1C: "GID_MAGIC_JAR_SMALL", + 0x1D: "GID_MAGIC_JAR_BIG", 0x1E: "GID_BOMB", 0x1F: "GID_STONE_OF_AGONY", 0x20: "GID_WALLET_ADULT", @@ -453,7 +453,7 @@ getItemDrawId_names = { 0x71: "GID_MASK_POSTMAN", 0x72: "GID_MASK_GIANT", 0x73: "GID_CHATEAU", - 0x74: "GID_PICTO_BOX", + 0x74: "GID_PICTOGRAPH_BOX", 0x75: "GID_MASK_FIERCE_DEITY", 0x76: "GID_MAX", -1: "GID_NONE", diff --git a/tools/namefixer.py b/tools/namefixer.py index ae7942c59..36740afe9 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1147,7 +1147,7 @@ wordReplace = { "EXCH_ITEM_MINUS1": "PLAYER_IA_MINUS1", "EXCH_ITEM_NONE": "PLAYER_IA_NONE", - "EXCH_ITEM_PICTO_BOX": "PLAYER_IA_PICTO_BOX", + "EXCH_ITEM_PICTO_BOX": "PLAYER_IA_PICTOGRAPH_BOX", "EXCH_ITEM_1E": "PLAYER_IA_BOTTLE_MUSHROOM", "EXCH_ITEM_MOON_TEAR": "PLAYER_IA_MOONS_TEAR", "EXCH_ITEM_DEED_LAND": "PLAYER_IA_DEED_LAND", @@ -1159,6 +1159,14 @@ wordReplace = { "EXCH_ITEM_DEED_OCEAN": "PLAYER_IA_DEED_OCEAN", "EXCH_ITEM_LETTER_MAMA": "PLAYER_IA_LETTER_MAMA", "ITEM_FISHING_POLE": "ITEM_FISHING_ROD", + "ITEM_OCARINA": "ITEM_OCARINA_OF_TIME", + "ITEM_STICK": "ITEM_DEKU_STICK", + "ITEM_NUT": "ITEM_DEKU_NUT", + "ITEM_PICTO_BOX": "ITEM_PICTOGRAPH_BOX", + "ITEM_LENS": "ITEM_LENS_OF_TRUTH", + "ITEM_MAGIC_SMALL": "ITEM_MAGIC_JAR_SMALL", + "ITEM_MAGIC_LARGE": "ITEM_MAGIC_JAR_BIG", + "ITEM_MOON_TEAR": "ITEM_MOONS_TEAR", "PLAYER_AP_FISHING_POLE": "PLAYER_IA_FISHING_ROD", "PLAYER_IA_BOTTLE": "PLAYER_IA_BOTTLE_EMPTY", From 532ec3097384cd707de99e80f0cb73ba791c8e45 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 5 Jul 2023 12:09:01 +1000 Subject: [PATCH 025/121] Misc Cleanup 6 (#1307) * more cleanup * 3 more brackets * PR Suggestions --- assets/xml/objects/object_fsn.xml | 4 +- assets/xml/objects/object_ob.xml | 4 +- src/code/code_8012EC80.c | 50 ++-- src/code/z_demo.c | 2 +- src/code/z_en_item00.c | 5 +- src/code/z_parameter.c | 23 +- src/code/z_sram_NES.c | 237 ++++++++++++----- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 2 +- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 2 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 50 +++- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 46 ++-- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 4 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 2 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 4 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 9 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 24 +- .../actors/ovl_En_Fu_Mato/z_en_fu_mato.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 245 ++++++++++-------- src/overlays/actors/ovl_En_Go/z_en_go.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 6 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 3 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 20 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 8 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 3 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 6 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 41 +-- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 4 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 2 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 4 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 6 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 4 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 2 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 9 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 26 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 2 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 8 +- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 8 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 7 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 7 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 7 +- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 6 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 10 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 2 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 8 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 6 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 6 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 6 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 6 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 32 +-- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 6 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 8 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 10 +- .../actors/ovl_Oceff_Storm/z_oceff_storm.c | 10 +- .../actors/ovl_player_actor/z_player.c | 24 +- src/overlays/gamestates/ovl_select/z_select.c | 2 +- .../ovl_kaleido_scope/z_kaleido_item.c | 34 +-- .../ovl_kaleido_scope/z_kaleido_mask.c | 36 +-- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 +- 69 files changed, 674 insertions(+), 462 deletions(-) diff --git a/assets/xml/objects/object_fsn.xml b/assets/xml/objects/object_fsn.xml index 37867dc32..5ca67c207 100644 --- a/assets/xml/objects/object_fsn.xml +++ b/assets/xml/objects/object_fsn.xml @@ -6,10 +6,10 @@ - + - + diff --git a/assets/xml/objects/object_ob.xml b/assets/xml/objects/object_ob.xml index aa95db9bc..d23ab6790 100644 --- a/assets/xml/objects/object_ob.xml +++ b/assets/xml/objects/object_ob.xml @@ -55,10 +55,10 @@ - + - + diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index dc334c93e..9a2100d01 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -43,14 +43,14 @@ u32 gUpgradeMasks[] = { // 3 = two-bit masks // 7 = three-bit masks u32 gUpgradeNegMasks[] = { - ~(7 << 0), // Quivers - ~(7 << 3), // Bomb Bags - ~(7 << 6), // Unused (Strength) - ~(7 << 9), // Unused (Scale) - ~(3 << 12), // Wallets - ~(7 << 14), // Unused (Deku Seed Bullet Bags) - ~(7 << 17), // Unused (Deku Stick) - ~(7 << 20), // Unused (Deku Nut) + ~(7 << 0), // UPG_QUIVER + ~(7 << 3), // UPG_BOMB_BAG + ~(7 << 6), // UPG_STRENGTH + ~(7 << 9), // UPG_SCALE + ~(3 << 12), // UPG_WALLET + ~(7 << 14), // UPG_BULLET_BAG + ~(7 << 17), // UPG_DEKU_STICKS + ~(7 << 20), // UPG_DEKU_NUTS }; u8 gEquipShifts[] = { @@ -61,25 +61,25 @@ u8 gEquipShifts[] = { }; u8 gUpgradeShifts[] = { - 0, // Quivers - 3, // Bomb Bags - 6, // Unused (Strength) - 9, // Unused (Scale) - 12, // Wallets - 14, // Unused (Deku Seed Bullet Bags) - 17, // Unused (Deku Stick) - 20, // Unused (Deku Nut) + 0, // UPG_QUIVER + 3, // UPG_BOMB_BAG + 6, // UPG_STRENGTH + 9, // UPG_SCALE + 12, // UPG_WALLET + 14, // UPG_BULLET_BAG + 17, // UPG_DEKU_STICKS + 20, // UPG_DEKU_NUTS }; u16 gUpgradeCapacities[][4] = { - { 0, 30, 40, 50 }, // Quivers - { 0, 20, 30, 40 }, // Bomb Bags - { 0, 0, 0, 0 }, // Unused (Strength) - { 0, 0, 0, 0 }, // Unused (Scale) - { 99, 200, 500, 500 }, // Wallets - { 0, 30, 40, 50 }, // Unused (Deku Seed Bullet Bags) - { 0, 10, 20, 30 }, // Unused (Deku Stick) - { 0, 20, 30, 40 }, // Unused (Deku Nut) + { 0, 30, 40, 50 }, // UPG_QUIVER + { 0, 20, 30, 40 }, // UPG_BOMB_BAG + { 0, 0, 0, 0 }, // UPG_STRENGTH + { 0, 0, 0, 0 }, // UPG_SCALE + { 99, 200, 500, 500 }, // UPG_WALLET + { 0, 30, 40, 50 }, // UPG_BULLET_BAG + { 0, 10, 20, 30 }, // UPG_DEKU_STICKS + { 0, 20, 30, 40 }, // UPG_DEKU_NUTS }; // eight-bit masks @@ -512,7 +512,7 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { } void Inventory_ChangeUpgrade(s16 upgrade, u32 value) { - u32 upgrades = gSaveContext.save.saveInfo.inventory.upgrades; + u32 upgrades = GET_SAVE_INVENTORY_UPGRADES; upgrades &= gUpgradeNegMasks[upgrade]; upgrades |= value << gUpgradeShifts[upgrade]; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index d6f3b78b3..262bc0ebc 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -301,7 +301,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { break; case CS_MISC_PLAYER_FORM_HUMAN: - sCutsceneStoredPlayerForm = gSaveContext.save.playerForm; + sCutsceneStoredPlayerForm = GET_PLAYER_FORM; gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; gSaveContext.save.equippedMask = PLAYER_MASK_NONE; break; diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index a13499f46..0f1836dfb 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -1331,16 +1331,19 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP dropQuantity = sDropTableAmounts[params + dropTableIndex]; if (dropId == ITEM00_MASK) { - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_HUMAN: dropId = ITEM00_ARROWS_10; break; + case PLAYER_FORM_ZORA: dropId = ITEM00_RECOVERY_HEART; break; + case PLAYER_FORM_GORON: dropId = ITEM00_MAGIC_JAR_SMALL; break; + default: dropId = ITEM00_RUPEE_GREEN; break; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index a79071603..cbbe959e7 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2020,10 +2020,10 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } // C buttons - if (gSaveContext.save.playerForm == player->transformation) { + if (GET_PLAYER_FORM == player->transformation) { for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { // Individual C button - if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][GET_CUR_FORM_BTN_ITEM(i)]) { + if (!gPlayerFormItemRestrictions[GET_PLAYER_FORM][GET_CUR_FORM_BTN_ITEM(i)]) { // Item not usable in current playerForm if (gSaveContext.buttonStatus[i] != BTN_DISABLED) { gSaveContext.buttonStatus[i] = BTN_DISABLED; @@ -2182,7 +2182,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { if (gSaveContext.save.cutsceneIndex < 0xFFF0) { gSaveContext.hudVisibilityForceButtonAlphasByStatus = false; if ((player->stateFlags1 & PLAYER_STATE1_800000) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) || - (!(CHECK_EVENTINF(EVENTINF_41)) && (play->unk_1887C >= 2))) { + (!CHECK_EVENTINF(EVENTINF_41) && (play->unk_1887C >= 2))) { // Riding Epona OR Honey & Darling minigame OR Horseback balloon minigame OR related to swamp boat // (non-minigame?) if ((player->stateFlags1 & PLAYER_STATE1_800000) && (player->currentMask == PLAYER_MASK_BLAST) && @@ -2255,8 +2255,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF)) { Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP); - } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && - (CHECK_EVENTINF(EVENTINF_35))) { + } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && CHECK_EVENTINF(EVENTINF_35)) { Interface_SetHudVisibility(HUD_VISIBILITY_B_MINIMAP); } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08) && (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE)) { @@ -2345,8 +2344,8 @@ void Interface_UpdateButtonsPart1(PlayState* play) { restoreHudVisibility = true; sPictoState = PICTO_BOX_STATE_OFF; } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || (func_801A5100() == 1)) { - if (!(CHECK_EVENTINF(EVENTINF_41)) || - ((CHECK_EVENTINF(EVENTINF_41)) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { + if (!CHECK_EVENTINF(EVENTINF_41) || + (CHECK_EVENTINF(EVENTINF_41) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { Audio_PlaySfx(NA_SE_SY_CAMERA_SHUTTER); SREG(89) = 1; play->haltAllActors = true; @@ -3145,10 +3144,8 @@ void Inventory_UpdateDeitySwordEquip(PlayState* play) { interfaceCtx->unk_21C = 0; interfaceCtx->bButtonDoAction = 0; - // Is simply checking if (gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) - if ((((gSaveContext.save.playerForm > 0) && (gSaveContext.save.playerForm < 4)) - ? 1 - : gSaveContext.save.playerForm >> 1) == 0) { + // Is simply checking if (GET_PLAYER_FORM == PLAYER_FORM_FIERCE_DEITY) + if ((((GET_PLAYER_FORM > 0) && (GET_PLAYER_FORM < 4)) ? 1 : GET_PLAYER_FORM >> 1) == 0) { CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_DEITY; } else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_SWORD_DEITY) { if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) { @@ -4104,7 +4101,7 @@ void Interface_DrawBButtonIcons(PlayState* play) { (play->sceneId != SCENE_BOWLING) && ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || (gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0))) && - ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || !(CHECK_EVENTINF(EVENTINF_35))) && + ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || !CHECK_EVENTINF(EVENTINF_35)) && (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || (play->unk_1887C != 100))) { Interface_DrawAmmoCount(play, EQUIP_SLOT_B, interfaceCtx->bAlpha); } @@ -6409,7 +6406,7 @@ void Interface_Draw(PlayState* play) { Interface_DrawItemButtons(play); - if (player->transformation == ((void)0, gSaveContext.save.playerForm)) { + if (player->transformation == GET_PLAYER_FORM) { Interface_DrawBButtonIcons(play); } Interface_DrawCButtonIcons(play); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 33276f717..7e0caa640 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -800,16 +800,91 @@ ItemEquips sSaveDefaultItemEquips = { Inventory sSaveDefaultInventory = { // items { - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, + ITEM_NONE, // SLOT_OCARINA + ITEM_NONE, // SLOT_BOW + ITEM_NONE, // SLOT_ARROW_FIRE + ITEM_NONE, // SLOT_ARROW_ICE + ITEM_NONE, // SLOT_ARROW_LIGHT + ITEM_NONE, // SLOT_TRADE_DEED + ITEM_NONE, // SLOT_BOMB + ITEM_NONE, // SLOT_BOMBCHU + ITEM_NONE, // SLOT_DEKU_STICK + ITEM_NONE, // SLOT_DEKU_NUT + ITEM_NONE, // SLOT_MAGIC_BEANS + ITEM_NONE, // SLOT_TRADE_KEY_MAMA + ITEM_NONE, // SLOT_POWDER_KEG + ITEM_NONE, // SLOT_PICTOGRAPH_BOX + ITEM_NONE, // SLOT_LENS_OF_TRUTH + ITEM_NONE, // SLOT_HOOKSHOT + ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY + ITEM_NONE, // SLOT_TRADE_COUPLE + ITEM_NONE, // SLOT_BOTTLE_1 + ITEM_NONE, // SLOT_BOTTLE_2 + ITEM_NONE, // SLOT_BOTTLE_3 + ITEM_NONE, // SLOT_BOTTLE_4 + ITEM_NONE, // SLOT_BOTTLE_5 + ITEM_NONE, // SLOT_BOTTLE_6 + ITEM_NONE, // SLOT_MASK_POSTMAN + ITEM_NONE, // SLOT_MASK_ALL_NIGHT + ITEM_NONE, // SLOT_MASK_BLAST + ITEM_NONE, // SLOT_MASK_STONE + ITEM_NONE, // SLOT_MASK_GREAT_FAIRY + ITEM_NONE, // SLOT_MASK_DEKU + ITEM_NONE, // SLOT_MASK_KEATON + ITEM_NONE, // SLOT_MASK_BREMEN + ITEM_NONE, // SLOT_MASK_BUNNY + ITEM_NONE, // SLOT_MASK_DON_GERO + ITEM_NONE, // SLOT_MASK_SCENTS + ITEM_NONE, // SLOT_MASK_GORON + ITEM_NONE, // SLOT_MASK_ROMANI + ITEM_NONE, // SLOT_MASK_CIRCUS_LEADER + ITEM_NONE, // SLOT_MASK_KAFEIS_MASK + ITEM_NONE, // SLOT_MASK_COUPLE + ITEM_NONE, // SLOT_MASK_TRUTH + ITEM_NONE, // SLOT_MASK_ZORA + ITEM_NONE, // SLOT_MASK_KAMARO + ITEM_NONE, // SLOT_MASK_GIBDO + ITEM_NONE, // SLOT_MASK_GARO + ITEM_NONE, // SLOT_MASK_CAPTAIN + ITEM_NONE, // SLOT_MASK_GIANT + ITEM_NONE, // SLOT_MASK_FIERCE_DEITY }, // ammo - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { + 0, // SLOT_OCARINA + 0, // SLOT_BOW + 0, // SLOT_ARROW_FIRE + 0, // SLOT_ARROW_ICE + 0, // SLOT_ARROW_LIGHT + 0, // SLOT_TRADE_DEED + 0, // SLOT_BOMB + 0, // SLOT_BOMBCHU + 0, // SLOT_DEKU_STICK + 0, // SLOT_DEKU_NUT + 0, // SLOT_MAGIC_BEANS + 0, // SLOT_TRADE_KEY_MAMA + 0, // SLOT_POWDER_KEG + 0, // SLOT_PICTOGRAPH_BOX + 0, // SLOT_LENS_OF_TRUTH + 0, // SLOT_HOOKSHOT + 0, // SLOT_SWORD_GREAT_FAIRY + 0, // SLOT_TRADE_COUPLE + 0, // SLOT_BOTTLE_1 + 0, // SLOT_BOTTLE_2 + 0, // SLOT_BOTTLE_3 + 0, // SLOT_BOTTLE_4 + 0, // SLOT_BOTTLE_5 + 0, // SLOT_BOTTLE_6 + }, // upgrades - 0x120000, + (0 << 0) | // UPG_QUIVER + (0 << 3) | // UPG_BOMB_BAG + (0 << 6) | // UPG_STRENGTH + (0 << 9) | // UPG_SCALE + (0 << 12) | // UPG_WALLET + (0 << 14) | // UPG_BULLET_BAG + (1 << 17) | // UPG_DEKU_STICKS + (1 << 20), // UPG_DEKU_NUTS // questItems 0, // dungeonItems @@ -901,59 +976,91 @@ ItemEquips sSaveDebugItemEquips = { Inventory sSaveDebugInventory = { // items { - ITEM_OCARINA_OF_TIME, - ITEM_BOW, - ITEM_ARROW_FIRE, - ITEM_ARROW_ICE, - ITEM_ARROW_LIGHT, - ITEM_MOONS_TEAR, - ITEM_BOMB, - ITEM_BOMBCHU, - ITEM_DEKU_STICK, - ITEM_DEKU_NUT, - ITEM_MAGIC_BEANS, - ITEM_ROOM_KEY, - ITEM_POWDER_KEG, - ITEM_PICTOGRAPH_BOX, - ITEM_LENS_OF_TRUTH, - ITEM_HOOKSHOT, - ITEM_SWORD_GREAT_FAIRY, - ITEM_LETTER_TO_KAFEI, - ITEM_BOTTLE, - ITEM_POTION_RED, - ITEM_POTION_GREEN, - ITEM_POTION_BLUE, - ITEM_NONE, - ITEM_NONE, - ITEM_MASK_POSTMAN, - ITEM_MASK_ALL_NIGHT, - ITEM_MASK_BLAST, - ITEM_MASK_STONE, - ITEM_MASK_GREAT_FAIRY, - ITEM_MASK_DEKU, - ITEM_MASK_KEATON, - ITEM_MASK_BREMEN, - ITEM_MASK_BUNNY, - ITEM_MASK_DON_GERO, - ITEM_MASK_SCENTS, - ITEM_MASK_GORON, - ITEM_MASK_ROMANI, - ITEM_MASK_CIRCUS_LEADER, - ITEM_MASK_KAFEIS_MASK, - ITEM_MASK_COUPLE, - ITEM_MASK_TRUTH, - ITEM_MASK_ZORA, - ITEM_MASK_KAMARO, - ITEM_MASK_GIBDO, - ITEM_MASK_GARO, - ITEM_MASK_CAPTAIN, - ITEM_MASK_GIANT, - ITEM_MASK_FIERCE_DEITY, + ITEM_OCARINA_OF_TIME, // SLOT_OCARINA + ITEM_BOW, // SLOT_BOW + ITEM_ARROW_FIRE, // SLOT_ARROW_FIRE + ITEM_ARROW_ICE, // SLOT_ARROW_ICE + ITEM_ARROW_LIGHT, // SLOT_ARROW_LIGHT + ITEM_MOONS_TEAR, // SLOT_TRADE_DEED + ITEM_BOMB, // SLOT_BOMB + ITEM_BOMBCHU, // SLOT_BOMBCHU + ITEM_DEKU_STICK, // SLOT_DEKU_STICK + ITEM_DEKU_NUT, // SLOT_DEKU_NUT + ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS + ITEM_ROOM_KEY, // SLOT_TRADE_KEY_MAMA + ITEM_POWDER_KEG, // SLOT_POWDER_KEG + ITEM_PICTOGRAPH_BOX, // SLOT_PICTOGRAPH_BOX + ITEM_LENS_OF_TRUTH, // SLOT_LENS_OF_TRUTH + ITEM_HOOKSHOT, // SLOT_HOOKSHOT + ITEM_SWORD_GREAT_FAIRY, // SLOT_SWORD_GREAT_FAIRY + ITEM_LETTER_TO_KAFEI, // SLOT_TRADE_COUPLE + ITEM_BOTTLE, // SLOT_BOTTLE_1 + ITEM_POTION_RED, // SLOT_BOTTLE_2 + ITEM_POTION_GREEN, // SLOT_BOTTLE_3 + ITEM_POTION_BLUE, // SLOT_BOTTLE_4 + ITEM_NONE, // SLOT_BOTTLE_5 + ITEM_NONE, // SLOT_BOTTLE_6 + ITEM_MASK_POSTMAN, // SLOT_MASK_POSTMAN + ITEM_MASK_ALL_NIGHT, // SLOT_MASK_ALL_NIGHT + ITEM_MASK_BLAST, // SLOT_MASK_BLAST + ITEM_MASK_STONE, // SLOT_MASK_STONE + ITEM_MASK_GREAT_FAIRY, // SLOT_MASK_GREAT_FAIRY + ITEM_MASK_DEKU, // SLOT_MASK_DEKU + ITEM_MASK_KEATON, // SLOT_MASK_KEATON + ITEM_MASK_BREMEN, // SLOT_MASK_BREMEN + ITEM_MASK_BUNNY, // SLOT_MASK_BUNNY + ITEM_MASK_DON_GERO, // SLOT_MASK_DON_GERO + ITEM_MASK_SCENTS, // SLOT_MASK_SCENTS + ITEM_MASK_GORON, // SLOT_MASK_GORON + ITEM_MASK_ROMANI, // SLOT_MASK_ROMANI + ITEM_MASK_CIRCUS_LEADER, // SLOT_MASK_CIRCUS_LEADER + ITEM_MASK_KAFEIS_MASK, // SLOT_MASK_KAFEIS_MASK + ITEM_MASK_COUPLE, // SLOT_MASK_COUPLE + ITEM_MASK_TRUTH, // SLOT_MASK_TRUTH + ITEM_MASK_ZORA, // SLOT_MASK_ZORA + ITEM_MASK_KAMARO, // SLOT_MASK_KAMARO + ITEM_MASK_GIBDO, // SLOT_MASK_GIBDO + ITEM_MASK_GARO, // SLOT_MASK_GARO + ITEM_MASK_CAPTAIN, // SLOT_MASK_CAPTAIN + ITEM_MASK_GIANT, // SLOT_MASK_GIANT + ITEM_MASK_FIERCE_DEITY, // SLOT_MASK_FIERCE_DEITY }, // ammo - { 1, 30, 1, 1, 1, 1, 30, 30, 30, 30, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 0, 0 }, + { + 1, // SLOT_OCARINA + 30, // SLOT_BOW + 1, // SLOT_ARROW_FIRE + 1, // SLOT_ARROW_ICE + 1, // SLOT_ARROW_LIGHT + 1, // SLOT_TRADE_DEED + 30, // SLOT_BOMB + 30, // SLOT_BOMBCHU + 30, // SLOT_DEKU_STICK + 30, // SLOT_DEKU_NUT + 1, // SLOT_MAGIC_BEANS + 1, // SLOT_TRADE_KEY_MAMA + 1, // SLOT_POWDER_KEG + 1, // SLOT_PICTOGRAPH_BOX + 30, // SLOT_LENS_OF_TRUTH + 1, // SLOT_HOOKSHOT + 1, // SLOT_SWORD_GREAT_FAIRY + 1, // SLOT_TRADE_COUPLE + 1, // SLOT_BOTTLE_1 + 1, // SLOT_BOTTLE_2 + 1, // SLOT_BOTTLE_3 + 1, // SLOT_BOTTLE_4 + 0, // SLOT_BOTTLE_5 + 0, // SLOT_BOTTLE_6 + }, // upgrades - 0x120009, + (1 << 0) | // UPG_QUIVER + (1 << 3) | // UPG_BOMB_BAG + (0 << 6) | // UPG_STRENGTH + (0 << 9) | // UPG_SCALE + (0 << 12) | // UPG_WALLET + (0 << 14) | // UPG_BULLET_BAG + (1 << 17) | // UPG_DEKU_STICKS + (1 << 20), // UPG_DEKU_NUTS // questItems (1 << QUEST_SONG_SONATA) | (1 << QUEST_SONG_LULLABY) | (1 << QUEST_SONG_BOSSA_NOVA) | (1 << QUEST_SONG_ELEGY) | (1 << QUEST_SONG_OATH) | (1 << QUEST_SONG_TIME) | (1 << QUEST_SONG_HEALING) | (1 << QUEST_SONG_EPONA) | @@ -991,12 +1098,20 @@ Inventory sSaveDebugInventory = { u16 sSaveDebugChecksum = 0; -u8 D_801C6A48[] = { - ITEM_MASK_FIERCE_DEITY, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_MASK_DEKU, ITEM_MASK_FIERCE_DEITY, +u8 D_801C6A48[PLAYER_FORM_MAX] = { + ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY + ITEM_MASK_GORON, // PLAYER_FORM_GORON + ITEM_MASK_ZORA, // PLAYER_FORM_ZORA + ITEM_MASK_DEKU, // PLAYER_FORM_DEKU + ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_HUMAN }; -u8 D_801C6A50[] = { - SLOT_MASK_FIERCE_DEITY, SLOT_MASK_GORON, SLOT_MASK_ZORA, SLOT_MASK_DEKU, SLOT_MASK_FIERCE_DEITY, +u8 D_801C6A50[PLAYER_FORM_MAX] = { + SLOT_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY + SLOT_MASK_GORON, // PLAYER_FORM_GORON + SLOT_MASK_ZORA, // PLAYER_FORM_ZORA + SLOT_MASK_DEKU, // PLAYER_FORM_DEKU + SLOT_MASK_FIERCE_DEITY, // PLAYER_FORM_HUMAN }; /** diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index ae9016ad7..fdfcd67de 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -70,7 +70,7 @@ void DemoTreLgt_Init(Actor* thisx, PlayState* play) { this->colorAlpha2 = 255; this->status = 0; //! @bug Zora Link should also use animationType 0 - if (gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) { + if (GET_PLAYER_FORM == PLAYER_FORM_FIERCE_DEITY) { this->animationType = 0; } else { this->animationType = 1; 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 a5fdfe0a1..26e91978f 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1190,7 +1190,7 @@ s32 func_80A97274(EnAz* this, PlayState* play) { case 0: default: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); - if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_16_40))) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_40)) { textId = 0x10CE; } else { textId = 0x10D4; diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index 6d99ada15..f73657d4d 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -89,7 +89,7 @@ void func_80C22DEC(EnBh* this, PlayState* play) { } } else { SkelAnime_Update(&this->skelanime); - if ((this->timer == 0) && (Animation_OnFrame(&this->skelanime, 6.0f))) { + if ((this->timer == 0) && Animation_OnFrame(&this->skelanime, 6.0f)) { this->skelanime.playSpeed = 0.0f; this->timer = Rand_ZeroFloat(50.0f) + 50.0f; } 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 86bb60431..01bf4a522 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 @@ -119,7 +119,7 @@ void func_809CD028(EnBji01* this, PlayState* play) { switch (this->actor.params) { case SHIKASHI_TYPE_DEFAULT: case SHIKASHI_TYPE_FINISHED_CONVERSATION: - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_10)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { @@ -132,6 +132,7 @@ void func_809CD028(EnBji01* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_17_10); } break; + case PLAYER_FORM_HUMAN: if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { this->textId = 0x236A; @@ -142,6 +143,7 @@ void func_809CD028(EnBji01* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_74_10); } break; + case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_08)) { @@ -151,10 +153,14 @@ void func_809CD028(EnBji01* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_75_08); } break; + + default: + break; } break; + case SHIKASHI_TYPE_LOOKED_THROUGH_TELESCOPE: - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { this->textId = 0x5F2; @@ -164,18 +170,22 @@ void func_809CD028(EnBji01* this, PlayState* play) { func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); break; + case PLAYER_FORM_HUMAN: this->textId = 0x5F7; break; + case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: switch (CURRENT_DAY) { case 1: this->textId = 0x5E9; break; + case 2: this->textId = 0x5EA; break; + case 3: timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; if (timeUntilMoonCrash < CLOCK_TIME_F(1, 0)) { @@ -184,9 +194,19 @@ void func_809CD028(EnBji01* this, PlayState* play) { this->textId = 0x5EB; } break; + + default: + break; } + break; + + default: + break; } break; + + default: + break; } SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 2, &this->animIndex); this->actionFunc = EnBji01_DialogueHandler; @@ -201,6 +221,7 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); } break; + case TEXT_STATE_CHOICE: if (Message_ShouldAdvance(play)) { this->actor.flags &= ~ACTOR_FLAG_10000; @@ -211,24 +232,34 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { Message_CloseTextbox(play); func_809CD634(this, play); break; + case 1: Audio_PlaySfx_MessageCancel(); - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: Message_ContinueTextbox(play, 0x5F0); break; + case PLAYER_FORM_HUMAN: Message_ContinueTextbox(play, 0x5F8); break; + case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: Message_ContinueTextbox(play, 0x5E1); break; + + default: + break; } break; + + default: + break; } } break; + case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { this->actor.flags &= ~ACTOR_FLAG_10000; @@ -237,15 +268,19 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 3, &this->animIndex); Message_ContinueTextbox(play, 0x5DF); break; + case 0x5E4: Message_ContinueTextbox(play, 0x5E7); break; + case 0x5E5: Message_ContinueTextbox(play, 0x5E0); break; + case 0x5E7: Message_ContinueTextbox(play, 0x5E5); break; + case 0x5DC: case 0x5DD: case 0x5DF: @@ -256,10 +291,12 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { case 0x5F5: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x5F0: case 0x5F6: Message_ContinueTextbox(play, 0x5EF); break; + case 0x5E1: case 0x5E8: case 0x5E9: @@ -275,14 +312,21 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { this->actor.params = SHIKASHI_TYPE_FINISHED_CONVERSATION; func_809CCE98(this, play); break; + + default: + break; } } break; + case TEXT_STATE_DONE: this->actor.params = SHIKASHI_TYPE_FINISHED_CONVERSATION; this->actor.flags &= ~ACTOR_FLAG_10000; func_809CCE98(this, play); break; + + default: + break; } if ((this->animIndex == 3) && (this->skelAnime.curFrame == this->skelAnime.endFrame)) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 2, &this->animIndex); diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index ef5c9c0e2..dbcd864b1 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -109,7 +109,7 @@ s32 EnBjt_ChangeAnim(EnBjt* this, s32 animIndex) { s32 changed = false; if ((animIndex == TOILET_HAND_ANIM_WAITING) || (animIndex == TOILET_HAND_ANIM_WAITING_MORPH)) { - if (!((this->animIndex == TOILET_HAND_ANIM_WAITING) || (this->animIndex == TOILET_HAND_ANIM_WAITING_MORPH))) { + if ((this->animIndex != TOILET_HAND_ANIM_WAITING) && (this->animIndex != TOILET_HAND_ANIM_WAITING_MORPH)) { changeAnim = true; } } else if (this->animIndex != animIndex) { 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 40a63050b..333ca4276 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -72,17 +72,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_U8(targetMode, 0, ICHAIN_STOP), }; -typedef struct { - /* 0x0 */ f32 data[5]; -} EnBox_PlaybackSpeed; // 0x14 - -static EnBox_PlaybackSpeed sPlaybackSpeed = { { 1.5f, 1.0f, 1.5f, 1.0f, 1.5f } }; - -static AnimationHeader* sBigChestAnimations[5] = { - &gBoxBigChestOpenAdultAnim, &gBoxBigChestOpenGoronAnim, &gBoxBigChestOpenAdultAnim, - &gBoxBigChestOpenDekuAnim, &gBoxBigChestOpenChildAnim, -}; - void EnBox_SetupAction(EnBox* this, EnBoxActionFunc func) { this->actionFunc = func; } @@ -452,13 +441,17 @@ void func_80868B74(EnBox* this, PlayState* play) { } void EnBox_WaitOpen(EnBox* this, PlayState* play) { + static AnimationHeader* sBigChestAnimations[PLAYER_FORM_MAX] = { + &gBoxBigChestOpenAdultAnim, // PLAYER_FORM_FIERCE_DEITY + &gBoxBigChestOpenGoronAnim, // PLAYER_FORM_GORON + &gBoxBigChestOpenAdultAnim, // PLAYER_FORM_ZORA + &gBoxBigChestOpenDekuAnim, // PLAYER_FORM_DEKU + &gBoxBigChestOpenChildAnim, // PLAYER_FORM_HUMAN + }; s32 pad; AnimationHeader* animHeader; f32 frameCount; f32 playbackSpeed; - EnBox_PlaybackSpeed playbackSpeedTable; - Player* player; - Vec3f offset; this->alpha = 255; this->movementFlags |= ENBOX_MOVE_IMMOBILE; @@ -468,12 +461,16 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { animHeader = &gBoxChestOpenAnim; playbackSpeed = 1.5f; } else { - u8 playerForm; + f32 sPlaybackSpeeds[PLAYER_FORM_MAX] = { + 1.5f, // PLAYER_FORM_FIERCE_DEITY + 1.0f, // PLAYER_FORM_GORON + 1.5f, // PLAYER_FORM_ZORA + 1.0f, // PLAYER_FORM_DEKU + 1.5f, // PLAYER_FORM_HUMAN + }; - playbackSpeedTable = sPlaybackSpeed; - playerForm = gSaveContext.save.playerForm; - animHeader = sBigChestAnimations[playerForm]; - playbackSpeed = playbackSpeedTable.data[playerForm]; + animHeader = sBigChestAnimations[GET_PLAYER_FORM]; + playbackSpeed = sPlaybackSpeeds[GET_PLAYER_FORM]; } frameCount = Animation_GetLastFrame(animHeader); @@ -496,9 +493,11 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { Flags_SetTreasure(play, ENBOX_GET_CHEST_FLAG(&this->dyna.actor)); } } else { - player = GET_PLAYER(play); + Player* player = GET_PLAYER(play); + Vec3f offset; + Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos); - if (offset.z > -50.0f && offset.z < 0.0f && fabsf(offset.y) < 10.0f && fabsf(offset.x) < 20.0f && + if ((offset.z > -50.0f) && (offset.z < 0.0f) && (fabsf(offset.y) < 10.0f) && (fabsf(offset.x) < 20.0f) && Player_IsFacingActor(&this->dyna.actor, 0x3000, play)) { if (((this->getItemId == GI_HEART_PIECE) || (this->getItemId == GI_BOTTLE)) && Flags_GetCollectible(play, this->collectableFlag)) { @@ -550,10 +549,9 @@ void EnBox_Open(EnBox* this, PlayState* play) { s32 bgId; u16 sfxId = 0; - if (Animation_OnFrame(&this->skelAnime, gSaveContext.save.playerForm == PLAYER_FORM_DEKU ? 14.0f : 30.0f)) { + if (Animation_OnFrame(&this->skelAnime, GET_PLAYER_FORM == PLAYER_FORM_DEKU ? 14.0f : 30.0f)) { sfxId = NA_SE_EV_TBOX_UNLOCK; - } else if (Animation_OnFrame(&this->skelAnime, - gSaveContext.save.playerForm == PLAYER_FORM_DEKU ? 15.0f : 90.0f)) { + } else if (Animation_OnFrame(&this->skelAnime, GET_PLAYER_FORM == PLAYER_FORM_DEKU ? 15.0f : 90.0f)) { sfxId = NA_SE_EV_TBOX_OPEN; } if (sfxId != NA_SE_NONE) { 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 9d368d68b..d7c66ea10 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -450,8 +450,8 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { return true; } - if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && - (player->unk_AE7 == 1) && (this->unk_28B == 0)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->unk_AE7 == 1) && + (this->unk_28B == 0)) { this->unk_28B = 1; for (i = 0; i < ARRAY_COUNT(this->colliderJntSphElement) - 3; i++) { this->colliderJntSph.elements[i].info.bumper.dmgFlags &= ~0x400; 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 f75661471..2753650a5 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -558,7 +558,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { } if (this->actor.xzDistToPlayer < 30.0f) { - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { this->actor.flags &= ~ACTOR_FLAG_10000; player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; 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 3145e10aa..2f8648316 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -385,7 +385,7 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 distanceFromPlayer; - if (gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + if (GET_PLAYER_FORM == PLAYER_FORM_GORON) { distanceFromPlayer = 40.0f; } else { distanceFromPlayer = 20.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 a9eb004a9..02b1178c2 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -4306,7 +4306,7 @@ void EnFishing_UpdatePondProps(PlayState* play) { actor = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (actor != NULL) { - if (!((actor->id == ACTOR_EN_FISHING) && (actor->params >= 100))) { + if ((actor->id != ACTOR_EN_FISHING) || (actor->params < 100)) { actor = actor->next; } else { EnFishing_HandleReedContact(prop, &actor->world.pos); @@ -4320,7 +4320,7 @@ void EnFishing_UpdatePondProps(PlayState* play) { actor = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (actor != NULL) { - if (!((actor->id == ACTOR_EN_FISHING) && (actor->params >= 100))) { + if ((actor->id != ACTOR_EN_FISHING) || (actor->params < 100)) { actor = actor->next; } else { EnFishing_HandleLilyPadContact(prop, &actor->world.pos, ((EnFishing*)actor)->unk_149); 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 6aaeb679b..d3c5f17be 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -134,9 +134,12 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(gravity, -1000, ICHAIN_STOP), }; -static Vec3f D_808D3900[] = { - { 25.0f, 45.0f, -7.0f }, { 25.0f, 40.0f, -12.0f }, { 25.0f, 35.0f, -2.0f }, - { 10.0f, 20.0f, -4.0f }, { 15.0f, 25.0f, -2.0f }, +static Vec3f D_808D3900[PLAYER_FORM_MAX] = { + { 25.0f, 45.0f, -7.0f }, // PLAYER_FORM_FIERCE_DEITY + { 25.0f, 40.0f, -12.0f }, // PLAYER_FORM_GORON + { 25.0f, 35.0f, -2.0f }, // PLAYER_FORM_ZORA + { 10.0f, 20.0f, -4.0f }, // PLAYER_FORM_DEKU + { 15.0f, 25.0f, -2.0f }, // PLAYER_FORM_HUMAN }; static s8 D_808D393C[] = { 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 34e2c9dc0..a07bede52 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -111,7 +111,7 @@ void func_809616E0(EnFu* this, PlayState* play) { s16 spA0 = false; Vec3f sp94; - if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && (CURRENT_DAY == 3)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_DEKU) && (CURRENT_DAY == 3)) { spA0 = true; } this->unk_54C = 0; @@ -385,7 +385,7 @@ void func_80962340(EnFu* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->unk_54A == 2) { if (this->unk_552 == 0x287D) { - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { Message_StartTextbox(play, 0x287E, &this->actor); this->unk_552 = 0x287E; } else if ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && @@ -653,7 +653,7 @@ void func_80962A10(EnFu* this, PlayState* play) { this->unk_546 = 1; } - if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + if ((GET_PLAYER_FORM == PLAYER_FORM_DEKU) && gSaveContext.save.saveInfo.playerData.isMagicAcquired) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); } @@ -748,7 +748,7 @@ void func_80962F4C(EnFu* this, PlayState* play) { switch (this->unk_542) { case 0: - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { player->stateFlags3 |= PLAYER_STATE3_400; } break; @@ -821,7 +821,7 @@ void func_8096326C(EnFu* this, PlayState* play) { } void func_809632D0(EnFu* this) { - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } @@ -897,7 +897,7 @@ void func_80963630(EnFu* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20) && (CURRENT_DAY == 3) && - (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) { Message_StartTextbox(play, 0x2884, &this->actor); this->unk_552 = 0x2884; @@ -918,7 +918,7 @@ void func_80963630(EnFu* this, PlayState* play) { this->actor.child->freezeTimer = 0; func_809628BC(this); - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { switch (CURRENT_DAY) { case 1: SET_WEEKEVENTREG(WEEKEVENTREG_22_10); @@ -1016,7 +1016,7 @@ s32 func_809638F8(PlayState* play) { void func_809639D0(EnFu* this, PlayState* play) { switch (CURRENT_DAY) { case 1: - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) { Message_StartTextbox(play, 0x2853, &this->actor); this->unk_552 = 0x2853; @@ -1038,7 +1038,7 @@ void func_809639D0(EnFu* this, PlayState* play) { break; case 2: - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { Message_StartTextbox(play, 0x286F, &this->actor); this->unk_552 = 0x286F; } else if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) { @@ -1067,8 +1067,8 @@ void func_809639D0(EnFu* this, PlayState* play) { break; case 3: - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { func_80963EAC(this, play); } else { Message_StartTextbox(play, 0x2841, &this->actor); @@ -1118,7 +1118,7 @@ void func_809639D0(EnFu* this, PlayState* play) { void func_80963DE4(EnFu* this, PlayState* play) { switch (this->unk_542) { case 0: - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { Message_StartTextbox(play, 0x2875, &this->actor); this->unk_552 = 0x2875; } else { 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 52e947dbd..c7066cf30 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 @@ -373,7 +373,7 @@ s32 func_80ACF04C(EnFuMato* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR); fu->unk_548++; - if ((fu->unk_542 == 2) || (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { + if ((fu->unk_542 == 2) || (GET_PLAYER_FORM == PLAYER_FORM_DEKU)) { fu->unk_546 = 1; func_80ACE680(this); } else { 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 8f343a270..5a6ab4aba 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 @@ -97,10 +97,10 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) { Message_StartTextbox(play, 0x467, &this->actor); - this->curTextId = 0x467; // "What's this? You need somethin' on a day like this? + this->curTextId = 0x467; } else { Message_StartTextbox(play, 0x466, &this->actor); - this->curTextId = 0x466; // What's this? You need somethin'? + this->curTextId = 0x466; } } EnGinkoMan_SetupDialogue(this); @@ -116,25 +116,26 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { } switch (this->curTextId) { - case 0x44C: // "Hey there, little guy! Won't you deposit some Rupees? (first dialogue) + case 0x44C: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) { Message_StartTextbox(play, 0x44E, &this->actor); - this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees" + this->curTextId = 0x44E; } else { Message_StartTextbox(play, 0x44D, &this->actor); - this->curTextId = - 0x44D; // "For example, if you deposit 200 Rupees, you'll get an item that holds a lot of Rupees." + this->curTextId = 0x44D; } break; - case 0x44D: // "For example, if you deposit 200 Rupees, you'll get an item that holds a lot of Rupees." + + case 0x44D: Message_StartTextbox(play, 0x44E, &this->actor); - this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees" + this->curTextId = 0x44E; break; - case 0x44F: // "...So, what'll it be? Deposit Rupees Don't deposit Rupees" + + case 0x44F: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x450, &this->actor); - this->curTextId = 0x450; // "How much? How much? [rupee prompt] + this->curTextId = 0x450; break; case 0x453: // you deposited a tiny amount @@ -142,59 +143,61 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x455: // you deposited a lot if (this->isNewAccount == true) { this->isNewAccount = false; - if (this->curTextId != 0x453) { // "That's it? That ain't nothing at all, big spender! + if (this->curTextId != 0x453) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); } Message_StartTextbox(play, 0x461, &this->actor); - this->curTextId = 0x461; // So, little guy, what's your name? + this->curTextId = 0x461; } else { - if (this->curTextId == 0x453) { // "That's it? That ain't nothing at all, big spender! + if (this->curTextId == 0x453) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); } 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!" + this->curTextId = 0x45A; } break; - case 0x456: // "Is that so? Think about it, little guy!" - case 0x459: // "Heyyy! You don't have that much! + + case 0x456: + case 0x459: Message_StartTextbox(play, 0x44E, &this->actor); - this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees" + this->curTextId = 0x44E; break; - case 0x45A: // "All right, little guy, now I've got a total of [rupees] from you!" + + case 0x45A: 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!?! + this->curTextId = 0x45B; } 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!?! + this->curTextId = 0x45C; } 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?! + this->curTextId = 0x45D; } 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 = - 0x45E; // "...Hang on there, little guy. I can't take any more deposits. Sorry..." + this->curTextId = 0x45E; } else { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x460, &this->actor); - this->curTextId = 0x460; // "Come back and deposit some after you save up a bunch!" + this->curTextId = 0x460; } } else { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x460, &this->actor); - this->curTextId = 0x460; // "Come back and deposit some after you save up a bunch!" + this->curTextId = 0x460; } break; + case 0x45B: // given 200 reward case 0x45C: // given 1000 reward case 0x45D: // given 5000 reward @@ -203,121 +206,134 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { EnGinkoMan_SetupBankAward(this); EnGinkoMan_BankAward(this, play); break; - case 0x461: // So, little guy, what's your name? + + case 0x461: Message_StartTextbox(play, 0x462, &this->actor); - this->curTextId = 0x462; // Hmm... Link is it? + this->curTextId = 0x462; break; - case 0x462: // Hmm.. Link is it? + + case 0x462: Message_StartTextbox(play, 0x463, &this->actor); - this->curTextId = 0x463; // Got it... I won't forget your deposits. Let me stamp you + this->curTextId = 0x463; break; - case 0x463: // Got it... I won't forget your deposits. Let me stamp you + + case 0x463: Message_StartTextbox(play, 0x464, &this->actor); - this->curTextId = 0x464; // Hey, relax! It doesn't leave any marks + this->curTextId = 0x464; break; - case 0x464: // Hey, relax! It doesn't leave any marks + + case 0x464: play->msgCtx.msgMode = 0x44; EnGinkoMan_SetupStamp(this); // stamp player break; - case 0x465: // "There! Now I'll know you when I see you!" + + case 0x465: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); 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!" + this->curTextId = 0x45A; break; - case 0x466: // What's this? You need somethin'? - case 0x467: // "What's this? You need somethin' on a day like this? You haven't evacuated yet? + + case 0x466: + case 0x467: Message_StartTextbox(play, 0x468, &this->actor); - this->curTextId = 0x468; // " Deposit Rupees Withdraw Rupees Nothing really" + this->curTextId = 0x468; break; - case 0x469: // "Excuse me, but let me take a look at you..." + + case 0x469: EnGinkoMan_SetupStamp(this); // stamp player break; - case 0x46A: // "Ah, yes...[Link]. If I remember, you're the little guy who deposited [rupees]." - case 0x46C: // "Ah, yes...[Link], right? If I remember, you're the little guy who deposited [rupees]." - case 0x47E: // "Your deposits total [rupees]." + + case 0x46A: + case 0x46C: + case 0x47E: if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) { 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! + this->curTextId = 0x45F; } 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! + this->curTextId = 0x458; } else { Message_StartTextbox(play, 0x479, &this->actor); - this->curTextId = 0x479; // "Well, are you gonna make a deposit?" + this->curTextId = 0x479; } } else if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) { Message_StartTextbox(play, 0x46D, &this->actor); - // "Look, little guy, if it's 'cause of the bad rumors going around, forget it! They're just rumors!" + this->curTextId = 0x46D; } else { // GINKOMAN_CHOICE_WITHDRAWL Message_StartTextbox(play, 0x46B, &this->actor); - this->curTextId = 0x46B; // "So..." + this->curTextId = 0x46B; } this->choiceDepositWithdrawl = GINKOMAN_CHOICE_RESET; break; - case 0x46B: // So... + + case 0x46B: Message_StartTextbox(play, 0x46E, &this->actor); - this->curTextId = 0x46E; // "How much do you want? [rupee prompt] + this->curTextId = 0x46E; break; - case 0x46D: // "Look, little guy, if it's 'cause of the bad rumors going around, forget it! They're just - // rumors!" + + case 0x46D: Message_StartTextbox(play, 0x46B, &this->actor); - this->curTextId = 0x46B; // So... + this->curTextId = 0x46B; break; - case 0x470: // "Is that so? Come back and deposit some after saving up a bunch!" + + case 0x470: if (Message_ShouldAdvance(play)) { Message_CloseTextbox(play); this->isStampChecked = false; EnGinkoMan_SetupIdle(this); // change to waiting for approach } break; - case 0x476: // "...You haven't deposited that many Rupees, so that much isn't available for withdrawal. Do the - // math! + + case 0x476: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - case 0x475: // "What's this? Look, little guy, you can't hold this many rupees! You got that?" - case 0x47C: // "Is that so? Think it over, little guy! So what are you gonna do?" - case 0x47D: // duplicate of 48 + // fallthrough + case 0x475: + case 0x47C: + case 0x47D: Message_StartTextbox(play, 0x468, &this->actor); - this->curTextId = 0x468; // " Deposit Rupees Withdraw Rupees Nothing really" + this->curTextId = 0x468; break; - case 0x472: // "What's this? It's a waste to take out such a tiny bit! ...But if you say so!" - 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!" + + case 0x472: + case 0x473: + case 0x474: 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.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!" + this->curTextId = 0x45A; } break; - case 0x477: // "...You know, at this time of day there's a 4 Rupee service charge on withdrawals!" + + case 0x477: Message_StartTextbox(play, 0x471, &this->actor); - this->curTextId = 0x471; // "Are you really withdrawing [rupees selected]? Y/n" + this->curTextId = 0x471; this->serviceFee = play->msgCtx.unk1206C; break; - case 0x479: // Well, are you gonna make a deposit? + + case 0x479: Message_StartTextbox(play, 0x44F, &this->actor); - this->curTextId = 0x44F; // "All right! So..." + this->curTextId = 0x44F; + break; + + default: break; } } -// actionfunc: wait for player dialogue input void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { if (!Message_ShouldAdvance(play)) { return; } switch (this->curTextId) { - case 0x44E: // "...So, what'll it be? + case 0x44E: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { Audio_PlaySfx(NA_SE_SY_ERROR); @@ -327,7 +343,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.rupees > 0) { Audio_PlaySfx_MessageDecide(); Message_StartTextbox(play, 0x44F, &this->actor); - this->curTextId = 0x44F; // "All right! so..." + this->curTextId = 0x44F; } else { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x458, &this->actor); @@ -337,28 +353,29 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { } else { // GINKOMAN_CHOICE_NO Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x451, &this->actor); - this->curTextId = 0x451; // dont say that, come on, trust me! + this->curTextId = 0x451; } break; - case 0x452: // Really? are you really depositing rupees? + + case 0x452: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.bankRupeesSelected) { Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x459, &this->actor); - this->curTextId = 0x459; // HEY you dont have that much + this->curTextId = 0x459; } else { Audio_PlaySfx_MessageDecide(); if (play->msgCtx.bankRupeesSelected >= 100) { Message_StartTextbox(play, 0x455, &this->actor); - this->curTextId = 0x455; // You're really going to be give me that much? Rich little guy! + this->curTextId = 0x455; } else if (play->msgCtx.bankRupeesSelected >= 10) { Message_StartTextbox(play, 0x454, &this->actor); - this->curTextId = 0x454; // Seriously? that's a lot. A lot! + this->curTextId = 0x454; } else { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x453, &this->actor); - this->curTextId = 0x453; // That's it? That aint nothing at all + this->curTextId = 0x453; } if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { @@ -376,56 +393,58 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { Message_StartTextbox(play, 0x456, &this->actor); - this->curTextId = 0x456; // Is that so? think about it + this->curTextId = 0x456; } else { Message_StartTextbox(play, 0x47D, &this->actor); - this->curTextId = 0x47D; // is that so? think it over + this->curTextId = 0x47D; } } break; - case 0x468: // Deposit OR withdrawl OR cancel screen + + case 0x468: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_CANCEL) { Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x470, &this->actor); - this->curTextId = 0x470; // "Is that so? Come back and deposit some after saving up a bunch!" + this->curTextId = 0x470; } else { Audio_PlaySfx_MessageDecide(); this->choiceDepositWithdrawl = play->msgCtx.choiceIndex; if (!this->isStampChecked) { this->isStampChecked = true; Message_StartTextbox(play, 0x469, &this->actor); - this->curTextId = 0x469; // "Excuse me, but let me take a look at you..." + this->curTextId = 0x469; } else { Message_StartTextbox(play, 0x47E, &this->actor); - this->curTextId = 0x47E; // "Your deposits total [rupees]." + this->curTextId = 0x47E; } } break; - case 0x471: // Are you really withdrawling [selected rupees]? + + case 0x471: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) < ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) { Audio_PlaySfx(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 + this->curTextId = 0x476; } else if (CUR_CAPACITY(UPG_WALLET) < (play->msgCtx.bankRupeesSelected + gSaveContext.save.saveInfo.playerData.rupees)) { // check if wallet is big enough Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x475, &this->actor); - this->curTextId = 0x475; // You can't hold that many in your wallet + this->curTextId = 0x475; } else { Audio_PlaySfx_MessageDecide(); if (play->msgCtx.bankRupeesSelected >= 100) { Message_StartTextbox(play, 0x474, &this->actor); - this->curTextId = 0x474; // Aw, you're taking out all that? + this->curTextId = 0x474; } else if (play->msgCtx.bankRupeesSelected >= 10) { Message_StartTextbox(play, 0x473, &this->actor); - this->curTextId = 0x473; // use it wisely + this->curTextId = 0x473; } else { Message_StartTextbox(play, 0x472, &this->actor); - this->curTextId = 0x472; // It's a waste to take out such a tiny bit + this->curTextId = 0x472; } this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF); @@ -438,38 +457,45 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { } else { Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x47C, &this->actor); - this->curTextId = 0x47C; // "Is that so? Think it over, little guy! So what are you gonna do?" + this->curTextId = 0x47C; } break; + + default: + break; } } void EnGinkoMan_WaitForRupeeCount(EnGinkoMan* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (this->curTextId) { - case 0x450: // "How much? How much?" [rupee prompt] Set the amount with [Control Stick] and + case 0x450: if (play->msgCtx.bankRupeesSelected == 0) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x457, &this->actor); - this->curTextId = 0x457; // Zero Rupees? Cruel joke! + this->curTextId = 0x457; } else { Message_StartTextbox(play, 0x452, &this->actor); - this->curTextId = 0x452; // Really? are you really depositing [x]? Y/n + this->curTextId = 0x452; } break; - case 0x46E: // "How much do you want?" [rupee prompt] Set the amount with [Control Stick] + + case 0x46E: if (play->msgCtx.bankRupeesSelected == 0) { Message_StartTextbox(play, 0x46F, &this->actor); - this->curTextId = 0x46F; // "Zero Rupees?!? That's a cruel joke!" + this->curTextId = 0x46F; } else if (gSaveContext.save.isNight == true) { Message_StartTextbox(play, 0x477, &this->actor); - this->curTextId = 0x477; // "...You know, at this time of day there's a 4 Rupee service charge... + this->curTextId = 0x477; } else { Message_StartTextbox(play, 0x471, &this->actor); - this->curTextId = 0x471; // "Are you really withdrawing [rupees selected]? Y/n + this->curTextId = 0x471; this->serviceFee = 0; } break; + + default: + break; } } } @@ -523,13 +549,13 @@ void EnGinkoMan_BankAward(EnGinkoMan* this, PlayState* play) { // Parent is the player when starting to receive the award this->actor.parent = NULL; EnGinkoMan_SetupBankAward2(this); - } else if (this->curTextId == 0x45B) { // "Whats this, you already saved up 200?" + } else if (this->curTextId == 0x45B) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) { Actor_OfferGetItem(&this->actor, play, GI_WALLET_ADULT + CUR_UPG_VALUE(UPG_WALLET), 500.0f, 100.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f); } - } else if (this->curTextId == 0x45C) { // "Whats this, you already saved up 5000?" + } else if (this->curTextId == 0x45C) { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f); } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); @@ -547,8 +573,6 @@ void EnGinkoMan_SetupBankAward2(EnGinkoMan* this) { void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08) && (this->curTextId == 0x45B)) { - // "What's this? You've already saved up 200 Rupees!?! Well, little guy, here's your special gift. Take - // it!" SET_WEEKEVENTREG(WEEKEVENTREG_10_08); Message_StartTextbox(play, 0x47A, &this->actor); this->curTextId = 0x47A; // Message after receiving reward for depositing 200 rupees. @@ -577,29 +601,32 @@ void EnGinkoMan_SetupStamp(EnGinkoMan* this) { } void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) { - if ((this->curTextId == 0x464) // "Hey, relax! It doesn't leave any marks, and it's not gonna hurt." - && (Animation_OnFrame(&this->skelAnime, 10.0f))) { + if ((this->curTextId == 0x464) && Animation_OnFrame(&this->skelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); // "stamp" } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->curTextId) { - case 0x464: // "Hey, relax! It doesn't leave any marks, and it's not gonna hurt." + case 0x464: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x465, &this->actor); - this->curTextId = 0x465; // "There! Now I'll know you when I see you!" + this->curTextId = 0x465; break; - case 0x469: // "Excuse me, but let me take a look at you..." + + case 0x469: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); 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? + this->curTextId = 0x46C; } else { Message_StartTextbox(play, 0x46A, &this->actor); - this->curTextId = 0x46A; // "Ah, yes...[Link]. + this->curTextId = 0x46A; } break; + + default: + break; } EnGinkoMan_SetupDialogue(this); 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 ec5905594..65a71f49a 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1781,7 +1781,7 @@ void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play) { void EnGo_SetupAthletic(EnGo* this, PlayState* play) { if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) || (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) && - (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { EnGo_ChangeToStretchingAnimation(this, play); this->actionFunc = EnGo_Idle; } else { 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 cc0f6d500..e5ae695ed 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -298,7 +298,7 @@ void func_8099807C(EnGs* this, PlayState* play) { break; case OCARINA_SONG_SONATA: - if ((this->actor.params == ENGS_1) && (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { + if ((this->actor.params == ENGS_1) && (GET_PLAYER_FORM == PLAYER_FORM_DEKU)) { this->unk_194 = 1; this->unk_19C = 5; this->unk_19A |= 1; @@ -308,7 +308,7 @@ void func_8099807C(EnGs* this, PlayState* play) { break; case OCARINA_SONG_NEW_WAVE: - if ((this->actor.params == ENGS_1) && (gSaveContext.save.playerForm == PLAYER_FORM_ZORA)) { + if ((this->actor.params == ENGS_1) && (GET_PLAYER_FORM == PLAYER_FORM_ZORA)) { this->unk_194 = 3; this->unk_19C = 5; this->unk_19A |= 1; @@ -318,7 +318,7 @@ void func_8099807C(EnGs* this, PlayState* play) { break; case OCARINA_SONG_GORON_LULLABY: - if ((this->actor.params == ENGS_1) && (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { + if ((this->actor.params == ENGS_1) && (GET_PLAYER_FORM == PLAYER_FORM_GORON)) { this->unk_194 = 2; this->unk_19C = 5; this->unk_19A |= 1; 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 98ac6348b..aa4e0b891 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -390,8 +390,7 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { } if (play->msgCtx.ocarinaMode == 3) { - if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && - (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) { this->csIdIndex = HG_CS_SONG_OF_HEALING; } else { diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 02c6d252c..4ff47c781 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -159,7 +159,7 @@ void EnHgo_Talk(EnHgo* this, PlayState* play) { Message_StartTextbox(play, 0x15A7, &this->actor); this->textId = 0x15A7; // can I research that mask } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_HUMAN)) { this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_HUMAN; Message_StartTextbox(play, 0x158F, &this->actor); 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 89d9b093f..1921ea6a2 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -479,10 +479,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { switch (arg2) { case 0: - if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || - (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (GET_PLAYER_FORM == PLAYER_FORM_GORON)) { textId = 0x345C; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { textId = 0x3460; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_08)) { textId = 0x3458; @@ -500,10 +499,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { break; case 3: - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { textId = 0x3485; - } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || - (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { + } else if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (GET_PLAYER_FORM == PLAYER_FORM_GORON)) { textId = 0x3484; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) { textId = 0x346D; @@ -513,10 +511,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { break; case 4: - if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || - (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (GET_PLAYER_FORM == PLAYER_FORM_GORON)) { textId = 0x348A; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { textId = 0x348B; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_01)) { textId = 0x3486; @@ -536,10 +533,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { break; case 7: - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { textId = 0x34A8; - } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || - (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { + } else if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (GET_PLAYER_FORM == PLAYER_FORM_GORON)) { textId = 0x34A7; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) { textId = 0x3495; 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 abb1f1438..19836174c 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -501,8 +501,8 @@ void EnJg_Talk(EnJg* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; - } else if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_24_40)) || - (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_40) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || + CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) { // The player already has the Lullaby or Lullaby Intro, so say "I'm counting on you" this->textId = EnJg_GetNextTextId(this); Message_StartTextbox(play, this->textId, &this->actor); @@ -678,8 +678,8 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->cutsceneAnimIndex); } - if ((!(this->flags & FLAG_DRUM_SPAWNED)) && - (((this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && (Animation_OnFrame(&this->skelAnime, 14.0f)) && + if (!(this->flags & FLAG_DRUM_SPAWNED) && + (((this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) && (this->action != EN_JG_ACTION_LULLABY_INTRO_CS)) || (((this->cutsceneAnimIndex == EN_JG_ANIM_DRUM_IDLE) || (this->cutsceneAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) && 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 b023bf688..551b75eb5 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 @@ -190,8 +190,7 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { } if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(player->stateFlags1 & PLAYER_STATE1_2000) && - (this->unk_2FE == 0) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) && - func_80C149B0(play, &this->unk_1F8)) { + (this->unk_2FE == 0) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) && func_80C149B0(play, &this->unk_1F8)) { this->unk_2FE = 1; func_80C13E6C(this); } else if (!(player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { 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 568724237..ea5352a7e 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -631,7 +631,7 @@ void func_80969898(EnJs* this, PlayState* play) { void func_80969AA0(EnJs* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { textId = 0x220B; } else { textId = 0x2215; @@ -807,7 +807,7 @@ void func_80969DA4(EnJs* this, PlayState* play) { void func_8096A080(EnJs* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { textId = 0x2218; } else { textId = 0x221B; @@ -837,7 +837,7 @@ void func_8096A104(EnJs* this, PlayState* play) { void func_8096A184(EnJs* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { textId = 0x220B; } else if (func_80968E38(0) >= 20) { textId = 0x2202; 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 cfd27fbb0..6e4d55d28 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -235,8 +235,6 @@ void func_80B3415C(EnKbt* this) { } void func_80B34314(EnKbt* this, PlayState* play) { - s32 playerForm; - func_80B34078(this); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -250,10 +248,9 @@ void func_80B34314(EnKbt* this, PlayState* play) { } else if (this->actor.xzDistToPlayer < 250.0f) { if ((this->unk_278 != NULL) && (this->unk_278->xzDistToPlayer < 250.0f)) { if (this->unk_27C & 4) { - playerForm = gSaveContext.save.playerForm; - if (((playerForm ^ 0) != PLAYER_FORM_HUMAN) || ((CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI) && - (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_RAZOR) && - (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_GILDED))) { + if ((GET_PLAYER_FORM != PLAYER_FORM_HUMAN) || ((CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI) && + (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_RAZOR) && + (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_GILDED))) { this->actor.textId = 0xC38; } else if (CURRENT_DAY == 3) { this->actor.textId = 0xC39; @@ -264,17 +261,27 @@ void func_80B34314(EnKbt* this, PlayState* play) { } } - if (this->actor.textId != 0xC37) { - if (((this->actor.textId == 0xC4E) || (this->actor.textId == 0xC4F) || (this->actor.textId == 0xC50)) && - (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN)) { - this->actor.textId = 0xC37; - } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { - if (func_80B33E8C(play)) { - this->actor.textId = 0xC50; - } else { - this->actor.textId = 0xC4E; - } + switch (this->actor.textId) { + case 0xC4E: + case 0xC4F: + case 0xC50: + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { + this->actor.textId = 0xC37; + } + break; + + case 0xC37: + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { + if (func_80B33E8C(play)) { + this->actor.textId = 0xC50; + } else { + this->actor.textId = 0xC4E; + } + } + break; + + default: + break; } func_800B8614(&this->actor, play, 260.0f); } 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 c0063896a..77ad3e4c5 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 @@ -169,8 +169,8 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) { if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) { Message_StartTextbox(play, 0x273C, &this->actor); this->unk_288 = 0x273C; - } else if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { - switch (gSaveContext.save.playerForm) { + } else if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: phi_v0 = 0; break; 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 38a870a14..fb87c3546 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -361,7 +361,7 @@ void func_80B413C8(EnKgy* this) { } s32 func_80B41460(void) { - if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || + if ((GET_PLAYER_FORM != PLAYER_FORM_HUMAN) || ((CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI) && (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_RAZOR) && (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_GILDED))) { return 0xC38; 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 b89b085c5..cae3ae6e1 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 @@ -201,7 +201,7 @@ void func_80AE9BCC(EnLiftNuts* this, PlayState* play) { (this->actionFunc != func_80AEACF8) && (this->actionFunc != func_80AEAC64) && (this->actionFunc != func_80AEA044) && (this->actionFunc != func_80AEB598) && (this->actionFunc != func_80AEB698) && !func_80AE9B4C(0, 3) && (func_80AE9B8C() == 3) && - (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && (this->actor.xzDistToPlayer < 150.0f)) { + (GET_PLAYER_FORM == PLAYER_FORM_DEKU) && (this->actor.xzDistToPlayer < 150.0f)) { func_80AEB828(this); } } @@ -322,7 +322,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { func_80AE9FC8(this); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { if (func_80AE9B4C(0, 0)) { switch (CURRENT_DAY) { case 1: 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 9adf841f7..8809fbff5 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -608,7 +608,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { break; case 0x3358: - if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + if ((GET_PLAYER_FORM != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Message_StartTextbox(play, 0x335C, &this->actor); this->textId = 0x335C; Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); @@ -883,7 +883,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { switch (this->type) { case MA4_TYPE_DAY1: - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); @@ -939,7 +939,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { break; case MA4_TYPE_ALIENS_DEFEATED: - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); 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 5e63c7990..008507f9b 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 @@ -1109,7 +1109,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) { void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { if (CURRENT_DAY == 1) { - if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); @@ -1168,7 +1168,7 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { switch (CURRENT_DAY) { case 1: - if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); 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 bb9c9c926..faa78983f 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 @@ -302,7 +302,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { s16 sp26 = this->actor.shape.rot.y - this->actor.yawTowardsPlayer; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (!(gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_80)) { // Saying to non-human Link: "Cremia went to town." SET_WEEKEVENTREG(WEEKEVENTREG_65_80); 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 92a3ff91e..17396969a 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -135,6 +135,9 @@ void func_8095954C(EnMk* this, PlayState* play) { case 5: func_809592E0(this, play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)]->id - 1); break; + + default: + break; } } else { func_809592E0(this, 0); @@ -144,7 +147,7 @@ void func_8095954C(EnMk* this, PlayState* play) { void func_80959624(EnMk* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (this->unk_27A & 4) { textId = 0xFB9; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { @@ -209,7 +212,7 @@ void func_80959844(EnMk* this, PlayState* play) { } else if (func_80959524(play) >= 7) { textId = 0xFB3; } else { - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_10)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { @@ -411,7 +414,7 @@ void func_80959E18(EnMk* this, PlayState* play) { if (func_800B8718(&this->actor, &play->state)) { play->msgCtx.ocarinaMode = 4; this->actionFunc = func_80959D28; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { this->actor.csId = this->csIdList[0]; SET_WEEKEVENTREG(WEEKEVENTREG_20_40); Item_Give(play, ITEM_SONG_NOVA); 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 1edfbe2ed..de2896c28 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -458,8 +458,8 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) { } s32 func_80A6FFAC(EnMm3* this, PlayState* play) { - switch (gSaveContext.save.playerForm) { - case 4: + switch (GET_PLAYER_FORM) { + case PLAYER_FORM_HUMAN: if (Player_GetMask(play) == PLAYER_MASK_BUNNY) { if (this->unk_2B2 & 0x10) { return true; @@ -469,31 +469,34 @@ s32 func_80A6FFAC(EnMm3* this, PlayState* play) { } break; - case 3: + case PLAYER_FORM_DEKU: if (this->unk_2B2 & 2) { return true; } break; - case 2: + case PLAYER_FORM_ZORA: if (this->unk_2B2 & 4) { return true; } break; - case 1: + case PLAYER_FORM_GORON: if (this->unk_2B2 & 8) { return true; } break; + + default: + break; } return false; } void func_80A70084(EnMm3* this, PlayState* play) { - switch (gSaveContext.save.playerForm) { - case 4: + switch (GET_PLAYER_FORM) { + case PLAYER_FORM_HUMAN: if (Player_GetMask(play) == PLAYER_MASK_BUNNY) { this->unk_2B2 |= 0x10; this->unk_2B2 |= 1; @@ -502,17 +505,20 @@ void func_80A70084(EnMm3* this, PlayState* play) { } break; - case 3: + case PLAYER_FORM_DEKU: this->unk_2B2 |= 2; break; - case 2: + case PLAYER_FORM_ZORA: this->unk_2B2 |= 4; break; - case 1: + case PLAYER_FORM_GORON: this->unk_2B2 |= 8; break; + + default: + break; } } 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 e47515c5d..989f1e84f 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -603,7 +603,7 @@ void func_80BD994C(EnPamera* this, PlayState* play) { Message_StartTextbox(play, 0x15A8, &this->actor); this->unk_324 = 0x15A8; - } else if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || + } else if ((GET_PLAYER_FORM != PLAYER_FORM_HUMAN) || (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) { func_80BD93CC(this, 1, 0); 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 98762c907..3d7615b5e 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -66,7 +66,13 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -f32 D_80A338C0[PLAYER_FORM_MAX] = { 30.0f, 30.0f, 30.0f, 15.0f, 15.0f }; +f32 D_80A338C0[PLAYER_FORM_MAX] = { + 30.0f, // PLAYER_FORM_FIERCE_DEITY + 30.0f, // PLAYER_FORM_GORON + 30.0f, // PLAYER_FORM_ZORA + 15.0f, // PLAYER_FORM_DEKU + 15.0f, // PLAYER_FORM_HUMAN +}; ActorInit En_Pr_InitVars = { ACTOR_EN_PR, 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 ef37cf9f0..a6fbdba12 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -60,7 +60,13 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -f32 D_80A771E0[] = { 40.0f, 40.0f, 40.0f, 30.0f, 30.0f }; +f32 D_80A771E0[PLAYER_FORM_MAX] = { + 40.0f, // PLAYER_FORM_FIERCE_DEITY + 40.0f, // PLAYER_FORM_GORON + 40.0f, // PLAYER_FORM_ZORA + 30.0f, // PLAYER_FORM_DEKU + 30.0f, // PLAYER_FORM_HUMAN +}; static ColliderCylinderInit sCylinderInit = { { 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 099d92166..06a9136ff 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -382,8 +382,7 @@ void EnRailgibud_WalkToPlayer(EnRailgibud* this, PlayState* play) { if (EnRailgibud_PlayerInRangeWithCorrectState(this, play) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) { player->actor.freezeTimer = 0; - if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) || - (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) || (GET_PLAYER_FORM == PLAYER_FORM_DEKU)) { // If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to // do so. It will appear to take damage and shake its head side-to-side. EnRailgibud_SetupGrabFail(this); @@ -555,7 +554,7 @@ void EnRailgibud_WalkToHome(EnRailgibud* this, PlayState* play) { this->actor.world.rot = this->actor.shape.rot; } if (EnRailgibud_PlayerInRangeWithCorrectState(this, play)) { - if ((gSaveContext.save.playerForm != PLAYER_FORM_GORON) && (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) && + if ((GET_PLAYER_FORM != PLAYER_FORM_GORON) && (GET_PLAYER_FORM != PLAYER_FORM_DEKU) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { EnRailgibud_SetupWalkToPlayer(this); } @@ -869,7 +868,7 @@ s32 EnRailgibud_MoveToIdealGrabPositionAndRotation(EnRailgibud* this, PlayState* distanceFromTargetPos = Math_Vec3f_StepTo(&this->actor.world.pos, &targetPos, 10.0f); distanceFromTargetAngle = Math_SmoothStepToS(&this->actor.shape.rot.y, player->actor.shape.rot.y, 1, 0x1770, 0x64); this->actor.world.rot.y = this->actor.shape.rot.y; - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { distanceFromTargetYOffset = Math_SmoothStepToF(&this->actor.shape.yOffset, -1500.0f, 1.0f, 150.0f, 0.0f); } 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 d61da6f4d..946483a89 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -700,7 +700,7 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) { func_800B1210(play, &this->actor.world.pos, &sDustVelocity, &gZeroVec3f, 550, 50); } - if ((this->actor.floorPoly == NULL) && (Animation_OnFrame(&this->skelAnime, 0.0f))) { + if ((this->actor.floorPoly == NULL) && Animation_OnFrame(&this->skelAnime, 0.0f)) { EnRat_SpawnWaterEffects(this, play); } 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 daa23f1a3..2aa2bd21e 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -305,7 +305,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { this->unk_210 = 0.0f; this->unk_20C = 0x800; - if (((this->unk_1E2 == 0) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) && + if (((this->unk_1E2 == 0) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) && (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_HERO)) { sp34 = true; this->unk_1E2 = Inventory_DeleteEquipment(play, EQUIP_VALUE_SHIELD_HERO); 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 43ddae02a..cfb073029 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 @@ -505,7 +505,7 @@ void func_80AE7F34(EnStopheishi* this, PlayState* play) { } void func_80AE854C(EnStopheishi* this, PlayState* play) { - if (((this->unk_265 != 0) || (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_20))) && + if (((this->unk_265 != 0) || CHECK_WEEKEVENTREG(WEEKEVENTREG_12_20)) && (this->currentAnim != SOLDIER_ANIM_STAND_HAND_ON_HIP)) { EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP); } 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 c9c38a0ec..61f46966d 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 @@ -513,7 +513,7 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) { } void EnSyatekiMan_Town_StartIntroTextbox(EnSyatekiMan* this, PlayState* play) { - switch (gSaveContext.save.playerForm) { + switch (GET_PLAYER_FORM) { case PLAYER_FORM_HUMAN: Flags_SetAllTreasure(play, Flags_GetAllTreasure(play) + 1); if (CURRENT_DAY != 3) { @@ -610,6 +610,9 @@ void EnSyatekiMan_Town_StartIntroTextbox(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0x3F5; } break; + + default: + break; } } @@ -1209,7 +1212,7 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) { void EnSyatekiMan_Town_MovePlayerAndSayHighScore(EnSyatekiMan* this, PlayState* play) { Vec3f targetPlayerPos; - if (gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) { + if (GET_PLAYER_FORM == PLAYER_FORM_FIERCE_DEITY) { targetPlayerPos = sTownFierceDeityPlayerPos; } else { targetPlayerPos = sTownPlayerPos; 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 42e7ca540..b8e9ff3eb 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 @@ -345,8 +345,7 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) { if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) { player->actor.freezeTimer = 0; - if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) || - (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) || (GET_PLAYER_FORM == PLAYER_FORM_DEKU)) { // If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to // do so. It will appear to take damage and shake its head side-to-side. EnTalkGibud_SetupGrabFail(this); @@ -516,7 +515,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) { this->actor.world.rot = this->actor.shape.rot; } if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play)) { - if ((gSaveContext.save.playerForm != PLAYER_FORM_GORON) && (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) && + if ((GET_PLAYER_FORM != PLAYER_FORM_GORON) && (GET_PLAYER_FORM != PLAYER_FORM_DEKU) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { EnTalkGibud_SetupWalkToPlayer(this); } @@ -994,7 +993,7 @@ s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, PlayState* distanceFromTargetPos = Math_Vec3f_StepTo(&this->actor.world.pos, &targetPos, 10.0f); distanceFromTargetAngle = Math_SmoothStepToS(&this->actor.shape.rot.y, player->actor.shape.rot.y, 1, 0x1770, 0x64); this->actor.world.rot.y = this->actor.shape.rot.y; - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { distanceFromTargetYOffset = Math_SmoothStepToF(&this->actor.shape.yOffset, -1500.0f, 1.0f, 150.0f, 0.0f); } diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index 8ea471603..d8b061fd4 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -138,8 +138,7 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) { switch (this->flyState) { case SEAGULL_FLY_FLAP: - if ((this->timers[SEAGULL_TIMER_FLY_STATE] == 0) && - (Animation_OnFrame(&this->skelAnime, 2.0f + KREG(42)))) { + if ((this->timers[SEAGULL_TIMER_FLY_STATE] == 0) && Animation_OnFrame(&this->skelAnime, 2.0f + KREG(42))) { this->flyState = SEAGULL_FLY_GLIDE; this->timers[SEAGULL_TIMER_FLY_STATE] = Rand_ZeroFloat(50.0f) + 50.0f; Animation_MorphToLoop(&this->skelAnime, &gSeagullFlapAnim, -15.0f + KREG(43)); @@ -217,8 +216,7 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) { switch (this->flyState) { case SEAGULL_FLY_FLAP: - if ((this->timers[SEAGULL_TIMER_FLY_STATE] == 0) && - (Animation_OnFrame(&this->skelAnime, 2.0f + KREG(42)))) { + if ((this->timers[SEAGULL_TIMER_FLY_STATE] == 0) && Animation_OnFrame(&this->skelAnime, 2.0f + KREG(42))) { this->flyState = SEAGULL_FLY_GLIDE; this->timers[SEAGULL_TIMER_FLY_STATE] = Rand_ZeroFloat(50.0f) + 50.0f; Animation_MorphToLoop(&this->skelAnime, &gSeagullFlapAnim, -15.0f + KREG(43)); 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 35a36a15b..d6f4a1774 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -231,7 +231,7 @@ s32 func_80C10B0C(EnThiefbird* this, PlayState* play) { } } - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { phi_a3 = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD); if (INV_CONTENT(ITEM_SWORD_GREAT_FAIRY) == ITEM_SWORD_GREAT_FAIRY) { phi_a3 += 4; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 9b569f803..007673dbe 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -256,7 +256,7 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) { void EnTimeTag_Diary_Wait(EnTimeTag* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (TIMETAG_DIARY_GET_TYPE(&this->actor) == TIMETAG_DIARY_LULU) { Message_StartTextbox(play, 0x101C, &this->actor); } else { diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index bfc3ae55b..b9cb09326 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -548,16 +548,16 @@ s32 func_80BA46D8(EnToto* this, PlayState* play) { s32 func_80BA4740(EnToto* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 4) { - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { SET_WEEKEVENTREG(WEEKEVENTREG_56_10); } - if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { SET_WEEKEVENTREG(WEEKEVENTREG_56_20); } - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { SET_WEEKEVENTREG(WEEKEVENTREG_56_40); } - if (gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + if (GET_PLAYER_FORM == PLAYER_FORM_GORON) { SET_WEEKEVENTREG(WEEKEVENTREG_56_80); } return 1; @@ -583,7 +583,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { this->unk2B3 += 8; } for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { - if ((gSaveContext.save.playerForm != (i + 1)) && (D_80BA5128[i] & this->unk2B3)) { + if ((GET_PLAYER_FORM != (i + 1)) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, 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 7be972f8f..da0bfed86 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -160,7 +160,7 @@ void func_80ADFF84(EnTsn* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { textId = 0x107E; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_80)) { textId = 0x1083; } else { 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 398da4925..deb8cc426 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -128,7 +128,13 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(gravity, -1500, ICHAIN_STOP), }; -static f32 sYOffsetPerForm[] = { 50.0f, 55.0f, 50.0f, 20.0f, 30.0f }; +static f32 sYOffsetPerForm[PLAYER_FORM_MAX] = { + 50.0f, // PLAYER_FORM_FIERCE_DEITY + 55.0f, // PLAYER_FORM_GORON + 50.0f, // PLAYER_FORM_ZORA + 20.0f, // PLAYER_FORM_DEKU + 30.0f, // PLAYER_FORM_HUMAN +}; /** * This maps a given limb based on its limbIndex to its appropriate index 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 f61a7a201..78b32120d 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -359,7 +359,7 @@ void EnYb_Idle(EnYb* this, PlayState* play) { EnYb_UpdateAnimation(this, play); if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && - (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { this->actionFunc = EnYb_TeachingDance; this->teachingCutsceneTimer = 200; EnYb_ChangeCutscene(this, 0); 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 30d159435..3e606e19e 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -210,7 +210,7 @@ void func_80B9FA3C(EnZob* this, PlayState* play) { this->unk_2F4 |= 1; - if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM != PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_02)) { textId = 0x11F9; } else { @@ -563,7 +563,7 @@ void func_80BA0728(EnZob* this, PlayState* play) { func_80B9F86C(this); if (func_800B8718(&this->actor, &play->state)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { Message_StartTextbox(play, 0x1208, NULL); SET_WEEKEVENTREG(WEEKEVENTREG_30_08); } else { @@ -594,7 +594,7 @@ void func_80BA0728(EnZob* this, PlayState* play) { void func_80BA08E8(EnZob* this, PlayState* play) { s32 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1257; this->unk_304 = 3; 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 9634ae21e..4c21502fe 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -124,7 +124,7 @@ void EnZod_Init(Actor* thisx, PlayState* play) { } this->actionFunc = func_80BAFB84; - if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE))) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_Kill(&this->actor); break; } @@ -154,7 +154,7 @@ void EnZod_Destroy(Actor* thisx, PlayState* play) { void EnZod_HandleRoomConversation(EnZod* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM != PLAYER_FORM_ZORA) { textId = 0x1227; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_08)) { textId = 0x1229; @@ -393,7 +393,7 @@ void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play) { void func_80BAFA44(EnZod* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1253; } else { 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 0517159d4..d4605d47d 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -628,8 +628,7 @@ void func_80B9451C(EnZog* this, PlayState* play) { this->unk_300 = 2; this->actionFunc = func_80B94470; } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { - if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && - (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; this->actor.shape.shadowDraw = NULL; @@ -717,8 +716,7 @@ void func_80B948A8(EnZog* this, PlayState* play) { this->unk_300 = 2; this->actionFunc = func_80B946FC; } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { - if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && - (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; this->actor.shape.shadowDraw = NULL; 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 72c2f9b82..10def20cf 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -214,7 +214,7 @@ void func_80BBB0D4(EnZos* this, PlayState* play) { void func_80BBB15C(EnZos* this, PlayState* play) { s32 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (this->unk_2B6 & 8) { textId = 0x1235; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); @@ -499,7 +499,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { void func_80BBBB84(EnZos* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { Message_StartTextbox(play, 0x1248, &this->actor); this->actionFunc = func_80BBB8AC; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); @@ -587,7 +587,7 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { void func_80BBBFBC(EnZos* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x125B; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_80)) { 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 fde240d22..c07d29deb 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -361,7 +361,7 @@ void func_80B97100(EnZot* this, PlayState* play) { void func_80B97110(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { textId = 0x125F; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_28_80)) { textId = 0x1261; @@ -412,7 +412,7 @@ void func_80B972E8(EnZot* this, PlayState* play) { u16 textId; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_10)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { textId = 0x126A; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_01)) { textId = 0x126D; @@ -427,7 +427,7 @@ void func_80B972E8(EnZot* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_29_02); } } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { textId = 0x1265; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_04)) { textId = 0x1266; @@ -564,12 +564,12 @@ void func_80B97708(EnZot* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_29_10); this->actor.flags |= ACTOR_FLAG_10000; if (phi_v1 == 5) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { this->actor.textId = 0x126E; } else { this->actor.textId = 0x1272; } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { this->actor.textId = 0x1273; } else { this->actor.textId = 0x1276; @@ -586,7 +586,7 @@ void func_80B9787C(EnZot* this, PlayState* play) { u16 textId; if (this->actor.textId == 0) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { switch (ENZOT_GET_1F(&this->actor)) { case 2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_40)) { @@ -709,7 +709,7 @@ void func_80B97B5C(EnZot* this, PlayState* play) { void func_80B97BF8(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { textId = 0x128C; } else { textId = 0x128B; @@ -808,7 +808,7 @@ void func_80B97FD0(EnZot* this, PlayState* play) { this->actionFunc = func_80B97E4C; func_80B97BF8(this, play); } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_08)) { - if ((this->actor.xzDistToPlayer < 120.0f) && (gSaveContext.save.playerForm == PLAYER_FORM_ZORA)) { + if ((this->actor.xzDistToPlayer < 120.0f) && (GET_PLAYER_FORM == PLAYER_FORM_ZORA)) { this->unk_2F2 |= 4; this->actionFunc = func_80B97E0C; func_80B96BEC(this, 6, ANIMMODE_ONCE); @@ -838,7 +838,7 @@ void func_80B98178(EnZot* this, PlayState* play) { switch (ENZOT_GET_1F(&this->actor)) { case 6: - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CURRENT_DAY == 3) { textId = 0x129D; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_01)) { @@ -856,7 +856,7 @@ void func_80B98178(EnZot* this, PlayState* play) { break; case 7: - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_04)) { textId = 0x12AA; } else { @@ -885,14 +885,14 @@ void func_80B98178(EnZot* this, PlayState* play) { phi_v0 += 2; } - if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM != PLAYER_FORM_ZORA) { phi_v0++; } textId = phi_v0 + 0x1302; break; default: - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { textId = 0x129F; } else { textId = 0x1295; @@ -1080,7 +1080,7 @@ void func_80B98998(EnZot* this, PlayState* play) { void func_80B98A4C(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_80)) { textId = 0x12B6; } else { @@ -1158,7 +1158,7 @@ void func_80B98CA8(EnZot* this, PlayState* play) { func_800B8614(&this->actor, play, 120.0f); } - if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || (this->actor.xzDistToPlayer < 100.0f)) { + if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (this->actor.xzDistToPlayer < 100.0f)) { func_800B874C(&this->actor, play, 120.0, 100.0f); } } @@ -1171,7 +1171,7 @@ void func_80B98CA8(EnZot* this, PlayState* play) { void func_80B98E10(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) { textId = 0x12C5; @@ -1258,7 +1258,7 @@ void func_80B990A4(EnZot* this, PlayState* play) { void func_80B99160(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_10)) { textId = 0x12CD; } else { 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 fdf50a820..d3e833266 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -187,7 +187,7 @@ void func_80BD160C(EnZov* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { this->unk_320 &= ~2; - if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM != PLAYER_FORM_ZORA) { textId = 0x1024; if ((this->unk_322 == 0) || (this->unk_322 == 4)) { func_80BD1570(this, 4, ANIMMODE_ONCE); @@ -201,7 +201,7 @@ void func_80BD160C(EnZov* this, PlayState* play) { this->unk_320 |= 4; func_80BD1570(this, 3, ANIMMODE_ONCE); } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { func_80BD1570(this, 2, ANIMMODE_ONCE); this->actionFunc = func_80BD19FC; this->unk_324 = 10; @@ -390,7 +390,7 @@ void func_80BD1C84(EnZov* this, PlayState* play) { void func_80BD1D30(EnZov* this, PlayState* play) { u16 textId; - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1032; } else { 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 334b8fc05..2885e965b 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -361,7 +361,7 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { if (ENZOW_GET_F(&this->actor) == ENZOW_F_1) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_04)) { phi_a1 = 0x12FD; } else { @@ -374,7 +374,7 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_78_10); phi_a1 = 0x12FF; } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_08)) { phi_a1 = 0x12F8; } else { @@ -388,12 +388,12 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { phi_a1 = 0x12FF; } } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { phi_a1 = 0x12EC; } else { phi_a1 = 0x12F1; } - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + } else if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_02)) { phi_a1 = 0x12EB; } else { 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 c571b87ea..41ed1e9d5 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -911,7 +911,7 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) { u16 ObjUm_RanchGetDialogue(PlayState* play, ObjUm* this, s32 arg2) { u16 textId = 0; - if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_40)) { // "Want a ride?" textId = 0x33CF; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 99bcf4191..43717aaf5 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -117,11 +117,7 @@ void OceffSpot_Update(Actor* thisx, PlayState* play) { temp = (1.0f - cosf(this->unk16C * M_PI)) * 0.5f; this->actionFunc(this, play); - switch (gSaveContext.save.playerForm) { - default: - scale = 1.0f; - break; - + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: scale = 1.3f; break; @@ -133,6 +129,10 @@ void OceffSpot_Update(Actor* thisx, PlayState* play) { case PLAYER_FORM_GORON: scale = 2.0f; break; + + default: + scale = 1.0f; + break; } this->actor.scale.z = (scale * 0.42f) * temp; diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c index d3486bb0c..d7af09270 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c @@ -100,11 +100,7 @@ void OceffStorm_Destroy(Actor* thisx, PlayState* play) { void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play) { f32 cylinderScale; - switch (gSaveContext.save.playerForm) { - default: - cylinderScale = 1.0f; - break; - + switch (GET_PLAYER_FORM) { case PLAYER_FORM_DEKU: cylinderScale = 1.3f; break; @@ -116,6 +112,10 @@ void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play) { case PLAYER_FORM_GORON: cylinderScale = 2.0f; break; + + default: + cylinderScale = 1.0f; + break; } if (this->counter < 10) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 51ebe113c..9a451a165 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10348,7 +10348,7 @@ void Player_Init(Actor* thisx, PlayState* play) { Actor_SetObjectDependency(play, &this->actor); } else { - this->transformation = gSaveContext.save.playerForm; + this->transformation = GET_PLAYER_FORM; if (this->transformation == PLAYER_FORM_HUMAN) { if (gSaveContext.save.equippedMask == PLAYER_MASK_GIANT) { gSaveContext.save.equippedMask = PLAYER_MASK_NONE; @@ -10765,10 +10765,10 @@ void Player_SetDoAction(PlayState* play, Player* this) { !Player_IsGoronOrDeku(this)) { if ((this->transformation != PLAYER_FORM_GORON) && !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_4000)) && (sp28 <= 0) && - ((func_80123420(this)) || + (func_80123420(this) || ((sPlayerFloorType != FLOOR_TYPE_7) && - ((func_80123434(this)) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && - !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) { + (func_80123434(this) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) { doActionA = DO_ACTION_ATTACK; } else if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && sp24 && (sp28 > 0)) { doActionA = DO_ACTION_JUMP; @@ -13768,7 +13768,7 @@ void func_8084A8E8(Player* this, PlayState* play) { func_8083AF8C(this, sp3A, play); } } else if ((this->linearVelocity < 3.6f) && (sp3C < 4.0f)) { - if ((func_80123420(this) == 0) && (func_80123434(this))) { + if (!func_80123420(this) && func_80123434(this)) { func_8083AF30(this, play); } else { func_80836988(this, play); @@ -17669,14 +17669,14 @@ void func_808553F4(Player* this, PlayState* play) { this->actor.draw = NULL; this->unk_AE7 = 0; Play_DisableMotionBlurPriority(); - SET_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm]); + SET_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM]); } } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || ((this->unk_AE7 >= 5) && - (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) || - CHECK_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm])) && - CHECK_BTN_ANY(sPlayerControlInput->press.button, - BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)))) { + (sp48 = + ((this->transformation != PLAYER_FORM_HUMAN) || CHECK_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM])) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)))) { R_PLAY_FILL_SCREEN_ON = 45; R_PLAY_FILL_SCREEN_R = 220; R_PLAY_FILL_SCREEN_G = 220; @@ -19681,7 +19681,7 @@ void Player_CsAction_22(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_23(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); - if (gSaveContext.save.playerForm != this->transformation) { + if (GET_PLAYER_FORM != this->transformation) { this->actor.update = func_8012301C; this->actor.draw = NULL; } @@ -19724,7 +19724,7 @@ void Player_CsAction_25(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_26(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); - if (gSaveContext.save.playerForm != this->transformation) { + if (GET_PLAYER_FORM != this->transformation) { this->actor.update = func_8012301C; this->actor.draw = NULL; } diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index ca4bfde8d..71524496e 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -525,7 +525,7 @@ void MapSelect_UpdateMenu(MapSelectState* this) { } if (CHECK_BTN_ALL(controller1->press.button, BTN_B)) { - playerForm = gSaveContext.save.playerForm - 1; + playerForm = GET_PLAYER_FORM - 1; if (playerForm < PLAYER_FORM_FIERCE_DEITY) { playerForm = PLAYER_FORM_HUMAN; } 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 dc5e96da2..02f011807 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 @@ -16,7 +16,7 @@ s16 sEquipMagicArrowSlotHoldTimer = 0; s16 sEquipAnimTimer = 10; u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { - // Fierce Deity + // PLAYER_FORM_FIERCE_DEITY { false, // SLOT_OCARINA false, // SLOT_BOW @@ -43,7 +43,7 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_BOTTLE_5 true, // SLOT_BOTTLE_6 }, - // Goron + // PLAYER_FORM_GORON { true, // SLOT_OCARINA false, // SLOT_BOW @@ -70,7 +70,7 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_BOTTLE_5 true, // SLOT_BOTTLE_6 }, - // Zora + // PLAYER_FORM_ZORA { true, // SLOT_OCARINA false, // SLOT_BOW @@ -97,7 +97,7 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_BOTTLE_5 true, // SLOT_BOTTLE_6 }, - // Deku + // PLAYER_FORM_DEKU { true, // SLOT_OCARINA false, // SLOT_BOW @@ -124,7 +124,7 @@ u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = { true, // SLOT_BOTTLE_5 true, // SLOT_BOTTLE_6 }, - // Human + // PLAYER_FORM_HUMAN { true, // SLOT_OCARINA true, // SLOT_BOW @@ -193,7 +193,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, gDPPipeSync(POLY_OPA_DISP++); - if (!gPlayerFormSlotRestrictions[((void)0, gSaveContext.save.playerForm)][SLOT(item)]) { + if (!gPlayerFormSlotRestrictions[GET_PLAYER_FORM][SLOT(item)]) { // Ammo item is restricted gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha); } else { @@ -277,8 +277,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { 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]) { + (pauseCtx->cursorSpecialPos == 0) && gPlayerFormSlotRestrictions[GET_PLAYER_FORM][i]) { if ((sEquipState == EQUIP_STATE_MAGIC_ARROW_HOVER_OVER_BOW_SLOT) && (i == SLOT_ARROW_ICE)) { // Possible bug: // Supposed to be `SLOT_BOW`, unchanged from OoT, instead increase size of ice arrow icon @@ -339,8 +338,12 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -u8 sPlayerFormItems[] = { - ITEM_MASK_FIERCE_DEITY, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_MASK_DEKU, ITEM_NONE, +u8 sPlayerFormItems[PLAYER_FORM_MAX] = { + ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY + ITEM_MASK_GORON, // PLAYER_FORM_GORON + ITEM_MASK_ZORA, // PLAYER_FORM_ZORA + ITEM_MASK_DEKU, // PLAYER_FORM_DEKU + ITEM_NONE, // PLAYER_FORM_HUMAN }; void KaleidoScope_UpdateItemCursor(PlayState* play) { @@ -599,23 +602,20 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) { // Ensure that a transformation mask can not be unequipped while being used - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { if (1) {} if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CLEFT)) { - if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)) { + if (sPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CDOWN)) { - if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)) { + if (sPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_CRIGHT)) { - if (sPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)) { + if (sPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } 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 99c08a06a..7c984a09c 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 @@ -16,7 +16,7 @@ s16 sMaskEquipMagicArrowSlotHoldTimer = 0; s16 sMaskEquipAnimTimer = 10; u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { - // Fierce Deity + // PLAYER_FORM_FIERCE_DEITY { false, // SLOT_MASK_POSTMAN false, // SLOT_MASK_ALL_NIGHT @@ -43,7 +43,7 @@ u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { false, // SLOT_MASK_GIANT true, // SLOT_MASK_FIERCE_DEITY }, - // Goron + // PLAYER_FORM_GORON { false, // SLOT_MASK_POSTMAN false, // SLOT_MASK_ALL_NIGHT @@ -70,7 +70,7 @@ u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { false, // SLOT_MASK_GIANT true, // SLOT_MASK_FIERCE_DEITY }, - // Zora + // PLAYER_FORM_ZORA { false, // SLOT_MASK_POSTMAN false, // SLOT_MASK_ALL_NIGHT @@ -97,7 +97,7 @@ u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { false, // SLOT_MASK_GIANT true, // SLOT_MASK_FIERCE_DEITY }, - // Deku + // PLAYER_FORM_DEKU { false, // SLOT_MASK_POSTMAN false, // SLOT_MASK_ALL_NIGHT @@ -124,7 +124,7 @@ u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = { false, // SLOT_MASK_GIANT true, // SLOT_MASK_FIERCE_DEITY }, - // Human + // PLAYER_FORM_HUMAN { true, // SLOT_MASK_POSTMAN true, // SLOT_MASK_ALL_NIGHT @@ -224,8 +224,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + ITEM_NUM_SLOTS]) != ITEM_NONE) { if (!CHECK_GIVEN_MASK_ON_MOON(i)) { if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MASK) && - (pauseCtx->cursorSpecialPos == 0) && - gMaskPlayerFormSlotRestrictions[(void)0, gSaveContext.save.playerForm][i]) { + (pauseCtx->cursorSpecialPos == 0) && gMaskPlayerFormSlotRestrictions[GET_PLAYER_FORM][i]) { if ((sMaskEquipState == EQUIP_STATE_MAGIC_ARROW_HOVER_OVER_BOW_SLOT) && (i == SLOT_ARROW_ICE)) { // Possible bug: // Supposed to be `SLOT_BOW`, unchanged from OoT, instead increase size of ice arrow icon @@ -267,8 +266,12 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -u8 sMaskPlayerFormItems[] = { - ITEM_MASK_FIERCE_DEITY, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_MASK_DEKU, ITEM_NONE, +u8 sMaskPlayerFormItems[PLAYER_FORM_MAX] = { + ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY + ITEM_MASK_GORON, // PLAYER_FORM_GORON + ITEM_MASK_ZORA, // PLAYER_FORM_ZORA + ITEM_MASK_DEKU, // PLAYER_FORM_DEKU + ITEM_NONE, // PLAYER_FORM_HUMAN }; void KaleidoScope_UpdateMaskCursor(PlayState* play) { @@ -543,27 +546,24 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { if (((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT))) || - ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && - (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)))) { + ((sMaskPlayerFormItems[GET_PLAYER_FORM] != ITEM_NONE) && + (sMaskPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT)))) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { if (((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN))) || - ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && - (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)))) { + ((sMaskPlayerFormItems[GET_PLAYER_FORM] != ITEM_NONE) && + (sMaskPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN)))) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { if (((Player_GetCurMaskItemId(play) != ITEM_NONE) && (Player_GetCurMaskItemId(play) == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT))) || - ((sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] != ITEM_NONE) && - (sMaskPlayerFormItems[((void)0, gSaveContext.save.playerForm)] == - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)))) { + ((sMaskPlayerFormItems[GET_PLAYER_FORM] != ITEM_NONE) && + (sMaskPlayerFormItems[GET_PLAYER_FORM] == BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT)))) { Audio_PlaySfx(NA_SE_SY_ERROR); return; } 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 35925171c..c7f7379fe 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 @@ -2858,7 +2858,7 @@ void KaleidoScope_Update(PlayState* play) { gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); for (itemId = 0; itemId <= ITEM_BOW_FIRE; itemId++) { - if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) { + if (!gPlayerFormItemRestrictions[GET_PLAYER_FORM][(s32)itemId]) { KaleidoScope_GrayOutTextureRGBA32(Lib_SegmentedToVirtual(gItemIcons[(s32)itemId]), 0x400); } } From 3bb9b365fcb312862e9c713cf44b28403a7edb94 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 5 Jul 2023 15:46:11 -0700 Subject: [PATCH 026/121] RequiredScopeTemp Cleanup (#1315) * REmove some requiredScopeTemps * Bring down invFrozenTimer --- src/code/game.c | 36 +++++++++---------- .../z_bg_hakugin_bombwall.c | 12 +++---- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +-- .../actors/ovl_En_Minislime/z_en_minislime.c | 13 +++---- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 8 ++--- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 8 ++--- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 1 + .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 5 ++- .../actors/ovl_player_actor/z_player.c | 10 +++--- 9 files changed, 41 insertions(+), 56 deletions(-) diff --git a/src/code/game.c b/src/code/game.c index 50139348c..a5e02304c 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -85,19 +85,14 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { Graph_BranchDlist(polyOpa, nextDisplayList); POLY_OPA_DISP = nextDisplayList; - // Block prevents reordering, if(1) around the above block don't seem to help unlike in OoT - { - s32 requiredScopeTemp; + CLOSE_DISPS(gfxCtx); - Debug_DrawText(gfxCtx); - } + Debug_DrawText(gfxCtx); if (R_ENABLE_ARENA_DBG != 0) { SpeedMeter_DrawTimeEntries(&D_801F7FF0, gfxCtx); SpeedMeter_DrawAllocEntries(&D_801F7FF0, gfxCtx, gameState); } - - CLOSE_DISPS(gfxCtx); } void GameState_SetFrameBuffer(GraphicsContext* gfxCtx) { @@ -207,20 +202,21 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g s32 requiredScopeTemp; GameAlloc_Init(&gameState->alloc); - GameState_InitArena(gameState, 0x100000); - Game_SetFramerateDivisor(gameState, 3); - - init(gameState); - - VisCvg_Init(&D_801F8010); - VisZbuf_Init(&sVisZbuf); - VisMono_Init(&sMonoColors); - ViMode_Init(&D_801F8048); - func_801773A0(&D_801F7FF0); - Rumble_Init(); - - osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK); } + + GameState_InitArena(gameState, 0x100000); + Game_SetFramerateDivisor(gameState, 3); + + init(gameState); + + VisCvg_Init(&D_801F8010); + VisZbuf_Init(&sVisZbuf); + VisMono_Init(&sMonoColors); + ViMode_Init(&D_801F8048); + func_801773A0(&D_801F7FF0); + Rumble_Init(); + + osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK); } void GameState_Destroy(GameState* gameState) { 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 99a5a759c..a1d1ebd48 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 @@ -343,10 +343,10 @@ void BgHakuginBombwall_Destroy(Actor* thisx, PlayState* play) { } s32 func_80ABCB5C(BgHakuginBombwall* this, PlayState* play) { - Actor* thisx = &this->dyna.actor; - if (this->collider.base.acFlags & AC_HIT) { if (this->collider.base.ac != NULL) { + Actor* thisx = &this->dyna.actor; + if (Math3D_Vec3fDistSq(&thisx->world.pos, &this->collider.base.ac->world.pos) < D_80ABCFC0[BGHAKUGIN_BOMBWALL_100(thisx)].unk_1C) { SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 60, NA_SE_EV_WALL_BROKEN); @@ -361,11 +361,11 @@ s32 func_80ABCC00(BgHakuginBombwall* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { if (this->collider.info.acHitInfo->toucher.dmgFlags & 8) { if (this->collider.base.ac != NULL) { - s32 requiredScopeTemp; + Actor* thisx = &this->dyna.actor; - if (Math3D_Vec3fDistSq(&this->dyna.actor.world.pos, &this->collider.base.ac->world.pos) < - D_80ABCFC0[BGHAKUGIN_BOMBWALL_100(&this->dyna.actor)].unk_1C) { - SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 50, NA_SE_EV_WALL_BROKEN); + if (Math3D_Vec3fDistSq(&thisx->world.pos, &this->collider.base.ac->world.pos) < + D_80ABCFC0[BGHAKUGIN_BOMBWALL_100(thisx)].unk_1C) { + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 50, NA_SE_EV_WALL_BROKEN); return true; } } 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 1921ea6a2..dc8042c6c 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -1329,7 +1329,6 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) { s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) { s16 rotDiff; s16 yawDiff; - Player* player; if (*arg3 == 4) { return 0; @@ -1349,9 +1348,8 @@ s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) { return 1; } if (*arg3 == 1) { - s32 requiredScopeTemp; + Player* player = GET_PLAYER(play); - player = GET_PLAYER(play); func_808F5994(this, play, &player->actor.world.pos, 0xC80); } else { rotDiff = this->actor.home.rot.y - this->actor.world.rot.y; diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index 5a99149e9..ee0558064 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -306,11 +306,6 @@ void EnMinislime_SetupIceArrowDamage(EnMinislime* this) { } void EnMinislime_IceArrowDamage(EnMinislime* this, PlayState* play) { - f32 invFrozenTimer; - s32 pad; - f32 randFloat; - s32 randSign; - if (this->frozenTimer == 80) { this->frozenAlpha += 10; Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); @@ -324,11 +319,11 @@ void EnMinislime_IceArrowDamage(EnMinislime* this, PlayState* play) { Math_Vec3f_Copy(&this->shakeRefPos, &this->actor.world.pos); } else if (this->frozenTimer > 0) { if ((this->frozenTimer < 20) || ((this->frozenTimer < 40) && ((this->frozenTimer % 2) != 0))) { - s32 requiredScopeTemp; + f32 invFrozenTimer = 1.0f / this->frozenTimer; + s32 pad; + f32 randFloat = Rand_ZeroFloat(invFrozenTimer); + s32 randSign = Rand_ZeroOne() < 0.5f ? -1 : 1; - invFrozenTimer = 1.0f / this->frozenTimer; - randFloat = Rand_ZeroFloat(invFrozenTimer); - randSign = Rand_ZeroOne() < 0.5f ? -1 : 1; this->actor.world.pos.x = randSign * (invFrozenTimer + randFloat) + this->shakeRefPos.x; randFloat = Rand_ZeroFloat(invFrozenTimer); randSign = Rand_ZeroOne() < 0.5f ? -1 : 1; 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 06a9136ff..3cc86dfe3 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -426,10 +426,9 @@ void EnRailgibud_SetupGrab(EnRailgibud* this) { } void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { - Player* player2 = GET_PLAYER(play); - Player* player = player2; + Actor* playerActor = &GET_PLAYER(play)->actor; + Player* player = (Player*)playerActor; s32 inPositionToAttack; - u16 damageSfxId; switch (this->grabState) { case EN_RAILGIBUD_GRAB_START: @@ -447,9 +446,8 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { case EN_RAILGIBUD_GRAB_ATTACK: if (this->grabDamageTimer == 20) { - s16 requiredScopeTemp; + u16 damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; - damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; play->damagePlayer(play, -8); Player_PlaySfx(player, damageSfxId); Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12); 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 b8e9ff3eb..d1a95988f 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 @@ -389,10 +389,9 @@ void EnTalkGibud_SetupGrab(EnTalkGibud* this) { } void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { - Player* player2 = GET_PLAYER(play); - Player* player = player2; + Actor* playerActor = &GET_PLAYER(play)->actor; + Player* player = (Player*)playerActor; s32 inPositionToAttack; - u16 damageSfxId; switch (this->grabState) { case EN_TALK_GIBUD_GRAB_START: @@ -405,9 +404,8 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { case EN_TALK_GIBUD_GRAB_ATTACK: if (this->grabDamageTimer == 20) { - s16 requiredScopeTemp; + u16 damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; - damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; play->damagePlayer(play, -8); Player_PlaySfx(player, damageSfxId); Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12); 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 c07d29deb..0598d5cf9 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -533,6 +533,7 @@ void func_80B9765C(EnZot* this, PlayState* play) { case 0x126B: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + default: Message_CloseTextbox(play); this->actionFunc = func_80B97708; 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 234337d9d..93845b55e 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -215,8 +215,6 @@ void ObjRaillift_StartCutscene(ObjRaillift* this, PlayState* play) { void ObjRaillift_Update(Actor* thisx, PlayState* play) { ObjRaillift* this = THIS; - f32 target; - f32 step; this->actionFunc(this, play); Actor_SetFocus(thisx, 10.0f); @@ -227,7 +225,8 @@ void ObjRaillift_Update(Actor* thisx, PlayState* play) { } } if (OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx)) { - s32 requiredScopeTemp; + f32 target; + f32 step; this->isPlayerOnTopPrev = this->isPlayerOnTop; this->isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna) ? true : false; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9a451a165..09f870713 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4938,14 +4938,14 @@ PlayerMeleeWeaponAnimation func_808335F4(Player* this) { temp_a1 = this->unk_AE3[this->unk_ADE]; if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_GORON)) { - s32 requiredScopeTemp; + s8* meleeWeaponAnims = (this->transformation == PLAYER_FORM_ZORA) ? D_8085D094[0] : D_8085D094[1]; + s32 unk_ADD = this->unk_ADD; - // yikes - meleeWeaponAnim = ((this->transformation == PLAYER_FORM_ZORA) ? D_8085D094[0] : D_8085D094[1])[this->unk_ADD]; + meleeWeaponAnim = meleeWeaponAnims[unk_ADD]; - if (this->unk_ADD != 0) { + if (unk_ADD != 0) { this->meleeWeaponAnimation = meleeWeaponAnim; - if (this->unk_ADD >= 2) { + if (unk_ADD >= 2) { this->unk_ADD = -1; } } From a506e8620ae8f428ae625644aa5b8d540867641f Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 6 Jul 2023 14:54:43 -0700 Subject: [PATCH 027/121] Fidget Tables Docs (#1316) * Docs for SubS_FillLimbRotTables and Actor_FillLimbRotTables * Fidget * Format * /// * UpdateFidgetTables * Clarify comment * Adjust comments slightly * Update src/code/z_actor.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sub_s.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/z64subs.h | 2 +- include/z_en_hy_code.h | 4 ++-- src/code/z_actor.c | 22 ++++++++++++++---- src/code/z_sub_s.c | 21 +++++++++++++---- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 6 ++--- .../actors/ovl_En_Aob_01/z_en_aob_01.h | 4 ++-- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 ++--- src/overlays/actors/ovl_En_Baba/z_en_baba.h | 4 ++-- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 7 +++--- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 7 +++--- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 14 +++++------ src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h | 4 ++-- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 23 +++++++++---------- src/overlays/actors/ovl_En_Fsn/z_en_fsn.h | 10 ++++---- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.h | 6 +++-- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 20 ++++++++-------- src/overlays/actors/ovl_En_Gm/z_en_gm.h | 6 +++-- src/overlays/actors/ovl_En_Go/z_en_go.c | 22 +++++++++--------- src/overlays/actors/ovl_En_Go/z_en_go.h | 6 +++-- src/overlays/actors/ovl_En_In/z_en_in.c | 7 +++--- src/overlays/actors/ovl_En_In/z_en_in.h | 9 ++++---- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 6 ++--- src/overlays/actors/ovl_En_Ossan/z_en_ossan.h | 6 ++--- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 18 +++++++-------- src/overlays/actors/ovl_En_Rg/z_en_rg.h | 6 +++-- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 6 ++--- src/overlays/actors/ovl_En_Ru/z_en_ru.h | 4 ++-- .../actors/ovl_En_Suttari/z_en_suttari.c | 7 +++--- .../actors/ovl_En_Suttari/z_en_suttari.h | 9 ++++---- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 6 ++--- src/overlays/actors/ovl_En_Zo/z_en_zo.h | 4 ++-- tools/disasm/functions.txt | 4 ++-- tools/namefixer.py | 3 ++- tools/sizes/code_functions.csv | 4 ++-- 35 files changed, 162 insertions(+), 133 deletions(-) diff --git a/include/z64subs.h b/include/z64subs.h index 768f81079..0aaf9bcd2 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -137,7 +137,7 @@ s8 SubS_GetObjectIndex(s16 id, struct PlayState* play); Actor* SubS_FindActor(struct PlayState* play, Actor* actorListStart, u8 actorCategory, s16 actorId); -s32 SubS_FillLimbRotTables(struct PlayState* play, s16* limbRotTableY, s16* limbRotTableZ, s32 numLimbs); +s32 SubS_UpdateFidgetTables(struct PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen); s32 SubS_IsFloorAbove(struct PlayState* play, Vec3f* pos, f32 distAbove); diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h index 1a2b7847e..58a34151c 100644 --- a/include/z_en_hy_code.h +++ b/include/z_en_hy_code.h @@ -63,8 +63,8 @@ typedef struct EnHy { /* 0x2D8 */ Vec3s prevTrackTarget; /* 0x2DE */ Vec3s prevHeadRot; /* 0x2E4 */ Vec3s prevTorsoRot; - /* 0x2EA */ s16 limbRotTableY[16]; - /* 0x30A */ s16 limbRotTableZ[16]; + /* 0x2EA */ s16 fidgetTableY[ENHY_LIMB_MAX]; + /* 0x30A */ s16 fidgetTableZ[ENHY_LIMB_MAX]; /* 0x32C */ Vec3f bodyPartsPos[15]; /* 0x3E0 */ UNK_TYPE1 unk_3E0[0x6]; /* 0x3E6 */ s16 eyeTexIndex; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 7e6ea1662..094b36787 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4464,14 +4464,26 @@ void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationI frameCount, animationInfo->mode, animationInfo->morphFrames); } -// Unused -void func_800BDCF4(PlayState* play, s16* arg1, s16* arg2, s32 size) { +/** + * Fills two tables with rotation angles that can be used to simulate idle animations. + * + * The rotation angles are dependent on the current frame, so should be updated regularly, generally every frame. + * + * This is done for the desired limb by taking either the `sin` of the yTable value or the `cos` of the zTable value, + * multiplying by some scale factor (generally 200), and adding that to the already existing rotation. + * + * Note: With the common scale factor of 200, this effect is practically unnoticeable if the current animation already + * has motion involved. + * + * Note: This function goes unused in favor of `SubS_UpdateFidgetTables`. + */ +void Actor_UpdateFidgetTables(PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen) { s32 frames = play->gameplayFrames; s32 i; - for (i = 0; i < size; i++) { - arg1[i] = (0x814 + 50 * i) * frames; - arg2[i] = (0x940 + 50 * i) * frames; + for (i = 0; i < tableLen; i++) { + fidgetTableY[i] = (i * 50 + 0x814) * frames; + fidgetTableZ[i] = (i * 50 + 0x940) * frames; } } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 1c3f1ae3a..0f09f5912 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -1186,13 +1186,24 @@ Actor* SubS_FindActor(PlayState* play, Actor* actorListStart, u8 actorCategory, return actor; } -s32 SubS_FillLimbRotTables(PlayState* play, s16* limbRotTableY, s16* limbRotTableZ, s32 numLimbs) { - s32 i; +/** + * Fills two tables with rotation angles that can be used to simulate idle animations. + * + * The rotation angles are dependent on the current frame, so should be updated regularly, generally every frame. + * + * This is done for the desired limb by taking either the `sin` of the yTable value or the `cos` of the zTable value, + * multiplying by some scale factor (generally 200), and adding that to the already existing rotation. + * + * Note: With the common scale factor of 200, this effect is practically unnoticeable if the current animation already + * has motion involved. + */ +s32 SubS_UpdateFidgetTables(PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen) { u32 frames = play->gameplayFrames; + s32 i; - for (i = 0; i < numLimbs; i++) { - limbRotTableY[i] = (i * 50 + 0x814) * frames; - limbRotTableZ[i] = (i * 50 + 0x940) * frames; + for (i = 0; i < tableLen; i++) { + fidgetTableY[i] = (i * 50 + 0x814) * frames; + fidgetTableZ[i] = (i * 50 + 0x940) * frames; } return true; 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 f289a49f9..4ba8d07cd 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 @@ -556,7 +556,7 @@ void EnAob01_UpdateCommon(EnAob01* this, PlayState* play) { } EnAob01_Blink(this, EN_AOB01_EYE_MAX); - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, MAMAMU_YAN_LIMB_MAX); EnAob01_UpdateCollision(this, play); // This specific code ensures that in-game time passes during the race. @@ -1188,8 +1188,8 @@ s32 EnAob01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if ((limbIndex == MAMAMU_YAN_LIMB_TORSO) || (limbIndex == MAMAMU_YAN_LIMB_LEFT_UPPER_ARM) || (limbIndex == MAMAMU_YAN_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200; - rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200; + rot->y += (s16)Math_SinS(this->fidgetTableY[limbIndex]) * 200; + rot->z += (s16)Math_CosS(this->fidgetTableZ[limbIndex]) * 200; } return false; diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h index 5f7775368..51f4c29b8 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h @@ -47,8 +47,8 @@ typedef struct EnAob01 { /* 0x2E6 */ Vec3s prevTrackTarget; /* 0x2EC */ Vec3s prevHeadRot; /* 0x2F2 */ Vec3s prevTorsoRot; - /* 0x2F8 */ s16 limbRotTableY[MAMAMU_YAN_LIMB_MAX]; - /* 0x318 */ s16 limbRotTableZ[MAMAMU_YAN_LIMB_MAX]; + /* 0x2F8 */ s16 fidgetTableY[MAMAMU_YAN_LIMB_MAX]; + /* 0x318 */ s16 fidgetTableZ[MAMAMU_YAN_LIMB_MAX]; /* 0x338 */ UNK_TYPE1 unk338[0xB6]; /* 0x3EE */ s16 eyeIndex; /* 0x3F0 */ s16 blinkTimer; 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 e62cc45f4..ee42446bd 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -355,7 +355,7 @@ void EnBaba_UpdateModel(EnBaba* this, PlayState* play) { Math_SmoothStepToS(&this->torsoRot.y, 0, 4, 0x3E8, 1); } - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, BBA_LIMB_MAX); if (this->stateFlags & BOMB_SHOP_LADY_STATE_VISIBLE) { EnBaba_UpdateCollider(this, play); @@ -773,8 +773,8 @@ s32 EnBaba_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if ((limbIndex == BBA_LIMB_UPPER_ROOT) || (limbIndex == BBA_LIMB_LEFT_UPPER_ARM) || (limbIndex == BBA_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)(Math_SinS(this->limbRotTableY[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->limbRotTableZ[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } if (((this->animIndex == BOMB_SHOP_LADY_ANIM_IDLE) || (this->animIndex == BOMB_SHOP_LADY_ANIM_KNOCKED_OVER) || diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.h b/src/overlays/actors/ovl_En_Baba/z_en_baba.h index 9618dd3a2..7a8b8194f 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.h +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.h @@ -40,8 +40,8 @@ typedef struct EnBaba { /* 0x2E4 */ Vec3s headRot; /* 0x2EA */ Vec3s torsoRot; /* 0x2F0 */ UNK_TYPE1 unk2F0[0x12]; - /* 0x302 */ s16 limbRotTableY[18]; - /* 0x326 */ s16 limbRotTableZ[18]; + /* 0x302 */ s16 fidgetTableY[BBA_LIMB_MAX]; + /* 0x326 */ s16 fidgetTableZ[BBA_LIMB_MAX]; /* 0x34A */ UNK_TYPE1 unk34A[0xBA]; /* 0x404 */ s16 sakonDeadTimer; /* 0x406 */ UNK_TYPE1 unk406[4]; 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 d124f0b77..297445c66 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 @@ -123,8 +123,7 @@ void EnBba01_UpdateModel(EnBba01* this, PlayState* play) { Math_SmoothStepToS(&this->enHy.torsoRot.x, 0, 4, 0x3E8, 1); Math_SmoothStepToS(&this->enHy.torsoRot.y, 0, 4, 0x3E8, 1); } - SubS_FillLimbRotTables(play, this->enHy.limbRotTableY, this->enHy.limbRotTableZ, - ARRAY_COUNT(this->enHy.limbRotTableY)); + SubS_UpdateFidgetTables(play, this->enHy.fidgetTableY, this->enHy.fidgetTableZ, ENHY_LIMB_MAX); EnHy_UpdateCollider(&this->enHy, play); } @@ -286,8 +285,8 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* } if ((limbIndex == BBA_LIMB_BAG) || (limbIndex == BBA_LIMB_TORSO) || (limbIndex == BBA_LIMB_LEFT_FOREARM)) { - rot->y += (s16)(Math_SinS(this->enHy.limbRotTableY[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->enHy.limbRotTableZ[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->enHy.fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->enHy.fidgetTableZ[limbIndex]) * 200.0f); } return false; 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 8eb9eb839..6df2e490a 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 @@ -115,8 +115,7 @@ void EnCne01_UpdateModel(EnCne01* this, PlayState* play) { Math_SmoothStepToS(&this->enHy.torsoRot.x, 0, 4, 0x3E8, 1); Math_SmoothStepToS(&this->enHy.torsoRot.y, 0, 4, 0x3E8, 1); } - SubS_FillLimbRotTables(play, this->enHy.limbRotTableY, this->enHy.limbRotTableZ, - ARRAY_COUNT(this->enHy.limbRotTableY)); + SubS_UpdateFidgetTables(play, this->enHy.fidgetTableY, this->enHy.fidgetTableZ, ENHY_LIMB_MAX); EnHy_UpdateCollider(&this->enHy, play); } @@ -277,8 +276,8 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if ((limbIndex == CNE_LIMB_TORSO) || (limbIndex == CNE_LIMB_LEFT_UPPER_ARM) || (limbIndex == CNE_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)(Math_SinS(this->enHy.limbRotTableY[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->enHy.limbRotTableZ[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->enHy.fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->enHy.fidgetTableZ[limbIndex]) * 200.0f); } return false; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 6c6b40318..6a2eea9d2 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -36,10 +36,6 @@ static AnimationInfo sAnimationInfo[] = { { &gDs2nIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, }; -static Vec3f sZeroVec = { 0, 0, 0 }; - -static TexturePtr sEyeTextures[] = { gDs2nEyeOpenTex, gDs2nEyeHalfTex, gDs2nEyeClosedTex }; - void EnDs2n_SetupIdle(EnDs2n* this) { this->blinkTimer = 20; this->blinkState = 0; @@ -48,7 +44,7 @@ void EnDs2n_SetupIdle(EnDs2n* this) { } void EnDs2n_Idle(EnDs2n* this, PlayState* play) { - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, DS2N_LIMB_MAX); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, DS2N_LIMB_MAX); } void EnDs2n_UpdateEyes(EnDs2n* this) { @@ -103,12 +99,12 @@ s32 EnDs2n_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnDs2n_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnDs2n* this = THIS; - Vec3f focusOffset = sZeroVec; + Vec3f focusOffset = { 0.0f, 0.0f, 0.0f }; if ((limbIndex == DS2N_LIMB_HIPS) || (limbIndex == DS2N_LIMB_LEFT_UPPER_ARM) || (limbIndex == DS2N_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 0xC8; - rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 0xC8; + rot->y += (s16)Math_SinS(this->fidgetTableY[limbIndex]) * 200; + rot->z += (s16)Math_CosS(this->fidgetTableZ[limbIndex]) * 200; } if (limbIndex == DS2N_LIMB_HEAD) { @@ -116,6 +112,8 @@ void EnDs2n_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot } } +static TexturePtr sEyeTextures[] = { gDs2nEyeOpenTex, gDs2nEyeHalfTex, gDs2nEyeClosedTex }; + void EnDs2n_Draw(Actor* thisx, PlayState* play) { EnDs2n* this = THIS; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h index f2a6c0725..4e759be0b 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h @@ -13,8 +13,8 @@ typedef struct EnDs2n { /* 0x144 */ ColliderCylinder collider; // unused /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnDs2nActionFunc actionFunc; - /* 0x1D8 */ s16 limbRotTableY[DS2N_LIMB_MAX]; - /* 0x1FE */ s16 limbRotTableZ[DS2N_LIMB_MAX]; + /* 0x1D8 */ s16 fidgetTableY[DS2N_LIMB_MAX]; + /* 0x1FE */ s16 fidgetTableZ[DS2N_LIMB_MAX]; /* 0x224 */ Vec3s headRot; /* 0x22A */ Vec3s chestRot; // set by function, but not applied in limbdraw /* 0x230 */ s16 blinkState; 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 f18aa79e9..bb329fb72 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -1470,10 +1470,9 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { EnFsn* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); - - // Note: adding 1 to FSN_LIMB_MAX due to bug in object_fsn, see bug in object_fsn.xml SkelAnime_InitFlex(play, &this->skelAnime, &gFsnSkel, &gFsnIdleAnim, this->jointTable, this->morphTable, - FSN_LIMB_MAX + 1); + ENFSN_LIMB_MAX); + if (ENFSN_IS_SHOP(&this->actor)) { this->actor.shape.rot.y = BINANG_ROT180(this->actor.shape.rot.y); this->actor.flags &= ~ACTOR_FLAG_1; @@ -1508,7 +1507,7 @@ void EnFsn_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->unk27A, this->actor.focus.pos); - SubS_FillLimbRotTables(play, this->limbRotYTable, this->limbRotZTable, ARRAY_COUNT(this->limbRotYTable)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENFSN_LIMB_MAX); EnFsn_Blink(this); if (ENFSN_IS_SHOP(&this->actor) && EnFsn_HasItemsToSell()) { EnFsn_UpdateJoystickInputState(this, play); @@ -1630,7 +1629,7 @@ void EnFsn_DrawStickDirectionPrompts(EnFsn* this, PlayState* play) { s32 EnFsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFsn* this = THIS; - s32 limbRotTableIdx; + s32 fidgetIndex; if (limbIndex == FSN_LIMB_HEAD) { Matrix_RotateXS(this->headRot.y, MTXMODE_APPLY); @@ -1638,24 +1637,24 @@ s32 EnFsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p if (ENFSN_IS_BACKROOM(&this->actor)) { switch (limbIndex) { case FSN_LIMB_TORSO: - limbRotTableIdx = 0; + fidgetIndex = 0; break; case FSN_LIMB_LEFT_HAND: - limbRotTableIdx = 1; + fidgetIndex = 1; break; case FSN_LIMB_HEAD: - limbRotTableIdx = 2; + fidgetIndex = 2; break; default: - limbRotTableIdx = 9; + fidgetIndex = 9; break; } - if (limbRotTableIdx < 9) { - rot->y += (s16)(Math_SinS(this->limbRotYTable[limbRotTableIdx]) * 200.0f); - rot->z += (s16)(Math_CosS(this->limbRotZTable[limbRotTableIdx]) * 200.0f); + if (fidgetIndex < 9) { + rot->y += (s16)(Math_SinS(this->fidgetTableY[fidgetIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[fidgetIndex]) * 200.0f); } } if (limbIndex == FSN_LIMB_TOUPEE) { diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h index f214dcbd9..22133322e 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h @@ -13,6 +13,8 @@ #define ENFSN_ANGRY (1 << 8) #define ENFSN_CALM_DOWN (1 << 9) +#define ENFSN_LIMB_MAX FSN_LIMB_MAX + 1 // Note: adding 1 to FSN_LIMB_MAX due to bug in the skeleton, see bug in object_fsn.xml + struct EnFsn; typedef void (*EnFsnActionFunc)(struct EnFsn*, PlayState*); @@ -24,12 +26,12 @@ typedef struct EnFsn { /* 0x1D4 */ EnFsnActionFunc actionFunc; /* 0x1D8 */ EnFsnActionFunc prevActionFunc; // Used to return to correct browsing function /* 0x1DC */ ColliderCylinder collider; - /* 0x228 */ s16 limbRotYTable[19]; - /* 0x24E */ s16 limbRotZTable[19]; + /* 0x228 */ s16 fidgetTableY[ENFSN_LIMB_MAX]; + /* 0x24E */ s16 fidgetTableZ[ENFSN_LIMB_MAX]; /* 0x274 */ Vec3s headRot; /* 0x27A */ Vec3s unk27A; // Set but never used - /* 0x280 */ Vec3s jointTable[FSN_LIMB_MAX + 1]; // Note: adding 1 to FSN_LIMB_MAX due to bug in object_fsn, see bug in object_fsn.xml - /* 0x2F2 */ Vec3s morphTable[FSN_LIMB_MAX + 1]; + /* 0x280 */ Vec3s jointTable[ENFSN_LIMB_MAX]; + /* 0x2F2 */ Vec3s morphTable[ENFSN_LIMB_MAX]; /* 0x364 */ s16 eyeTexIndex; /* 0x366 */ s16 blinkTimer; /* 0x368 */ s16 cutsceneState; 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 bf5fddfef..909cc76bf 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -905,7 +905,7 @@ void EnGeg_Update(Actor* thisx, PlayState* play) { func_80BB1FCC(this, play); func_80BB2088(this, play); func_80BB1C8C(this); - SubS_FillLimbRotTables(play, this->unk_238, this->unk_232, ARRAY_COUNT(this->unk_238)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGEG_FIDGET_TABLE_LEN); func_80BB1D04(this); func_80BB178C(this, play); } diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.h b/src/overlays/actors/ovl_En_Geg/z_en_geg.h index 71639bdac..522312fc2 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h @@ -7,6 +7,8 @@ struct EnGeg; typedef void (*EnGegActionFunc)(struct EnGeg*, PlayState*); +#define ENGEG_FIDGET_TABLE_LEN 3 + typedef struct EnGeg { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -14,8 +16,8 @@ typedef struct EnGeg { /* 0x18C */ ColliderCylinder colliderCylinder; /* 0x1D8 */ ColliderSphere colliderSphere; /* 0x230 */ u16 unk_230; - /* 0x232 */ s16 unk_232[3]; - /* 0x238 */ s16 unk_238[3]; + /* 0x232 */ s16 fidgetTableZ[ENGEG_FIDGET_TABLE_LEN]; + /* 0x238 */ s16 fidgetTableY[ENGEG_FIDGET_TABLE_LEN]; /* 0x23E */ s16 unk_23E; /* 0x240 */ s16 unk_240; /* 0x242 */ s16 unk_242; 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 bcdb20431..ab0afe844 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1437,7 +1437,7 @@ s32 func_80950690(EnGm* this, PlayState* play) { break; } - SubS_FillLimbRotTables(play, this->unk_3D8, this->unk_3D2, ARRAY_COUNT(this->unk_3D8)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGM_FIDGET_TABLE_LEN); return false; } @@ -1626,7 +1626,7 @@ void func_80950DB8(EnGm* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&sp34, &sp40), 4, 0x2AA8); } } - SubS_FillLimbRotTables(play, this->unk_3D8, this->unk_3D2, ARRAY_COUNT(this->unk_3D8)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGM_FIDGET_TABLE_LEN); } void func_80950F2C(EnGm* this, PlayState* play) { @@ -1725,7 +1725,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { s32 EnGm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { s32 pad; EnGm* this = THIS; - s32 phi_v0; + s32 fidgetIndex; if (limbIndex == 16) { func_8094F3D0(this, play); @@ -1733,25 +1733,25 @@ s32 EnGm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po switch (limbIndex) { case 9: - phi_v0 = 0; + fidgetIndex = 0; break; case 10: - phi_v0 = 1; + fidgetIndex = 1; break; case 13: - phi_v0 = 2; + fidgetIndex = 2; break; default: - phi_v0 = 9; + fidgetIndex = 9; break; } - if ((this->unk_3A4 & 0x2000) && (phi_v0 < 9)) { - rot->y += (s16)(Math_SinS(this->unk_3D8[phi_v0]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk_3D2[phi_v0]) * 200.0f); + if ((this->unk_3A4 & 0x2000) && (fidgetIndex < 9)) { + rot->y += (s16)(Math_SinS(this->fidgetTableY[fidgetIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[fidgetIndex]) * 200.0f); } return false; diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h index 760c9d91c..572fa322f 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -11,6 +11,8 @@ typedef void (*EnGmUnkFunc2)(struct EnGm*, PlayState*); #define ENGM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) +#define ENGM_FIDGET_TABLE_LEN 3 + typedef struct EnGm { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -61,8 +63,8 @@ typedef struct EnGm { /* 0x3CC */ s16 unk_3CC; /* 0x3CE */ s16 unk_3CE; /* 0x3D0 */ s16 unk_3D0; - /* 0x3D2 */ s16 unk_3D2[3]; - /* 0x3D8 */ s16 unk_3D8[3]; + /* 0x3D2 */ s16 fidgetTableZ[ENGM_FIDGET_TABLE_LEN]; + /* 0x3D8 */ s16 fidgetTableY[ENGM_FIDGET_TABLE_LEN]; /* 0x3DE */ s16 unk_3DE; /* 0x3E0 */ s16 unk_3E0; /* 0x3E2 */ s16 unk_3E2; 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 65a71f49a..346753059 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -2048,7 +2048,7 @@ void EnGo_Sleep(EnGo* this, PlayState* play) { this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET; } - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGO_FIDGET_TABLE_LEN); Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8); } @@ -2243,7 +2243,7 @@ void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) { } } - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGO_FIDGET_TABLE_LEN); Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } @@ -2388,7 +2388,7 @@ void EnGo_Talk(EnGo* this, PlayState* play) { Math_Vec3f_Copy(&thisPos, &this->actor.world.pos); Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&thisPos, &targetPos), 4, 0x2AA8); } - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGO_FIDGET_TABLE_LEN); return; } @@ -2498,7 +2498,7 @@ void EnGo_Draw_NoSkeleton(EnGo* this, PlayState* play) { s32 EnGo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGo* this = THIS; Vec3f worldPos; - s32 rotTableIndex; + s32 fidgetIndex; if ((ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) && (limbIndex == GORON_LIMB_BODY)) { Matrix_MultZero(&worldPos); @@ -2508,25 +2508,25 @@ s32 EnGo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po switch (limbIndex) { case GORON_LIMB_BODY: - rotTableIndex = 0; + fidgetIndex = 0; break; case GORON_LIMB_LEFT_UPPER_ARM: - rotTableIndex = 1; + fidgetIndex = 1; break; case GORON_LIMB_RIGHT_UPPER_ARM: - rotTableIndex = 2; + fidgetIndex = 2; break; default: - rotTableIndex = 9; + fidgetIndex = 9; break; } - if ((this->actionFlags & ENGO_FLAG_STANDING) && (rotTableIndex < 9)) { - rot->y += (s16)(Math_SinS(this->limbRotTableY[rotTableIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->limbRotTableZ[rotTableIndex]) * 200.0f); + if ((this->actionFlags & ENGO_FLAG_STANDING) && (fidgetIndex < 9)) { + rot->y += (s16)(Math_SinS(this->fidgetTableY[fidgetIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[fidgetIndex]) * 200.0f); } return false; } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 5162a4f77..0ada7fe1e 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -15,6 +15,8 @@ typedef s32 (*MsgEventFunc)(Actor*, PlayState*); #define ENGO_PATH_INDEX_NONE 0xFF +#define ENGO_FIDGET_TABLE_LEN 3 + #define ENGO_SNOW_EFFECT_COUNT 16 #define ENGO_OTHER_EFFECT_COUNT 16 #define ENGO_EFFECT_COUNT (ENGO_SNOW_EFFECT_COUNT + ENGO_OTHER_EFFECT_COUNT) @@ -126,8 +128,8 @@ typedef struct EnGo { /* 0x3C2 */ s16 cutsceneDelayTimer; /* 0x3C4 */ s16 gatekeeperAnimState; /* 0x3C6 */ s16 harmlessTimer; - /* 0x3C8 */ s16 limbRotTableZ[3]; - /* 0x3CE */ s16 limbRotTableY[3]; + /* 0x3C8 */ s16 fidgetTableZ[ENGO_FIDGET_TABLE_LEN]; + /* 0x3CE */ s16 fidgetTableY[ENGO_FIDGET_TABLE_LEN]; /* 0x3D4 */ s16 surprisePhase; /* 0x3D8 */ MsgEventFunc msgEventFunc; /* 0x3DC */ s32 curAnimIndex; 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 dc8042c6c..7ab1f4806 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -6,7 +6,6 @@ #include "z_en_in.h" #include "z64horse.h" -#include "objects/object_in/object_in.h" #include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -253,7 +252,7 @@ void func_808F3414(EnIn* this, PlayState* play) { } func_808F322C(this, 3); func_808F3178(this, play); - SubS_FillLimbRotTables(play, this->unk376, this->unk39E, ARRAY_COUNT(this->unk376)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, OBJECT_IN_LIMB_MAX); } void func_808F35AC(EnIn* this, PlayState* play) { @@ -1681,8 +1680,8 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY); } if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) { - rot->y += (s16)(Math_SinS(this->unk376[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk39E[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } if (this->unk4AC & 0x40) { if (limbIndex == 18) { diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h index 6f4dd5d95..c4833568c 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -2,6 +2,7 @@ #define Z_EN_IN_H #include "global.h" +#include "assets/objects/object_in/object_in.h" struct EnIn; @@ -57,14 +58,14 @@ typedef struct EnIn { /* 0x254 */ Vec3f unk254; /* 0x260 */ u8 unk260; /* 0x261 */ u8 unk261; - /* 0x262 */ Vec3s jointTable[20]; - /* 0x2DA */ Vec3s morphTable[20]; + /* 0x262 */ Vec3s jointTable[OBJECT_IN_LIMB_MAX]; + /* 0x2DA */ Vec3s morphTable[OBJECT_IN_LIMB_MAX]; /* 0x352 */ Vec3s trackTarget; /* 0x358 */ Vec3s headRot; /* 0x35E */ Vec3s torsoRot; /* 0x364 */ UNK_TYPE1 unk364[0x12]; - /* 0x376 */ s16 unk376[20]; - /* 0x39E */ s16 unk39E[20]; + /* 0x376 */ s16 fidgetTableY[OBJECT_IN_LIMB_MAX]; + /* 0x39E */ s16 fidgetTableZ[OBJECT_IN_LIMB_MAX]; /* 0x3C6 */ UNK_TYPE1 unk3C6[0xBC]; /* 0x482 */ s16 unk482; /* 0x484 */ s16 unk484; diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 80310d332..2b4a147ca 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -368,7 +368,7 @@ void EnOssan_SetupLookToShopkeeperFromShelf(PlayState* play, EnOssan* this) { void EnOssan_Idle(EnOssan* this, PlayState* play) { Player* player = GET_PLAYER(play); - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENOSSAN_LIMB_MAX); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { player->stateFlags2 |= PLAYER_STATE2_20000000; EnOssan_SetupAction(this, EnOssan_BeginInteraction); @@ -1744,8 +1744,8 @@ void EnOssan_CuriosityShopMan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** if ((limbIndex == FSN_LIMB_PELVIS) || (limbIndex == FSN_LIMB_LEFT_UPPER_ARM) || (limbIndex == FSN_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200; - rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200; + rot->y += (s16)Math_SinS(this->fidgetTableY[limbIndex]) * 200; + rot->z += (s16)Math_CosS(this->fidgetTableZ[limbIndex]) * 200; } } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h index c5de183d5..da256322a 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h @@ -6,7 +6,7 @@ #include "objects/object_ani/object_ani.h" #include "objects/object_fsn/object_fsn.h" -// Note: adding 1 to FSN_LIMB_MAX due to bug in object_fsn, see bug in object_fsn.xml +// Note: adding 1 to FSN_LIMB_MAX due to bug in the skeleton, see bug in object_fsn.xml #define ENOSSAN_LIMB_MAX MAX((s32)FSN_LIMB_MAX + 1, (s32)ANI_LIMB_MAX) struct EnOssan; @@ -52,8 +52,8 @@ typedef struct EnOssan { /* 0x2C4 */ u16 textId; /* 0x2C6 */ Vec3s headRot; /* 0x2CC */ Vec3s unk2CC; // Set but never used - /* 0x2D2 */ s16 limbRotTableY[19]; - /* 0x2F8 */ s16 limbRotTableZ[19]; + /* 0x2D2 */ s16 fidgetTableY[ENOSSAN_LIMB_MAX]; + /* 0x2F8 */ s16 fidgetTableZ[ENOSSAN_LIMB_MAX]; /* 0x31E */ Vec3s jointTable[ENOSSAN_LIMB_MAX]; /* 0x390 */ Vec3s morphTable[ENOSSAN_LIMB_MAX]; /* 0x402 */ s16 animIndex; 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 b6407d24b..582ea3a62 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -669,7 +669,7 @@ void func_80BF4EBC(EnRg* this, PlayState* play) { this->unk_318 = Rand_S16Offset(0, 20); } } - SubS_FillLimbRotTables(play, this->unk_32E, this->unk_328, ARRAY_COUNT(this->unk_328)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENRG_FIDGET_TABLE_LEN); } void func_80BF4FC4(EnRg* this, PlayState* play) { @@ -823,29 +823,29 @@ void func_80BF547C(EnRg* this, PlayState* play) { s32 func_80BF5588(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnRg* this = THIS; - s32 phi_v0; + s32 fidgetIndex; switch (limbIndex) { case 10: - phi_v0 = 0; + fidgetIndex = 0; break; case 11: - phi_v0 = 1; + fidgetIndex = 1; break; case 14: - phi_v0 = 2; + fidgetIndex = 2; break; default: - phi_v0 = 9; + fidgetIndex = 9; break; } - if (((this->unk_310 & 8) != 0) && (phi_v0 < 9)) { - rot->y += (s16)(Math_SinS(this->unk_32E[phi_v0]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk_328[phi_v0]) * 200.0f); + if (((this->unk_310 & 8) != 0) && (fidgetIndex < 9)) { + rot->y += (s16)(Math_SinS(this->fidgetTableY[fidgetIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[fidgetIndex]) * 200.0f); } return false; diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.h b/src/overlays/actors/ovl_En_Rg/z_en_rg.h index 14f8e3882..a29e0a5f7 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.h +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.h @@ -11,6 +11,8 @@ typedef void (*EnRgActionFunc)(struct EnRg*, PlayState*); #define ENRG_PATH_INDEX_NONE 0xFF +#define ENRG_FIDGET_TABLE_LEN 3 + typedef struct { /* 0x00 */ u8 unk_00; /* 0x01 */ u8 unk_01; @@ -43,8 +45,8 @@ typedef struct EnRg { /* 0x322 */ s16 unk_322; /* 0x324 */ s16 unk_324; /* 0x326 */ s16 unk_326; - /* 0x328 */ s16 unk_328[3]; - /* 0x32E */ s16 unk_32E[3]; + /* 0x328 */ s16 fidgetTableZ[ENRG_FIDGET_TABLE_LEN]; + /* 0x32E */ s16 fidgetTableY[ENRG_FIDGET_TABLE_LEN]; /* 0x334 */ s32 unk_334; /* 0x338 */ UNK_TYPE1 unk338[4]; /* 0x33C */ s32 unk_33C; 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 3a4d30516..551ed9489 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -218,7 +218,7 @@ void EnRu_UpdateModel(EnRu* this, PlayState* play) { EnRu_UpdateEyes(this, 3); EnRu_PlayWalkingSound(this, play); - SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, RU2_LIMB_MAX); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, RU2_LIMB_MAX); } void EnRu_DoNothing(EnRu* this, PlayState* play) { @@ -274,8 +274,8 @@ s32 EnRu_OverrideLimbdraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po if ((limbIndex == RU2_LIMB_TORSO) || (limbIndex == RU2_LIMB_LEFT_UPPER_ARM) || (limbIndex == RU2_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)(Math_SinS(this->limbRotTableY[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->limbRotTableZ[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } return false; diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.h b/src/overlays/actors/ovl_En_Ru/z_en_ru.h index 7aeaea044..7e7403176 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h @@ -32,8 +32,8 @@ typedef struct EnRu { /* 0x318 */ Vec3s headRot; /* 0x31E */ Vec3s torsoRot; /* 0x324 */ UNK_TYPE1 pad324[0x12]; - /* 0x336 */ s16 limbRotTableY[RU2_LIMB_MAX]; - /* 0x364 */ s16 limbRotTableZ[RU2_LIMB_MAX]; + /* 0x336 */ s16 fidgetTableY[RU2_LIMB_MAX]; + /* 0x364 */ s16 fidgetTableZ[RU2_LIMB_MAX]; /* 0x394 */ Vec3f bodyPartsPos[RU_BODYPARTSPOS_COUNT]; /* 0x348 */ UNK_TYPE1 padUNK[6]; /* 0x44E */ s16 eyeState; 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 2dc3ca94e..7904ff23a 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -8,7 +8,6 @@ #include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h" -#include "objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -578,7 +577,7 @@ void func_80BAB4F0(EnSuttari* this, PlayState* play) { Math_SmoothStepToS(&this->torsoRot.y, 0, 4, 0x3E8, 1); } } - SubS_FillLimbRotTables(play, this->unk2FA, this->unk31A, ARRAY_COUNT(this->unk2FA)); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, OBJECT_BOJ_LIMB_MAX); } s16 EnSuttari_GetDistSqAndOrient(Path* path, s32 index, Vec3f* pos, f32* distSq) { @@ -1568,8 +1567,8 @@ s32 EnSuttari_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 Matrix_RotateZS(-this->torsoRot.x, MTXMODE_APPLY); } if ((limbIndex == 8) || (limbIndex == 9) || (limbIndex == 0xC)) { - rot->y += (s16)(Math_SinS(this->unk2FA[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk31A[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } return false; } diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h index 8da01b67e..3ba38563f 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h @@ -2,6 +2,7 @@ #define Z_EN_SUTTARI_H #include "global.h" +#include "objects/object_boj/object_boj.h" #include "overlays/actors/ovl_En_Fsn/z_en_fsn.h" struct EnSuttari; @@ -27,14 +28,14 @@ typedef struct EnSuttari { /* 0x1EC */ Path* paths[2]; /* 0x1F4 */ s32 unk1F4[2]; /* 0x1FC */ UNK_TYPE1 unk_1FC[0x1A]; - /* 0x216 */ Vec3s jointTable[16]; - /* 0x276 */ Vec3s morphTable[16]; + /* 0x216 */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX]; + /* 0x276 */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX]; /* 0x2D6 */ Vec3s trackTarget; /* 0x2DC */ Vec3s headRot; /* 0x2E2 */ Vec3s torsoRot; /* 0x2E8 */ UNK_TYPE1 unk_2E8[0x12]; - /* 0x2FA */ s16 unk2FA[16]; - /* 0x31A */ s16 unk31A[16]; + /* 0x2FA */ s16 fidgetTableY[OBJECT_BOJ_LIMB_MAX]; + /* 0x31A */ s16 fidgetTableZ[OBJECT_BOJ_LIMB_MAX]; /* 0x33A */ UNK_TYPE1 unk_33A[0xB6]; /* 0x3F0 */ s16 playerDetected; /* 0x3F2 */ s16 unk3F2; 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 ba71bbd7f..b892b3842 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -202,7 +202,7 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) { } EnZo_Blink(this, 3); - SubS_FillLimbRotTables(play, this->limbRotY, this->limbRotZ, 20); + SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ZORA_LIMB_MAX); } void EnZo_Walk(EnZo* this, PlayState* play) { @@ -305,8 +305,8 @@ s32 EnZo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po if ((limbIndex == ZORA_LIMB_TORSO) || (limbIndex == ZORA_LIMB_LEFT_UPPER_ARM) || (limbIndex == ZORA_LIMB_RIGHT_UPPER_ARM)) { - rot->y += (s16)(Math_SinS(this->limbRotY[limbIndex]) * 200.0f); - rot->z += (s16)(Math_CosS(this->limbRotZ[limbIndex]) * 200.0f); + rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } return false; } diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.h b/src/overlays/actors/ovl_En_Zo/z_en_zo.h index 9d32f63e5..9fbbd09ff 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.h +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.h @@ -30,8 +30,8 @@ typedef struct EnZo { /* 0x2F4 */ Vec3s headRot; /* 0x2FA */ Vec3s upperBodyRot; /* 0x300 */ UNK_TYPE1 unk_300[0x12]; - /* 0x312 */ s16 limbRotY[20]; - /* 0x33A */ s16 limbRotZ[20]; + /* 0x312 */ s16 fidgetTableY[ZORA_LIMB_MAX]; + /* 0x33A */ s16 fidgetTableZ[ZORA_LIMB_MAX]; /* 0x364 */ Vec3f bodyPartsPos[15]; /* 0x41A */ UNK_TYPE1 unk_41A[0x6]; /* 0x41E */ s16 eyeIndex; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9e0afdbe9..b56253e41 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -878,7 +878,7 @@ 0x800BDAA0:("func_800BDAA0",), 0x800BDB6C:("func_800BDB6C",), 0x800BDC5C:("Actor_ChangeAnimationByInfo",), - 0x800BDCF4:("func_800BDCF4",), + 0x800BDCF4:("Actor_UpdateFidgetTables",), 0x800BDFB0:("Actor_Noop",), 0x800BDFC0:("Gfx_DrawDListOpa",), 0x800BE03C:("Gfx_DrawDListXlu",), @@ -2690,7 +2690,7 @@ 0x8013D8DC:("SubS_IsObjectLoaded",), 0x8013D924:("SubS_GetObjectIndex",), 0x8013D960:("SubS_FindActor",), - 0x8013D9C8:("SubS_FillLimbRotTables",), + 0x8013D9C8:("SubS_UpdateFidgetTables",), 0x8013DB90:("SubS_IsFloorAbove",), 0x8013DC40:("SubS_CopyPointFromPathList",), 0x8013DCCC:("SubS_GetPathCountFromPathList",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 36740afe9..514d68d3c 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -709,7 +709,8 @@ wordReplace = { "func_8013A860": "SubS_DrawTransformFlexLimb", "func_8013BC6C": "SubS_ChangeAnimationByInfoS", "func_8013E1C8": "SubS_ChangeAnimationBySpeedInfo", - "func_8013D9C8": "SubS_FillLimbRotTables", + "func_8013D9C8": "SubS_UpdateFidgetTables", + "SubS_FillLimbRotTables": "SubS_UpdateFidgetTables", "func_8013A7C0": "SubS_FindDoor", "func_8013E640": "SubS_FindActorCustom", "func_ActorCategoryIterateById": "SubS_FindActor", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 85c087b37..fb3d05207 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -392,7 +392,7 @@ asm/non_matchings/code/z_actor/func_800BD9E0.s,func_800BD9E0,0x800BD9E0,0x30 asm/non_matchings/code/z_actor/func_800BDAA0.s,func_800BDAA0,0x800BDAA0,0x33 asm/non_matchings/code/z_actor/func_800BDB6C.s,func_800BDB6C,0x800BDB6C,0x3C asm/non_matchings/code/z_actor/Actor_ChangeAnimationByInfo.s,Actor_ChangeAnimationByInfo,0x800BDC5C,0x26 -asm/non_matchings/code/z_actor/func_800BDCF4.s,func_800BDCF4,0x800BDCF4,0xAF +asm/non_matchings/code/z_actor/Actor_UpdateFidgetTables.s,Actor_UpdateFidgetTables,0x800BDCF4,0xAF asm/non_matchings/code/z_actor/Actor_Noop.s,Actor_Noop,0x800BDFB0,0x4 asm/non_matchings/code/z_actor/Gfx_DrawDListOpa.s,Gfx_DrawDListOpa,0x800BDFC0,0x1F asm/non_matchings/code/z_actor/Gfx_DrawDListXlu.s,Gfx_DrawDListXlu,0x800BE03C,0x1F @@ -2204,7 +2204,7 @@ asm/non_matchings/code/z_sub_s/SubS_GetDistSqAndOrientPath.s,SubS_GetDistSqAndOr asm/non_matchings/code/z_sub_s/SubS_IsObjectLoaded.s,SubS_IsObjectLoaded,0x8013D8DC,0x12 asm/non_matchings/code/z_sub_s/SubS_GetObjectIndex.s,SubS_GetObjectIndex,0x8013D924,0xF asm/non_matchings/code/z_sub_s/SubS_FindActor.s,SubS_FindActor,0x8013D960,0x1A -asm/non_matchings/code/z_sub_s/SubS_FillLimbRotTables.s,SubS_FillLimbRotTables,0x8013D9C8,0x72 +asm/non_matchings/code/z_sub_s/SubS_UpdateFidgetTables.s,SubS_UpdateFidgetTables,0x8013D9C8,0x72 asm/non_matchings/code/z_sub_s/SubS_IsFloorAbove.s,SubS_IsFloorAbove,0x8013DB90,0x2C asm/non_matchings/code/z_sub_s/SubS_CopyPointFromPathList.s,SubS_CopyPointFromPathList,0x8013DC40,0x23 asm/non_matchings/code/z_sub_s/SubS_GetPathCountFromPathList.s,SubS_GetPathCountFromPathList,0x8013DCCC,0x5 From b3eae0e5b7bcc2c5d3c8a1d562f0737d80c7e35c Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 8 Jul 2023 14:41:25 -0400 Subject: [PATCH 028/121] Port OoT's docs for `fault.c` and `fault_drawer.c` (#1199) * fault.h * some docs stealing * fix building * fault_internal.h * pass * finish stealing docs * finish cleanup * format * warning * Update src/boot_O2_g3/fault.c Co-authored-by: Derek Hensley * Update src/boot_O2_g3/fault.c Co-authored-by: Derek Hensley * Update src/boot_O2_g3/fault.c Co-authored-by: Derek Hensley * review Co-authored-by: Derek Hensley * arggggg * arggggg part 2 * STACK * PHYS_TO_K0(0x400000) * format * fix * Instance * format * Neutral reset * variables.h cleanup * bss * frameBuffer * format * Update src/boot_O2_g3/fault.c Co-authored-by: Derek Hensley * review Co-authored-by: Derek Hensley * Update src/boot_O2_g3/fault.c Co-authored-by: Derek Hensley * bss * bss * bss * callback cleanup * fix function declarations * fix again * bss * bss * Update src/overlays/actors/ovl_En_Fishing/z_en_fishing.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/boot_O2_g3/fault.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * bss * bss * Update src/boot_O2_g3/fault.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * import bss * format * minor cleanup * bss * review * fix * bss * bss * bss * bss * bss * format * a * Z_PRIORITY_FAULT * bss * fix * idle.c bss doesn't want to get fixed :c * review * bss --------- Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/fault.h | 109 ++ include/fault_internal.h | 18 + include/functions.h | 69 +- include/ultra64/convert.h | 3 + include/ultra64/thread.h | 5 + include/variables.h | 169 +-- include/z64.h | 65 -- include/z64thread.h | 18 +- spec | 1 - src/boot_O2/assert.c | 1 + src/boot_O2_g3/CIC6105.c | 3 +- src/boot_O2_g3/fault.c | 972 +++++++++++------- src/boot_O2_g3/fault_drawer.c | 235 +++-- src/boot_O2_g3/yaz0.c | 1 + src/boot_O2_g3/z_std_dma.c | 1 + src/code/graph.c | 30 +- src/code/main.c | 7 +- src/code/padmgr.c | 4 +- src/code/sched.c | 24 +- src/code/sys_flashrom.c | 1 + src/code/sys_initial_check.c | 3 +- src/code/sys_matrix.c | 1 + src/code/z_actor.c | 1 + src/code/z_actor_dlftbls.c | 6 +- src/code/z_bgcheck.c | 14 +- src/code/z_collision_check.c | 1 + src/code/z_demo.c | 1 + src/code/z_kaleido_manager.c | 5 +- src/code/z_play.c | 1 + src/code/z_player_lib.c | 1 - src/libultra/os/createthread.c | 34 +- src/libultra/os/setthreadpri.c | 16 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 1 + src/overlays/actors/ovl_En_Ot/z_en_ot.c | 1 - .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 1 + .../actors/ovl_player_actor/z_player.c | 2 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 + tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 12 +- tools/namefixer.py | 2 + tools/sizes/boot_functions.csv | 20 +- 41 files changed, 1007 insertions(+), 874 deletions(-) create mode 100644 include/fault.h create mode 100644 include/fault_internal.h diff --git a/include/fault.h b/include/fault.h new file mode 100644 index 000000000..c93feee25 --- /dev/null +++ b/include/fault.h @@ -0,0 +1,109 @@ +#ifndef FAULT_H +#define FAULT_H + +#include "ultra64.h" +#include "unk.h" +#include "libc/stdarg.h" +#include "libc/stdint.h" +#include "io/controller.h" +#include "padmgr.h" +#include "stack.h" + +// These are the same as the 3-bit ansi color codes +#define FAULT_COLOR_BLACK 0 +#define FAULT_COLOR_RED 1 +#define FAULT_COLOR_GREEN 2 +#define FAULT_COLOR_YELLOW 3 +#define FAULT_COLOR_BLUE 4 +#define FAULT_COLOR_MAGENTA 5 +#define FAULT_COLOR_CYAN 6 +#define FAULT_COLOR_WHITE 7 +// Additional color codes +#define FAULT_COLOR_DARK_GRAY 8 +#define FAULT_COLOR_LIGHT_GRAY 9 + +#define FAULT_COLOR_STRINGIFY(s) #s +#define FAULT_COLOR_EXPAND_AND_STRINGIFY(s) FAULT_COLOR_STRINGIFY(s) + +#define FAULT_ESC '\x1A' +#define FAULT_COLOR(n) "\x1A" FAULT_COLOR_EXPAND_AND_STRINGIFY(FAULT_COLOR_ ## n) + + +// Address at the end of "non-expansion" memory space +#define FAULT_FB_ADDRESS (void*)((PHYS_TO_K0(0x400000) - SCREEN_HEIGHT * SCREEN_WIDTH * sizeof(u16))) + +typedef void (*FaultClientCallback)(void*, void*); + +typedef struct FaultClient { + /* 0x0 */ struct FaultClient* next; + /* 0x4 */ FaultClientCallback callback; + /* 0x8 */ void* arg0; + /* 0xC */ void* arg1; +} FaultClient; // size = 0x10 + + +typedef uintptr_t (*FaultAddrConvClientCallback)(uintptr_t, void*); + +typedef struct FaultAddrConvClient { + /* 0x0 */ struct FaultAddrConvClient* next; + /* 0x4 */ FaultAddrConvClientCallback callback; + /* 0x8 */ void* arg; +} FaultAddrConvClient; // size = 0xC + +typedef void(*FaultPadCallback)(Input* input); + + +// Initialization + +void Fault_Init(void); + +// Fatal Errors + +void Fault_AddHungupAndCrashImpl(const char* exp1, const char* exp2); +void Fault_AddHungupAndCrash(const char* file, s32 line); + +// Client Registration + +void Fault_AddClient(FaultClient* client, FaultClientCallback callback, void* arg0, void* arg1); +void Fault_RemoveClient(FaultClient* client); +void Fault_AddAddrConvClient(FaultAddrConvClient* client, FaultAddrConvClientCallback callback, void* arg); +void Fault_RemoveAddrConvClient(FaultAddrConvClient* client); + +// For use in Fault Client callbacks + +void Fault_WaitForInput(void); +void Fault_FillScreenBlack(void); +void Fault_SetFrameBuffer(void* fb, u16 w, u16 h); + +void FaultDrawer_SetForeColor(u16 color); +void FaultDrawer_SetBackColor(u16 color); +void FaultDrawer_SetFontColor(u16 color); +void FaultDrawer_SetCharPad(s8 padW, s8 padH); +void FaultDrawer_SetCursor(s32 x, s32 y); +s32 FaultDrawer_VPrintf(const char* fmt, va_list ap); +s32 FaultDrawer_Printf(const char* fmt, ...); +void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...); + + +typedef struct FaultMgr { + /* 0x000 */ OSThread thread; + /* 0x1B0 */ STACK(stack, 0x600); // Seems leftover from an earlier version. The thread actually uses a stack of this size at 0x8009BE60 + /* 0x7B0 */ OSMesgQueue queue; + /* 0x7C8 */ OSMesg msg[1]; + /* 0x7CC */ u8 exit; + /* 0x7CD */ u8 msgId; // 1 - CPU Break; 2 - Fault; 3 - Unknown + /* 0x7CE */ u8 faultHandlerEnabled; + /* 0x7CF */ u8 autoScroll; + /* 0x7D0 */ OSThread* faultedThread; + /* 0x7D4 */ FaultPadCallback padCallback; + /* 0x7D8 */ FaultClient* clients; + /* 0x7DC */ FaultAddrConvClient* addrConvClients; + /* 0x7E0 */ UNK_TYPE1 unk_7E0[0x4]; + /* 0x7E4 */ Input inputs[MAXCONTROLLERS]; + /* 0x844 */ void* fb; +} FaultMgr; // size = 0x848 + +extern FaultMgr gFaultMgr; + + +#endif diff --git a/include/fault_internal.h b/include/fault_internal.h new file mode 100644 index 000000000..24379e629 --- /dev/null +++ b/include/fault_internal.h @@ -0,0 +1,18 @@ +#ifndef FAULT_INTERNAL_H +#define FAULT_INTERNAL_H + +#include "ultra64.h" + + +typedef void (*FaultDrawerCallback)(void); + +void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled); +void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 color); +void FaultDrawer_FillScreen(void); +void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count); +void FaultDrawer_SetDrawerFrameBuffer(void* frameBuffer, u16 w, u16 h); +void FaultDrawer_SetInputCallback(FaultDrawerCallback callback); +void FaultDrawer_Init(void); + + +#endif diff --git a/include/functions.h b/include/functions.h index 66365fefe..55d59ec45 100644 --- a/include/functions.h +++ b/include/functions.h @@ -43,64 +43,7 @@ void func_800818F4(void); void __osSyncVPrintf(const char* fmt, ...); void osSyncPrintf(const char* fmt, ...); void rmonPrintf(const char* fmt, ...); -void Fault_SleepImpl(u32 duration); -void Fault_AddClient(FaultClient* client, void* callback, void* param0, void* param1); -void Fault_RemoveClient(FaultClient* client); -void Fault_AddAddrConvClient(FaultAddrConvClient* client, void* callback, void* param); -void Fault_RemoveAddrConvClient(FaultAddrConvClient* client); -void* Fault_ConvertAddress(void* addr); -void Fault_Sleep(u32 duration); -void Fault_PadCallback(Input* input); -void Fault_UpdatePadImpl(void); -u32 Fault_WaitForInputImpl(void); -void Fault_WaitForInput(void); -void Fault_DrawRec(s32 x, s32 y, s32 w, s32 h, u16 color); -void Fault_FillScreenBlack(void); -void Fault_FillScreenRed(void); -void Fault_DrawCornerRec(u16 color); -void Fault_PrintFReg(s32 idx, f32* value); -void osSyncPrintfFReg(s32 idx, f32* value); -void Fault_PrintFPCR(u32 value); -void osSyncPrintfFPCR(u32 value); -void Fault_PrintThreadContext(OSThread* t); -void osSyncPrintfThreadContext(OSThread* t); -OSThread* Fault_FindFaultedThread(void); -void Fault_Wait5Seconds(void); -void Fault_WaitForButtonCombo(void); -void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3); -void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1); -void Fault_FindNextStackCall(uintptr_t* spPtr, uintptr_t* pcPtr, uintptr_t* raPtr); -void Fault_DrawStackTrace(OSThread* t, u32 flags); -void osSyncPrintfStackTrace(OSThread* t, u32 flags); -void Fault_ResumeThread(OSThread* t); -void Fault_CommitFB(void); -void Fault_ProcessClients(void); -void Fault_SetOptionsFromController3(void); -void Fault_SetOptions(void); -void Fault_ThreadEntry(void* arg); -void Fault_SetFB(void* fb, u16 w, u16 h); -void Fault_Start(void); -void Fault_HangupFaultClient(const char* arg0, char* arg1); -void Fault_AddHungupAndCrashImpl(const char* arg0, char* arg1); -void Fault_AddHungupAndCrash(const char* filename, u32 line); -void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled); -void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 color); -void FaultDrawer_DrawChar(char c); -s32 FaultDrawer_ColorToPrintColor(u16 color); -void FaultDrawer_UpdatePrintColor(void); -void FaultDrawer_SetForeColor(u16 color); -void FaultDrawer_SetBackColor(u16 color); -void FaultDrawer_SetFontColor(u16 color); -void FaultDrawer_SetCharPad(s8 padW, s8 padH); -void FaultDrawer_SetCursor(s32 x, s32 y); -void FaultDrawer_FillScreen(void); -void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count); -void FaultDrawer_VPrintf(const char* fmt, va_list ap); -void FaultDrawer_Printf(const char* fmt, ...); -void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...); -void FaultDrawer_SetDrawerFB(void* fb, u16 w, u16 h); -void FaultDrawer_SetInputCallback(FaultDrawerCallback callback); -void FaultDrawer_Init(void); + void func_80084940(void); void func_80084968(void); @@ -192,7 +135,7 @@ void __osSiRelAccess(void); s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); void __osContGetInitData(u8* pattern, OSContStatus* data); void __osPackRequestData(u8 poll); -void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPri p); +void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p); s32 osContStartReadData(OSMesgQueue* mq); void osContGetReadData(OSContPad* data); void __osPackReadData(void); @@ -270,7 +213,7 @@ s32 __osSpDeviceBusy(void); s32 __osSiDeviceBusy(void); void guMtxIdent(Mtx* mtx); s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); -void osSetThreadPri(OSThread* t, OSPri p); +void osSetThreadPri(OSThread* thread, OSPri p); OSPri osGetThreadPri(OSThread* t); s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); void osViSwapBuffer(void* frameBufPtr); @@ -718,7 +661,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb, f32 scale, f32 scaleRange); void ActorOverlayTable_FaultClient(void* arg0, void* arg1); -void* ActorOverlayTable_FaultAddrConv(void* address, void* param); +uintptr_t ActorOverlayTable_FaultAddrConv(uintptr_t address, void* param); void ActorOverlayTable_Init(void); void ActorOverlayTable_Cleanup(void); @@ -1365,7 +1308,7 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId); void func_8015E7EC(PlayState* play, UNK_PTR puParm2); // void func_8015F8A8(UNK_TYPE4 ctxt); -void* KaleidoManager_FaultAddrConv(void* address, void* param); +uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_Init(PlayState* play); @@ -1498,7 +1441,7 @@ void Graph_FaultClient(void); void Graph_InitTHGA(TwoHeadGfxArena* arena, Gfx* buffer, s32 size); void Graph_SetNextGfxPool(GraphicsContext* gfxCtx); GameStateOverlay* Graph_GetNextGameState(GameState* gameState); -void* Graph_FaultAddrConv(void* address, void* param); +uintptr_t Graph_FaultAddrConv(uintptr_t address, void* param); void Graph_Init(GraphicsContext* gfxCtx); void Graph_Destroy(GraphicsContext* gfxCtx); void Graph_TaskSet00(GraphicsContext* gfxCtx, GameState* gameState); diff --git a/include/ultra64/convert.h b/include/ultra64/convert.h index 59d8b801c..68e91a85a 100644 --- a/include/ultra64/convert.h +++ b/include/ultra64/convert.h @@ -18,6 +18,9 @@ #define OS_PHYSICAL_TO_K0(x) (void*)(((u32)(x)+0x80000000)) #define OS_PHYSICAL_TO_K1(x) (void*)(((u32)(x)+0xA0000000)) +#define OS_MSEC_TO_CYCLES(n) OS_USEC_TO_CYCLES((n) * 1000) +#define OS_SEC_TO_CYCLES(n) OS_MSEC_TO_CYCLES((n) * 1000) + /* Functions */ extern uintptr_t osVirtualToPhysical(void*); diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h index f060ca34b..4adf025e1 100644 --- a/include/ultra64/thread.h +++ b/include/ultra64/thread.h @@ -20,11 +20,16 @@ #define OS_PRIORITY_VIMGR 254 #define OS_PRIORITY_MAX 255 +#define OS_PRIORITY_THREADTAIL -1 + #define OS_STATE_STOPPED (1 << 0) #define OS_STATE_RUNNABLE (1 << 1) #define OS_STATE_RUNNING (1 << 2) #define OS_STATE_WAITING (1 << 3) +#define OS_FLAG_CPU_BREAK 1 +#define OS_FLAG_FAULT 2 + typedef s32 OSPri; typedef s32 OSId; diff --git a/include/variables.h b/include/variables.h index 7faaf58d4..6b2522e4b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -24,10 +24,7 @@ extern vs32 gIrqMgrResetStatus; extern volatile OSTime sIrqMgrResetTime; extern volatile OSTime sIrqMgrRetraceTime; extern s32 sIrqMgrRetraceCount; -extern const char* sCpuExceptions[18]; -extern const char* sFpuExceptions[6]; -extern FaultDrawer* sFaultDrawContext; -extern FaultDrawer sFaultDrawerDefault; + // extern UNK_TYPE1 sGfxPrintFontTLUT; // extern UNK_TYPE1 sGfxPrintRainbowTLUT; // extern UNK_TYPE1 sGfxPrintRainbowData; @@ -92,136 +89,7 @@ extern char yaz0String8009823C[]; extern char D_80098280[]; extern char D_80098290[]; extern char D_800982A4[]; -extern char D_800982B0[]; -extern char D_800982BC[]; -extern char D_800982D0[]; -extern char D_800982E8[]; -extern char D_80098300[]; -extern char D_80098318[]; -extern char D_80098330[]; -extern char D_80098344[]; -extern char D_80098358[]; -extern char D_80098370[]; -extern char D_80098388[]; -extern char D_800983A0[]; -extern char D_800983B8[]; -extern char D_800983CC[]; -extern char D_800983DC[]; -extern char D_800983F8[]; -extern char D_80098414[]; -extern char D_8009842C[]; -extern char D_80098448[]; -extern char D_80098460[]; -extern char D_80098474[]; -extern char D_80098488[]; -extern char D_80098494[]; -extern char D_800984A0[]; -extern char D_800984B4[55]; -extern char D_800984EC[54]; -extern char D_80098524[71]; -extern char D_8009856C[74]; -extern char D_800985B8[]; -extern char D_800985C8[]; -extern char D_800985DC[]; -extern char D_800985EC[]; -extern char D_80098600[]; -extern char D_80098610[]; -extern char D_80098618[]; -extern char D_8009861C[]; -extern char D_8009862C[]; -extern char D_80098634[]; -extern char D_80098648[]; -extern char D_80098664[]; -extern char D_80098680[]; -extern char D_8009869C[]; -extern char D_800986B8[]; -extern char D_800986D4[]; -extern char D_800986F0[]; -extern char D_8009870C[]; -extern char D_80098728[]; -extern char D_80098744[]; -extern char D_80098760[]; -extern char D_80098780[]; -extern char D_80098784[]; -extern char D_80098788[]; -extern char D_8009878C[]; -extern char D_80098790[]; -extern char D_80098794[]; -extern char D_80098798[]; -extern char D_8009879C[]; -extern char D_800987A0[]; -extern char D_800987A4[]; -extern char D_800987B0[]; -extern char D_800987B4[]; -extern char D_800987CC[]; -extern char D_800987EC[]; -extern char D_8009880C[]; -extern char D_8009882C[]; -extern char D_8009884C[]; -extern char D_8009886C[]; -extern char D_8009888C[]; -extern char D_800988AC[]; -extern char D_800988CC[]; -extern char D_800988EC[]; -extern char D_8009890C[]; -extern char D_8009892C[]; -extern char D_80098930[]; -extern char D_80098934[]; -extern char D_80098938[]; -extern char D_8009893C[]; -extern char D_80098940[]; -extern char D_80098944[]; -extern char D_80098948[]; -extern char D_8009894C[]; -extern char D_80098950[]; -extern char D_80098954[]; -extern char D_8009895C[]; -extern char D_80098968[]; -extern char D_80098970[]; -extern char D_80098978[]; -extern char D_80098980[]; -extern char D_8009898C[]; -extern char D_800989A4[]; -extern char D_800989B0[]; -extern char D_800989BC[]; -extern char D_800989CC[]; -extern char D_800989D8[]; -extern char D_800989F4[]; -extern char D_80098A00[]; -extern char D_80098A0C[]; -extern char D_80098A1C[]; -extern char D_80098A20[34]; -extern const char D_80098A44[]; -extern const char D_80098A68[]; -extern char D_80098A88[53]; -extern char D_80098AC0[49]; -extern char D_80098AF4[51]; -extern char D_80098B28[]; -extern char D_80098B4C[]; -extern char D_80098B68[]; -extern char D_80098B84[]; -extern char D_80098BA0[]; -extern char D_80098BBC[]; -extern const char faultThreadName[]; -extern char D_80098BE0[]; -extern char D_80098BF8[]; -extern char D_80098BFC[]; -extern char D_80098C04[]; -extern char D_80098C08[]; -extern char D_80098C10[]; -extern char D_80098C28[]; -extern char D_80098C2C[]; -extern char D_80098C34[]; -extern char D_80098C38[]; -extern char D_80098C40[]; -extern char D_80099050[]; -extern char D_80099054[]; -extern char D_8009905C[]; -extern char D_80099064[]; -extern char D_80099070[]; -extern const char D_80099078[]; -extern const char D_8009907C[]; -extern const char D_80099080[]; + extern char D_800990B0[]; extern f32 D_800990C0[9]; extern f32 D_800990E4; @@ -277,9 +145,6 @@ extern void* gYaz0DecompressDstEnd; // extern UNK_TYPE4 D_8009BE34; // extern FaultClient romInfoFaultClient; -extern FaultThreadStruct gFaultStruct; - -extern FaultDrawer sFaultDrawerStruct; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; // extern UNK_TYPE4 sArenaLockMsg; @@ -2067,21 +1932,6 @@ extern f32 D_801ED8D0; // extern UNK_TYPE1 D_801ED8DC; extern Mtx D_801ED8E0; extern Actor* D_801ED920; -extern FaultClient sActorOverlayTableFaultClient; -extern FaultAddrConvClient sActorOverlayTableFaultAddrConvClient; -extern char D_801ED950[80]; -extern char D_801ED9A0[80]; -extern Vec3f D_801ED9F0[3]; -extern Vec3f D_801EDA18[3]; -extern MtxF sModelToWorldMtxF; -extern Vec3f D_801EDA80[3]; -extern char D_801EDAA8[80]; -extern char D_801EDAF8[80]; -extern Vec3f D_801EDB48[3]; -extern Vec3f D_801EDB70[3]; -extern Plane D_801EDB98; -extern Sphere16 D_801EDBA8; -extern TriNorm D_801EDBB0; extern Vec3f D_801EDE00; extern Vec3f D_801EDE10; @@ -2219,7 +2069,7 @@ extern s16 D_801F4E7A; // extern UNK_TYPE1 D_801F6B58; extern void (*sKaleidoScopeUpdateFunc)(PlayState* play); extern void (*sKaleidoScopeDrawFunc)(PlayState* play); -extern FaultAddrConvClient sKaleidoMgrFaultAddrConvClient; + extern s16 sTransitionFillTimer; extern Input D_801F6C18; extern TransitionTile sTransitionTile; @@ -2237,19 +2087,12 @@ extern struct_801F8010 D_801F8010; extern VisZbuf sVisZbuf; extern VisMono sMonoColors; extern ViMode D_801F8048; -extern FaultAddrConvClient sGraphFaultAddrConvClient; -extern FaultClient sGraphFaultClient; -extern GfxMasterList* gGfxMasterDL; -extern CfbInfo sGraphCfbInfos[3]; -extern OSTime sGraphTaskStartTime; -extern FaultClient sSchedFaultClient; -extern OSTime sRSPGFXStartTime; -extern OSTime sRSPAudioStartTime; -extern OSTime sRSPOtherStartTime; -extern OSTime sRDPStartTime; +extern GfxMasterList* gGfxMasterDL; + extern u64* gAudioSPDataPtr; extern u32 gAudioSPDataSize; + extern volatile OSTime D_801FBAE0; extern volatile OSTime D_801FBAE8; extern volatile OSTime D_801FBAF0; diff --git a/include/z64.h b/include/z64.h index d03b2fd44..ba2d5ffc3 100644 --- a/include/z64.h +++ b/include/z64.h @@ -75,40 +75,6 @@ typedef struct { /* 0x14 */ OSMesgQueue messageQueue; } FlashromRequest; // size = 0x2C -// End of RDRAM without the Expansion Pak installed -#define NORMAL_RDRAM_END 0x80400000 -// End of RDRAM with the Expansion Pak installed -#define EXPANDED_RDRAM_END 0x80800000 -// Address at the end of normal RDRAM after which is room for a screen buffer -#define FAULT_FB_ADDRESS (NORMAL_RDRAM_END - sizeof(u16[SCREEN_HEIGHT][SCREEN_WIDTH])) - -typedef void (*FaultDrawerCallback)(void); - -typedef struct { - /* 0x00 */ u16* fb; - /* 0x04 */ u16 w; - /* 0x06 */ u16 h; - /* 0x08 */ u16 yStart; - /* 0x0A */ u16 yEnd; - /* 0x0C */ u16 xStart; - /* 0x0E */ u16 xEnd; - /* 0x10 */ u16 foreColor; - /* 0x12 */ u16 backColor; - /* 0x14 */ u16 cursorX; - /* 0x16 */ u16 cursorY; - /* 0x18 */ const u32* font; - /* 0x1C */ u8 charW; - /* 0x1D */ u8 charH; - /* 0x1E */ s8 charWPad; - /* 0x1F */ s8 charHPad; - /* 0x20 */ u16 printColors[10]; - /* 0x34 */ u8 escCode; - /* 0x35 */ u8 osSyncPrintfEnabled; - /* 0x38 */ FaultDrawerCallback inputCallback; -} FaultDrawer; // size = 0x3C - -typedef void(*fault_update_input_func)(Input* input); - typedef struct { /* 0x000 */ View view; /* 0x168 */ u8* iconItemSegment; @@ -315,37 +281,6 @@ typedef struct { /* 0x24 */ u32 flags; } PreRenderParams; // size = 0x28 -typedef struct FaultAddrConvClient { - /* 0x0 */ struct FaultAddrConvClient* next; - /* 0x4 */ void* (*callback)(void*, void*); - /* 0x8 */ void* param; -} FaultAddrConvClient; // size = 0xC - -typedef struct FaultClient { - /* 0x0 */ struct FaultClient* next; - /* 0x4 */ void (*callback)(void*, void*); - /* 0x8 */ void* param0; - /* 0xC */ void* param1; -} FaultClient; // size = 0x10 - -typedef struct { - /* 0x000 */ OSThread thread; - /* 0x1B0 */ u8 stack[1536]; // Seems leftover from an earlier version. The thread actually uses a stack of this size at 0x8009BE60 - /* 0x7B0 */ OSMesgQueue queue; - /* 0x7C8 */ OSMesg msg[1]; - /* 0x7CC */ u8 exitDebugger; - /* 0x7CD */ u8 msgId; // 1 - CPU Break; 2 - Fault; 3 - Unknown - /* 0x7CE */ u8 faultHandlerEnabled; - /* 0x7CF */ u8 faultActive; - /* 0x7D0 */ OSThread* faultedThread; - /* 0x7D4 */ fault_update_input_func padCallback; - /* 0x7D8 */ FaultClient* clients; - /* 0x7DC */ FaultAddrConvClient* addrConvClients; - /* 0x7E0 */ UNK_TYPE1 pad7E0[0x4]; - /* 0x7E4 */ Input padInput[MAXCONTROLLERS]; - /* 0x844 */ void* fb; -} FaultThreadStruct; // size = 0x848 - struct PlayState; typedef struct { diff --git a/include/z64thread.h b/include/z64thread.h index ce63cfb15..21a397fe5 100644 --- a/include/z64thread.h +++ b/include/z64thread.h @@ -1,16 +1,17 @@ #ifndef Z64THREAD_H #define Z64THREAD_H -#define Z_THREAD_ID_IDLE 1 -#define Z_THREAD_ID_SLOWLY 2 -#define Z_THREAD_ID_MAIN 3 -#define Z_THREAD_ID_GRAPH 4 -#define Z_THREAD_ID_SCHED 5 -#define Z_THREAD_ID_PADMGR 7 +#define Z_THREAD_ID_IDLE 1 +#define Z_THREAD_ID_SLOWLY 2 +#define Z_THREAD_ID_FAULT 2 +#define Z_THREAD_ID_MAIN 3 +#define Z_THREAD_ID_GRAPH 4 +#define Z_THREAD_ID_SCHED 5 +#define Z_THREAD_ID_PADMGR 7 #define Z_THREAD_ID_AUDIOMGR 10 #define Z_THREAD_ID_FLASHROM 13 -#define Z_THREAD_ID_DMAMGR 18 -#define Z_THREAD_ID_IRQMGR 19 +#define Z_THREAD_ID_DMAMGR 18 +#define Z_THREAD_ID_IRQMGR 19 #define Z_PRIORITY_SLOWLY 5 #define Z_PRIORITY_GRAPH 9 @@ -22,5 +23,6 @@ #define Z_PRIORITY_SCHED 16 #define Z_PRIORITY_DMAMGR 17 #define Z_PRIORITY_IRQMGR 18 +#define Z_PRIORITY_FAULT OS_PRIORITY_APPMAX #endif diff --git a/spec b/spec index 781efb202..3e7b86be0 100644 --- a/spec +++ b/spec @@ -24,7 +24,6 @@ beginseg include "build/src/boot_O2_g3/CIC6105.o" include "build/src/boot_O2_g3/syncprintf.o" include "build/src/boot_O2_g3/fault.o" - include "build/data/boot/fault.bss.o" include "build/src/boot_O2_g3/fault_drawer.o" include "build/src/boot_O2/boot_80084940.o" include "build/src/boot_O2/loadfragment.o" diff --git a/src/boot_O2/assert.c b/src/boot_O2/assert.c index 9bf98c2db..04fcf87fe 100644 --- a/src/boot_O2/assert.c +++ b/src/boot_O2/assert.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fault.h" void __assert(const char* file, u32 lineNum) { osGetThreadId(NULL); diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index 78eed1a77..b45b19313 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fault.h" UNK_TYPE4 D_8009BE30; UNK_TYPE4 D_8009BE34; @@ -17,7 +18,7 @@ void CIC6105_PrintRomInfo(void) { } void CIC6105_AddRomInfoFaultPage(void) { - Fault_AddClient(&romInfoFaultClient, CIC6105_PrintRomInfo, 0, 0); + Fault_AddClient(&romInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL); } void CIC6105_RemoveRomInfoFaultPage(void) { diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index eb190859e..30166d785 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -1,15 +1,55 @@ -#include "ultra64.h" +/** + * @file fault.c + * + * This file implements the screen that may be viewed when the game crashes. + * This is the second known version of the crash screen, an evolved version from OoT's. + * + * When the game crashes, a red bar will be drawn to the top-left of the screen, indicating that the + * crash screen is available for use. Once this bar appears, it is possible to open the crash screen + * with the following button combination: + * + * (DPad-Left & L & R & C-Right) & Start + * + * When entering this button combination, buttons that are &'d together must all be pressed together. + * + * "Clients" may be registered with the crash screen to extend its functionality. There are + * two kinds of client, "Client" and "AddressConverterClient". Clients contribute one or + * more pages to the crash debugger, while Address Converter Clients allow the crash screen to look up + * the virtual addresses of dynamically allocated overlays. + * + * The crash screen has multiple pages: + * - Thread Context + * This page shows information about the thread on which the program crashed. It displays + * the cause of the crash, state of general-purpose registers, state of floating-point registers + * and the floating-point status register. If a floating-point exception caused the crash, it will + * be displayed next to the floating-point status register. + * - Stack Trace + * This page displays a full backtrace from the crashing function back to the start of the thread. It + * displays the Program Counter for each function and, if applicable, the Virtual Program Counter + * for relocated functions in overlays. + * - Client Pages + * After the stack trace page, currently registered clients are processed and their pages are displayed. + * - Memory Dump + * This page implements a scrollable memory dump. + * - End Screen + * This page informs you that there are no more pages to display. + * + * To navigate the pages, START and A may be used to advance to the next page, and L toggles whether to + * automatically scroll to the next page after some time has passed. + * DPad-Up may be pressed to enable sending fault pages over osSyncPrintf as well as displaying them on-screen. + * DPad-Down disables sending fault pages over osSyncPrintf. + */ + +#include "fault_internal.h" +#include "fault.h" +#include "prevent_bss_reordering.h" #include "global.h" -#include "stack.h" #include "vt.h" #include "stackcheck.h" +#include "z64thread.h" -extern FaultThreadStruct* sFaultContext; -extern f32 D_8009BE54; -extern u32 faultCustomOptions; -extern u32 faultCopyToLog; -extern STACK(sFaultStack, 0x600); -extern StackEntry sFaultStackInfo; +FaultMgr* sFaultInstance; +f32 sFaultTimeTotal; // read but not set anywhere // data const char* sCpuExceptions[] = { @@ -38,23 +78,30 @@ const char* sFpuExceptions[] = { }; void Fault_SleepImpl(u32 duration) { - u64 value = (duration * OS_CPU_COUNTER) / 1000ULL; + OSTime value = (duration * OS_CPU_COUNTER) / 1000ULL; + Sleep_Cycles(value); } -void Fault_AddClient(FaultClient* client, void* callback, void* param0, void* param1) { +/** + * Registers a fault client. + * + * Clients contribute at least one page to the crash screen, drawn by `callback`. + * Arguments are passed on to the callback through `arg0` and `arg1`. + */ +void Fault_AddClient(FaultClient* client, FaultClientCallback callback, void* arg0, void* arg1) { OSIntMask mask; - u32 alreadyExists = 0; + u32 alreadyExists = false; mask = osSetIntMask(1); + // Ensure the client is not already registered { + FaultClient* iter = sFaultInstance->clients; - FaultClient* iter = sFaultContext->clients; - - while (iter) { + while (iter != NULL) { if (iter == client) { - alreadyExists = 1; + alreadyExists = true; goto end; } iter = iter->next; @@ -62,10 +109,10 @@ void Fault_AddClient(FaultClient* client, void* callback, void* param0, void* pa } client->callback = callback; - client->param0 = param0; - client->param1 = param1; - client->next = sFaultContext->clients; - sFaultContext->clients = client; + client->arg0 = arg0; + client->arg1 = arg1; + client->next = sFaultInstance->clients; + sFaultInstance->clients = client; end: osSetIntMask(mask); @@ -75,26 +122,25 @@ end: } } +/** + * Removes a fault client so that the page is no longer displayed if a crash occurs. + */ void Fault_RemoveClient(FaultClient* client) { - FaultClient* iter; - FaultClient* lastIter; + FaultClient* iter = sFaultInstance->clients; + FaultClient* lastIter = NULL; OSIntMask mask; - u32 listIsEmpty; - - iter = sFaultContext->clients; - listIsEmpty = 0; - lastIter = NULL; + u32 listIsEmpty = false; mask = osSetIntMask(1); while (iter) { if (iter == client) { - if (lastIter) { + if (lastIter != NULL) { lastIter->next = client->next; } else { - sFaultContext->clients = client; - if (sFaultContext->clients) { - sFaultContext->clients = client->next; + sFaultInstance->clients = client; + if (sFaultInstance->clients) { + sFaultInstance->clients = client->next; } else { listIsEmpty = 1; } @@ -113,27 +159,38 @@ void Fault_RemoveClient(FaultClient* client) { } } -void Fault_AddAddrConvClient(FaultAddrConvClient* client, void* callback, void* param) { +/** + * Registers an address converter client. This enables the crash screen to look up virtual + * addresses of overlays relocated during runtime. Address conversion is carried out by + * `callback`, which either returns a virtual address or NULL if the address could not + * be converted. + * + * The callback is intended to be + * `uintptr_t (*callback)(uintptr_t addr, void* arg)` + * The callback may return 0 if it could not convert the address + */ +void Fault_AddAddrConvClient(FaultAddrConvClient* client, FaultAddrConvClientCallback callback, void* arg) { OSIntMask mask; - u32 alreadyExists = 0; + s32 alreadyExists = false; mask = osSetIntMask(1); { + FaultAddrConvClient* iter = sFaultInstance->addrConvClients; - FaultAddrConvClient* iter = sFaultContext->addrConvClients; - while (iter) { + while (iter != NULL) { if (iter == client) { - alreadyExists = 1; + alreadyExists = true; goto end; } iter = iter->next; } } + client->callback = callback; - client->param = param; - client->next = sFaultContext->addrConvClients; - sFaultContext->addrConvClients = client; + client->arg = arg; + client->next = sFaultInstance->addrConvClients; + sFaultInstance->addrConvClients = client; end: osSetIntMask(mask); @@ -144,27 +201,23 @@ end: } void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { - FaultAddrConvClient* iter; - FaultAddrConvClient* lastIter; + FaultAddrConvClient* iter = sFaultInstance->addrConvClients; + FaultAddrConvClient* lastIter = NULL; OSIntMask mask; - u32 listIsEmpty; - - iter = sFaultContext->addrConvClients; - listIsEmpty = 0; - lastIter = NULL; + bool listIsEmpty = false; mask = osSetIntMask(1); while (iter) { if (iter == client) { - if (lastIter) { + if (lastIter != NULL) { lastIter->next = client->next; } else { - sFaultContext->addrConvClients = client; - if (sFaultContext->addrConvClients) { - sFaultContext->addrConvClients = client->next; + sFaultInstance->addrConvClients = client; + if (sFaultInstance->addrConvClients) { + sFaultInstance->addrConvClients = client->next; } else { - listIsEmpty = 1; + listIsEmpty = true; } } break; @@ -182,75 +235,88 @@ void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { } } -void* Fault_ConvertAddress(void* addr) { - void* ret; - FaultAddrConvClient* iter = sFaultContext->addrConvClients; +/** + * Converts `addr` to a virtual address via the registered + * address converter clients + */ +uintptr_t Fault_ConvertAddress(uintptr_t addr) { + uintptr_t ret; + FaultAddrConvClient* iter = sFaultInstance->addrConvClients; - while (iter) { - if (iter->callback) { - ret = iter->callback(addr, iter->param); - if (ret != NULL) { + while (iter != NULL) { + if (iter->callback != NULL) { + ret = iter->callback(addr, iter->arg); + if (ret != 0) { return ret; } } iter = iter->next; } - return NULL; + return 0; } -void Fault_Sleep(u32 duration) { - Fault_SleepImpl(duration); +void Fault_Sleep(u32 msec) { + Fault_SleepImpl(msec); } void Fault_PadCallback(Input* input) { PadMgr_GetInput2(input, false); } -void Fault_UpdatePadImpl() { - sFaultContext->padCallback(sFaultContext->padInput); +void Fault_UpdatePadImpl(void) { + sFaultInstance->padCallback(sFaultInstance->inputs); } -u32 Fault_WaitForInputImpl() { - Input* curInput = &sFaultContext->padInput[0]; +/** + * Awaits user input + * + * L toggles auto-scroll + * DPad-Up enables osSyncPrintf output + * DPad-Down disables osSyncPrintf output + * A and DPad-Right continues and returns true + * DPad-Left continues and returns false + */ +u32 Fault_WaitForInputImpl(void) { + Input* input = &sFaultInstance->inputs[0]; s32 count = 600; - u32 kDown; + u32 pressedBtn; - while (1) { - Fault_Sleep(0x10); + while (true) { + Fault_Sleep(1000 / 60); Fault_UpdatePadImpl(); - kDown = curInput->press.button; + pressedBtn = input->press.button; - if (kDown == BTN_L) { - sFaultContext->faultActive = !sFaultContext->faultActive; + if (pressedBtn == BTN_L) { + sFaultInstance->autoScroll = !sFaultInstance->autoScroll; } - if (sFaultContext->faultActive) { + if (sFaultInstance->autoScroll) { if (count-- < 1) { - return 0; + return false; } } else { - if (kDown == BTN_A || kDown == BTN_DRIGHT) { - return 0; + if ((pressedBtn == BTN_A) || (pressedBtn == BTN_DRIGHT)) { + return false; } - if (kDown == BTN_DLEFT) { - return 1; + if (pressedBtn == BTN_DLEFT) { + return true; } - if (kDown == BTN_DUP) { - FaultDrawer_SetOsSyncPrintfEnabled(1); + if (pressedBtn == BTN_DUP) { + FaultDrawer_SetOsSyncPrintfEnabled(true); } - if (kDown == BTN_DDOWN) { - FaultDrawer_SetOsSyncPrintfEnabled(0); + if (pressedBtn == BTN_DDOWN) { + FaultDrawer_SetOsSyncPrintfEnabled(false); } } } } -void Fault_WaitForInput() { +void Fault_WaitForInput(void) { Fault_WaitForInputImpl(); } @@ -258,36 +324,37 @@ void Fault_DrawRec(s32 x, s32 y, s32 w, s32 h, u16 color) { FaultDrawer_DrawRecImpl(x, y, x + w - 1, y + h - 1, color); } -void Fault_FillScreenBlack() { - FaultDrawer_SetForeColor(0xFFFF); - FaultDrawer_SetBackColor(1); +void Fault_FillScreenBlack(void) { + FaultDrawer_SetForeColor(GPACK_RGBA5551(255, 255, 255, 1)); + FaultDrawer_SetBackColor(GPACK_RGBA5551(0, 0, 0, 1)); FaultDrawer_FillScreen(); - FaultDrawer_SetBackColor(0); + FaultDrawer_SetBackColor(GPACK_RGBA5551(0, 0, 0, 0)); } -void Fault_FillScreenRed() { - FaultDrawer_SetForeColor(0xFFFF); - FaultDrawer_SetBackColor(0xF001); +void Fault_FillScreenRed(void) { + FaultDrawer_SetForeColor(GPACK_RGBA5551(255, 255, 255, 1)); + FaultDrawer_SetBackColor(GPACK_RGBA5551(240, 0, 0, 1)); FaultDrawer_FillScreen(); - FaultDrawer_SetBackColor(0); + FaultDrawer_SetBackColor(GPACK_RGBA5551(0, 0, 0, 0)); } void Fault_DrawCornerRec(u16 color) { - Fault_DrawRec(0x16, 0x10, 8, 1, color); + Fault_DrawRec(22, 16, 8, 1, color); } -void Fault_PrintFReg(s32 idx, f32* value) { +void Fault_PrintFReg(s32 index, f32* value) { u32 raw = *(u32*)value; s32 v0 = ((raw & 0x7F800000) >> 0x17) - 0x7F; if ((v0 >= -0x7E && v0 < 0x80) || raw == 0) { - FaultDrawer_Printf("F%02d:%14.7e ", idx, *value); + FaultDrawer_Printf("F%02d:%14.7e ", index, *value); } else { - FaultDrawer_Printf("F%02d: %08x(16) ", idx, raw); + // Print subnormal floats as their IEEE-754 hex representation + FaultDrawer_Printf("F%02d: %08x(16) ", index, raw); } } -void osSyncPrintfFReg(s32 idx, f32* value) { +void Fault_LogFReg(s32 idx, f32* value) { u32 raw = *(u32*)value; s32 v0 = ((raw & 0x7F800000) >> 0x17) - 0x7F; @@ -303,6 +370,9 @@ void Fault_PrintFPCR(u32 value) { u32 flag = 0x20000; FaultDrawer_Printf("FPCSR:%08xH ", value); + + // Go through each of the six causes and print the name of + // the first cause that is set for (i = 0; i < ARRAY_COUNT(sFpuExceptions); i++) { if (value & flag) { FaultDrawer_Printf("(%s)", sFpuExceptions[i]); @@ -313,7 +383,7 @@ void Fault_PrintFPCR(u32 value) { FaultDrawer_Printf("\n"); } -void osSyncPrintfFPCR(u32 value) { +void Fault_LogFPCSR(u32 value) { s32 i; u32 flag = 0x20000; @@ -327,183 +397,205 @@ void osSyncPrintfFPCR(u32 value) { } } -void Fault_PrintThreadContext(OSThread* t) { - __OSThreadContext* ctx; - s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1F) << 0x10) >> 0x10; - if (causeStrIdx == 0x17) { - causeStrIdx = 0x10; +void Fault_PrintThreadContext(OSThread* thread) { + __OSThreadContext* threadCtx; + s16 causeStrIdx = _SHIFTR((u32)thread->context.cause, 2, 5); + + if (causeStrIdx == 23) { // Watchpoint + causeStrIdx = 16; } - if (causeStrIdx == 0x1F) { - causeStrIdx = 0x11; + if (causeStrIdx == 31) { // Virtual coherency on data + causeStrIdx = 17; } FaultDrawer_FillScreen(); FaultDrawer_SetCharPad(-2, 4); - FaultDrawer_SetCursor(0x16, 0x14); + FaultDrawer_SetCursor(22, 20); - ctx = &t->context; - FaultDrawer_Printf("THREAD:%d (%d:%s)\n", t->id, causeStrIdx, sCpuExceptions[causeStrIdx]); + threadCtx = &thread->context; + FaultDrawer_Printf("THREAD:%d (%d:%s)\n", thread->id, causeStrIdx, sCpuExceptions[causeStrIdx]); FaultDrawer_SetCharPad(-1, 0); - FaultDrawer_Printf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)ctx->pc, (u32)ctx->sr, (u32)ctx->badvaddr); - FaultDrawer_Printf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)ctx->at, (u32)ctx->v0, (u32)ctx->v1); - FaultDrawer_Printf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2); - FaultDrawer_Printf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)ctx->a3, (u32)ctx->t0, (u32)ctx->t1); - FaultDrawer_Printf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)ctx->t2, (u32)ctx->t3, (u32)ctx->t4); - FaultDrawer_Printf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)ctx->t5, (u32)ctx->t6, (u32)ctx->t7); - FaultDrawer_Printf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)ctx->s0, (u32)ctx->s1, (u32)ctx->s2); - FaultDrawer_Printf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)ctx->s3, (u32)ctx->s4, (u32)ctx->s5); - FaultDrawer_Printf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)ctx->s6, (u32)ctx->s7, (u32)ctx->t8); - FaultDrawer_Printf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)ctx->t9, (u32)ctx->gp, (u32)ctx->sp); - FaultDrawer_Printf("S8:%08xH RA:%08xH LO:%08xH\n\n", (u32)ctx->s8, (u32)ctx->ra, (u32)ctx->lo); + FaultDrawer_Printf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)threadCtx->pc, (u32)threadCtx->sr, + (u32)threadCtx->badvaddr); + FaultDrawer_Printf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)threadCtx->at, (u32)threadCtx->v0, (u32)threadCtx->v1); + FaultDrawer_Printf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)threadCtx->a0, (u32)threadCtx->a1, (u32)threadCtx->a2); + FaultDrawer_Printf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)threadCtx->a3, (u32)threadCtx->t0, (u32)threadCtx->t1); + FaultDrawer_Printf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)threadCtx->t2, (u32)threadCtx->t3, (u32)threadCtx->t4); + FaultDrawer_Printf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)threadCtx->t5, (u32)threadCtx->t6, (u32)threadCtx->t7); + FaultDrawer_Printf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)threadCtx->s0, (u32)threadCtx->s1, (u32)threadCtx->s2); + FaultDrawer_Printf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)threadCtx->s3, (u32)threadCtx->s4, (u32)threadCtx->s5); + FaultDrawer_Printf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)threadCtx->s6, (u32)threadCtx->s7, (u32)threadCtx->t8); + FaultDrawer_Printf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)threadCtx->t9, (u32)threadCtx->gp, (u32)threadCtx->sp); + FaultDrawer_Printf("S8:%08xH RA:%08xH LO:%08xH\n\n", (u32)threadCtx->s8, (u32)threadCtx->ra, (u32)threadCtx->lo); - Fault_PrintFPCR(ctx->fpcsr); + Fault_PrintFPCR(threadCtx->fpcsr); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0, &ctx->fp0.f.f_even); - Fault_PrintFReg(2, &ctx->fp2.f.f_even); + Fault_PrintFReg(0, &threadCtx->fp0.f.f_even); + Fault_PrintFReg(2, &threadCtx->fp2.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(4, &ctx->fp4.f.f_even); - Fault_PrintFReg(6, &ctx->fp6.f.f_even); + Fault_PrintFReg(4, &threadCtx->fp4.f.f_even); + Fault_PrintFReg(6, &threadCtx->fp6.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(8, &ctx->fp8.f.f_even); - Fault_PrintFReg(0xA, &ctx->fp10.f.f_even); + Fault_PrintFReg(8, &threadCtx->fp8.f.f_even); + Fault_PrintFReg(0xA, &threadCtx->fp10.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0xC, &ctx->fp12.f.f_even); - Fault_PrintFReg(0xE, &ctx->fp14.f.f_even); + Fault_PrintFReg(0xC, &threadCtx->fp12.f.f_even); + Fault_PrintFReg(0xE, &threadCtx->fp14.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0x10, &ctx->fp16.f.f_even); - Fault_PrintFReg(0x12, &ctx->fp18.f.f_even); + Fault_PrintFReg(0x10, &threadCtx->fp16.f.f_even); + Fault_PrintFReg(0x12, &threadCtx->fp18.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0x14, &ctx->fp20.f.f_even); - Fault_PrintFReg(0x16, &ctx->fp22.f.f_even); + Fault_PrintFReg(0x14, &threadCtx->fp20.f.f_even); + Fault_PrintFReg(0x16, &threadCtx->fp22.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0x18, &ctx->fp24.f.f_even); - Fault_PrintFReg(0x1A, &ctx->fp26.f.f_even); + Fault_PrintFReg(0x18, &threadCtx->fp24.f.f_even); + Fault_PrintFReg(0x1A, &threadCtx->fp26.f.f_even); FaultDrawer_Printf("\n"); - Fault_PrintFReg(0x1C, &ctx->fp28.f.f_even); - Fault_PrintFReg(0x1E, &ctx->fp30.f.f_even); + Fault_PrintFReg(0x1C, &threadCtx->fp28.f.f_even); + Fault_PrintFReg(0x1E, &threadCtx->fp30.f.f_even); FaultDrawer_Printf("\n"); FaultDrawer_SetCharPad(0, 0); - if (D_8009BE54 != 0) { - FaultDrawer_DrawText(0xA0, 0xD8, "%5.2f sec\n", D_8009BE54); + if (sFaultTimeTotal != 0.0f) { + FaultDrawer_DrawText(160, 216, "%5.2f sec\n", sFaultTimeTotal); } } -void osSyncPrintfThreadContext(OSThread* t) { - __OSThreadContext* ctx; - s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1F) << 0x10) >> 0x10; - if (causeStrIdx == 0x17) { - causeStrIdx = 0x10; +void osSyncPrintfThreadContext(OSThread* thread) { + __OSThreadContext* threadCtx; + s16 causeStrIdx = _SHIFTR((u32)thread->context.cause, 2, 5); + + if (causeStrIdx == 23) { // Watchpoint + causeStrIdx = 16; } - if (causeStrIdx == 0x1F) { - causeStrIdx = 0x11; + if (causeStrIdx == 31) { // Virtual coherency on data + causeStrIdx = 17; } - ctx = &t->context; + threadCtx = &thread->context; osSyncPrintf("\n"); - osSyncPrintf("THREAD ID:%d (%d:%s)\n", t->id, causeStrIdx, sCpuExceptions[causeStrIdx]); + osSyncPrintf("THREAD ID:%d (%d:%s)\n", thread->id, causeStrIdx, sCpuExceptions[causeStrIdx]); - osSyncPrintf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)ctx->pc, (u32)ctx->sr, (u32)ctx->badvaddr); - osSyncPrintf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)ctx->at, (u32)ctx->v0, (u32)ctx->v1); - osSyncPrintf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2); - osSyncPrintf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)ctx->a3, (u32)ctx->t0, (u32)ctx->t1); - osSyncPrintf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)ctx->t2, (u32)ctx->t3, (u32)ctx->t4); - osSyncPrintf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)ctx->t5, (u32)ctx->t6, (u32)ctx->t7); - osSyncPrintf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)ctx->s0, (u32)ctx->s1, (u32)ctx->s2); - osSyncPrintf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)ctx->s3, (u32)ctx->s4, (u32)ctx->s5); - osSyncPrintf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)ctx->s6, (u32)ctx->s7, (u32)ctx->t8); - osSyncPrintf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)ctx->t9, (u32)ctx->gp, (u32)ctx->sp); - osSyncPrintf("S8:%08xH RA:%08xH LO:%08xH\n", (u32)ctx->s8, (u32)ctx->ra, (u32)ctx->lo); + osSyncPrintf("PC:%08xH SR:%08xH VA:%08xH\n", (u32)threadCtx->pc, (u32)threadCtx->sr, (u32)threadCtx->badvaddr); + osSyncPrintf("AT:%08xH V0:%08xH V1:%08xH\n", (u32)threadCtx->at, (u32)threadCtx->v0, (u32)threadCtx->v1); + osSyncPrintf("A0:%08xH A1:%08xH A2:%08xH\n", (u32)threadCtx->a0, (u32)threadCtx->a1, (u32)threadCtx->a2); + osSyncPrintf("A3:%08xH T0:%08xH T1:%08xH\n", (u32)threadCtx->a3, (u32)threadCtx->t0, (u32)threadCtx->t1); + osSyncPrintf("T2:%08xH T3:%08xH T4:%08xH\n", (u32)threadCtx->t2, (u32)threadCtx->t3, (u32)threadCtx->t4); + osSyncPrintf("T5:%08xH T6:%08xH T7:%08xH\n", (u32)threadCtx->t5, (u32)threadCtx->t6, (u32)threadCtx->t7); + osSyncPrintf("S0:%08xH S1:%08xH S2:%08xH\n", (u32)threadCtx->s0, (u32)threadCtx->s1, (u32)threadCtx->s2); + osSyncPrintf("S3:%08xH S4:%08xH S5:%08xH\n", (u32)threadCtx->s3, (u32)threadCtx->s4, (u32)threadCtx->s5); + osSyncPrintf("S6:%08xH S7:%08xH T8:%08xH\n", (u32)threadCtx->s6, (u32)threadCtx->s7, (u32)threadCtx->t8); + osSyncPrintf("T9:%08xH GP:%08xH SP:%08xH\n", (u32)threadCtx->t9, (u32)threadCtx->gp, (u32)threadCtx->sp); + osSyncPrintf("S8:%08xH RA:%08xH LO:%08xH\n", (u32)threadCtx->s8, (u32)threadCtx->ra, (u32)threadCtx->lo); osSyncPrintf("\n"); - osSyncPrintfFPCR(ctx->fpcsr); + Fault_LogFPCSR(threadCtx->fpcsr); osSyncPrintf("\n"); - osSyncPrintfFReg(0, &ctx->fp0.f.f_even); - osSyncPrintfFReg(2, &ctx->fp2.f.f_even); + Fault_LogFReg(0, &threadCtx->fp0.f.f_even); + Fault_LogFReg(2, &threadCtx->fp2.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(4, &ctx->fp4.f.f_even); - osSyncPrintfFReg(6, &ctx->fp6.f.f_even); + Fault_LogFReg(4, &threadCtx->fp4.f.f_even); + Fault_LogFReg(6, &threadCtx->fp6.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(8, &ctx->fp8.f.f_even); - osSyncPrintfFReg(10, &ctx->fp10.f.f_even); + Fault_LogFReg(8, &threadCtx->fp8.f.f_even); + Fault_LogFReg(10, &threadCtx->fp10.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(12, &ctx->fp12.f.f_even); - osSyncPrintfFReg(14, &ctx->fp14.f.f_even); + Fault_LogFReg(12, &threadCtx->fp12.f.f_even); + Fault_LogFReg(14, &threadCtx->fp14.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(16, &ctx->fp16.f.f_even); - osSyncPrintfFReg(18, &ctx->fp18.f.f_even); + Fault_LogFReg(16, &threadCtx->fp16.f.f_even); + Fault_LogFReg(18, &threadCtx->fp18.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(20, &ctx->fp20.f.f_even); - osSyncPrintfFReg(22, &ctx->fp22.f.f_even); + Fault_LogFReg(20, &threadCtx->fp20.f.f_even); + Fault_LogFReg(22, &threadCtx->fp22.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(24, &ctx->fp24.f.f_even); - osSyncPrintfFReg(26, &ctx->fp26.f.f_even); + Fault_LogFReg(24, &threadCtx->fp24.f.f_even); + Fault_LogFReg(26, &threadCtx->fp26.f.f_even); osSyncPrintf("\n"); - osSyncPrintfFReg(28, &ctx->fp28.f.f_even); - osSyncPrintfFReg(30, &ctx->fp30.f.f_even); + Fault_LogFReg(28, &threadCtx->fp28.f.f_even); + Fault_LogFReg(30, &threadCtx->fp30.f.f_even); osSyncPrintf("\n"); } -OSThread* Fault_FindFaultedThread() { +/** + * Iterates through the active thread queue for a user thread with either + * the CPU break or Fault flag set. + */ +OSThread* Fault_FindFaultedThread(void) { OSThread* iter = __osGetActiveQueue(); - while (iter->priority != -1) { - if ((iter->priority > 0) && (iter->priority < 0x7F) && (iter->flags & 3)) { + + while (iter->priority != OS_PRIORITY_THREADTAIL) { + if ((iter->priority > OS_PRIORITY_IDLE) && (iter->priority < OS_PRIORITY_APPMAX) && + (iter->flags & (OS_FLAG_CPU_BREAK | OS_FLAG_FAULT))) { return iter; } iter = iter->tlnext; } + return NULL; } void Fault_Wait5Seconds(void) { - u32 pad; - OSTime start; - start = osGetTime(); - do { - Fault_Sleep(0x10); - } while ((osGetTime() - start) <= OS_USEC_TO_CYCLES(5000000)); + s32 pad; + OSTime start = osGetTime(); - sFaultContext->faultActive = 1; + do { + Fault_Sleep(1000 / 60); + } while ((osGetTime() - start) <= OS_SEC_TO_CYCLES(5)); + + sFaultInstance->autoScroll = true; } +/** + * Waits for the following button combination to be entered before returning: + * + * (DPad-Left & L & R & C-Right) & Start + */ void Fault_WaitForButtonCombo(void) { - Input* input = &sFaultContext->padInput[0]; + Input* input = &sFaultInstance->inputs[0]; + + FaultDrawer_SetForeColor(GPACK_RGBA5551(255, 255, 255, 1)); + FaultDrawer_SetBackColor(GPACK_RGBA5551(0, 0, 0, 1)); - FaultDrawer_SetForeColor(0xFFFF); - FaultDrawer_SetBackColor(1); do { do { - Fault_Sleep(0x10); + Fault_Sleep(1000 / 60); Fault_UpdatePadImpl(); } while (!CHECK_BTN_ALL(input->press.button, BTN_RESET)); } while (!CHECK_BTN_ALL(input->cur.button, BTN_DLEFT | BTN_L | BTN_R | BTN_CRIGHT)); } -void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3) { - u32* alignedAddr; +void Fault_DrawMemDumpContents(const char* title, uintptr_t addr, u32 param_3) { + uintptr_t alignedAddr = addr; u32* writeAddr; s32 y; s32 x; - alignedAddr = addr; - - if (alignedAddr < (u32*)0x80000000) { - alignedAddr = (u32*)0x80000000; + // Ensure address is within the bounds of RDRAM (Fault_DrawMemDump has already done this) + if (alignedAddr < K0BASE) { + alignedAddr = K0BASE; } - if (alignedAddr > (u32*)0x807FFF00) { - alignedAddr = (u32*)0x807FFF00; + // 8MB RAM, leave room to display 0x100 bytes on the final page + //! @bug The loop below draws 22 * 4 * 4 = 0x160 bytes per page. Due to this, by scrolling further than + //! 0x807FFEA0 some invalid bytes are read from outside of 8MB RDRAM space. This does not cause a crash, + //! however the values it displays are meaningless. On N64 hardware these invalid addresses are read as 0. + if (alignedAddr > (K0BASE + 0x800000 - 0x100)) { + alignedAddr = K0BASE + 0x800000 - 0x100; } - alignedAddr = (u32*)((u32)alignedAddr & ~3); - writeAddr = alignedAddr; + // Ensure address is word-aligned + alignedAddr &= ~3; + writeAddr = (u32*)alignedAddr; + Fault_FillScreenBlack(); FaultDrawer_SetCharPad(-2, 0); - FaultDrawer_DrawText(0x24, 0x12, "%s %08x", title ? title : "PrintDump", alignedAddr); - if (alignedAddr >= (u32*)0x80000000 && alignedAddr < (u32*)0xC0000000) { - for (y = 0x1C; y != 0xE2; y += 9) { - FaultDrawer_DrawText(0x18, y, "%06x", writeAddr); - for (x = 0x52; x != 0x122; x += 0x34) { - FaultDrawer_DrawText(x, y, "%08x", *writeAddr++); + FaultDrawer_DrawText(36, 18, "%s %08x", title ? title : "PrintDump", alignedAddr); + + if (alignedAddr >= K0BASE && alignedAddr < K2BASE) { + for (y = 0; y < 22; y++) { + FaultDrawer_DrawText(24, 28 + y * 9, "%06x", writeAddr); + for (x = 0; x < 4; x++) { + FaultDrawer_DrawText(82 + x * 52, 28 + y * 9, "%08x", *writeAddr++); } } } @@ -511,54 +603,79 @@ void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3) { FaultDrawer_SetCharPad(0, 0); } -void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { - s32 count; +/** + * Draws the memory dump page. + * + * DPad-Up scrolls up. + * DPad-Down scrolls down. + * Holding A while scrolling speeds up scrolling by a factor of 0x10. + * Holding B while scrolling speeds up scrolling by a factor of 0x100. + * + * L toggles auto-scrolling pages. + * START and A move on to the next page. + * + * @param pc Program counter, pressing C-Up jumps to this address + * @param sp Stack pointer, pressing C-Down jumps to this address + * @param cLeftJump Unused parameter, pressing C-Left jumps to this address + * @param cRightJump Unused parameter, pressing C-Right jumps to this address + */ +void Fault_DrawMemDump(uintptr_t pc, uintptr_t sp, uintptr_t cLeftJump, uintptr_t cRightJump) { + s32 scrollCountdown; s32 off; - Input* input = &sFaultContext->padInput[0]; - u32 addr = pc; + Input* input = &sFaultInstance->inputs[0]; + uintptr_t addr = pc; do { - count = 0; - if (addr < 0x80000000) { - addr = 0x80000000; + scrollCountdown = 0; + // Ensure address is within the bounds of RDRAM + if (addr < K0BASE) { + addr = K0BASE; } - if (addr > 0x807FFF00) { - addr = 0x807FFF00; + // 8MB RAM, leave room to display 0x100 bytes on the final page + if (addr > (K0BASE + 0x800000 - 0x100)) { + addr = K0BASE + 0x800000 - 0x100; } + // Align down the address to 0x10 bytes and draw the page contents addr &= ~0xF; - Fault_DrawMemDumpPage("Dump", (u32*)addr, 0); + Fault_DrawMemDumpContents("Dump", addr, 0); - count = 600; - while (sFaultContext->faultActive) { - if (count == 0) { + scrollCountdown = 600; + while (sFaultInstance->autoScroll) { + // Count down until it's time to move on to the next page + if (scrollCountdown == 0) { return; } - count--; + scrollCountdown--; - Fault_Sleep(0x10); + Fault_Sleep(1000 / 60); Fault_UpdatePadImpl(); if (CHECK_BTN_ALL(input->press.button, BTN_L)) { - sFaultContext->faultActive = 0; + sFaultInstance->autoScroll = false; } } + + // Wait for input do { - Fault_Sleep(0x10); + Fault_Sleep(1000 / 60); Fault_UpdatePadImpl(); } while (input->press.button == 0); + // Move to next page if (CHECK_BTN_ALL(input->press.button, BTN_START)) { return; } + // Memory dump controls + off = 0x10; if (CHECK_BTN_ALL(input->cur.button, BTN_A)) { - off = 0x100; + off *= 0x10; } if (CHECK_BTN_ALL(input->cur.button, BTN_B)) { - off <<= 8; + off *= 0x100; } if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { addr -= off; @@ -573,204 +690,249 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { addr = sp; } if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - addr = unk0; + addr = cLeftJump; } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - addr = unk1; + addr = cRightJump; } } while (!CHECK_BTN_ALL(input->press.button, BTN_L)); - sFaultContext->faultActive = 1; + // Resume auto-scroll and move to next page + sFaultInstance->autoScroll = true; } -void Fault_FindNextStackCall(uintptr_t* spPtr, uintptr_t* pcPtr, uintptr_t* raPtr) { +/** + * Searches a single function's stack frame for the function it was called from. + * There are two cases that must be covered: Leaf and non-leaf functions. + * + * A leaf function is one that does not call any other function, in this case the + * return address need not be saved to the stack. Since a leaf function does not + * call other functions, only the function the stack trace begins in could possibly + * be a leaf function, in which case the return address is in the thread context's + * $ra already, as it never left. + * + * The procedure is therefore + * - Iterate instructions + * - Once jr $ra is found, set pc to $ra + * - Done after delay slot + * + * A non-leaf function calls other functions, it is necessary for the return address + * to be saved to the stack. In these functions, it is important to keep track of the + * stack frame size of each function. + * + * The procedure is therefore + * - Iterate instructions + * - If lw $ra ($sp) is found, fetch the saved $ra from stack memory + * - If addiu $sp, $sp, is found, modify $sp by the immediate value + * - If jr $ra is found, set pc to $ra + * - Done after delay slot + * + * Note that searching for one jr $ra is sufficient, as only leaf functions can have + * multiple jr $ra in the same function. + * + * There is also additional handling for eret and j. Neither of these instructions + * appear in IDO compiled C, however do show up in the exception handler. It is not + * possible to backtrace through an eret as an interrupt can occur at any time, so + * there is no choice but to give up here. For j instructions, they can be followed + * and the backtrace may continue as normal. + */ +void Fault_WalkStack(uintptr_t* spPtr, uintptr_t* pcPtr, uintptr_t* raPtr) { uintptr_t sp = *spPtr; uintptr_t pc = *pcPtr; uintptr_t ra = *raPtr; - u32 lastOpc; - u16 opcHi; - s16 opcLo; + u32 lastInsn; + u16 insnHi; + s16 insnLo; u32 imm; - if (sp & 3 || sp < 0x80000000 || sp >= 0xC0000000 || ra & 3 || ra < 0x80000000 || ra >= 0xC0000000) { + if ((sp % 4 != 0) || (sp < K0BASE) || (sp >= K2BASE) || (ra % 4 != 0) || (ra < K0BASE) || (ra >= K2BASE)) { *spPtr = 0; *pcPtr = 0; *raPtr = 0; return; } - if (pc & 3 || pc < 0x80000000 || pc >= 0xC0000000) { + if ((pc % 4 != 0) || (pc < K0BASE) || (pc >= K2BASE)) { *pcPtr = ra; return; } - lastOpc = 0; + lastInsn = 0; while (true) { - opcHi = *(uintptr_t*)pc >> 16; - opcLo = *(uintptr_t*)pc & 0xFFFF; - imm = opcLo; + insnHi = *(uintptr_t*)pc >> 16; + insnLo = *(uintptr_t*)pc & 0xFFFF; + imm = insnLo; - if (opcHi == 0x8FBF) { + if (insnHi == 0x8FBF) { + // lw $ra, ($sp) + // read return address saved on the stack ra = *(uintptr_t*)(sp + imm); - } else if (opcHi == 0x27BD) { + } else if (insnHi == 0x27BD) { + // addiu $sp, $sp, + // stack pointer increment or decrement sp += imm; } else if (*(uintptr_t*)pc == 0x42000018) { + // eret + // cannot backtrace through an eret, give up sp = 0; pc = 0; ra = 0; - goto end; + goto done; } - if (lastOpc == 0x3E00008) { + if (lastInsn == 0x3E00008) { + // jr $ra + // return to previous function pc = ra; - goto end; - } else if ((lastOpc >> 26) == 2) { - pc = pc >> 28 << 28 | lastOpc << 6 >> 4; - goto end; + goto done; + } else if (lastInsn >> 26 == 2) { + // j + // extract jump target + pc = (pc >> 28 << 28) | (lastInsn << 6 >> 4); + goto done; } - lastOpc = *(uintptr_t*)pc; - pc += 4; + + lastInsn = *(uintptr_t*)pc; + pc += sizeof(u32); } -end: +done: *spPtr = sp; *pcPtr = pc; *raPtr = ra; } -void Fault_DrawStackTrace(OSThread* t, u32 flags) { - s32 y; - u32 sp; - u32 ra; - u32 pc; - u32 pad; - u32 convertedPc; - - sp = t->context.sp; - ra = t->context.ra; - pc = t->context.pc; +/** + * Draws the stack trace page contents for the specified thread + */ +void Fault_DrawStackTrace(OSThread* thread, u32 flags) { + s32 line; + uintptr_t sp = thread->context.sp; + uintptr_t ra = thread->context.ra; + uintptr_t pc = thread->context.pc; + s32 pad; + uintptr_t addr; Fault_FillScreenBlack(); - FaultDrawer_DrawText(0x78, 0x10, "STACK TRACE"); - FaultDrawer_DrawText(0x24, 0x18, "SP PC (VPC)"); + FaultDrawer_DrawText(120, 16, "STACK TRACE"); + FaultDrawer_DrawText(36, 24, "SP PC (VPC)"); - for (y = 1; (y < 22) && (((ra != 0) || (sp != 0)) && (pc != (u32)__osCleanupThread)); y++) { - FaultDrawer_DrawText(0x24, y * 8 + 24, "%08x %08x", sp, pc); + for (line = 1; (line < 22) && (((ra != 0) || (sp != 0)) && (pc != (uintptr_t)__osCleanupThread)); line++) { + FaultDrawer_DrawText(0x24, line * 8 + 24, "%08x %08x", sp, pc); if (flags & 1) { - convertedPc = (u32)Fault_ConvertAddress((void*)pc); - if (convertedPc != 0) { - FaultDrawer_Printf(" -> %08x", convertedPc); + // Try to convert the relocated program counter to the corresponding unrelocated virtual address + addr = Fault_ConvertAddress(pc); + if (addr != 0) { + FaultDrawer_Printf(" -> %08x", addr); } } else { FaultDrawer_Printf(" -> ????????"); } - Fault_FindNextStackCall(&sp, &pc, &ra); + Fault_WalkStack(&sp, &pc, &ra); } } -void osSyncPrintfStackTrace(OSThread* t, u32 flags) { - s32 y; - u32 sp; - u32 ra; - u32 pc; - u32 convertedPc; - - sp = t->context.sp; - ra = t->context.ra; - pc = t->context.pc; +void Fault_LogStackTrace(OSThread* thread, u32 flags) { + s32 line; + uintptr_t sp = thread->context.sp; + uintptr_t ra = thread->context.ra; + uintptr_t pc = thread->context.pc; + uintptr_t addr; osSyncPrintf("STACK TRACE"); osSyncPrintf("SP PC (VPC)\n"); - for (y = 1; (y < 22) && (((ra != 0) || (sp != 0)) && (pc != (u32)__osCleanupThread)); y++) { + for (line = 1; (line < 22) && (((ra != 0) || (sp != 0)) && (pc != (uintptr_t)__osCleanupThread)); line++) { osSyncPrintf("%08x %08x", sp, pc); if (flags & 1) { - convertedPc = (u32)Fault_ConvertAddress((void*)pc); - if (convertedPc != 0) { - osSyncPrintf(" -> %08x", convertedPc); + // Try to convert the relocated program counter to the corresponding unrelocated virtual address + addr = Fault_ConvertAddress(pc); + if (addr != 0) { + osSyncPrintf(" -> %08x", addr); } } else { osSyncPrintf(" -> ????????"); } osSyncPrintf("\n"); - Fault_FindNextStackCall(&sp, &pc, &ra); + Fault_WalkStack(&sp, &pc, &ra); } } -void Fault_ResumeThread(OSThread* t) { - t->context.cause = 0; - t->context.fpcsr = 0; - t->context.pc += 4; - *(u32*)t->context.pc = 0x0000000D; // write in a break instruction - osWritebackDCache((void*)t->context.pc, 4); - osInvalICache((void*)t->context.pc, 4); - osStartThread(t); +void Fault_ResumeThread(OSThread* thread) { + thread->context.cause = 0; + thread->context.fpcsr = 0; + thread->context.pc += sizeof(u32); + *(u32*)thread->context.pc = 0x0000000D; // write in a break instruction + osWritebackDCache((void*)thread->context.pc, 4); + osInvalICache((void*)thread->context.pc, 4); + osStartThread(thread); } -void Fault_CommitFB(void) { - u16* fb; +void Fault_DisplayFrameBuffer(void) { + void* fb; osViSetYScale(1.0f); osViSetMode(&osViModeNtscLan1); - osViSetSpecialFeatures(0x42); // gama_disable|dither_fliter_enable_aa_mode3_disable + osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON); osViBlack(false); - if (sFaultContext->fb) { - fb = sFaultContext->fb; + if (sFaultInstance->fb) { + fb = sFaultInstance->fb; } else { - fb = (u16*)osViGetNextFramebuffer(); - if ((u32)fb == 0x80000000) { - fb = (u16*)((osMemSize | 0x80000000) - 0x25800); + fb = osViGetNextFramebuffer(); + if ((uintptr_t)fb == K0BASE) { + fb = (void*)(PHYS_TO_K0(osMemSize) - SCREEN_HEIGHT * SCREEN_WIDTH * sizeof(u16)); } } osViSwapBuffer(fb); - FaultDrawer_SetDrawerFB(fb, SCREEN_WIDTH, SCREEN_HEIGHT); + FaultDrawer_SetDrawerFrameBuffer(fb, SCREEN_WIDTH, SCREEN_HEIGHT); } +/** + * Runs all registered fault clients. Each fault client displays a page + * on the crash screen. + */ void Fault_ProcessClients(void) { - FaultClient* iter = sFaultContext->clients; + FaultClient* client = sFaultInstance->clients; s32 idx = 0; - while (iter != NULL) { - if (iter->callback) { + while (client != NULL) { + if (client->callback != NULL) { Fault_FillScreenBlack(); FaultDrawer_SetCharPad(-2, 0); - FaultDrawer_Printf("\x1A\x38" - "CallBack (%d) %08x %08x %08x\n" - "\x1A\x37", - idx++, iter, iter->param0, iter->param1); + FaultDrawer_Printf(FAULT_COLOR(DARK_GRAY) "CallBack (%d) %08x %08x %08x\n" FAULT_COLOR(WHITE), idx++, + client, client->arg0, client->arg1); FaultDrawer_SetCharPad(0, 0); - iter->callback(iter->param0, iter->param1); + client->callback(client->arg0, client->arg1); Fault_WaitForInput(); - Fault_CommitFB(); + Fault_DisplayFrameBuffer(); } - iter = iter->next; + client = client->next; } } -#ifdef NON_MATCHING -// needs in-function static bss void Fault_SetOptionsFromController3(void) { static u32 faultCustomOptions; - Input* input3 = &sFaultContext->padInput[3]; + Input* input3 = &sFaultInstance->inputs[3]; u32 pad; - u32 graphPC; - u32 graphRA; - u32 graphSP; + uintptr_t pc; + uintptr_t ra; + uintptr_t sp; + // BTN_RESET is the "neutral reset". Corresponds to holding L+R and pressing S if (CHECK_BTN_ALL(input3->press.button, BTN_RESET)) { faultCustomOptions = !faultCustomOptions; } if (faultCustomOptions) { - graphPC = gGraphThread.context.pc; - graphRA = gGraphThread.context.ra; - graphSP = gGraphThread.context.sp; + pc = gGraphThread.context.pc; + ra = gGraphThread.context.ra; + sp = gGraphThread.context.sp; if (CHECK_BTN_ALL(input3->cur.button, BTN_R)) { static u32 faultCopyToLog; @@ -778,149 +940,189 @@ void Fault_SetOptionsFromController3(void) { FaultDrawer_SetOsSyncPrintfEnabled(faultCopyToLog); } if (CHECK_BTN_ALL(input3->cur.button, BTN_A)) { - osSyncPrintf("GRAPH PC=%08x RA=%08x STACK=%08x\n", graphPC, graphRA, graphSP); + osSyncPrintf("GRAPH PC=%08x RA=%08x STACK=%08x\n", pc, ra, sp); } if (CHECK_BTN_ALL(input3->cur.button, BTN_B)) { - FaultDrawer_SetDrawerFB(osViGetNextFramebuffer(), 0x140, 0xF0); + FaultDrawer_SetDrawerFrameBuffer(osViGetNextFramebuffer(), 0x140, 0xF0); Fault_DrawRec(0, 0xD7, 0x140, 9, 1); FaultDrawer_SetCharPad(-2, 0); - FaultDrawer_DrawText(0x20, 0xD8, "GRAPH PC %08x RA %08x SP %08x", graphPC, graphRA, graphSP); + FaultDrawer_DrawText(0x20, 0xD8, "GRAPH PC %08x RA %08x SP %08x", pc, ra, sp); } } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/boot/fault/Fault_SetOptionsFromController3.s") -#endif -void Fault_SetOptions(void) { +void Fault_UpdatePad(void) { Fault_UpdatePadImpl(); Fault_SetOptionsFromController3(); } +#define FAULT_MSG_CPU_BREAK ((OSMesg)1) +#define FAULT_MSG_FAULT ((OSMesg)2) +#define FAULT_MSG_UNK ((OSMesg)3) + void Fault_ThreadEntry(void* arg) { OSMesg msg; u32 pad; OSThread* faultedThread; - 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); + // Direct OS event messages to the fault event queue + osSetEventMesg(OS_EVENT_CPU_BREAK, &sFaultInstance->queue, FAULT_MSG_CPU_BREAK); + osSetEventMesg(OS_EVENT_FAULT, &sFaultInstance->queue, FAULT_MSG_FAULT); - if (msg == (OSMesg)1) { - sFaultContext->msgId = 1; + while (true) { + do { + // Wait for a thread to hit a fault + osRecvMesg(&sFaultInstance->queue, &msg, OS_MESG_BLOCK); + + if (msg == FAULT_MSG_CPU_BREAK) { + sFaultInstance->msgId = (u32)FAULT_MSG_CPU_BREAK; + // "Fault manager: OS_EVENT_CPU_BREAK received" osSyncPrintf("フォルトマネージャ:OS_EVENT_CPU_BREAKを受信しました\n"); - } else if (msg == (OSMesg)2) { - sFaultContext->msgId = 2; + } else if (msg == FAULT_MSG_FAULT) { + sFaultInstance->msgId = (u32)FAULT_MSG_FAULT; + // "Fault manager: OS_EVENT_FAULT received" osSyncPrintf("フォルトマネージャ:OS_EVENT_FAULTを受信しました\n"); - } else if (msg == (OSMesg)3) { - Fault_SetOptions(); + } else if (msg == FAULT_MSG_UNK) { + Fault_UpdatePad(); faultedThread = NULL; continue; } else { - sFaultContext->msgId = 3; + sFaultInstance->msgId = (u32)FAULT_MSG_UNK; + // "Fault manager: received an unknown message" osSyncPrintf("フォルトマネージャ:不明なメッセージを受信しました\n"); } faultedThread = __osGetCurrFaultedThread(); osSyncPrintf("__osGetCurrFaultedThread()=%08x\n", faultedThread); - if (!faultedThread) { + + if (faultedThread == NULL) { faultedThread = Fault_FindFaultedThread(); osSyncPrintf("FindFaultedThread()=%08x\n", faultedThread); } } while (faultedThread == NULL); - __osSetFpcCsr(__osGetFpcCsr() & 0xFFFFF07F); - sFaultContext->faultedThread = faultedThread; - while (!sFaultContext->faultHandlerEnabled) { + __osSetFpcCsr(__osGetFpcCsr() & ~(FPCSR_EV | FPCSR_EZ | FPCSR_EO | FPCSR_EU | FPCSR_EI)); + sFaultInstance->faultedThread = faultedThread; + + while (!sFaultInstance->faultHandlerEnabled) { Fault_Sleep(1000); } - Fault_Sleep(500); - Fault_CommitFB(); + Fault_Sleep(1000 / 2); - if (sFaultContext->faultActive) { + // Show fault framebuffer + Fault_DisplayFrameBuffer(); + + if (sFaultInstance->autoScroll) { Fault_Wait5Seconds(); } else { - Fault_DrawCornerRec(0xF801); + // Draw error bar signifying the crash screen is available + Fault_DrawCornerRec(GPACK_RGBA5551(255, 0, 0, 1)); Fault_WaitForButtonCombo(); } - sFaultContext->faultActive = 1; - FaultDrawer_SetForeColor(0xFFFF); - FaultDrawer_SetBackColor(0); + // Set auto-scrolling and default colors + sFaultInstance->autoScroll = true; + FaultDrawer_SetForeColor(GPACK_RGBA5551(255, 255, 255, 1)); + FaultDrawer_SetBackColor(GPACK_RGBA5551(0, 0, 0, 0)); + // Draw pages do { + // Thread context page Fault_PrintThreadContext(faultedThread); osSyncPrintfThreadContext(faultedThread); Fault_WaitForInput(); + + // Stack trace page Fault_DrawStackTrace(faultedThread, 0); - osSyncPrintfStackTrace(faultedThread, 0); + Fault_LogStackTrace(faultedThread, 0); Fault_WaitForInput(); + + // Client pages Fault_ProcessClients(); + + // Memory dump page Fault_DrawMemDump((u32)(faultedThread->context.pc - 0x100), (u32)faultedThread->context.sp, 0, 0); Fault_DrawStackTrace(faultedThread, 1); - osSyncPrintfStackTrace(faultedThread, 1); + Fault_LogStackTrace(faultedThread, 1); Fault_WaitForInput(); + + // End page Fault_FillScreenRed(); - FaultDrawer_DrawText(0x40, 0x50, " CONGRATURATIONS! "); - FaultDrawer_DrawText(0x40, 0x5A, "All Pages are displayed."); - FaultDrawer_DrawText(0x40, 0x64, " THANK YOU! "); - FaultDrawer_DrawText(0x40, 0x6E, " You are great debugger!"); + FaultDrawer_DrawText(64, 80, " CONGRATURATIONS! "); + FaultDrawer_DrawText(64, 90, "All Pages are displayed."); + FaultDrawer_DrawText(64, 100, " THANK YOU! "); + FaultDrawer_DrawText(64, 110, " You are great debugger!"); Fault_WaitForInput(); + } while (!sFaultInstance->exit); - } while (!sFaultContext->exitDebugger); - - while (!sFaultContext->exitDebugger) { - ; - } + while (!sFaultInstance->exit) {} Fault_ResumeThread(faultedThread); } } -void Fault_SetFB(void* fb, u16 w, u16 h) { - sFaultContext->fb = fb; - FaultDrawer_SetDrawerFB(fb, w, h); +void Fault_SetFrameBuffer(void* fb, u16 w, u16 h) { + sFaultInstance->fb = fb; + FaultDrawer_SetDrawerFrameBuffer(fb, w, h); } -void Fault_Start(void) { - sFaultContext = &gFaultStruct; - bzero(sFaultContext, sizeof(FaultThreadStruct)); +STACK(sFaultStack, 0x600); +StackEntry sFaultStackInfo; +FaultMgr gFaultMgr; + +void Fault_Init(void) { + sFaultInstance = &gFaultMgr; + bzero(sFaultInstance, sizeof(FaultMgr)); FaultDrawer_Init(); FaultDrawer_SetInputCallback(Fault_WaitForInput); - sFaultContext->exitDebugger = 0; - sFaultContext->msgId = 0; - sFaultContext->faultHandlerEnabled = 0; - sFaultContext->faultedThread = NULL; - sFaultContext->padCallback = &Fault_PadCallback; - sFaultContext->clients = NULL; - sFaultContext->faultActive = 0; - gFaultStruct.faultHandlerEnabled = 1; - osCreateMesgQueue(&sFaultContext->queue, sFaultContext->msg, ARRAY_COUNT(sFaultContext->msg)); + sFaultInstance->exit = false; + sFaultInstance->msgId = 0; + sFaultInstance->faultHandlerEnabled = false; + sFaultInstance->faultedThread = NULL; + sFaultInstance->padCallback = Fault_PadCallback; + sFaultInstance->clients = NULL; + sFaultInstance->autoScroll = false; + gFaultMgr.faultHandlerEnabled = true; + osCreateMesgQueue(&sFaultInstance->queue, sFaultInstance->msg, ARRAY_COUNT(sFaultInstance->msg)); StackCheck_Init(&sFaultStackInfo, sFaultStack, STACK_TOP(sFaultStack), 0, 0x100, "fault"); - osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, STACK_TOP(sFaultStack), 0x7F); - osStartThread(&sFaultContext->thread); + osCreateThread(&sFaultInstance->thread, Z_THREAD_ID_FAULT, Fault_ThreadEntry, NULL, STACK_TOP(sFaultStack), + Z_PRIORITY_FAULT); + osStartThread(&sFaultInstance->thread); } -void Fault_HangupFaultClient(const char* arg0, char* arg1) { +/** + * Fault page for Hungup crashes. Displays the thread id and two messages + * specified in arguments to `Fault_AddHungupAndCrashImpl`. + */ +void Fault_HangupFaultClient(const char* exp1, const char* exp2) { osSyncPrintf("HungUp on Thread %d\n", osGetThreadId(NULL)); - osSyncPrintf("%s\n", arg0 ? arg0 : "(NULL)"); - osSyncPrintf("%s\n", arg1 ? arg1 : "(NULL)"); + osSyncPrintf("%s\n", exp1 != NULL ? exp1 : "(NULL)"); + osSyncPrintf("%s\n", exp2 != NULL ? exp2 : "(NULL)"); FaultDrawer_Printf("HungUp on Thread %d\n", osGetThreadId(NULL)); - FaultDrawer_Printf("%s\n", arg0 ? arg0 : "(NULL)"); - FaultDrawer_Printf("%s\n", arg1 ? arg1 : "(NULL)"); + FaultDrawer_Printf("%s\n", exp1 != NULL ? exp1 : "(NULL)"); + FaultDrawer_Printf("%s\n", exp2 != NULL ? exp2 : "(NULL)"); } -void Fault_AddHungupAndCrashImpl(const char* arg0, char* arg1) { +/** + * Immediately crashes the current thread, for cases where an irrecoverable + * error occurs. The parameters specify two messages detailing the error, one + * or both may be NULL. + */ +void Fault_AddHungupAndCrashImpl(const char* exp1, const char* exp2) { FaultClient client; - u32 pad; - Fault_AddClient(&client, Fault_HangupFaultClient, (void*)arg0, arg1); - *(u32*)0x11111111 = 0; // trigger an exception + s32 pad; + + Fault_AddClient(&client, (void*)Fault_HangupFaultClient, (void*)exp1, (void*)exp2); + *(u32*)0x11111111 = 0; // trigger an exception via unaligned memory access } -void Fault_AddHungupAndCrash(const char* filename, u32 line) { - char msg[256]; - sprintf(msg, "HungUp %s:%d", filename, line); +/** + * Like `Fault_AddHungupAndCrashImpl`, however provides a fixed message containing + * file and line number + */ +void Fault_AddHungupAndCrash(const char* file, s32 line) { + char msg[0x100]; + + sprintf(msg, "HungUp %s:%d", file, line); Fault_AddHungupAndCrashImpl(msg, NULL); } diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot_O2_g3/fault_drawer.c index f694be8aa..6031ccaa6 100644 --- a/src/boot_O2_g3/fault_drawer.c +++ b/src/boot_O2_g3/fault_drawer.c @@ -1,28 +1,64 @@ +/** + * @file fault_drawer.c + * + * Implements routines for drawing text with a fixed font directly to a framebuffer, used in displaying + * the crash screen implemented by fault.c + */ + +#include "fault.h" +#include "fault_internal.h" #include "global.h" #include "vt.h" +typedef struct { + /* 0x00 */ u16* frameBuffer; + /* 0x04 */ u16 w; + /* 0x06 */ u16 h; + /* 0x08 */ u16 yStart; + /* 0x0A */ u16 yEnd; + /* 0x0C */ u16 xStart; + /* 0x0E */ u16 xEnd; + /* 0x10 */ u16 foreColor; + /* 0x12 */ u16 backColor; + /* 0x14 */ u16 cursorX; + /* 0x16 */ u16 cursorY; + /* 0x18 */ const u32* fontData; + /* 0x1C */ u8 charW; + /* 0x1D */ u8 charH; + /* 0x1E */ s8 charWPad; + /* 0x1F */ s8 charHPad; + /* 0x20 */ u16 printColors[10]; + /* 0x34 */ u8 escCode; // bool + /* 0x35 */ u8 osSyncPrintfEnabled; + /* 0x38 */ FaultDrawerCallback inputCallback; +} FaultDrawer; // size = 0x3C + extern const u32 sFaultDrawerFont[]; -FaultDrawer sFaultDrawerStruct; +FaultDrawer sFaultDrawer; + +FaultDrawer* sFaultDrawerInstance = &sFaultDrawer; + +#define FAULT_DRAWER_CURSOR_X 22 +#define FAULT_DRAWER_CURSOR_Y 16 -FaultDrawer* sFaultDrawContext = &sFaultDrawerStruct; FaultDrawer sFaultDrawerDefault = { - FAULT_FB_ADDRESS, // fb - SCREEN_WIDTH, // w - SCREEN_HEIGHT, // h - 16, // yStart - 223, // yEnd - 22, // xStart - 297, // xEnd - GPACK_RGBA5551(255, 255, 255, 255), // foreColor - GPACK_RGBA5551(0, 0, 0, 0), // backColor - 22, // cursorX - 16, // cursorY - sFaultDrawerFont, // font - 8, // charW - 8, // charH - 0, // charWPad - 0, // charHPad + FAULT_FB_ADDRESS, // frameBuffer + SCREEN_WIDTH, // w + SCREEN_HEIGHT, // h + FAULT_DRAWER_CURSOR_Y, // yStart + SCREEN_HEIGHT - FAULT_DRAWER_CURSOR_Y - 1, // yEnd + FAULT_DRAWER_CURSOR_X, // xStart + SCREEN_WIDTH - FAULT_DRAWER_CURSOR_X - 1, // xEnd + GPACK_RGBA5551(255, 255, 255, 255), // foreColor + GPACK_RGBA5551(0, 0, 0, 0), // backColor + FAULT_DRAWER_CURSOR_X, // cursorX + FAULT_DRAWER_CURSOR_Y, // cursorY + sFaultDrawerFont, // fontData + 8, // charW + 8, // charH + 0, // charWPad + 0, // charHPad { // printColors GPACK_RGBA5551(0, 0, 0, 1), // BLACK @@ -36,24 +72,24 @@ FaultDrawer sFaultDrawerDefault = { GPACK_RGBA5551(120, 120, 120, 1), // DARK GRAY GPACK_RGBA5551(176, 176, 176, 1), // LIGHT GRAY }, - 0, // escCode - 0, // osSyncPrintfEnabled - NULL, // inputCallback + false, // escCode + false, // osSyncPrintfEnabled + NULL, // inputCallback }; //! TODO: Needs to be extracted #pragma GLOBAL_ASM("asm/non_matchings/boot/fault_drawer/sFaultDrawerFont.s") void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled) { - sFaultDrawContext->osSyncPrintfEnabled = enabled; + sFaultDrawerInstance->osSyncPrintfEnabled = enabled; } void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 color) { - u16* fb; + u16* frameBuffer; s32 x; s32 y; - s32 xDiff = sFaultDrawContext->w - xStart; - s32 yDiff = sFaultDrawContext->h - yStart; + s32 xDiff = sFaultDrawerInstance->w - xStart; + s32 yDiff = sFaultDrawerInstance->h - yStart; s32 xSize = xEnd - xStart + 1; s32 ySize = yEnd - yStart + 1; @@ -66,12 +102,12 @@ void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 col ySize = yDiff; } - fb = sFaultDrawContext->fb + sFaultDrawContext->w * yStart + xStart; + frameBuffer = sFaultDrawerInstance->frameBuffer + sFaultDrawerInstance->w * yStart + xStart; for (y = 0; y < ySize; y++) { for (x = 0; x < xSize; x++) { - *fb++ = color; + *frameBuffer++ = color; } - fb += sFaultDrawContext->w - xSize; + frameBuffer += sFaultDrawerInstance->w - xSize; } osWritebackDCacheAll(); @@ -82,29 +118,29 @@ void FaultDrawer_DrawChar(char c) { s32 x; s32 y; u32 data; - s32 cursorX = sFaultDrawContext->cursorX; - s32 cursorY = sFaultDrawContext->cursorY; + s32 cursorX = sFaultDrawerInstance->cursorX; + s32 cursorY = sFaultDrawerInstance->cursorY; s32 shift = c % 4; - const u32* dataPtr = &sFaultDrawContext->font[(((c / 8) * 16) + ((c & 4) >> 2))]; - u16* fb = sFaultDrawContext->fb + (sFaultDrawContext->w * cursorY) + cursorX; + const u32* dataPtr = &sFaultDrawerInstance->fontData[(((c / 8) * 16) + ((c & 4) >> 2))]; + u16* frameBuffer = sFaultDrawerInstance->frameBuffer + (sFaultDrawerInstance->w * cursorY) + cursorX; - if ((sFaultDrawContext->xStart <= cursorX) && - ((sFaultDrawContext->charW + cursorX - 1) <= sFaultDrawContext->xEnd) && - (sFaultDrawContext->yStart <= cursorY) && - ((sFaultDrawContext->charH + cursorY - 1) <= sFaultDrawContext->yEnd)) { - for (y = 0; y < sFaultDrawContext->charH; y++) { + if ((sFaultDrawerInstance->xStart <= cursorX) && + ((sFaultDrawerInstance->charW + cursorX - 1) <= sFaultDrawerInstance->xEnd) && + (sFaultDrawerInstance->yStart <= cursorY) && + ((sFaultDrawerInstance->charH + cursorY - 1) <= sFaultDrawerInstance->yEnd)) { + for (y = 0; y < sFaultDrawerInstance->charH; y++) { u32 mask = 0x10000000 << shift; data = *dataPtr; - for (x = 0; x < sFaultDrawContext->charW; x++) { + for (x = 0; x < sFaultDrawerInstance->charW; x++) { if (mask & data) { - fb[x] = sFaultDrawContext->foreColor; - } else if (sFaultDrawContext->backColor & 1) { - fb[x] = sFaultDrawContext->backColor; + frameBuffer[x] = sFaultDrawerInstance->foreColor; + } else if (sFaultDrawerInstance->backColor & 1) { + frameBuffer[x] = sFaultDrawerInstance->backColor; } mask >>= 4; } - fb += sFaultDrawContext->w; + frameBuffer += sFaultDrawerInstance->w; dataPtr += 2; } } @@ -113,37 +149,39 @@ void FaultDrawer_DrawChar(char c) { s32 FaultDrawer_ColorToPrintColor(u16 color) { s32 i; - for (i = 0; i < 10; i++) { - if (color == sFaultDrawContext->printColors[i]) { + for (i = 0; i < ARRAY_COUNT(sFaultDrawerInstance->printColors); i++) { + if (color == sFaultDrawerInstance->printColors[i]) { return i; } } return -1; } -void FaultDrawer_UpdatePrintColor() { - s32 idx; +void FaultDrawer_UpdatePrintColor(void) { + s32 index; - if (sFaultDrawContext->osSyncPrintfEnabled) { + if (sFaultDrawerInstance->osSyncPrintfEnabled) { osSyncPrintf(VT_RST); - idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->foreColor); - if ((idx >= 0) && (idx < 8)) { - osSyncPrintf(VT_SGR("3%d"), idx); + + index = FaultDrawer_ColorToPrintColor(sFaultDrawerInstance->foreColor); + if ((index >= 0) && (index < 8)) { + osSyncPrintf(VT_SGR("3%d"), index); } - idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->backColor); - if ((idx >= 0) && (idx < 8)) { - osSyncPrintf(VT_SGR("4%d"), idx); + + index = FaultDrawer_ColorToPrintColor(sFaultDrawerInstance->backColor); + if ((index >= 0) && (index < 8)) { + osSyncPrintf(VT_SGR("4%d"), index); } } } void FaultDrawer_SetForeColor(u16 color) { - sFaultDrawContext->foreColor = color; + sFaultDrawerInstance->foreColor = color; FaultDrawer_UpdatePrintColor(); } void FaultDrawer_SetBackColor(u16 color) { - sFaultDrawContext->backColor = color; + sFaultDrawerInstance->backColor = color; FaultDrawer_UpdatePrintColor(); } @@ -152,70 +190,71 @@ void FaultDrawer_SetFontColor(u16 color) { } void FaultDrawer_SetCharPad(s8 padW, s8 padH) { - sFaultDrawContext->charWPad = padW; - sFaultDrawContext->charHPad = padH; + sFaultDrawerInstance->charWPad = padW; + sFaultDrawerInstance->charHPad = padH; } void FaultDrawer_SetCursor(s32 x, s32 y) { - if (sFaultDrawContext->osSyncPrintfEnabled) { - osSyncPrintf(VT_CUP("%d", "%d"), - (y - sFaultDrawContext->yStart) / (sFaultDrawContext->charH + sFaultDrawContext->charHPad), - (x - sFaultDrawContext->xStart) / (sFaultDrawContext->charW + sFaultDrawContext->charWPad)); + if (sFaultDrawerInstance->osSyncPrintfEnabled) { + osSyncPrintf( + VT_CUP("%d", "%d"), + (y - sFaultDrawerInstance->yStart) / (sFaultDrawerInstance->charH + sFaultDrawerInstance->charHPad), + (x - sFaultDrawerInstance->xStart) / (sFaultDrawerInstance->charW + sFaultDrawerInstance->charWPad)); } - sFaultDrawContext->cursorX = x; - sFaultDrawContext->cursorY = y; + sFaultDrawerInstance->cursorX = x; + sFaultDrawerInstance->cursorY = y; } void FaultDrawer_FillScreen() { - if (sFaultDrawContext->osSyncPrintfEnabled) { + if (sFaultDrawerInstance->osSyncPrintfEnabled) { osSyncPrintf(VT_CLS); } - FaultDrawer_DrawRecImpl(sFaultDrawContext->xStart, sFaultDrawContext->yStart, sFaultDrawContext->xEnd, - sFaultDrawContext->yEnd, sFaultDrawContext->backColor | 1); - FaultDrawer_SetCursor(sFaultDrawContext->xStart, sFaultDrawContext->yStart); + FaultDrawer_DrawRecImpl(sFaultDrawerInstance->xStart, sFaultDrawerInstance->yStart, sFaultDrawerInstance->xEnd, + sFaultDrawerInstance->yEnd, sFaultDrawerInstance->backColor | 1); + FaultDrawer_SetCursor(sFaultDrawerInstance->xStart, sFaultDrawerInstance->yStart); } void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { for (; count != 0; count--, str++) { - if (sFaultDrawContext->escCode) { - sFaultDrawContext->escCode = false; - if ((*str >= '1') && (*str <= '9')) { - FaultDrawer_SetForeColor(sFaultDrawContext->printColors[*str - '0']); + if (sFaultDrawerInstance->escCode) { + sFaultDrawerInstance->escCode = false; + if (*str >= '1' && *str <= '9') { + FaultDrawer_SetForeColor(sFaultDrawerInstance->printColors[*str - '0']); } } else { switch (*str) { case '\n': - if (sFaultDrawContext->osSyncPrintfEnabled) { + if (sFaultDrawerInstance->osSyncPrintfEnabled) { osSyncPrintf("\n"); } - sFaultDrawContext->cursorX = sFaultDrawContext->w; + sFaultDrawerInstance->cursorX = sFaultDrawerInstance->w; break; - case '\x1A': - sFaultDrawContext->escCode = true; + case FAULT_ESC: + sFaultDrawerInstance->escCode = true; break; default: - if (sFaultDrawContext->osSyncPrintfEnabled) { + if (sFaultDrawerInstance->osSyncPrintfEnabled) { osSyncPrintf("%c", *str); } FaultDrawer_DrawChar(*str); - sFaultDrawContext->cursorX += sFaultDrawContext->charW + sFaultDrawContext->charWPad; + sFaultDrawerInstance->cursorX += sFaultDrawerInstance->charW + sFaultDrawerInstance->charWPad; } } - if (sFaultDrawContext->cursorX >= (sFaultDrawContext->xEnd - sFaultDrawContext->charW)) { - sFaultDrawContext->cursorX = sFaultDrawContext->xStart; - sFaultDrawContext->cursorY += sFaultDrawContext->charH + sFaultDrawContext->charHPad; - if (sFaultDrawContext->yEnd - sFaultDrawContext->charH <= sFaultDrawContext->cursorY) { - if (sFaultDrawContext->inputCallback != NULL) { - sFaultDrawContext->inputCallback(); + if (sFaultDrawerInstance->cursorX >= (sFaultDrawerInstance->xEnd - sFaultDrawerInstance->charW)) { + sFaultDrawerInstance->cursorX = sFaultDrawerInstance->xStart; + sFaultDrawerInstance->cursorY += sFaultDrawerInstance->charH + sFaultDrawerInstance->charHPad; + if (sFaultDrawerInstance->yEnd - sFaultDrawerInstance->charH <= sFaultDrawerInstance->cursorY) { + if (sFaultDrawerInstance->inputCallback != NULL) { + sFaultDrawerInstance->inputCallback(); FaultDrawer_FillScreen(); } - sFaultDrawContext->cursorY = sFaultDrawContext->yStart; + sFaultDrawerInstance->cursorY = sFaultDrawerInstance->yStart; } } } @@ -227,17 +266,21 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { const char D_80099080[] = "(null)"; -void FaultDrawer_VPrintf(const char* fmt, va_list ap) { - _Printf(FaultDrawer_FormatStringFunc, sFaultDrawContext, fmt, ap); +s32 FaultDrawer_VPrintf(const char* fmt, va_list ap) { + return _Printf(FaultDrawer_FormatStringFunc, sFaultDrawerInstance, fmt, ap); } -void FaultDrawer_Printf(const char* fmt, ...) { +s32 FaultDrawer_Printf(const char* fmt, ...) { + s32 ret; va_list args; + va_start(args, fmt); - FaultDrawer_VPrintf(fmt, args); + ret = FaultDrawer_VPrintf(fmt, args); va_end(args); + + return ret; } void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) { @@ -250,18 +293,18 @@ void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) { va_end(args); } -void FaultDrawer_SetDrawerFB(void* fb, u16 w, u16 h) { - sFaultDrawContext->fb = (u16*)fb; - sFaultDrawContext->w = w; - sFaultDrawContext->h = h; +void FaultDrawer_SetDrawerFrameBuffer(void* frameBuffer, u16 w, u16 h) { + sFaultDrawerInstance->frameBuffer = frameBuffer; + sFaultDrawerInstance->w = w; + sFaultDrawerInstance->h = h; } void FaultDrawer_SetInputCallback(FaultDrawerCallback callback) { - sFaultDrawContext->inputCallback = callback; + sFaultDrawerInstance->inputCallback = callback; } void FaultDrawer_Init() { - sFaultDrawContext = &sFaultDrawerStruct; - bcopy(&sFaultDrawerDefault, sFaultDrawContext, sizeof(FaultDrawer)); - sFaultDrawContext->fb = (u16*)((osMemSize | 0x80000000) - 0x25800); + sFaultDrawerInstance = &sFaultDrawer; + bcopy(&sFaultDrawerDefault, sFaultDrawerInstance, sizeof(FaultDrawer)); + sFaultDrawerInstance->frameBuffer = (u16*)(PHYS_TO_K0(osMemSize) - SCREEN_HEIGHT * SCREEN_WIDTH * sizeof(u16)); } diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 76f990659..31166c3b5 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "fault.h" u8 sYaz0DataBuffer[0x400]; u8* sYaz0CurDataEnd; diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 477fd3f68..ac4992264 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "fault.h" #include "stack.h" #include "stackcheck.h" #include "z64thread.h" diff --git a/src/code/graph.c b/src/code/graph.c index 6d4665b39..ce929e6c0 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,5 +1,17 @@ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "z64.h" +#include "regs.h" +#include "functions.h" +#include "fault.h" + +// Variables are put before most headers as a hacky way to bypass bss reordering +FaultAddrConvClient sGraphFaultAddrConvClient; +FaultClient sGraphFaultClient; +GfxMasterList* gGfxMasterDL; +CfbInfo sGraphCfbInfos[3]; +OSTime sGraphTaskStartTime; + +#include "variables.h" +#include "macros.h" #include "buffers.h" #include "idle.h" #include "system_malloc.h" @@ -10,12 +22,6 @@ #include "overlays/gamestates/ovl_title/z_title.h" #include "z_title_setup.h" -FaultAddrConvClient sGraphFaultAddrConvClient; -FaultClient sGraphFaultClient; -GfxMasterList* gGfxMasterDL; -CfbInfo sGraphCfbInfos[3]; -OSTime sGraphTaskStartTime; - void Graph_FaultClient(void) { FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1"); osViSwapBuffer(SysCfb_GetFramebuffer(0)); @@ -93,7 +99,7 @@ GameStateOverlay* Graph_GetNextGameState(GameState* gameState) { return NULL; } -void* Graph_FaultAddrConv(void* address, void* param) { +uintptr_t Graph_FaultAddrConv(uintptr_t address, void* param) { uintptr_t addr = address; GameStateOverlay* gameStateOvl = &gGameStateOverlayTable[0]; size_t ramConv; @@ -112,7 +118,7 @@ void* Graph_FaultAddrConv(void* address, void* param) { } } } - return NULL; + return 0; } void Graph_Init(GraphicsContext* gfxCtx) { @@ -124,7 +130,7 @@ void Graph_Init(GraphicsContext* gfxCtx) { gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; osCreateMesgQueue(&gfxCtx->queue, gfxCtx->msgBuff, ARRAY_COUNT(gfxCtx->msgBuff)); - Fault_AddClient(&sGraphFaultClient, Graph_FaultClient, NULL, NULL); + Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL); Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL); } @@ -354,7 +360,7 @@ void Graph_ThreadEntry(void* arg) { gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes); SysCfb_Init(); - Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT); + Fault_SetFrameBuffer(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT); Graph_Init(&gfxCtx); while (nextOvl) { diff --git a/src/code/main.c b/src/code/main.c index f969df70d..7fbb7ccb8 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,12 +1,11 @@ #include "audiomgr.h" +#include "fault.h" #include "idle.h" #include "irqmgr.h" #include "padmgr.h" #include "scheduler.h" #include "stack.h" #include "stackcheck.h" -#include "system_heap.h" -#include "z64thread.h" // Variables are put before most headers as a hacky way to bypass bss reordering OSMesgQueue sSerialEventQueue; @@ -32,6 +31,8 @@ PadMgr gPadMgr; #include "main.h" #include "buffers.h" #include "global.h" +#include "system_heap.h" +#include "z64thread.h" s32 gScreenWidth = SCREEN_WIDTH; s32 gScreenHeight = SCREEN_HEIGHT; @@ -47,7 +48,7 @@ void Main(void* arg) { gScreenHeight = SCREEN_HEIGHT; Nmi_Init(); - Fault_Start(); + Fault_Init(); Check_RegionIsSupported(); Check_ExpansionPak(); diff --git a/src/code/padmgr.c b/src/code/padmgr.c index a04a14f57..eb6a811b7 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -30,9 +30,11 @@ * `osContStartReadData` to receiving the data. By running this on a separate thread to the game state, work can be * done while waiting for this operation to complete. */ + #include "global.h" #include "io/controller.h" #include "ultra64/motor.h" +#include "fault.h" #define PADMGR_RETRACE_MSG (1 << 0) #define PADMGR_PRE_NMI_MSG (1 << 1) @@ -641,7 +643,7 @@ void PadMgr_HandleRetrace(void) { } // Rumble Pak - if (gFaultStruct.msgId != 0) { + if (gFaultMgr.msgId != 0) { // If fault is active, no rumble PadMgr_RumbleStop(); } else if (sPadMgrInstance->rumbleOffTimer > 0) { diff --git a/src/code/sched.c b/src/code/sched.c index fb7a0073c..19e6a6bc9 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,15 +1,8 @@ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "fault.h" #include "idle.h" -#include "stackcheck.h" -#include "z64thread.h" - -#define RSP_DONE_MSG 667 -#define RDP_DONE_MSG 668 -#define ENTRY_MSG 670 -#define RDP_AUDIO_CANCEL_MSG 671 -#define RSP_GFX_CANCEL_MSG 672 +#include "z64.h" +// Variables are put before most headers as a hacky way to bypass bss reordering FaultClient sSchedFaultClient; OSTime sRSPGFXStartTime; @@ -20,6 +13,17 @@ OSTime sRDPStartTime; u64* gAudioSPDataPtr; u32 gAudioSPDataSize; +#include "functions.h" +#include "variables.h" +#include "stackcheck.h" +#include "z64thread.h" + +#define RSP_DONE_MSG 667 +#define RDP_DONE_MSG 668 +#define ENTRY_MSG 670 +#define RDP_AUDIO_CANCEL_MSG 671 +#define RSP_GFX_CANCEL_MSG 672 + void Sched_SwapFramebuffer(CfbInfo* cfbInfo) { if (cfbInfo->swapBuffer != NULL) { osViSwapBuffer(cfbInfo->swapBuffer); diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index f2424b850..0f4e9f748 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "fault.h" #include "stack.h" #include "stackcheck.h" #include "system_malloc.h" diff --git a/src/code/sys_initial_check.c b/src/code/sys_initial_check.c index ec61d07b5..3f46a5818 100644 --- a/src/code/sys_initial_check.c +++ b/src/code/sys_initial_check.c @@ -7,6 +7,7 @@ * are DMA'd directly to fixed RAM addresses. */ #include "global.h" +#include "fault.h" #include "misc/locerrmsg/locerrmsg.h" #include "misc/memerrmsg/memerrmsg.h" @@ -23,7 +24,7 @@ // Address with enough room after to load either of the error message image files before the fault screen buffer at the // end of RDRAM -#define CHECK_ERRMSG_STATIC_SEGMENT (u8*)(FAULT_FB_ADDRESS - MAX(SIZEOF_LOCERRMSG, SIZEOF_MEMERRMSG)) +#define CHECK_ERRMSG_STATIC_SEGMENT (u8*)((uintptr_t)FAULT_FB_ADDRESS - MAX(SIZEOF_LOCERRMSG, SIZEOF_MEMERRMSG)) void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value) { if (value & RGBA16_PIXEL_OPAQUE) { diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index de8da3def..6269add5f 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -39,6 +39,7 @@ * (APPLY), or to just overwrite it (NEW). */ +#include "prevent_bss_reordering.h" #include "global.h" /* data */ diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 094b36787..35dbc8361 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4,6 +4,7 @@ */ #include "global.h" +#include "fault.h" #include "loadfragment.h" #include "z64horse.h" #include "z64quake.h" diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 2e2f80a50..012c118fb 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fault.h" // Init Vars declarations (also used in the table below) #define DEFINE_ACTOR(name, _enumValue, _allocType, _debugName) extern ActorInit name##_InitVars; @@ -60,7 +61,7 @@ void ActorOverlayTable_FaultClient(void* arg0, void* arg1) { } } -void* ActorOverlayTable_FaultAddrConv(void* address, void* param) { +uintptr_t ActorOverlayTable_FaultAddrConv(uintptr_t address, void* param) { uintptr_t addr = address; ActorOverlay* actorOvl = &gActorOverlayTable[0]; size_t ramConv; @@ -79,7 +80,8 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param) { } } } - return NULL; + + return 0; } void ActorOverlayTable_Init(void) { diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index f63ff6b01..ab2eca48a 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fault.h" #include "fixed_point.h" #include "vt.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" @@ -80,9 +81,15 @@ BgSpecialSceneMaxObjects sCustomDynapolyMem[] = { // TODO: All these bss variables are localized to one function and can // likely be made into in-function static bss variables in the future +char D_801ED950[80]; +char D_801ED9A0[80]; + Vec3f D_801ED9F0[3]; // polyVerts Vec3f D_801EDA18[3]; // polyVerts +MtxF sModelToWorldMtxF; Vec3f D_801EDA80[3]; // polyVerts +char D_801EDAA8[80]; +char D_801EDAF8[80]; Vec3f D_801EDB48[3]; // polyVerts #ifndef NON_MATCHING @@ -92,13 +99,6 @@ Sphere16 D_801EDBA8; // sphere; TriNorm D_801EDBB0; // tri; #endif -char D_801ED950[80]; -char D_801ED9A0[80]; - -char D_801EDAA8[80]; -char D_801EDAF8[80]; -MtxF sModelToWorldMtxF; - void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast); s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32* outZ, Vec3f* pos, f32 radius, diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 39b57cbd0..af1f4ad6c 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64collision_check.h" diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 262bc0ebc..771e76722 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c index a84e74776..e09492d4e 100644 --- a/src/code/z_kaleido_manager.c +++ b/src/code/z_kaleido_manager.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fault.h" #include "loadfragment.h" #define KALEIDO_OVERLAY(name) \ @@ -16,7 +17,7 @@ void* sKaleidoAreaPtr = NULL; KaleidoMgrOverlay* gKaleidoMgrCurOvl = NULL; FaultAddrConvClient sKaleidoMgrFaultAddrConvClient; -void* KaleidoManager_FaultAddrConv(void* address, void* param) { +uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param) { uintptr_t addr = address; KaleidoMgrOverlay* kaleidoMgrOvl = gKaleidoMgrCurOvl; size_t ramConv; @@ -34,7 +35,7 @@ void* KaleidoManager_FaultAddrConv(void* address, void* param) { } } } - return NULL; + return 0; } void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) { diff --git a/src/code/z_play.c b/src/code/z_play.c index a97cf9f8e..2965e0e2e 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 "idle.h" diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index d87905117..bd8a5b94e 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -3,7 +3,6 @@ * 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" diff --git a/src/libultra/os/createthread.c b/src/libultra/os/createthread.c index 0e61b0583..e67743eb3 100644 --- a/src/libultra/os/createthread.c +++ b/src/libultra/os/createthread.c @@ -1,28 +1,28 @@ #include "global.h" -void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPri p) { +void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p) { register u32 saveMask; OSIntMask mask; - t->id = id; - t->priority = p; - t->next = NULL; - t->queue = NULL; - t->context.pc = (u32)entry; - t->context.a0 = arg; - t->context.sp = (u64)(s32)sp - 16; - t->context.ra = __osCleanupThread; + thread->id = id; + thread->priority = p; + thread->next = NULL; + thread->queue = NULL; + thread->context.pc = (u32)entry; + thread->context.a0 = arg; + thread->context.sp = (u64)(s32)sp - 16; + thread->context.ra = __osCleanupThread; mask = 0x3FFF01; - t->context.sr = 0xFF03; - t->context.rcp = (mask & 0x3F0000) >> 16; - t->context.fpcsr = 0x01000800; - t->fp = 0; - t->state = 1; - t->flags = 0; + thread->context.sr = 0xFF03; + thread->context.rcp = (mask & 0x3F0000) >> 16; + thread->context.fpcsr = 0x01000800; + thread->fp = 0; + thread->state = 1; + thread->flags = 0; saveMask = __osDisableInt(); - t->tlnext = __osActiveQueue; - __osActiveQueue = t; + thread->tlnext = __osActiveQueue; + __osActiveQueue = thread; __osRestoreInt(saveMask); } diff --git a/src/libultra/os/setthreadpri.c b/src/libultra/os/setthreadpri.c index fde6e78dd..2da5bf266 100644 --- a/src/libultra/os/setthreadpri.c +++ b/src/libultra/os/setthreadpri.c @@ -1,20 +1,20 @@ #include "global.h" -void osSetThreadPri(OSThread* t, OSPri p) { +void osSetThreadPri(OSThread* thread, OSPri p) { register u32 saveMask; saveMask = __osDisableInt(); - if (t == NULL) { - t = __osRunningThread; + if (thread == NULL) { + thread = __osRunningThread; } - if (t->priority != p) { - t->priority = p; + if (thread->priority != p) { + thread->priority = p; - if (t != __osRunningThread && t->state != 1) { - __osDequeueThread(t->queue, t); - __osEnqueueThread(t->queue, t); + if (thread != __osRunningThread && thread->state != 1) { + __osDequeueThread(thread->queue, thread); + __osEnqueueThread(thread->queue, thread); } if (__osRunningThread->priority < __osRunQueue->priority) { 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 bf40d4480..393c88232 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -4,6 +4,7 @@ * Description: Twinmold */ +#include "prevent_bss_reordering.h" #include "z_boss_02.h" #include "z64rumble.h" #include "z64shrink_window.h" 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 137829cf5..8dd771bd8 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -4,7 +4,6 @@ * Description: Seahorse */ -#include "prevent_bss_reordering.h" #include "z_en_ot.h" #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" 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 2354f9f62..f44033861 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -3,6 +3,7 @@ * Overlay: ovl_Obj_Hunsui * Description: Switch-Activated Geyser */ + #include "z_obj_hunsui.h" #include "objects/object_hunsui/object_hunsui.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 09f870713..d210bc91d 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3,7 +3,7 @@ * Overlay: ovl_player_actor * Description: Player */ -#include "prevent_bss_reordering.h" + #include "global.h" #include "z64horse.h" #include "z64quake.h" 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 c7f7379fe..374535c3a 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 @@ -3,6 +3,8 @@ * Overlay: ovl_kaleido_scope * Description: Pause Menu */ + +#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index b56253e41..557c278c7 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -65,27 +65,27 @@ 0x8008212C:("Fault_FillScreenRed",), 0x80082180:("Fault_DrawCornerRec",), 0x800821D4:("Fault_PrintFReg",), - 0x80082280:("osSyncPrintfFReg",), + 0x80082280:("Fault_LogFReg",), 0x80082330:("Fault_PrintFPCR",), - 0x800823D4:("osSyncPrintfFPCR",), + 0x800823D4:("Fault_LogFPCSR",), 0x8008246C:("Fault_PrintThreadContext",), 0x800827BC:("osSyncPrintfThreadContext",), 0x80082AB8:("Fault_FindFaultedThread",), 0x80082B40:("Fault_Wait5Seconds",), 0x80082BD0:("Fault_WaitForButtonCombo",), - 0x80082C6C:("Fault_DrawMemDumpPage",), + 0x80082C6C:("Fault_DrawMemDumpContents",), 0x80082DD8:("Fault_DrawMemDump",), - 0x80082FD0:("Fault_FindNextStackCall",), + 0x80082FD0:("Fault_WalkStack",), 0x80083144:("Fault_DrawStackTrace",), - 0x800832D4:("osSyncPrintfStackTrace",), + 0x800832D4:("Fault_LogStackTrace",), 0x80083450:("Fault_ResumeThread",), - 0x800834CC:("Fault_CommitFB",), + 0x800834CC:("Fault_DisplayFrameBuffer",), 0x8008358C:("Fault_ProcessClients",), 0x80083670:("Fault_SetOptionsFromController3",), - 0x800837E4:("Fault_SetOptions",), + 0x800837E4:("Fault_UpdatePad",), 0x80083828:("Fault_ThreadEntry",), - 0x80083B70:("Fault_SetFB",), - 0x80083BC4:("Fault_Start",), + 0x80083B70:("Fault_SetFrameBuffer",), + 0x80083BC4:("Fault_Init",), 0x80083CF8:("Fault_HangupFaultClient",), 0x80083DF4:("Fault_AddHungupAndCrashImpl",), 0x80083E4C:("Fault_AddHungupAndCrash",), @@ -104,7 +104,7 @@ 0x8008477C:("FaultDrawer_VPrintf",), 0x800847CC:("FaultDrawer_Printf",), 0x8008481C:("FaultDrawer_DrawText",), - 0x8008486C:("FaultDrawer_SetDrawerFB",), + 0x8008486C:("FaultDrawer_SetDrawerFrameBuffer",), 0x800848A4:("FaultDrawer_SetInputCallback",), 0x800848B8:("FaultDrawer_Init",), 0x80084940:("func_80084940",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 04d893310..9b61c54c7 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -25,7 +25,7 @@ 0x80096B78:("sIrqMgrRetraceCount","s32","",0x4), 0x80096B80:("sCpuExceptions","char*","[18]",0x48), 0x80096BC8:("sFpuExceptions","char*","[6]",0x18), - 0x80096BE0:("sFaultDrawContext","FaultDrawer*","",0x4), + 0x80096BE0:("sFaultDrawerInstance","FaultDrawer*","",0x4), 0x80096BE4:("sFaultDrawerDefault","FaultDrawer","",0x3c), 0x80096C20:("gLoadLogSeverity","UNK_TYPE4","",0x4), 0x80096C30:("gOverlayLogSeverity","UNK_TYPE4","",0x4), @@ -313,14 +313,14 @@ 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4), 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4), 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10), - 0x8009BE50:("sFaultContext","FaultThreadStruct*","",0x4), - 0x8009BE54:("D_8009BE54","f32","",0x4), + 0x8009BE50:("sFaultInstance","FaultMgr*","",0x4), + 0x8009BE54:("sFaultTimeTotal","f32","",0x4), 0x8009BE58:("faultCustomOptions","u32","",0x4), 0x8009BE5C:("faultCopyToLog","u32","",0x4), 0x8009BE60:("sFaultStack","u8","[1536]",0x600), - 0x8009C460:("sFaultStackInfo","StackEntry","",0x1c), - 0x8009C480:("gFaultStruct","FaultThreadStruct","",0x848), - 0x8009CCD0:("sFaultDrawerStruct","FaultDrawer","",0x3c), + 0x8009C460:("sFaultStackInfo","StackEntry","",0x1C), + 0x8009C480:("gFaultMgr","FaultMgr","",0x848), + 0x8009CCD0:("sFaultDrawer","FaultDrawer","",0x3c), 0x8009CD10:("D_8009CD10","UNK_TYPE4","",0x4), 0x8009CD20:("gSystemArena","Arena","",0x24), 0x8009CD50:("sRandFloat","f32","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index 514d68d3c..0a809f804 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1128,6 +1128,8 @@ wordReplace = { "D_801D1E20": "gIdentityMtxF", "sSetupDL": "gSetupDLs", + "gFaultStruct": "gFaultMgr", + "D_801BDA9C": "gHorseIsMounted", "D_801BDAA4": "gHorsePlayedEponasSong", diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index c94e9cc72..1c05ba562 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -62,27 +62,27 @@ asm/non_matchings/boot/fault/Fault_FillScreenBlack.s,Fault_FillScreenBlack,0x800 asm/non_matchings/boot/fault/Fault_FillScreenRed.s,Fault_FillScreenRed,0x8008212C,0x15 asm/non_matchings/boot/fault/Fault_DrawCornerRec.s,Fault_DrawCornerRec,0x80082180,0x15 asm/non_matchings/boot/fault/Fault_PrintFReg.s,Fault_PrintFReg,0x800821D4,0x2B -asm/non_matchings/boot/fault/osSyncPrintfFReg.s,osSyncPrintfFReg,0x80082280,0x2C +asm/non_matchings/boot/fault/Fault_LogFReg.s,Fault_LogFReg,0x80082280,0x2C asm/non_matchings/boot/fault/Fault_PrintFPCR.s,Fault_PrintFPCR,0x80082330,0x29 -asm/non_matchings/boot/fault/osSyncPrintfFPCR.s,osSyncPrintfFPCR,0x800823D4,0x26 +asm/non_matchings/boot/fault/Fault_LogFPCSR.s,Fault_LogFPCSR,0x800823D4,0x26 asm/non_matchings/boot/fault/Fault_PrintThreadContext.s,Fault_PrintThreadContext,0x8008246C,0xD4 asm/non_matchings/boot/fault/osSyncPrintfThreadContext.s,osSyncPrintfThreadContext,0x800827BC,0xBF asm/non_matchings/boot/fault/Fault_FindFaultedThread.s,Fault_FindFaultedThread,0x80082AB8,0x22 asm/non_matchings/boot/fault/Fault_Wait5Seconds.s,Fault_Wait5Seconds,0x80082B40,0x24 asm/non_matchings/boot/fault/Fault_WaitForButtonCombo.s,Fault_WaitForButtonCombo,0x80082BD0,0x27 -asm/non_matchings/boot/fault/Fault_DrawMemDumpPage.s,Fault_DrawMemDumpPage,0x80082C6C,0x5B +asm/non_matchings/boot/fault/Fault_DrawMemDumpContents.s,Fault_DrawMemDumpContents,0x80082C6C,0x5B asm/non_matchings/boot/fault/Fault_DrawMemDump.s,Fault_DrawMemDump,0x80082DD8,0x7E -asm/non_matchings/boot/fault/Fault_FindNextStackCall.s,Fault_FindNextStackCall,0x80082FD0,0x5D +asm/non_matchings/boot/fault/Fault_WalkStack.s,Fault_WalkStack,0x80082FD0,0x5D asm/non_matchings/boot/fault/Fault_DrawStackTrace.s,Fault_DrawStackTrace,0x80083144,0x64 -asm/non_matchings/boot/fault/osSyncPrintfStackTrace.s,osSyncPrintfStackTrace,0x800832D4,0x5F +asm/non_matchings/boot/fault/Fault_LogStackTrace.s,Fault_LogStackTrace,0x800832D4,0x5F asm/non_matchings/boot/fault/Fault_ResumeThread.s,Fault_ResumeThread,0x80083450,0x1F -asm/non_matchings/boot/fault/Fault_CommitFB.s,Fault_CommitFB,0x800834CC,0x30 +asm/non_matchings/boot/fault/Fault_DisplayFrameBuffer.s,Fault_DisplayFrameBuffer,0x800834CC,0x30 asm/non_matchings/boot/fault/Fault_ProcessClients.s,Fault_ProcessClients,0x8008358C,0x39 asm/non_matchings/boot/fault/Fault_SetOptionsFromController3.s,Fault_SetOptionsFromController3,0x80083670,0x5D -asm/non_matchings/boot/fault/Fault_SetOptions.s,Fault_SetOptions,0x800837E4,0x11 +asm/non_matchings/boot/fault/Fault_UpdatePad.s,Fault_UpdatePad,0x800837E4,0x11 asm/non_matchings/boot/fault/Fault_ThreadEntry.s,Fault_ThreadEntry,0x80083828,0xD2 -asm/non_matchings/boot/fault/Fault_SetFB.s,Fault_SetFB,0x80083B70,0x15 -asm/non_matchings/boot/fault/Fault_Start.s,Fault_Start,0x80083BC4,0x4D +asm/non_matchings/boot/fault/Fault_SetFrameBuffer.s,Fault_SetFrameBuffer,0x80083B70,0x15 +asm/non_matchings/boot/fault/Fault_Init.s,Fault_Init,0x80083BC4,0x4D asm/non_matchings/boot/fault/Fault_HangupFaultClient.s,Fault_HangupFaultClient,0x80083CF8,0x3F asm/non_matchings/boot/fault/Fault_AddHungupAndCrashImpl.s,Fault_AddHungupAndCrashImpl,0x80083DF4,0x16 asm/non_matchings/boot/fault/Fault_AddHungupAndCrash.s,Fault_AddHungupAndCrash,0x80083E4C,0x19 @@ -101,7 +101,7 @@ asm/non_matchings/boot/fault_drawer/FaultDrawer_FormatStringFunc.s,FaultDrawer_F asm/non_matchings/boot/fault_drawer/FaultDrawer_VPrintf.s,FaultDrawer_VPrintf,0x8008477C,0x14 asm/non_matchings/boot/fault_drawer/FaultDrawer_Printf.s,FaultDrawer_Printf,0x800847CC,0x14 asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawText.s,FaultDrawer_DrawText,0x8008481C,0x14 -asm/non_matchings/boot/fault_drawer/FaultDrawer_SetDrawerFB.s,FaultDrawer_SetDrawerFB,0x8008486C,0xE +asm/non_matchings/boot/fault_drawer/FaultDrawer_SetDrawerFrameBuffer.s,FaultDrawer_SetDrawerFrameBuffer,0x8008486C,0xE asm/non_matchings/boot/fault_drawer/FaultDrawer_SetInputCallback.s,FaultDrawer_SetInputCallback,0x800848A4,0x5 asm/non_matchings/boot/fault_drawer/FaultDrawer_Init.s,FaultDrawer_Init,0x800848B8,0x22 asm/non_matchings/boot/boot_80084940/func_80084940.s,func_80084940,0x80084940,0xA From 82318a1c1bd25926269b2cfab16958c4151081d3 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 11 Jul 2023 00:00:42 +1000 Subject: [PATCH 029/121] Animation Cleanup Part 1: Dm Actors (#1290) * DM cleanup * cleanup * fix pointer * rm unused anim enum * PR Suggestions * spacing * missed one * More PR Suggestions * oops --- include/functions.h | 2 +- src/code/z_actor.c | 17 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 59 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h | 10 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 51 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.h | 9 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 127 ++-- src/overlays/actors/ovl_Dm_An/z_dm_an.h | 8 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 66 ++- .../actors/ovl_Dm_Char00/z_dm_char00.c | 552 +++++++++++------- .../actors/ovl_Dm_Char00/z_dm_char00.h | 7 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 37 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 47 +- .../actors/ovl_Dm_Char04/z_dm_char04.c | 62 +- .../actors/ovl_Dm_Char04/z_dm_char04.h | 9 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 120 ++-- .../actors/ovl_Dm_Char05/z_dm_char05.h | 2 +- .../actors/ovl_Dm_Char06/z_dm_char06.c | 6 +- .../actors/ovl_Dm_Char07/z_dm_char07.c | 13 + .../actors/ovl_Dm_Char08/z_dm_char08.c | 119 ++-- .../actors/ovl_Dm_Char08/z_dm_char08.h | 2 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 41 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 127 ++-- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h | 8 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 49 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h | 6 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.c | 9 +- .../actors/ovl_Dm_Ravine/z_dm_ravine.c | 9 +- src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c | 30 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 228 +++++--- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 13 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 73 +-- tools/disasm/functions.txt | 58 +- 33 files changed, 1209 insertions(+), 767 deletions(-) diff --git a/include/functions.h b/include/functions.h index 55d59ec45..9a4decc25 100644 --- a/include/functions.h +++ b/include/functions.h @@ -640,7 +640,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac void Npc_TrackPoint(Actor* actor, NpcInteractInfo* interactInfo, s16 presetIndex, s16 trackingMode); void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha); void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha); -void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex); +void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animInfo, s32 animIndex); void Actor_Noop(Actor* actor, PlayState* play); void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 35dbc8361..843b0eafd 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4451,18 +4451,19 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { return arg2; } -void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex) { - f32 frameCount; +void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animInfo, s32 animIndex) { + f32 endFrame; - animationInfo += animIndex; - if (animationInfo->frameCount > 0.0f) { - frameCount = animationInfo->frameCount; + animInfo += animIndex; + + if (animInfo->frameCount > 0.0f) { + endFrame = animInfo->frameCount; } else { - frameCount = Animation_GetLastFrame(&animationInfo->animation->common); + endFrame = Animation_GetLastFrame(&animInfo->animation->common); } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, - frameCount, animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } /** 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 ddd012426..ec2de16ad 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -27,19 +27,26 @@ ActorInit Dm_Ah_InitVars = { (ActorFunc)DmAh_Draw, }; -static AnimationInfoS sAnimations[] = { - { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ DMAH_ANIM_NONE = -1, + /* 0 */ DMAH_ANIM_0, + /* 1 */ DMAH_ANIM_1, + /* 2 */ DMAH_ANIM_MAX +} DmAhAnimation; + +static AnimationInfoS sAnimationInfo[DMAH_ANIM_MAX] = { + { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAH_ANIM_0 + { &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAH_ANIM_1 }; -s32 func_80C1D410(DmAh* this, s32 animationIndex) { - s32 ret = false; +s32 DmAh_ChangeAnim(DmAh* this, s32 animIndex) { + s32 didAnimChange = false; - if (animationIndex != this->animationIndex) { - this->animationIndex = animationIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimations, animationIndex); + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_80C1D458(DmAh* this) { @@ -122,52 +129,54 @@ Actor* func_80C1D78C(PlayState* play) { return foundActor; } -void func_80C1D7FC(DmAh* this, PlayState* play) { - s32 D_80C1DE00[] = { 0, 0, 0, 0, 0 }; +void DmAh_HandleCutscene(DmAh* this, PlayState* play) { + s32 csAnimIndex[] = { + DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0, + }; u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { - if (!this->unk_29C) { + if (!this->isCutscenePlaying) { this->cueId = 255; - this->unk_29C = true; - this->animationIndex2 = this->animationIndex; + this->isCutscenePlaying = true; + this->prevAnimIndex = this->animIndex; } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { this->cueId = cueId; - func_80C1D410(this, D_80C1DE00[cueId]); + DmAh_ChangeAnim(this, csAnimIndex[cueId]); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - } else if (this->unk_29C) { - this->unk_29C = false; - func_80C1D410(this, this->animationIndex2); + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + DmAh_ChangeAnim(this, this->prevAnimIndex); } } -void func_80C1D92C(DmAh* this, PlayState* play) { +void DmAh_DoNothing(DmAh* this, PlayState* play) { } void DmAh_Init(Actor* thisx, PlayState* play) { DmAh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->morphTable, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->jointTable, this->morphTable, OBJECT_AH_LIMB_MAX); - this->animationIndex = -1; - func_80C1D410(this, 0); + this->animIndex = DMAH_ANIM_NONE; + DmAh_ChangeAnim(this, DMAH_ANIM_0); this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); this->unk_27C |= 1; if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { this->unk_280 = func_80C1D78C(play); - func_80C1D410(this, 1); - this->actionFunc = func_80C1D92C; + DmAh_ChangeAnim(this, DMAH_ANIM_1); + this->actionFunc = DmAh_DoNothing; } else { - this->actionFunc = func_80C1D7FC; + this->actionFunc = DmAh_HandleCutscene; } } diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h index b1e16f6e0..733d656ea 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h @@ -16,8 +16,8 @@ typedef struct DmAh { /* 0x198 */ Vec3f unk_198; /* 0x1A4 */ Vec3s unk_1A4; /* 0x1AA */ Vec3s unk_1AA; - /* 0x1B0 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX]; - /* 0x216 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX]; + /* 0x1B0 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX]; + /* 0x216 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX]; /* 0x27C */ u16 unk_27C; /* 0x27E */ u8 cueId; /* 0x280 */ Actor* unk_280; @@ -28,9 +28,9 @@ typedef struct DmAh { /* 0x28C */ s16 unk_28C; /* 0x28E */ s16 unk_28E; /* 0x290 */ s16 unk_290; - /* 0x294 */ s32 animationIndex; - /* 0x298 */ s32 animationIndex2; - /* 0x29C */ s32 unk_29C; + /* 0x294 */ s32 animIndex; + /* 0x298 */ s32 prevAnimIndex; + /* 0x29C */ s32 isCutscenePlaying; } DmAh; // size = 0x2A0 #endif // Z_DM_AH_H 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 a7e3e4993..ef6367ca2 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -28,47 +28,51 @@ ActorInit Dm_Al_InitVars = { }; typedef enum { - /* 0 */ MADAME_AROMA_ANIM_0, - /* 1 */ MADAME_AROMA_ANIM_1 + /* -1 */ MADAME_AROMA_ANIM_NONE = -1, + /* 0 */ MADAME_AROMA_ANIM_0, + /* 1 */ MADAME_AROMA_ANIM_MAX } DmAlAnimation; -static AnimationInfoS sAnimationInfo[] = { - { &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +static AnimationInfoS sAnimationInfo[MADAME_AROMA_ANIM_MAX] = { + { &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // MADAME_AROMA_ANIM_0 }; s32 DmAl_ChangeAnim(DmAl* this, s32 animIndex) { - s32 didAnimationChange = false; + s32 didAnimChange = false; - if (animIndex != this->animIndex) { + if (this->animIndex != animIndex) { this->animIndex = animIndex; - didAnimationChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return didAnimationChange; + + return didAnimChange; } -void func_80C1BDD8(DmAl* this, PlayState* play) { - s32 D_80C1C280[] = { 0, 0, 0, 0, 0 }; +void DmAl_HandleCutscene(DmAl* this, PlayState* play) { + s32 csAnimIndex[] = { + MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, + }; u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { - if (!this->unk_45C) { + if (!this->isCutscenePlaying) { this->cueId = 255; - this->unk_45C = true; - this->animIndex2 = this->animIndex; + this->isCutscenePlaying = true; + this->prevAnimIndex = this->animIndex; } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { this->cueId = cueId; - DmAl_ChangeAnim(this, D_80C1C280[cueId]); + DmAl_ChangeAnim(this, csAnimIndex[cueId]); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - } else if (this->unk_45C) { - this->unk_45C = false; - DmAl_ChangeAnim(this, this->animIndex2); + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + DmAl_ChangeAnim(this, this->prevAnimIndex); } } @@ -78,11 +82,11 @@ void DmAl_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gMadameAromaSkel, NULL, this->jointTable, this->morphTable, MADAME_AROMA_LIMB_MAX); - this->animIndex = -1; + this->animIndex = MADAME_AROMA_ANIM_NONE; DmAl_ChangeAnim(this, MADAME_AROMA_ANIM_0); this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = func_80C1BDD8; + this->actionFunc = DmAl_HandleCutscene; } void DmAl_Destroy(Actor* thisx, PlayState* play) { @@ -106,6 +110,9 @@ s32 DmAl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* ro case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER: *dList = NULL; break; + + default: + break; } return false; } @@ -117,21 +124,27 @@ void DmAl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, case MADAME_AROMA_LIMB_SHAWL_MIDDLE: Matrix_Get(&this->shawlMatrices[0]); break; + case MADAME_AROMA_LIMB_SHAWL_UPPER: Matrix_Get(&this->shawlMatrices[1]); break; + case MADAME_AROMA_LIMB_SHAWL_LEFT_LOWER_MIDDLE: Matrix_Get(&this->shawlMatrices[2]); break; + case MADAME_AROMA_LIMB_SHAWL_LEFT_LOWER: Matrix_Get(&this->shawlMatrices[3]); break; + case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER_MIDDLE: Matrix_Get(&this->shawlMatrices[4]); break; + case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER: Matrix_Get(&this->shawlMatrices[5]); break; + default: break; } diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h index 3c77ed6c3..084af062b 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h @@ -17,13 +17,8 @@ typedef struct DmAl { /* 0x3AE */ Vec3s morphTable[MADAME_AROMA_LIMB_MAX]; /* 0x450 */ u8 cueId; /* 0x454 */ s32 animIndex; - /* 0x458 */ s32 animIndex2; - /* 0x45C */ s32 unk_45C; + /* 0x458 */ s32 prevAnimIndex; + /* 0x45C */ s32 isCutscenePlaying; } DmAl; // size = 0x460 -typedef enum { - /* 0 */ MADAME_AROMA_ANIMATION_0, - /* 1 */ MADAME_AROMA_ANIMATION_1 -} DmAlAnimations; - #endif // Z_DM_AL_H 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 86d57660f..9535a0b98 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -17,8 +17,8 @@ void DmAn_Destroy(Actor* thisx, PlayState* play); void DmAn_Update(Actor* thisx, PlayState* play); void func_80C1C958(DmAn* this, PlayState* play); -void func_80C1CAB0(DmAn* this, PlayState* play); -void func_80C1CC80(DmAn* this, PlayState* play); +void DmAn_HandleCutscene(DmAn* this, PlayState* play); +void DmAn_DoNothing(DmAn* this, PlayState* play); void func_80C1D0B0(Actor* thisx, PlayState* play); ActorInit Dm_An_InitVars = { @@ -33,29 +33,48 @@ ActorInit Dm_An_InitVars = { (ActorFunc)NULL, }; -static AnimationInfoS sAnimationInfo[] = { - { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ DMAN_ANIM_NONE = -1, + /* 0x0 */ DMAN_ANIM_0, + /* 0x1 */ DMAN_ANIM_1, + /* 0x2 */ DMAN_ANIM_2, + /* 0x3 */ DMAN_ANIM_3, + /* 0x4 */ DMAN_ANIM_4, + /* 0x5 */ DMAN_ANIM_5, + /* 0x6 */ DMAN_ANIM_6, + /* 0x7 */ DMAN_ANIM_7, + /* 0x8 */ DMAN_ANIM_8, + /* 0x9 */ DMAN_ANIM_9, + /* 0xA */ DMAN_ANIM_10, + /* 0xB */ DMAN_ANIM_11, + /* 0xC */ DMAN_ANIM_12, + /* 0xD */ DMAN_ANIM_13, + /* 0xE */ DMAN_ANIM_MAX +} DmAnAnimation; + +static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = { + { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_0 + { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_1 + { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_2 + { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_3 + { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_4 + { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_5 + { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_6 + { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_7 + { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_8 + { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_9 + { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_10 + { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_11 + { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_12 + { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_13 }; -s32 func_80C1C410(DmAn* this, PlayState* play) { +s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { s8 objectIndex = this->actor.objBankIndex; s8 objectIndex2; - s32 ret = false; + s32 isAnimFinished = false; - if (this->unk_2C8 < 2) { + if (this->animIndex <= DMAN_ANIM_1) { objectIndex2 = this->actor.objBankIndex; } else { objectIndex2 = this->unk_2AC; @@ -63,30 +82,32 @@ s32 func_80C1C410(DmAn* this, PlayState* play) { if (objectIndex2 >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); - ret = SkelAnime_Update(&this->skelAnime); + isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); } - return ret; + + return isAnimFinished; } -s32 func_80C1C4D8(DmAn* this, PlayState* play, s32 arg2) { +s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { s8 objectIndex = this->actor.objBankIndex; s8 objectIndex2; - s32 ret = false; + s32 didAnimChange = false; - if (arg2 < 2) { + if (animIndex <= DMAN_ANIM_1) { objectIndex2 = this->actor.objBankIndex; } else { objectIndex2 = this->unk_2AC; } - if ((objectIndex2 >= 0) && (arg2 != this->unk_2C8)) { + if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); - this->unk_2C8 = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); } - return ret; + + return didAnimChange; } void func_80C1C5B4(DmAn* this) { @@ -176,8 +197,8 @@ void func_80C1C958(DmAn* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, OBJECT_AN1_LIMB_MAX); - this->unk_2C8 = -1; - func_80C1C4D8(this, play, 0); + this->animIndex = DMAN_ANIM_NONE; + DmAn_ChangeAnim(this, play, DMAN_ANIM_0); this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; @@ -185,25 +206,28 @@ void func_80C1C958(DmAn* this, PlayState* play) { if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { this->unk_2B4 = func_80C1C8E8(play); - func_80C1C4D8(this, play, 1); - this->actionFunc = func_80C1CC80; + DmAn_ChangeAnim(this, play, DMAN_ANIM_1); + this->actionFunc = DmAn_DoNothing; } else { - this->actionFunc = func_80C1CAB0; + this->actionFunc = DmAn_HandleCutscene; } } } -void func_80C1CAB0(DmAn* this, PlayState* play) { - s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 }; +void DmAn_HandleCutscene(DmAn* this, PlayState* play) { + s32 csAnimIndex[] = { + DMAN_ANIM_0, DMAN_ANIM_0, DMAN_ANIM_12, DMAN_ANIM_2, DMAN_ANIM_4, + DMAN_ANIM_6, DMAN_ANIM_8, DMAN_ANIM_10, DMAN_ANIM_11, DMAN_ANIM_3, + }; u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { - if (this->unk_2D0 == 0) { + if (!this->isCutscenePlaying) { this->cueId = 255; - this->unk_2D0 = 1; - this->unk_2D4 = 0; - this->unk_2CC = this->unk_2C8; + this->isCutscenePlaying = true; + this->didAnimChangeInCs = false; + this->prevAnimIndex = this->animIndex; } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) { @@ -212,8 +236,8 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { if (this->cueId != (u8)cueId) { this->cueId = cueId; - this->unk_2D4 = 1; - func_80C1C4D8(this, play, sp28[cueId]); + this->didAnimChangeInCs = true; + DmAn_ChangeAnim(this, play, csAnimIndex[cueId]); } switch (this->cueId) { @@ -223,9 +247,10 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { case 6: case 7: case 8: - if ((this->unk_2C8 == 12) || (this->unk_2C8 == 4) || (this->unk_2C8 == 6) || (this->unk_2C8 == 8)) { + if ((this->animIndex == DMAN_ANIM_12) || (this->animIndex == DMAN_ANIM_4) || + (this->animIndex == DMAN_ANIM_6) || (this->animIndex == DMAN_ANIM_8)) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80C1C4D8(this, play, this->unk_2C8 + 1); + DmAn_ChangeAnim(this, play, this->animIndex + 1); } } break; @@ -235,14 +260,14 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - } else if (this->unk_2D0 != 0) { - this->unk_2D0 = 0; - this->unk_2D4 = 0; - func_80C1C4D8(this, play, this->unk_2CC); + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + this->didAnimChangeInCs = false; + DmAn_ChangeAnim(this, play, this->prevAnimIndex); } } -void func_80C1CC80(DmAn* this, PlayState* play) { +void DmAn_DoNothing(DmAn* this, PlayState* play) { } void DmAn_Init(Actor* thisx, PlayState* play) { @@ -264,7 +289,7 @@ void DmAn_Update(Actor* thisx, PlayState* play) { func_80C1C83C(this, play); if (this->actor.draw != NULL) { - func_80C1C410(this, play); + DmAn_UpdateSkelAnime(this, play); func_80C1C5B4(this); } Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); @@ -280,7 +305,7 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto s8 sp2B = this->actor.objBankIndex; s8 sp2A = this->unk_2AD; - if ((limbIndex == OBJECT_AN1_LIMB_05) && (this->unk_2D4 != 0)) { + if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h index 6908e9342..c1e85d3eb 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -30,10 +30,10 @@ typedef struct DmAn { /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; /* 0x2C4 */ s16 unk_2C4; - /* 0x2C8 */ s32 unk_2C8; - /* 0x2CC */ s32 unk_2CC; - /* 0x2D0 */ s32 unk_2D0; - /* 0x2D4 */ s32 unk_2D4; + /* 0x2C8 */ s32 animIndex; + /* 0x2CC */ s32 prevAnimIndex; + /* 0x2D0 */ s32 isCutscenePlaying; + /* 0x2D4 */ s32 didAnimChangeInCs; } DmAn; // size = 0x2D8 #endif // Z_DM_AN_H 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 c6d93945b..98d827868 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -30,21 +30,40 @@ ActorInit Dm_Bal_InitVars = { (ActorFunc)DmBal_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &object_bal_Anim_0005FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_bal_Anim_00A7DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_bal_Anim_00B1E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_00B604, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_00C498, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_bal_Anim_00C498, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_bal_Anim_00D530, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_bal_Anim_000C78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, - { &object_bal_Anim_00CB78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, - { &object_bal_Anim_001804, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, +typedef enum { + /* -1 */ DMBAL_ANIM_NONE = -1, + /* 0x0 */ DMBAL_ANIM_0, + /* 0x1 */ DMBAL_ANIM_1, + /* 0x2 */ DMBAL_ANIM_2, + /* 0x3 */ DMBAL_ANIM_3, + /* 0x4 */ DMBAL_ANIM_4, + /* 0x5 */ DMBAL_ANIM_5, + /* 0x6 */ DMBAL_ANIM_6, + /* 0x7 */ DMBAL_ANIM_7, + /* 0x8 */ DMBAL_ANIM_8, + /* 0x9 */ DMBAL_ANIM_9, + /* 0xA */ DMBAL_ANIM_10, + /* 0xB */ DMBAL_ANIM_11, + /* 0xC */ DMBAL_ANIM_12, + /* 0xD */ DMBAL_ANIM_13, + /* 0xE */ DMBAL_ANIM_MAX +} DmBalAnimation; + +static AnimationInfo sAnimationInfo[DMBAL_ANIM_MAX] = { + { &object_bal_Anim_0005FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_0 + { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_1 + { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_2 + { &object_bal_Anim_00A7DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_3 + { &object_bal_Anim_00B1E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_4 + { &object_bal_Anim_00B604, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_5 + { &object_bal_Anim_00C498, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_6 + { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_7 + { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_8 + { &object_bal_Anim_00C498, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_9 + { &object_bal_Anim_00D530, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_10 + { &object_bal_Anim_000C78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_11 + { &object_bal_Anim_00CB78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_12 + { &object_bal_Anim_001804, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_13 }; void DmBal_Init(Actor* thisx, PlayState* play) { @@ -73,7 +92,7 @@ void DmBal_SetupDoNothing(DmBal* this) { void DmBal_DoNothing(DmBal* this, PlayState* play) { } -void func_80C1EAE8(DmBal* this, PlayState* play) { +void DmBal_HandleCutscene(DmBal* this, PlayState* play) { static u16 sCueId = 99; s32 cueChannel; @@ -86,14 +105,19 @@ void func_80C1EAE8(DmBal* this, PlayState* play) { case 1: this->keepEyesShut = false; this->eyeIndex = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_0); break; + case 2: this->keepEyesShut = true; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_12); break; + case 3: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 13); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_13); + break; + + default: break; } } else if (sCueId == 3) { @@ -165,7 +189,7 @@ void DmBal_Update(Actor* thisx, PlayState* play) { DmBal_SpawnPaper(this, play, &pos, &vel, -0.5f); } this->actionFunc(this, play); - func_80C1EAE8(this, play); + DmBal_HandleCutscene(this, play); func_80C1EC60(this, play); DmBal_UpdateEyes(this); SkelAnime_Update(&this->skelAnime); @@ -175,7 +199,7 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p DmBal* this = THIS; Vec3s rots; - if (limbIndex == 6) { + if (limbIndex == OBJECT_BAL_LIMB_06) { rots.x = Math_SinS(this->unk_33A) * (0x10000 / 18); rots.z = Math_CosS(this->unk_33A) * (0x10000 / 18); Matrix_RotateZYX(rots.x, 0, rots.z, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index fe4a83a91..97d892f9e 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -32,92 +32,182 @@ ActorInit Dm_Char00_InitVars = { (ActorFunc)DmChar00_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0053A4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_005B68, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_006328, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00FB30, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_010590, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_005B68, 1.0f, 37.0f, 56.0f, 4, 0.0f }, - { &object_delf_Anim_006328, 1.0f, 37.0f, 56.0f, 4, 0.0f }, - { &object_delf_Anim_00E024, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00F0D0, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_011FE0, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_011088, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0118FC, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_012388, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_012738, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_013BE0, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_013E80, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_007B04, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0080A4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00859C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_008A44, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00EB18, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00EBB0, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00EE30, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_012BBC, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_012EF8, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00C248, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00BDFC, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00C0BC, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_013040, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_013378, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_0091BC, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0094B0, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_009C4C, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_009F40, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_009010, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0097C4, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00A7B4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, 0, -10.0f }, - { &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, 2, -10.0f }, - { &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, 0, -10.0f }, - { &object_delf_Anim_006B28, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_014190, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_01447C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_003FAC, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_004798, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_0042E8, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_004C44, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_01088C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_01498C, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_014E9C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00CEE0, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00D260, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00C690, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00C790, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00AF78, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00B2B8, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00BCD8, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_006D74, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00706C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_0072B0, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_007570, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00A2A4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00A4B4, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_006614, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_015114, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00CCD4, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00046C, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_00065C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00377C, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_003148, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_001410, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_0010F8, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_00199C, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_003BB4, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_001754, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_0008E0, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_000A94, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_001ED4, 1.0f, 0.0f, -1.0f, 0, 0.0f }, - { &object_delf_Anim_001B28, 1.0f, 0.0f, -1.0f, 2, 0.0f }, - { &object_delf_Anim_000E44, 1.0f, 0.0f, -1.0f, 0, 0.0f }, +typedef enum { + /* -1 */ DMCHAR00_ANIM_NONE = -1, + /* 0x00 */ DMCHAR00_ANIM_0, + /* 0x01 */ DMCHAR00_ANIM_1, + /* 0x02 */ DMCHAR00_ANIM_2, + /* 0x03 */ DMCHAR00_ANIM_3, + /* 0x04 */ DMCHAR00_ANIM_4, + /* 0x05 */ DMCHAR00_ANIM_5, + /* 0x06 */ DMCHAR00_ANIM_6, + /* 0x07 */ DMCHAR00_ANIM_7, + /* 0x08 */ DMCHAR00_ANIM_8, + /* 0x09 */ DMCHAR00_ANIM_9, + /* 0x0A */ DMCHAR00_ANIM_10, + /* 0x0B */ DMCHAR00_ANIM_11, + /* 0x0C */ DMCHAR00_ANIM_12, + /* 0x0D */ DMCHAR00_ANIM_13, + /* 0x0E */ DMCHAR00_ANIM_14, + /* 0x0F */ DMCHAR00_ANIM_15, + /* 0x10 */ DMCHAR00_ANIM_16, + /* 0x11 */ DMCHAR00_ANIM_17, + /* 0x12 */ DMCHAR00_ANIM_18, + /* 0x13 */ DMCHAR00_ANIM_19, + /* 0x14 */ DMCHAR00_ANIM_20, + /* 0x15 */ DMCHAR00_ANIM_21, + /* 0x16 */ DMCHAR00_ANIM_22, + /* 0x17 */ DMCHAR00_ANIM_23, + /* 0x18 */ DMCHAR00_ANIM_24, + /* 0x19 */ DMCHAR00_ANIM_25, + /* 0x1A */ DMCHAR00_ANIM_26, + /* 0x1B */ DMCHAR00_ANIM_27, + /* 0x1C */ DMCHAR00_ANIM_28, + /* 0x1D */ DMCHAR00_ANIM_29, + /* 0x1E */ DMCHAR00_ANIM_30, + /* 0x1F */ DMCHAR00_ANIM_31, + /* 0x20 */ DMCHAR00_ANIM_32, + /* 0x21 */ DMCHAR00_ANIM_33, + /* 0x22 */ DMCHAR00_ANIM_34, + /* 0x23 */ DMCHAR00_ANIM_35, + /* 0x24 */ DMCHAR00_ANIM_36, + /* 0x25 */ DMCHAR00_ANIM_37, + /* 0x26 */ DMCHAR00_ANIM_38, + /* 0x27 */ DMCHAR00_ANIM_39, + /* 0x28 */ DMCHAR00_ANIM_40, + /* 0x29 */ DMCHAR00_ANIM_41, + /* 0x2A */ DMCHAR00_ANIM_42, + /* 0x2B */ DMCHAR00_ANIM_43, + /* 0x2C */ DMCHAR00_ANIM_44, + /* 0x2D */ DMCHAR00_ANIM_45, + /* 0x2E */ DMCHAR00_ANIM_46, + /* 0x2F */ DMCHAR00_ANIM_47, + /* 0x30 */ DMCHAR00_ANIM_48, + /* 0x31 */ DMCHAR00_ANIM_49, + /* 0x32 */ DMCHAR00_ANIM_50, + /* 0x33 */ DMCHAR00_ANIM_51, + /* 0x34 */ DMCHAR00_ANIM_52, + /* 0x35 */ DMCHAR00_ANIM_53, + /* 0x36 */ DMCHAR00_ANIM_54, + /* 0x37 */ DMCHAR00_ANIM_55, + /* 0x38 */ DMCHAR00_ANIM_56, + /* 0x39 */ DMCHAR00_ANIM_57, + /* 0x3A */ DMCHAR00_ANIM_58, + /* 0x3B */ DMCHAR00_ANIM_59, + /* 0x3C */ DMCHAR00_ANIM_60, + /* 0x3D */ DMCHAR00_ANIM_61, + /* 0x3E */ DMCHAR00_ANIM_62, + /* 0x3F */ DMCHAR00_ANIM_63, + /* 0x40 */ DMCHAR00_ANIM_64, + /* 0x41 */ DMCHAR00_ANIM_65, + /* 0x42 */ DMCHAR00_ANIM_66, + /* 0x43 */ DMCHAR00_ANIM_67, + /* 0x44 */ DMCHAR00_ANIM_68, + /* 0x45 */ DMCHAR00_ANIM_69, + /* 0x46 */ DMCHAR00_ANIM_70, + /* 0x47 */ DMCHAR00_ANIM_71, + /* 0x48 */ DMCHAR00_ANIM_72, + /* 0x49 */ DMCHAR00_ANIM_73, + /* 0x4A */ DMCHAR00_ANIM_74, + /* 0x4B */ DMCHAR00_ANIM_75, + /* 0x4C */ DMCHAR00_ANIM_76, + /* 0x4D */ DMCHAR00_ANIM_77, + /* 0x4E */ DMCHAR00_ANIM_78, + /* 0x4F */ DMCHAR00_ANIM_79, + /* 0x50 */ DMCHAR00_ANIM_80, + /* 0x51 */ DMCHAR00_ANIM_81, + /* 0x52 */ DMCHAR00_ANIM_82, + /* 0x53 */ DMCHAR00_ANIM_83, + /* 0x54 */ DMCHAR00_ANIM_84, + /* 0x55 */ DMCHAR00_ANIM_MAX +} DmChar00Animation; + +static AnimationInfo sAnimationInfo[DMCHAR00_ANIM_MAX] = { + { &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_0 + { &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_1 + { &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_2 + { &object_delf_Anim_0053A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_3 + { &object_delf_Anim_005B68, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_4 + { &object_delf_Anim_006328, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_5 + { &object_delf_Anim_00FB30, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_6 + { &object_delf_Anim_010590, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_7 + { &object_delf_Anim_005B68, 1.0f, 37.0f, 56.0f, ANIMMODE_LOOP_PARTIAL, 0.0f }, // DMCHAR00_ANIM_8 + { &object_delf_Anim_006328, 1.0f, 37.0f, 56.0f, ANIMMODE_LOOP_PARTIAL, 0.0f }, // DMCHAR00_ANIM_9 + { &object_delf_Anim_00E024, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_10 + { &object_delf_Anim_00F0D0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_11 + { &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_12 + { &object_delf_Anim_011FE0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_13 + { &object_delf_Anim_011088, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_14 + { &object_delf_Anim_0118FC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_15 + { &object_delf_Anim_012388, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_16 + { &object_delf_Anim_012738, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_17 + { &object_delf_Anim_013BE0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_18 + { &object_delf_Anim_013E80, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_19 + { &object_delf_Anim_007B04, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_20 + { &object_delf_Anim_0080A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_21 + { &object_delf_Anim_00859C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_22 + { &object_delf_Anim_008A44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_23 + { &object_delf_Anim_00EB18, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_24 + { &object_delf_Anim_00EBB0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_25 + { &object_delf_Anim_00EE30, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_26 + { &object_delf_Anim_012BBC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_27 + { &object_delf_Anim_012EF8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_28 + { &object_delf_Anim_00C248, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_29 + { &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_30 + { &object_delf_Anim_00BDFC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_31 + { &object_delf_Anim_00C0BC, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_32 + { &object_delf_Anim_013040, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_33 + { &object_delf_Anim_013378, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_34 + { &object_delf_Anim_0091BC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_35 + { &object_delf_Anim_0094B0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_36 + { &object_delf_Anim_009C4C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_37 + { &object_delf_Anim_009F40, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_38 + { &object_delf_Anim_009010, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_39 + { &object_delf_Anim_0097C4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_40 + { &object_delf_Anim_00A7B4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_41 + { &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // DMCHAR00_ANIM_42 + { &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // DMCHAR00_ANIM_43 + { &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // DMCHAR00_ANIM_44 + { &object_delf_Anim_006B28, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_45 + { &object_delf_Anim_014190, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_46 + { &object_delf_Anim_01447C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_47 + { &object_delf_Anim_003FAC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_48 + { &object_delf_Anim_004798, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_49 + { &object_delf_Anim_0042E8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_50 + { &object_delf_Anim_004C44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_51 + { &object_delf_Anim_01088C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_52 + { &object_delf_Anim_01498C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_53 + { &object_delf_Anim_014E9C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_54 + { &object_delf_Anim_00CEE0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_55 + { &object_delf_Anim_00D260, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_56 + { &object_delf_Anim_00C690, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_57 + { &object_delf_Anim_00C790, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_58 + { &object_delf_Anim_00AF78, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_59 + { &object_delf_Anim_00B2B8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_60 + { &object_delf_Anim_00BCD8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_61 + { &object_delf_Anim_006D74, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_62 + { &object_delf_Anim_00706C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_63 + { &object_delf_Anim_0072B0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_64 + { &object_delf_Anim_007570, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_65 + { &object_delf_Anim_00A2A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_66 + { &object_delf_Anim_00A4B4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_67 + { &object_delf_Anim_006614, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_68 + { &object_delf_Anim_015114, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_69 + { &object_delf_Anim_00CCD4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_70 + { &object_delf_Anim_00046C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_71 + { &object_delf_Anim_00065C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_72 + { &object_delf_Anim_00377C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_73 + { &object_delf_Anim_003148, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_74 + { &object_delf_Anim_001410, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_75 + { &object_delf_Anim_0010F8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_76 + { &object_delf_Anim_00199C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_77 + { &object_delf_Anim_003BB4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_78 + { &object_delf_Anim_001754, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_79 + { &object_delf_Anim_0008E0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_80 + { &object_delf_Anim_000A94, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_81 + { &object_delf_Anim_001ED4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_82 + { &object_delf_Anim_001B28, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_83 + { &object_delf_Anim_000E44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_84 }; Color_RGBAf D_80AA77A8[] = { @@ -134,18 +224,19 @@ Color_RGBAf D_80AA77D8[] = { Vec3f D_80AA7808 = { 0.0f, 0.0f, 0.0f }; -void func_80AA5580(SkelAnime* skelAnime, AnimationInfo* animation, u16 idx) { - f32 phi_f2; +void DmChar00_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; - animation += idx; + animInfo += animIndex; - if (animation->frameCount < 0.0f) { - phi_f2 = Animation_GetLastFrame(animation->animation); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - phi_f2 = animation->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, phi_f2, - animation->mode, animation->morphFrames); + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void func_80AA561C(DmChar00* this, PlayState* play) { @@ -167,6 +258,9 @@ void func_80AA561C(DmChar00* this, PlayState* play) { case 2043: Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE); break; + + default: + break; } } else { switch (play->csCtx.curFrame + 20) { @@ -183,6 +277,9 @@ void func_80AA561C(DmChar00* this, PlayState* play) { case 2043: Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE); break; + + default: + break; } } } @@ -226,6 +323,9 @@ void func_80AA575C(DmChar00* this, PlayState* play) { case 972: Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE); break; + + default: + break; } } else if (play->csCtx.curFrame == 660) { Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE); @@ -253,6 +353,9 @@ void func_80AA58CC(DmChar00* this, PlayState* play) { case 534: Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK); break; + + default: + break; } } } @@ -275,6 +378,9 @@ void func_80AA5960(DmChar00* this, PlayState* play) { case 244: Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK); break; + + default: + break; } } } @@ -290,6 +396,9 @@ void func_80AA59E4(DmChar00* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON); break; + + default: + break; } } else if (play->csCtx.curFrame == 125) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); @@ -307,6 +416,9 @@ void func_80AA5A6C(DmChar00* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON); break; + + default: + break; } } else if (play->csCtx.curFrame == 44) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); @@ -328,6 +440,9 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) { case 550: Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE); break; + + default: + break; } } else { switch (play->csCtx.curFrame) { @@ -339,6 +454,9 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) { case 454: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); break; + + default: + break; } if ((play->csCtx.curFrame >= 500) && (play->csCtx.curFrame < 602)) { @@ -356,6 +474,9 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) { case 797: Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH); break; + + default: + break; } } else { switch (play->csCtx.curFrame) { @@ -366,10 +487,13 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) { case 797: Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); break; + + default: + break; } } - if ((this->unk_261 == 53) && Animation_OnFrame(&this->skelAnime, 16.0f)) { + if ((this->animIndex == DMCHAR00_ANIM_53) && Animation_OnFrame(&this->skelAnime, 16.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH); } } @@ -390,6 +514,9 @@ void func_80AA5D10(DmChar00* this, PlayState* play) { case 130: Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH); break; + + default: + break; } } } @@ -405,6 +532,9 @@ void func_80AA5D6C(DmChar00* this, PlayState* play) { case 31: Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE); break; + + default: + break; } } } @@ -421,6 +551,9 @@ void func_80AA5DC8(DmChar00* this, PlayState* play) { case 130: Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH); break; + + default: + break; } } } @@ -443,6 +576,9 @@ void func_80AA5E2C(DmChar00* this, PlayState* play) { case 215: Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WEED); break; + + default: + break; } } } @@ -519,6 +655,9 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) { func_80AA5D6C(this, play); } break; + + default: + break; } } } @@ -540,9 +679,9 @@ void DmChar00_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable, - this->morphTable, 7); + this->morphTable, FAIRY_LIMB_MAX); ActorShape_Init(&thisx->shape, 0.0f, NULL, 15.0f); - func_80AA5580(&this->skelAnime, sAnimationInfo, 0); + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR00_ANIM_0], 0); Actor_SetScale(thisx, 0.01f); this->actionFunc = func_80AA67F8; } @@ -550,7 +689,7 @@ void DmChar00_Init(Actor* thisx, PlayState* play) { void DmChar00_Destroy(Actor* thisx, PlayState* play) { } -void func_80AA62FC(DmChar00* this, PlayState* play) { +void DmChar00_HandleCutscene(DmChar00* this, PlayState* play) { u16 cueType = CS_CMD_ACTOR_CUE_113 + DMCHAR00_GET(&this->actor); s32 cueChannel; s32 pad; @@ -564,87 +703,87 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 0x1: - this->unk_261 = 0; + this->animIndex = DMCHAR00_ANIM_0; break; case 0x2: - this->unk_261 = 2; + this->animIndex = DMCHAR00_ANIM_2; break; case 0x3: - this->unk_261 = 3; + this->animIndex = DMCHAR00_ANIM_3; break; case 0x4: - this->unk_261 = 4; + this->animIndex = DMCHAR00_ANIM_4; break; case 0x5: - this->unk_261 = 5; + this->animIndex = DMCHAR00_ANIM_5; break; case 0x6: - this->unk_261 = 6; + this->animIndex = DMCHAR00_ANIM_6; break; case 0x7: - this->unk_261 = 7; + this->animIndex = DMCHAR00_ANIM_7; break; case 0x8: - this->unk_261 = 20; + this->animIndex = DMCHAR00_ANIM_20; break; case 0x9: - this->unk_261 = 21; + this->animIndex = DMCHAR00_ANIM_21; break; case 0xA: - this->unk_261 = 14; + this->animIndex = DMCHAR00_ANIM_14; break; case 0xB: - this->unk_261 = 15; + this->animIndex = DMCHAR00_ANIM_15; break; case 0xC: - this->unk_261 = 18; + this->animIndex = DMCHAR00_ANIM_18; break; case 0xD: - this->unk_261 = 25; + this->animIndex = DMCHAR00_ANIM_25; break; case 0xE: - this->unk_261 = 27; + this->animIndex = DMCHAR00_ANIM_27; break; case 0xF: - this->unk_261 = 24; + this->animIndex = DMCHAR00_ANIM_24; break; case 0x10: - this->unk_261 = 10; + this->animIndex = DMCHAR00_ANIM_10; break; case 0x11: - this->unk_261 = 12; + this->animIndex = DMCHAR00_ANIM_12; break; case 0x12: - this->unk_261 = 13; + this->animIndex = DMCHAR00_ANIM_13; break; case 0x13: - this->unk_261 = 29; + this->animIndex = DMCHAR00_ANIM_29; break; case 0x14: - this->unk_261 = 31; + this->animIndex = DMCHAR00_ANIM_31; break; case 0x15: - this->unk_261 = 33; + this->animIndex = DMCHAR00_ANIM_33; break; case 0x16: @@ -652,138 +791,138 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { break; case 0x17: - this->unk_261 = 35; + this->animIndex = DMCHAR00_ANIM_35; break; case 0x18: - this->unk_261 = 37; + this->animIndex = DMCHAR00_ANIM_37; break; case 0x19: - this->unk_261 = 39; + this->animIndex = DMCHAR00_ANIM_39; break; case 0x1A: - this->unk_261 = 41; + this->animIndex = DMCHAR00_ANIM_41; break; case 0x1B: - this->unk_261 = 45; + this->animIndex = DMCHAR00_ANIM_45; break; case 0x1C: - this->unk_261 = 46; + this->animIndex = DMCHAR00_ANIM_46; break; case 0x1E: - this->unk_261 = 48; + this->animIndex = DMCHAR00_ANIM_48; break; case 0x1F: - this->unk_261 = 50; + this->animIndex = DMCHAR00_ANIM_50; break; case 0x20: - this->unk_261 = 52; + this->animIndex = DMCHAR00_ANIM_52; break; case 0x21: - this->unk_261 = 53; + this->animIndex = DMCHAR00_ANIM_53; break; case 0x23: - this->unk_261 = 55; + this->animIndex = DMCHAR00_ANIM_55; break; case 0x24: - this->unk_261 = 57; + this->animIndex = DMCHAR00_ANIM_57; break; case 0x25: - this->unk_261 = 58; + this->animIndex = DMCHAR00_ANIM_58; break; case 0x26: - this->unk_261 = 59; + this->animIndex = DMCHAR00_ANIM_59; break; case 0x27: - this->unk_261 = 61; + this->animIndex = DMCHAR00_ANIM_61; break; case 0x28: - this->unk_261 = 62; + this->animIndex = DMCHAR00_ANIM_62; break; case 0x29: - this->unk_261 = 64; + this->animIndex = DMCHAR00_ANIM_64; break; case 0x2A: - this->unk_261 = 66; + this->animIndex = DMCHAR00_ANIM_66; break; case 0x2B: - this->unk_261 = 68; + this->animIndex = DMCHAR00_ANIM_68; break; case 0x2C: - this->unk_261 = 69; + this->animIndex = DMCHAR00_ANIM_69; break; case 0x2D: - this->unk_261 = 70; + this->animIndex = DMCHAR00_ANIM_70; break; case 0x2E: - this->unk_261 = 67; + this->animIndex = DMCHAR00_ANIM_67; break; case 0x2F: - this->unk_261 = 71; + this->animIndex = DMCHAR00_ANIM_71; break; case 0x30: - this->unk_261 = 73; + this->animIndex = DMCHAR00_ANIM_73; break; case 0x31: - this->unk_261 = 74; + this->animIndex = DMCHAR00_ANIM_74; break; case 0x32: - this->unk_261 = 75; + this->animIndex = DMCHAR00_ANIM_75; break; case 0x33: - this->unk_261 = 77; + this->animIndex = DMCHAR00_ANIM_77; break; case 0x34: - this->unk_261 = 78; + this->animIndex = DMCHAR00_ANIM_78; break; case 0x35: - this->unk_261 = 79; + this->animIndex = DMCHAR00_ANIM_79; break; case 0x36: - this->unk_261 = 80; + this->animIndex = DMCHAR00_ANIM_80; break; case 0x37: - this->unk_261 = 82; + this->animIndex = DMCHAR00_ANIM_82; break; case 0x38: - this->unk_261 = 83; + this->animIndex = DMCHAR00_ANIM_83; break; default: - this->unk_261 = 0; + this->animIndex = DMCHAR00_ANIM_0; break; } - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -792,59 +931,62 @@ void func_80AA62FC(DmChar00* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - switch (this->unk_261) { - case 0x4: - case 0x5: - this->unk_261 += 4; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + switch (this->animIndex) { + case DMCHAR00_ANIM_4: + case DMCHAR00_ANIM_5: + this->animIndex += 4; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); this->skelAnime.curFrame = 37.0f; break; - case 0xE: - case 0xF: - case 0x14: - case 0x15: - this->unk_261 += 2; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + case DMCHAR00_ANIM_14: + case DMCHAR00_ANIM_15: + case DMCHAR00_ANIM_20: + case DMCHAR00_ANIM_21: + this->animIndex += 2; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); break; - case 0xA: - case 0x12: - case 0x19: - case 0x1B: - case 0x1D: - case 0x1F: - case 0x21: - case 0x23: - case 0x25: - case 0x27: - case 0x2B: - case 0x2E: - case 0x30: - case 0x32: - case 0x35: - case 0x37: - case 0x3B: - case 0x3E: - case 0x40: - case 0x42: - case 0x47: - case 0x4B: - case 0x50: - case 0x53: - this->unk_261 += 1; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + case DMCHAR00_ANIM_10: + case DMCHAR00_ANIM_18: + case DMCHAR00_ANIM_25: + case DMCHAR00_ANIM_27: + case DMCHAR00_ANIM_29: + case DMCHAR00_ANIM_31: + case DMCHAR00_ANIM_33: + case DMCHAR00_ANIM_35: + case DMCHAR00_ANIM_37: + case DMCHAR00_ANIM_39: + case DMCHAR00_ANIM_43: + case DMCHAR00_ANIM_46: + case DMCHAR00_ANIM_48: + case DMCHAR00_ANIM_50: + case DMCHAR00_ANIM_53: + case DMCHAR00_ANIM_55: + case DMCHAR00_ANIM_59: + case DMCHAR00_ANIM_62: + case DMCHAR00_ANIM_64: + case DMCHAR00_ANIM_66: + case DMCHAR00_ANIM_71: + case DMCHAR00_ANIM_75: + case DMCHAR00_ANIM_80: + case DMCHAR00_ANIM_83: + this->animIndex += 1; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); break; - case 0x2D: - this->unk_261 = 19; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + case DMCHAR00_ANIM_45: + this->animIndex = DMCHAR00_ANIM_19; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); break; - case 0x46: - case 0x4D: - this->unk_261 = 0; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + case DMCHAR00_ANIM_70: + case DMCHAR00_ANIM_77: + this->animIndex = DMCHAR00_ANIM_0; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); + break; + + default: break; } } @@ -854,9 +996,9 @@ void func_80AA67F8(DmChar00* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) { - if (this->unk_261 != 42) { - this->unk_261 = 42; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + if (this->animIndex != DMCHAR00_ANIM_42) { + this->animIndex = DMCHAR00_ANIM_42; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } Math_SmoothStepToF(&this->actor.world.pos.x, 0.0f, 0.5f, 0.5f, 0.001f); @@ -864,8 +1006,8 @@ void func_80AA67F8(DmChar00* this, PlayState* play) { Math_SmoothStepToF(&this->actor.world.pos.z, -560.0f, 0.5f, 20.0f, 0.001f); if (player->actor.world.pos.z < -625.0f) { - this->unk_261 = 43; - func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0); + this->animIndex = DMCHAR00_ANIM_43; + DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); this->actionFunc = func_80AA695C; this->skelAnime.playSpeed = 1.5f; } @@ -873,7 +1015,7 @@ void func_80AA67F8(DmChar00* this, PlayState* play) { } void func_80AA695C(DmChar00* this, PlayState* play) { - if (this->unk_261 == 44) { + if (this->animIndex == DMCHAR00_ANIM_44) { Math_SmoothStepToF(&this->actor.world.pos.x, 0.0f, 0.5f, 0.5f, 0.001f); Math_SmoothStepToF(&this->actor.world.pos.y, 30.0f, 0.5f, 0.5f, 0.001f); Math_SmoothStepToF(&this->actor.world.pos.z, -680.0f, 0.5f, 10.0f, 0.001f); @@ -889,7 +1031,7 @@ void DmChar00_Update(Actor* thisx, PlayState* play) { this->unk_262++; func_80AA5EBC(this, play); - func_80AA62FC(this, play); + DmChar00_HandleCutscene(this, play); } s32 DmChar00_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx, @@ -898,7 +1040,7 @@ s32 DmChar00_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f f32 sp28; Vec3f sp1C; - if (limbIndex == 6) { + if (limbIndex == FAIRY_LIMB_6) { sp28 = ((Math_SinS(this->unk_262 * 0x1000) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f)); Matrix_MultVec3f(&D_80AA7808, &sp1C); Matrix_Translate(sp1C.x, sp1C.y, sp1C.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h index b4679647b..05c53dc8f 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h @@ -2,6 +2,7 @@ #define Z_DM_CHAR00_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct DmChar00; @@ -16,15 +17,15 @@ typedef void (*DmChar00ActionFunc)(struct DmChar00*, PlayState*); typedef struct DmChar00 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[7]; + /* 0x188 */ Vec3s jointTable[FAIRY_LIMB_MAX]; /* 0x1B2 */ UNK_TYPE1 unk_1B2[0x30]; - /* 0x1E2 */ Vec3s morphTable[7]; + /* 0x1E2 */ Vec3s morphTable[FAIRY_LIMB_MAX]; /* 0x20C */ UNK_TYPE1 unk_20C[0x30]; /* 0x23C */ DmChar00ActionFunc actionFunc; /* 0x240 */ Color_RGBAf unk_240; /* 0x250 */ Color_RGBAf unk_250; /* 0x260 */ u8 cueId; - /* 0x261 */ u8 unk_261; + /* 0x261 */ u8 animIndex; /* 0x262 */ u16 unk_262; } DmChar00; // size = 0x264 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 231f76d6c..23a045e0d 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -16,7 +16,7 @@ void DmChar02_Destroy(Actor* thisx, PlayState* play); void DmChar02_Update(Actor* thisx, PlayState* play); void DmChar02_Draw(Actor* thisx, PlayState* play); -void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play); +void DmChar02_HandleCutscene(DmChar02* this, PlayState* play); ActorInit Dm_Char02_InitVars = { ACTOR_DM_CHAR02, @@ -35,29 +35,30 @@ typedef enum { /* 0 */ DMCHAR02_ANIM_HIT_GROUND, /* 1 */ DMCHAR02_ANIM_TURN_AROUND, /* 2 */ DMCHAR02_ANIM_JUGGLE, - /* 3 */ DMCHAR02_ANIM_FALL + /* 3 */ DMCHAR02_ANIM_FALL, + /* 4 */ DMCHAR02_ANIM_MAX } DmChar02Animation; -static AnimationInfo sAnimationInfo[] = { - { &gClockTowerOcarinaOfTimeHitGroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gClockTowerOcarinaOfTimeTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gClockTowerOcarinaOfTimeJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gClockTowerOcarinaOfTimeFallAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, +static AnimationInfo sAnimationInfo[DMCHAR02_ANIM_MAX] = { + { &gClockTowerOcarinaOfTimeHitGroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_HIT_GROUND + { &gClockTowerOcarinaOfTimeTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_TURN_AROUND + { &gClockTowerOcarinaOfTimeJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR02_ANIM_JUGGLE + { &gClockTowerOcarinaOfTimeFallAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_FALL }; -void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) { - f32 frameCount; +void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; - animationInfo += animIndex; + animInfo += animIndex; - if (animationInfo->frameCount < 0.0f) { - frameCount = Animation_GetLastFrame(animationInfo->animation); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frameCount = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, - frameCount, animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) { @@ -88,9 +89,9 @@ void DmChar02_Init(Actor* thisx, PlayState* play) { this->actor.targetArrowOffset = 3000.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gClockTowerOcarinaOfTimeSkel, NULL, NULL, NULL, 0); - DmChar02_ChangeAnim(&this->skelAnime, sAnimationInfo, 0); + DmChar02_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR02_ANIM_HIT_GROUND], 0); Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = DmChar02_PerformCutsceneActions; + this->actionFunc = DmChar02_HandleCutscene; } else { Actor_Kill(&this->actor); } @@ -99,7 +100,7 @@ void DmChar02_Init(Actor* thisx, PlayState* play) { void DmChar02_Destroy(Actor* thisx, PlayState* play) { } -void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) { +void DmChar02_HandleCutscene(DmChar02* this, PlayState* play) { u8 shouldChangeAnimation = true; s32 cueChannel; diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index cb71b8515..9f30d4343 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -32,33 +32,38 @@ ActorInit Dm_Char03_InitVars = { (ActorFunc)DmChar03_Draw, }; -AnimationInfo sAnimationInfo[] = { - { &gDekuMaskFallOverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, +typedef enum { + /* 0 */ DMCHAR03_ANIM_FALL_OVER, + /* 1 */ DMCHAR03_ANIM_MAX +} DmChar03Animation; + +AnimationInfo sAnimationInfo[DMCHAR03_ANIM_MAX] = { + { &gDekuMaskFallOverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR03_ANIM_FALL_OVER }; -void DmChar03_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) { - f32 frame; +void DmChar03_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; - animationInfo += animIndex; + animInfo += animIndex; - if (animationInfo->frameCount < 0.0f) { - frame = Animation_GetLastFrame(animationInfo->animation); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frame = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, frame, - animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmChar03_Init(Actor* thisx, PlayState* play) { DmChar03* this = THIS; - this->animIndex = 0; + this->animIndex = DMCHAR03_ANIM_FALL_OVER; this->actor.targetArrowOffset = 3000.0f; this->unk_18E = false; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gDekuMaskSkel, NULL, NULL, NULL, 0); - DmChar03_ChangeAnim(&this->skelAnime, sAnimationInfo, 0); + DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR03_ANIM_FALL_OVER], 0); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmChar03_DoNothing; } @@ -92,7 +97,7 @@ void DmChar03_DoNothing(DmChar03* this, PlayState* play) { } void func_80AAB710(DmChar03* this, PlayState* play) { - u8 shouldChangeAnim = true; + u8 changeAnim = true; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) { s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136); @@ -100,27 +105,31 @@ void func_80AAB710(DmChar03* this, PlayState* play) { if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - shouldChangeAnim = false; + changeAnim = false; break; + case 2: - this->animIndex = 0; + this->animIndex = DMCHAR03_ANIM_FALL_OVER; break; + case 3: this->unk_18E = false; - shouldChangeAnim = false; + changeAnim = false; Actor_Kill(&this->actor); break; + case 4: Item_Give(play, ITEM_MASK_DEKU); - shouldChangeAnim = false; + changeAnim = false; this->actionFunc = func_80AAB5F8; break; + default: - shouldChangeAnim = false; + changeAnim = false; break; } - if (shouldChangeAnim) { + if (changeAnim) { DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index 3375b522d..22a01491b 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -16,7 +16,7 @@ void DmChar04_Destroy(Actor* thisx, PlayState* play); void DmChar04_Update(Actor* thisx, PlayState* play); void DmChar04_Draw(Actor* thisx, PlayState* play); -void func_80AABE34(DmChar04* this, PlayState* play); +void DmChar04_HandleCutscene(DmChar04* this, PlayState* play); ActorInit Dm_Char04_InitVars = { ACTOR_DM_CHAR04, @@ -30,31 +30,38 @@ ActorInit Dm_Char04_InitVars = { (ActorFunc)DmChar04_Draw, }; -void DmChar04_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animation, u16 animIndex) { - f32 endFrame; +typedef enum { + /* 0 */ DMCHAR04_ANIM_0, + /* 1 */ DMCHAR04_ANIM_1, + /* 2 */ DMCHAR04_ANIM_MAX +} DmChar04Animation; - animation += animIndex; - - if (animation->frameCount < 0.0f) { - endFrame = Animation_GetLastFrame(animation->animation); - } else { - endFrame = animation->frameCount; - } - Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, endFrame, - animation->mode, animation->morphFrames); -} - -static AnimationInfo sAnimationInfo[] = { - { &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, +static AnimationInfo sAnimationInfo[DMCHAR04_ANIM_MAX] = { + { &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR04_ANIM_0 + { &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR04_ANIM_1 }; -Color_RGBAf sPrimColors[] = { +void DmChar04_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; + + animInfo += animIndex; + + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); + } else { + endFrame = animInfo->frameCount; + } + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); +} + +static Color_RGBAf sPrimColors[] = { { 250.0f, 255.0f, 230.0f, 255.0f }, { 10.0f, 10.0f, 40.0f, 255.0f }, { 255.0f, 235.0f, 220.0f, 255.0f }, }; -Color_RGBAf sEnvColors[] = { +static Color_RGBAf sEnvColors[] = { { 220.0f, 160.0f, 80.0f, 255.0f }, { 120.0f, 255.0f, 255.0f, 255.0f }, { 255.0f, 235.0f, 220.0f, 255.0f }, @@ -70,17 +77,17 @@ void DmChar04_Init(Actor* thisx, PlayState* play) { this->timer = this->actor.params << 0xB; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable, - this->morphTable, 7); + this->morphTable, FAIRY_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, NULL, 15.0f); - DmChar04_ChangeAnim(&this->skelAnime, sAnimationInfo, 0); + DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR04_ANIM_0], 0); Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = func_80AABE34; + this->actionFunc = DmChar04_HandleCutscene; } void DmChar04_Destroy(Actor* thisx, PlayState* play) { } -void func_80AABE34(DmChar04* this, PlayState* play) { +void DmChar04_HandleCutscene(DmChar04* this, PlayState* play) { u16 cueType = CS_CMD_ACTOR_CUE_113 + this->actor.params; if (Cutscene_IsCueInChannel(play, cueType)) { @@ -90,9 +97,9 @@ void func_80AABE34(DmChar04* this, PlayState* play) { if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { this->cueId = play->csCtx.actorCues[cueChannel]->id; if (play->csCtx.actorCues[cueChannel]->id == 1) { - this->animIndex = 0; + this->animIndex = DMCHAR04_ANIM_0; } else { - this->animIndex = 0; + this->animIndex = DMCHAR04_ANIM_0; } DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } @@ -119,8 +126,8 @@ s32 DmChar04_OverrideLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3 Vec3f sp1C; DmChar04* this = THIS; - if (limbIndex == 6) { - sp28 = ((Math_SinS(this->timer << 0xC) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f)); + if (limbIndex == FAIRY_LIMB_6) { + sp28 = ((Math_SinS(this->timer * 0x1000) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f)); Matrix_MultVec3f(&D_80AAC4F0, &sp1C); Matrix_Translate(sp1C.x, sp1C.y, sp1C.z, MTXMODE_NEW); Matrix_Scale(sp28, sp28, sp28, MTXMODE_APPLY); @@ -152,5 +159,6 @@ void DmChar04_Draw(Actor* thisx, PlayState* play) { gDPSetDither(POLY_XLU_DISP++, G_CD_BAYER); POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar04_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h index c3d809c63..52e196da9 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h @@ -2,6 +2,7 @@ #define Z_DM_CHAR04_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct DmChar04; @@ -10,9 +11,11 @@ typedef void (*DmChar04ActionFunc)(struct DmChar04*, PlayState*); typedef struct DmChar04 { /* 0x0000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[15]; - /* 0x1E2 */ Vec3s morphTable[15]; - /* 0x023C */ DmChar04ActionFunc actionFunc; + /* 0x188 */ Vec3s jointTable[FAIRY_LIMB_MAX]; + /* 0x1B2 */ UNK_TYPE1 unk_1B2[0x30]; + /* 0x1E2 */ Vec3s morphTable[FAIRY_LIMB_MAX]; + /* 0x20C */ UNK_TYPE1 unk_20C[0x30]; + /* 0x23C */ DmChar04ActionFunc actionFunc; /* 0x240 */ Color_RGBAf primColors; /* 0x250 */ Color_RGBAf envColors; /* 0x260 */ u8 cueId; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index e3dcec911..192e040a9 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -47,27 +47,37 @@ ActorInit Dm_Char05_InitVars = { (ActorFunc)DmChar05_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &object_dmask_Anim_001090, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &object_dmask_Anim_004288, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &object_dmask_Anim_0001A8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &object_dmask_Anim_00017C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &object_dmask_Anim_0011A0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &object_dmask_Anim_0013A4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ DMCHAR05_ANIM_0, + /* 1 */ DMCHAR05_ANIM_1, + /* 2 */ DMCHAR05_ANIM_2, + /* 3 */ DMCHAR05_ANIM_3, + /* 4 */ DMCHAR05_ANIM_4, + /* 5 */ DMCHAR05_ANIM_5, + /* 6 */ DMCHAR05_ANIM_MAX +} DmChar05Animation; + +static AnimationInfo sAnimationInfo[DMCHAR05_ANIM_MAX] = { + { &object_dmask_Anim_001090, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_0 + { &object_dmask_Anim_004288, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_1 + { &object_dmask_Anim_0001A8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_2 + { &object_dmask_Anim_00017C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_3 + { &object_dmask_Anim_0011A0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_4 + { &object_dmask_Anim_0013A4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR05_ANIM_5 }; -void func_80AAC5A0(SkelAnime* skelAnime, AnimationInfo* animation, u16 arg2) { - f32 phi_f2; +void DmChar05_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; - animation += arg2; + animInfo += animIndex; - if (animation->frameCount < 0.0f) { - phi_f2 = Animation_GetLastFrame(animation->animation); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - phi_f2 = animation->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, phi_f2, - animation->mode, animation->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void func_80AAC63C(Actor* thisx, PlayState* play) { @@ -76,9 +86,9 @@ void func_80AAC63C(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_010B0, NULL, NULL, NULL, 0); if (DMCHAR05_GET(&this->actor) == DMCHAR05_0) { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[0], 0); + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_0], 0); } else { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[1], 0); + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_1], 0); } this->actionFunc = func_80AACC48; } @@ -88,7 +98,7 @@ void func_80AAC6E4(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_042B0, NULL, NULL, NULL, 0); - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[1], 0); + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_1], 0); this->actionFunc = func_80AACC48; } @@ -97,7 +107,7 @@ void func_80AAC770(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_dmask_Skel_001D0, NULL, NULL, NULL, 0); - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[3], 0); + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_3], 0); this->actionFunc = func_80AACC48; } @@ -106,7 +116,7 @@ void func_80AAC7FC(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_013D0, NULL, NULL, NULL, 0); - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[4], 0); + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_4], 0); this->actionFunc = func_80AACC48; } @@ -119,7 +129,7 @@ void func_80AAC888(Actor* thisx, PlayState* play) { void DmChar05_Init(Actor* thisx, PlayState* play) { DmChar05* this = THIS; - this->unk_18C = 0; + this->animIndex = DMCHAR05_ANIM_0; this->unk_18E = 0; this->unk_19C = 0; this->unk_1A0 = 0; @@ -308,7 +318,7 @@ void func_80AACE5C(DmChar05* this, PlayState* play) { } void func_80AACF04(DmChar05* this, PlayState* play) { - u8 sp2F = true; + u8 changeAnim = true; s32 cueChannel; switch (DMCHAR05_GET(&this->actor)) { @@ -319,7 +329,7 @@ void func_80AACF04(DmChar05* this, PlayState* play) { if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - sp2F = false; + changeAnim = false; break; case 2: @@ -327,27 +337,27 @@ void func_80AACF04(DmChar05* this, PlayState* play) { break; case 3: - this->unk_18C = 0; + this->animIndex = DMCHAR05_ANIM_0; break; case 4: Item_Give(play, ITEM_MASK_GORON); - sp2F = false; + changeAnim = false; this->actionFunc = func_80AAC990; break; case 5: - sp2F = false; + changeAnim = false; Actor_Kill(&this->actor); break; default: - sp2F = false; + changeAnim = false; break; } - if (sp2F) { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0); + if (changeAnim) { + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -362,36 +372,36 @@ void func_80AACF04(DmChar05* this, PlayState* play) { if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - sp2F = false; + changeAnim = false; break; case 2: - this->unk_18C = 1; + this->animIndex = DMCHAR05_ANIM_1; this->unk_1B4 = 1; break; case 3: - this->unk_18C = 1; + this->animIndex = DMCHAR05_ANIM_1; break; case 4: Item_Give(play, ITEM_MASK_ZORA); - sp2F = false; + changeAnim = false; this->actionFunc = func_80AACD1C; break; case 5: - sp2F = false; + changeAnim = false; Actor_Kill(&this->actor); break; default: - sp2F = false; + changeAnim = false; break; } - if (sp2F) { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0); + if (changeAnim) { + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -406,35 +416,35 @@ void func_80AACF04(DmChar05* this, PlayState* play) { if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - sp2F = false; + changeAnim = false; break; case 2: - this->unk_18C = 3; + this->animIndex = DMCHAR05_ANIM_3; break; case 3: - this->unk_18C = 2; + this->animIndex = DMCHAR05_ANIM_2; break; case 4: Item_Give(play, ITEM_MASK_GIBDO); - sp2F = false; + changeAnim = false; this->actionFunc = func_80AACE10; break; case 5: - sp2F = false; + changeAnim = false; Actor_Kill(&this->actor); break; default: - sp2F = false; + changeAnim = false; break; } - if (sp2F) { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0); + if (changeAnim) { + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -449,28 +459,28 @@ void func_80AACF04(DmChar05* this, PlayState* play) { if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { switch (play->csCtx.actorCues[cueChannel]->id) { default: - sp2F = false; + changeAnim = false; break; case 1: - sp2F = false; + changeAnim = false; break; case 2: - this->unk_18C = 4; + this->animIndex = DMCHAR05_ANIM_4; break; case 3: - this->unk_18C = 5; + this->animIndex = DMCHAR05_ANIM_5; break; case 4: - this->unk_18C = 5; + this->animIndex = DMCHAR05_ANIM_5; break; } - if (sp2F) { - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0); + if (changeAnim) { + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -482,9 +492,9 @@ void func_80AACF04(DmChar05* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - if (this->unk_18C == 4) { - this->unk_18C++; - func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0); + if (this->animIndex == DMCHAR05_ANIM_4) { + this->animIndex++; + DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } break; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h index 84f7c3e3e..62500ec9c 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h @@ -29,7 +29,7 @@ typedef struct DmChar05 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ DmChar05ActionFunc actionFunc; - /* 0x18C */ s16 unk_18C; + /* 0x18C */ s16 animIndex; /* 0x18E */ u8 unk_18E; /* 0x18F */ u8 unk_18F; /* 0x190 */ Vec3f unk_190; diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 591249c77..52d3c316d 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -16,7 +16,7 @@ void DmChar06_Update(Actor* thisx, PlayState* play); void DmChar06_Draw(Actor* thisx, PlayState* play); void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc); -void func_80AAE6F0(DmChar06* this, PlayState* play); +void DmChar06_HandleCutscene(DmChar06* this, PlayState* play); ActorInit Dm_Char06_InitVars = { ACTOR_DM_CHAR06, @@ -40,13 +40,13 @@ void DmChar06_Init(Actor* thisx, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE); Actor_SetScale(&this->actor, 1.0f); this->alpha = 255; - DmChar06_SetupAction(this, func_80AAE6F0); + DmChar06_SetupAction(this, DmChar06_HandleCutscene); } void DmChar06_Destroy(Actor* thisx, PlayState* play) { } -void func_80AAE6F0(DmChar06* this, PlayState* play) { +void DmChar06_HandleCutscene(DmChar06* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_463)) { s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_463); diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c index c5c06958e..2ad9f0c9b 100644 --- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c +++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c @@ -81,6 +81,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { case DMCHAR07_STAGE: gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_002CD0); break; + case DMCHAR07_CREDITS_STAGE: AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_milkbar_Matanimheader_0105F8)); gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_007918); @@ -90,6 +91,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_001210); gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0016B8); break; + case DMCHAR07_SPOTLIGHTS: if (this->spotlightFlags & DMCHAR07_STAGE_RIGHT_SPOTLIGHT) { gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_000240); @@ -107,17 +109,23 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0016B8); } break; + case DMCHAR07_DISHES: gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_010D68); break; + + default: + break; } Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + switch (this->dyna.actor.params) { case DMCHAR07_STAGE: gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_002BA0); break; + case DMCHAR07_CREDITS_STAGE: gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0076A0); gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_000100); @@ -126,6 +134,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0010D0); gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0015E0); break; + case DMCHAR07_SPOTLIGHTS: if (this->spotlightFlags & DMCHAR07_STAGE_RIGHT_SPOTLIGHT) { gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_000100); @@ -143,8 +152,12 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0015E0); } break; + case DMCHAR07_DISHES: break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); 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 b5a19670d..5d5009877 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -26,9 +26,9 @@ void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play); void func_80AAF884(DmChar08* this, PlayState* play); void func_80AAFB04(DmChar08* this, PlayState* play); void func_80AAFB94(DmChar08* this, PlayState* play); -void func_80AAFE88(DmChar08* this, PlayState* play); +void DmChar08_HandleCutscene(DmChar08* this, PlayState* play); void func_80AB023C(DmChar08* this, PlayState* play); -void func_80AB01E8(DmChar08* this, PlayState* play); +void DmChar08_UpdateAnim(DmChar08* this, PlayState* play); void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play); void func_80AAFCCC(DmChar08* this, PlayState* play); @@ -41,16 +41,6 @@ typedef enum { /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT } TurtleEyeMode; -typedef enum { - /* 0 */ TURTLE_ANIM_IDLE, - /* 1 */ TURTLE_ANIM_SWIM, - /* 2 */ TURTLE_ANIM_FLOAT, - /* 3 */ TURTLE_ANIM_SPEAK1, - /* 4 */ TURTLE_ANIM_COUGH, - /* 5 */ TURTLE_ANIM_SPEAK2, - /* 6 */ TURTLE_ANIM_YAWN -} TurtleAnimation; - ActorInit Dm_Char08_InitVars = { ACTOR_DM_CHAR08, ACTORCAT_BG, @@ -65,14 +55,26 @@ ActorInit Dm_Char08_InitVars = { #include "overlays/ovl_Dm_Char08/ovl_Dm_Char08.c" -static AnimationInfo sAnimationInfo[] = { - { &gTurtleIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleSwimAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleSpeak1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleCoughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleSpeak2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, - { &gTurtleYawnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, +typedef enum { + /* 0 */ TURTLE_ANIM_IDLE, + /* 1 */ TURTLE_ANIM_SWIM, + /* 2 */ TURTLE_ANIM_FLOAT, + /* 3 */ TURTLE_ANIM_SPEAK1, + /* 4 */ TURTLE_ANIM_COUGH, + /* 5 */ TURTLE_ANIM_SPEAK2, + /* 6 */ TURTLE_ANIM_YAWN, + /* 7 */ TURTLE_ANIM_MAX, + /* 99 */ TURTLE_ANIM_NONE = 99 +} TurtleAnimation; + +static AnimationInfo sAnimationInfo[TURTLE_ANIM_MAX] = { + { &gTurtleIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_IDLE + { &gTurtleSwimAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SWIM + { &gTurtleFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_FLOAT + { &gTurtleSpeak1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SPEAK1 + { &gTurtleCoughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_COUGH + { &gTurtleSpeak2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SPEAK2 + { &gTurtleYawnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_YAWN }; static InitChainEntry sInitChain[] = { @@ -130,17 +132,19 @@ void DmChar08_UpdateEyes(DmChar08* this) { } } -void DmChar08_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) { +void DmChar08_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { f32 endFrame; - animationInfo += animIndex; - if (animationInfo->frameCount < 0.0f) { - endFrame = Animation_GetLastFrame(animationInfo->animation); + animInfo += animIndex; + + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - endFrame = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, endFrame, - animationInfo->mode, animationInfo->morphFrames); + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmChar08_Init(Actor* thisx, PlayState* play2) { @@ -198,7 +202,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->unk_1F0 = 1.0f; this->unk_1FF = 2; this->animIndex = TURTLE_ANIM_FLOAT; - this->unk_203 = 0x63; + this->prevAnimIndex = TURTLE_ANIM_NONE; this->eyeMode = TURTLE_EYEMODE_BLINK_STRAIGHT; this->unk_207 = 0; this->unk_208 = 0; @@ -217,7 +221,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { case SCENE_SEA: this->unk_1FF = 2; this->animIndex = TURTLE_ANIM_FLOAT; - this->unk_203 = 0x63; + this->prevAnimIndex = TURTLE_ANIM_NONE; this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->unk_207 = 0; this->unk_208 = 0; @@ -229,13 +233,16 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { case SCENE_KONPEKI_ENT: this->unk_1FF = 2; this->animIndex = TURTLE_ANIM_FLOAT; - this->unk_203 = 0x63; + this->prevAnimIndex = TURTLE_ANIM_NONE; this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->unk_207 = 0; this->unk_208 = 0; this->actionFunc = DmChar08_DoNothing; this->unk_1F0 = 1.0f; break; + + default: + break; } DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } @@ -454,7 +461,7 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { void DmChar08_DoNothing(DmChar08* this, PlayState* play) { } -void func_80AAFE88(DmChar08* this, PlayState* play) { +void DmChar08_HandleCutscene(DmChar08* this, PlayState* play) { s32 cueChannel; s32 pad; f32 phi_f12; @@ -512,6 +519,9 @@ void func_80AAFE88(DmChar08* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_ROLL); this->animIndex = TURTLE_ANIM_FLOAT; break; + + default: + break; } } switch (play->csCtx.actorCues[cueChannel]->id) { @@ -556,9 +566,9 @@ void func_80AAFE88(DmChar08* this, PlayState* play) { } } -void func_80AB01E8(DmChar08* this, PlayState* play) { - if (this->animIndex != this->unk_203) { - this->unk_203 = this->animIndex; +void DmChar08_UpdateAnim(DmChar08* this, PlayState* play) { + if (this->animIndex != this->prevAnimIndex) { + this->prevAnimIndex = this->animIndex; DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -619,6 +629,9 @@ void func_80AB023C(DmChar08* this, PlayState* play) { case 0x1030: // Return to sleep this->unk_207 = 4; break; + + default: + break; } } } @@ -641,6 +654,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -668,6 +684,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -723,6 +742,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -757,6 +779,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -782,6 +807,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -809,6 +837,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; @@ -856,8 +887,12 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; + case 10: switch (this->unk_208) { case 0: @@ -865,6 +900,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->unk_208++; break; + case 1: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->animIndex = TURTLE_ANIM_SPEAK2; @@ -872,6 +908,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208++; } break; + case 2: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->animIndex = TURTLE_ANIM_SPEAK1; @@ -879,6 +916,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208++; } break; + case 3: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->animIndex = TURTLE_ANIM_FLOAT; @@ -887,8 +925,14 @@ void func_80AB032C(DmChar08* this, PlayState* play) { this->unk_208 = 0; } break; + + default: + break; } break; + + default: + break; } } @@ -979,10 +1023,10 @@ void DmChar08_Update(Actor* thisx, PlayState* play) { DmChar08_UpdateEyes(this); this->actionFunc(this, play); - func_80AAFE88(this, play); + DmChar08_HandleCutscene(this, play); func_80AB023C(this, play); func_80AB032C(this, play); - func_80AB01E8(this, play); + DmChar08_UpdateAnim(this, play); SkelAnime_Update(&this->skelAnime); DmChar08_SpawnBubbles(this, play); this->dyna.actor.world.pos.y = this->targetYPos; @@ -1079,6 +1123,9 @@ void DmChar08_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_Scale((this->unk_1F0 * 0.55f) + 0.45f, (this->unk_1F0 * 0.2f) + 0.8f, (this->unk_1F0 * 0.55f) + 0.45f, MTXMODE_APPLY); break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h index 9fdbade43..22d23da90 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h @@ -31,7 +31,7 @@ typedef struct DmChar08 { /* 0x200 */ u8 eyeMode; /* 0x201 */ u8 eyeIndex; /* 0x202 */ u8 animIndex; - /* 0x203 */ u8 unk_203; + /* 0x203 */ u8 prevAnimIndex; /* 0x204 */ UNK_TYPE1 unk_204; /* 0x205 */ u8 alpha; /* 0x206 */ u8 unk_206; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 587ca059d..24362cd99 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -16,7 +16,7 @@ void DmChar09_Update(Actor* thisx, PlayState* play); void DmChar09_Draw(Actor* thisx, PlayState* play); void DmChar09_DoNothing(DmChar09* this, PlayState* play); -void func_80AB2268(DmChar09* this, PlayState* play); +void DmChar09_HandleCutscene(DmChar09* this, PlayState* play); ActorInit Dm_Char09_InitVars = { ACTOR_DM_CHAR09, @@ -30,23 +30,28 @@ ActorInit Dm_Char09_InitVars = { (ActorFunc)DmChar09_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ DMCHAR09_ANIM_FLYING, + /* 1 */ DMCHAR09_ANIM_MAX +} DmChar09Animation; + +static AnimationInfo sAnimationInfo[DMCHAR09_ANIM_MAX] = { + { &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR09_ANIM_FLYING }; -void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) { - f32 frameCount; +void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; - animationInfo += animIndex; + animInfo += animIndex; - if (animationInfo->frameCount < 0.0f) { - frameCount = Animation_GetLastFrame(animationInfo->animation); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frameCount = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, - frameCount, animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmChar09_Init(Actor* thisx, PlayState* play) { @@ -55,7 +60,7 @@ void DmChar09_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->jointTable, this->morphTable, OBJECT_BEE_LIMB_MAX); - DmChar09_ChangeAnim(&this->skelAnime, sAnimationInfo, 0); + DmChar09_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR09_ANIM_FLYING], 0); Actor_SetScale(&this->actor, 0.01f); this->unk_228 = Rand_ZeroOne() * 65535.0f; this->unk_22A = Rand_ZeroOne() * 65535.0f; @@ -109,7 +114,7 @@ void func_80AB1FDC(DmChar09* this, PlayState* play) { this->unk_220 = 1; } else { phi_a1 = false; - this->actionFunc = func_80AB2268; + this->actionFunc = DmChar09_HandleCutscene; } } if (phi_a1) { @@ -123,7 +128,7 @@ void func_80AB1FDC(DmChar09* this, PlayState* play) { void DmChar09_DoNothing(DmChar09* this, PlayState* play) { } -void func_80AB2268(DmChar09* this, PlayState* play) { +void DmChar09_HandleCutscene(DmChar09* this, PlayState* play) { Path* path; s32 pad; s32 i; @@ -148,15 +153,21 @@ void func_80AB2268(DmChar09* this, PlayState* play) { case 2: max = 0; break; + case 3: max = 1; break; + case 4: max = 2; break; + case 5: max = 3; break; + + default: + break; } if (play->csCtx.actorCues[cueChannel]->id >= 2) { @@ -200,7 +211,7 @@ void DmChar09_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actionFunc(this, play); - func_80AB2268(this, play); + DmChar09_HandleCutscene(this, play); func_80AB24BC(this, play); if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E && DMCHAR09_GET_100(thisx)) { Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK + SFX_FLAG); 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 139d80bc3..2ebe67e4c 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -17,8 +17,8 @@ void DmGm_Destroy(Actor* thisx, PlayState* play); void DmGm_Update(Actor* thisx, PlayState* play); void func_80C248A8(DmGm* this, PlayState* play); -void func_80C24A00(DmGm* this, PlayState* play); -void func_80C24BD0(DmGm* this, PlayState* play); +void DmGm_HandleCutscene(DmGm* this, PlayState* play); +void DmGm_DoNothing(DmGm* this, PlayState* play); void func_80C25000(Actor* thisx, PlayState* play); ActorInit Dm_Gm_InitVars = { @@ -33,29 +33,48 @@ ActorInit Dm_Gm_InitVars = { (ActorFunc)NULL, }; -static AnimationInfoS sAnimationInfo[] = { - { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ DMGM_ANIM_NONE = -1, + /* 0x0 */ DMGM_ANIM_0, + /* 0x1 */ DMGM_ANIM_1, + /* 0x2 */ DMGM_ANIM_2, + /* 0x3 */ DMGM_ANIM_3, + /* 0x4 */ DMGM_ANIM_4, + /* 0x5 */ DMGM_ANIM_5, + /* 0x6 */ DMGM_ANIM_6, + /* 0x7 */ DMGM_ANIM_7, + /* 0x8 */ DMGM_ANIM_8, + /* 0x9 */ DMGM_ANIM_9, + /* 0xA */ DMGM_ANIM_10, + /* 0xB */ DMGM_ANIM_11, + /* 0xC */ DMGM_ANIM_12, + /* 0xD */ DMGM_ANIM_13, + /* 0xE */ DMGM_ANIM_MAX +} DmGmAnimation; + +static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = { + { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_0 + { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_1 + { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_2 + { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_3 + { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_4 + { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_5 + { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_6 + { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_7 + { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_8 + { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_9 + { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_10 + { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_11 + { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_12 + { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_13 }; -s32 func_80C24360(DmGm* this, PlayState* play) { +s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { s8 objectIndex = this->actor.objBankIndex; s8 objectIndex2; - s32 ret = false; + s32 isAnimFinished = false; - if (this->unk_2C8 < 2) { + if (this->animIndex <= DMGM_ANIM_1) { objectIndex2 = this->actor.objBankIndex; } else { objectIndex2 = this->unk_2AC; @@ -63,30 +82,32 @@ s32 func_80C24360(DmGm* this, PlayState* play) { if (objectIndex2 >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); - ret = SkelAnime_Update(&this->skelAnime); + isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); } - return ret; + + return isAnimFinished; } -s32 func_80C24428(DmGm* this, PlayState* play, s32 arg2) { +s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { s8 objectIndex = this->actor.objBankIndex; s8 objectIndex2; - s32 ret = false; + s32 didAnimChange = false; - if (arg2 < 2) { + if (animIndex <= DMGM_ANIM_1) { objectIndex2 = this->actor.objBankIndex; } else { objectIndex2 = this->unk_2AC; } - if ((objectIndex2 >= 0) && (arg2 != this->unk_2C8)) { + if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); - this->unk_2C8 = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); } - return ret; + + return didAnimChange; } void func_80C24504(DmGm* this) { @@ -176,8 +197,8 @@ void func_80C248A8(DmGm* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, OBJECT_AN1_LIMB_MAX); - this->unk_2C8 = -1; - func_80C24428(this, play, 0); + this->animIndex = DMGM_ANIM_NONE; + DmGm_ChangeAnim(this, play, DMGM_ANIM_0); this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; @@ -185,25 +206,28 @@ void func_80C248A8(DmGm* this, PlayState* play) { if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { this->unk_2B4 = func_80C24838(play); - func_80C24428(this, play, 1); - this->actionFunc = func_80C24BD0; + DmGm_ChangeAnim(this, play, DMGM_ANIM_1); + this->actionFunc = DmGm_DoNothing; } else { - this->actionFunc = func_80C24A00; + this->actionFunc = DmGm_HandleCutscene; } } } -void func_80C24A00(DmGm* this, PlayState* play) { - s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 }; +void DmGm_HandleCutscene(DmGm* this, PlayState* play) { + s32 csAnimIndex[] = { + DMGM_ANIM_0, DMGM_ANIM_0, DMGM_ANIM_12, DMGM_ANIM_2, DMGM_ANIM_4, + DMGM_ANIM_6, DMGM_ANIM_8, DMGM_ANIM_10, DMGM_ANIM_11, DMGM_ANIM_3, + }; u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { - if (this->unk_2D0 == 0) { + if (!this->isCutscenePlaying) { this->cueId = 255; - this->unk_2D0 = 1; - this->unk_2D4 = 0; - this->unk_2CC = this->unk_2C8; + this->isCutscenePlaying = true; + this->didAnimChangeInCs = false; + this->prevAnimIndex = this->animIndex; } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) { @@ -212,8 +236,8 @@ void func_80C24A00(DmGm* this, PlayState* play) { if (this->cueId != (u8)cueId) { this->cueId = cueId; - this->unk_2D4 = 1; - func_80C24428(this, play, sp28[cueId]); + this->didAnimChangeInCs = true; + DmGm_ChangeAnim(this, play, csAnimIndex[cueId]); } switch (this->cueId) { @@ -223,9 +247,10 @@ void func_80C24A00(DmGm* this, PlayState* play) { case 6: case 7: case 8: - if ((this->unk_2C8 == 12) || (this->unk_2C8 == 4) || (this->unk_2C8 == 6) || (this->unk_2C8 == 8)) { + if ((this->animIndex == DMGM_ANIM_12) || (this->animIndex == DMGM_ANIM_4) || + (this->animIndex == DMGM_ANIM_6) || (this->animIndex == DMGM_ANIM_8)) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80C24428(this, play, this->unk_2C8 + 1); + DmGm_ChangeAnim(this, play, this->animIndex + 1); } } break; @@ -235,14 +260,14 @@ void func_80C24A00(DmGm* this, PlayState* play) { } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - } else if (this->unk_2D0 != 0) { - this->unk_2D0 = 0; - this->unk_2D4 = 0; - func_80C24428(this, play, this->unk_2CC); + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + this->didAnimChangeInCs = false; + DmGm_ChangeAnim(this, play, this->prevAnimIndex); } } -void func_80C24BD0(DmGm* this, PlayState* play) { +void DmGm_DoNothing(DmGm* this, PlayState* play) { } void DmGm_Init(Actor* thisx, PlayState* play) { @@ -264,7 +289,7 @@ void DmGm_Update(Actor* thisx, PlayState* play) { func_80C2478C(this, play); if (this->actor.draw != NULL) { - func_80C24360(this, play); + DmGm_UpdateSkelAnime(this, play); func_80C24504(this); } Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); @@ -280,7 +305,7 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, s8 sp2B = this->actor.objBankIndex; s8 sp2A = this->unk_2AD; - if ((limbIndex == OBJECT_AN1_LIMB_05) && (this->unk_2D4 != 0)) { + if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h index 8b6b3f652..e54ee07ee 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -30,10 +30,10 @@ typedef struct DmGm { /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; /* 0x2C4 */ s16 unk_2C4; - /* 0x2C8 */ s32 unk_2C8; - /* 0x2CC */ s32 unk_2CC; - /* 0x2D0 */ s32 unk_2D0; - /* 0x2D4 */ s32 unk_2D4; + /* 0x2C8 */ s32 animIndex; + /* 0x2CC */ s32 prevAnimIndex; + /* 0x2D0 */ s32 isCutscenePlaying; + /* 0x2D4 */ s32 didAnimChangeInCs; } DmGm; // size = 0x2D8 #endif // Z_DM_GM_H 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 0eb622b49..327f25868 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -27,43 +27,52 @@ ActorInit Dm_Nb_InitVars = { (ActorFunc)DmNb_Draw, }; -static AnimationInfoS sAnimationInfo[] = { - { &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ DMNB_ANIM_NONE = -1, + /* 0 */ DMNB_ANIM_0, + /* 1 */ DMNB_ANIM_MAX +} DmNbAnimation; + +static AnimationInfoS sAnimationInfo[DMNB_ANIM_MAX] = { + { &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMNB_ANIM_0 }; -s32 func_80C1DED0(DmNb* this, s32 arg1) { - s32 ret = false; +s32 DmNb_ChangeAnim(DmNb* this, s32 animIndex) { + s32 didAnimChange = false; - if (arg1 != this->unk1F0) { - this->unk1F0 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + + return didAnimChange; } -void func_80C1DF18(DmNb* this, PlayState* play) { - s32 sp2C[] = { 0, 0, 0, 0, 0 }; +void DmNb_HandleCutscene(DmNb* this, PlayState* play) { + s32 csAnimIndex[] = { + DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0, + }; u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { - if (this->unk1F8 == 0) { + if (!this->isCutscenePlaying) { this->cueId = 255; - this->unk1F8 = 1; - this->unk1F4 = this->unk1F0; + this->isCutscenePlaying = true; + this->prevAnimIndex = this->animIndex; } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { this->cueId = cueId; - func_80C1DED0(this, sp2C[cueId]); + DmNb_ChangeAnim(this, csAnimIndex[cueId]); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - } else if (this->unk1F8 != 0) { - this->unk1F8 = 0; - func_80C1DED0(this, this->unk1F4); + } else if (this->isCutscenePlaying) { + this->isCutscenePlaying = false; + DmNb_ChangeAnim(this, this->prevAnimIndex); } } @@ -72,11 +81,11 @@ void DmNb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX); - this->unk1F0 = -1; - func_80C1DED0(this, 0); + this->animIndex = DMNB_ANIM_NONE; + DmNb_ChangeAnim(this, DMNB_ANIM_0); this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = func_80C1DF18; + this->actionFunc = DmNb_HandleCutscene; } void DmNb_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h index 7bb7b39cd..560f1b259 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h @@ -15,9 +15,9 @@ typedef struct DmNb { /* 0x18C */ Vec3s jointTable[NB_LIMB_MAX]; /* 0x1BC */ Vec3s morphTable[NB_LIMB_MAX]; /* 0x1EC */ u8 cueId; - /* 0x1F0 */ s32 unk1F0; - /* 0x1F4 */ s32 unk1F4; - /* 0x1F8 */ s32 unk1F8; + /* 0x1F0 */ s32 animIndex; + /* 0x1F4 */ s32 prevAnimIndex; + /* 0x1F8 */ s32 isCutscenePlaying; } DmNb; // size = 0x1FC #endif // Z_DM_NB_H diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c index 0f6334db3..b13fbd9d7 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -16,7 +16,7 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play); void DmOpstage_Update(Actor* thisx, PlayState* play); void DmOpstage_Draw(Actor* thisx, PlayState* play); -void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play); +void DmOpstage_HandleCutscene(DmOpstage* this, PlayState* play); ActorInit Dm_Opstage_InitVars = { ACTOR_DM_OPSTAGE, @@ -42,7 +42,7 @@ void DmOpstage_Init(Actor* thisx, PlayState* play) { DmOpstage* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DmOpstage_SetupAction(this, DmOpstage_FollowCutsceneScript); + DmOpstage_SetupAction(this, DmOpstage_HandleCutscene); Actor_SetScale(&this->dyna.actor, 0.1f); if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) { @@ -69,7 +69,7 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play) { } } -void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play) { +void DmOpstage_HandleCutscene(DmOpstage* this, PlayState* play) { s32 cueChannel; if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) { @@ -134,5 +134,8 @@ void DmOpstage_Draw(Actor* thisx, PlayState* play) { Gfx_DrawDListOpa(play, gKeikokuDemoTallTreeStraightDL); Gfx_DrawDListXlu(play, gKeikokuDemoTallTreeStraightEmptyDL); break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c index 42a846357..ca8f40aa5 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c @@ -55,9 +55,10 @@ void DmRavine_Update(Actor* thisx, PlayState* play) { DmRavine* this = THIS; RoomContext* roomCtx; - switch ((DmRavineState)this->state) { + switch (this->state) { case DM_RAVINE_STATE_INITIALIZED: - return; + break; + case DM_RAVINE_STATE_ACTIVE: this->isActive = true; play->roomCtx.unk7A[1]++; @@ -70,9 +71,13 @@ void DmRavine_Update(Actor* thisx, PlayState* play) { } } break; + case DM_RAVINE_STATE_PENDING_DEATH: Actor_Kill(&this->actor); break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c index 83f635777..945a47472 100644 --- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c +++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c @@ -30,19 +30,29 @@ ActorInit Dm_Sa_InitVars = { (ActorFunc)DmSa_Draw, }; -static AnimationInfo sAnimationInfo[] = { { &gSkullKidTPoseAnim, 1.0f, 0, -1.0f, ANIMMODE_LOOP, 0 } }; +typedef enum { + /* -1 */ DMSA_ANIM_NONE = -1, + /* 0 */ DMSA_ANIM_T_POSE, + /* 1 */ DMSA_ANIM_MAX +} DmSaAnimation; -void func_80A2E960(SkelAnime* arg0, AnimationInfo* animations, u16 index) { - f32 frameCount; +static AnimationInfo sAnimationInfo[DMSA_ANIM_MAX] = { + { &gSkullKidTPoseAnim, 1.0f, 0, -1.0f, ANIMMODE_LOOP, 0 }, // DMSA_ANIM_T_POSE +}; - animations += index; - if (animations->frameCount < 0.0f) { - frameCount = Animation_GetLastFrame(animations->animation); +void DmSa_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; + + animInfo += animIndex; + + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frameCount = animations->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(arg0, animations->animation, animations->playSpeed, animations->startFrame, frameCount, - animations->mode, animations->morphFrames); + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmSa_Init(Actor* thisx, PlayState* play) { @@ -53,7 +63,7 @@ void DmSa_Init(Actor* thisx, PlayState* play) { this->actor.targetArrowOffset = 3000.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gSkullKidSkel, NULL, NULL, NULL, 0); - func_80A2E960(&this->skelAnime, sAnimationInfo, 0); + DmSa_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMSA_ANIM_T_POSE], 0); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmSa_DoNothing; } 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 afb9796a9..acfd72b76 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -108,7 +108,8 @@ typedef enum { /* 68 */ SK_ANIM_LOOK_LEFT_START, /* 69 */ SK_ANIM_LOOK_LEFT_LOOP, /* 70 */ SK_ANIM_SNIFF, - /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF + /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF, + /* 72 */ SK_ANIM_LAUGH_AFTER_MAX } SkullKidAnimation; typedef enum { @@ -219,79 +220,87 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -static AnimationInfo sAnimationInfo[] = { - { &gSkullKidShakeHeadAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidLookAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidBentOverHeadTwitchAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidGlitchyHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidRecliningFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidCurseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidCurseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidLaughStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidLaughLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHideOcarinaStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidHideOcarinaLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, +static AnimationInfo sAnimationInfo[SK_ANIM_LAUGH_AFTER_MAX] = { + { &gSkullKidShakeHeadAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SHAKE_HEAD + { &gSkullKidWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_WALK + { &gSkullKidLookAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOOK_AROUND + { &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_IDLE + { &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_UNUSED_IDLE + { &gSkullKidBentOverHeadTwitchAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_BENT_OVER_HEAD_TWITCH + { &gSkullKidGlitchyHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_GLITCHY_HORSE_RIDE_START + { &gSkullKidRecliningFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_RECLINING_FLOAT + { &gSkullKidCurseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CURSE_START + { &gSkullKidCurseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_CURSE_LOOP + { &gSkullKidLaughStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LAUGH_START + { &gSkullKidLaughLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LAUGH_LOOP + { &gSkullKidHideOcarinaStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIDE_OCARINA_START + { &gSkullKidHideOcarinaLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HIDE_OCARINA_LOOP + // SK_ANIM_PICK_UP_OCARINA_AND_START_PLAYING { &gSkullKidPickUpOcarinaAndStartPlayingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidPlayOcarinaAndLaughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidPickUpOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidLookAtOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidHorseRideLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidRaiseMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidRaiseMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidLowerMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, + { &gSkullKidPlayOcarinaAndLaughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_PLAY_OCARINA_AND_LAUGH + { &gSkullKidPickUpOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_PICK_UP_OCARINA + { &gSkullKidLookAtOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_AT_OCARINA + { &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_KICK_OVER_LINK + { &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SEARCH_LINK + { &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_UNUSED_KICK_OVER_LINK + { &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_UNUSED_SEARCH_LINK + { &gSkullKidHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HORSE_RIDE_START + { &gSkullKidHorseRideLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HORSE_RIDE_LOOP + { &gSkullKidRaiseMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_RAISE_MASK_START + { &gSkullKidRaiseMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_RAISE_MASK_LOOP + { &gSkullKidLowerMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOWER_MASK + // SK_ANIM_JUMP_WHILE_HIDING_OCARINA { &gSkullKidJumpWhileHidingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidHorseRideAndRotateAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, + { &gSkullKidHorseRideAndRotateAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HORSE_RIDE_AND_ROTATE + // SK_ANIM_PLAY_OCARINA_WHILE_FLOATING { &gSkullKidPlayOcarinaWhileFloatingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidFloatingTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidOcarinaJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidCallDownMoonStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidCallDownMoonLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidSmackFairyStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidSmackFairyLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHitByBubbleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidDropOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidFloatingArmsCrossedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidDeflectAttackAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidTelescopeLookUpStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidTelescopeLookUpLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidSurpriseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidSurpriseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, + { &gSkullKidFloatingTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_FLOATING_TURN_AROUND + { &gSkullKidOcarinaJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_OCARINA_JUGGLE + { &gSkullKidCallDownMoonStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CALL_DOWN_MOON_START + { &gSkullKidCallDownMoonLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_CALL_DOWN_MOON_LOOP + { &gSkullKidSmackFairyStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SMACK_FAIRY_START + { &gSkullKidSmackFairyLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SMACK_FAIRY_LOOP + { &gSkullKidHitByBubbleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIT_BY_BUBBLE + { &gSkullKidDropOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DROP_OCARINA + { &gSkullKidFloatingArmsCrossedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_FLOATING_ARMS_CROSSED + { &gSkullKidDeflectAttackAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DEFLECT_ATTACK + { &gSkullKidTelescopeLookUpStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_TELESCOPE_LOOK_UP_START + { &gSkullKidTelescopeLookUpLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_TELESCOPE_LOOK_UP_LOOP + { &gSkullKidSurpriseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SURPRISE_START + { &gSkullKidSurpriseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SURPRISE_LOOP + // SK_ANIM_LOOK_AROUND_FOR_GIANTS_START { &gSkullKidLookAroundForGiantsStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, + // SK_ANIM_LOOK_AROUND_FOR_GIANTS_LOOP { &gSkullKidLookAroundForGiantsLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHoldHeadAndShakeStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidHoldHeadAndShakeLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, + { &gSkullKidHoldHeadAndShakeStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, + 0.0f }, // SK_ANIM_HOLD_HEAD_AND_SHAKE_START + { &gSkullKidHoldHeadAndShakeLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HOLD_HEAD_AND_SHAKE_LOOP + // SK_ANIM_HOLD_HEAD_AND_SCREAM_START { &gSkullKidHoldHeadAndScreamStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, + // SK_ANIM_HOLD_HEAD_AND_SCREAM_LOOP { &gSkullKidHoldHeadAndScreamLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHuddleWithFairiesAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidSearchMaskSalesmanAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHoldUpMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidHoldUpMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidShiverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidDrawAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidBentOverLookUpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidSpankAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidHipShakeAndJumpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidPlayFluteAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidCartwheelAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidDangleFromMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidDroppedFromMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidLookUpAtGiantsAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidAshamedStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidAshamedLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidLookLeftStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidLookLeftLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, - { &gSkullKidSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, - { &gSkullKidLaughAfterSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, + { &gSkullKidHuddleWithFairiesAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HUDDLE_WITH_FAIRIES + { &gSkullKidSearchMaskSalesmanAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SEARCH_MASK_SALESMAN + { &gSkullKidHoldUpMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HOLD_UP_MASK_START + { &gSkullKidHoldUpMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HOLD_UP_MASK_LOOP + { &gSkullKidShiverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SHIVER + { &gSkullKidDrawAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DRAW + { &gSkullKidBentOverLookUpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_BENT_OVER_LOOK_UP + { &gSkullKidSpankAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SPANK + { &gSkullKidHipShakeAndJumpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIP_SHAKE_AND_JUMP + { &gSkullKidPlayFluteAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_PLAY_FLUTE + { &gSkullKidCartwheelAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CARTWHEEL + { &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LIE_FLAT + { &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DANGLE_FROM_MASK_START + { &gSkullKidDangleFromMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_DANGLE_FROM_MASK_LOOP + { &gSkullKidDroppedFromMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DROPPED_FROM_MASK + { &gSkullKidLookUpAtGiantsAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_UP_AT_GIANTS + { &gSkullKidAshamedStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_ASHAMED_START + { &gSkullKidAshamedLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_ASHAMED_LOOP + { &gSkullKidLookLeftStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOOK_LEFT_START + { &gSkullKidLookLeftLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_LEFT_LOOP + { &gSkullKidSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SNIFF + { &gSkullKidLaughAfterSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LAUGH_AFTER_SNIFF }; /** @@ -315,19 +324,21 @@ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) { } } -/** - * This function is always called with unusedExtraOffset = 0. - */ -void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, AnimationInfo* animationInfo, - u16 unusedExtraOffset) { +void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { + f32 endFrame; + DmStk_LoadObjectForAnimation(this, play); - animationInfo += unusedExtraOffset; + animInfo += animIndex; - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, - (animationInfo->frameCount < 0.0f) ? Animation_GetLastFrame(animationInfo->animation) - : animationInfo->frameCount, - animationInfo->mode, animationInfo->morphFrames); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); + } else { + endFrame = animInfo->frameCount; + } + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } /** @@ -418,6 +429,9 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) { case 2530: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE); break; + + default: + break; } } @@ -461,6 +475,9 @@ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) { case 173: Actor_PlaySfx(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG); break; + + default: + break; } } @@ -481,6 +498,9 @@ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play) case 142: Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER); break; + + default: + break; } } @@ -507,6 +527,9 @@ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) { case 890: Actor_PlaySfx(&this->actor, NA_SE_EN_STAL21_PSYCHO_VOICE); break; + + default: + break; } } @@ -554,9 +577,10 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) { case 217: Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_136); break; - } - if (player) {} + default: + break; + } if ((play->csCtx.curFrame >= 263) && (play->csCtx.curFrame < 698)) { Actor_PlaySfx(&player->actor, NA_SE_EN_STALKIDS_BODY_LEV - SFX_FLAG); @@ -592,6 +616,9 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla case 678: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH); break; + + default: + break; } if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.curFrame < 700)) { @@ -659,6 +686,9 @@ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) { case 230: Actor_PlaySfx(&this->actor, NA_SE_EN_STAL22_LAUGH_KID_L); break; + + default: + break; } } @@ -676,6 +706,9 @@ void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) { case 660: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD); break; + + default: + break; } } @@ -731,6 +764,9 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) { AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) | (1 << BANK_SYSTEM) | (1 << BANK_OCARINA) | (1 << BANK_VOICE)); break; + + default: + break; } if (this->animIndex == SK_ANIM_SHAKE_HEAD) { @@ -777,6 +813,9 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* pla case 388: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH); break; + + default: + break; } if (play->csCtx.curFrame >= 408) { @@ -888,6 +927,9 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND); break; + + default: + break; } } @@ -910,6 +952,9 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND); break; + + default: + break; } } @@ -980,6 +1025,9 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) { } } break; + + default: + break; } } @@ -1306,7 +1354,7 @@ void DmStk_ClockTower_WaitForDeflectionToEnd(DmStk* this, PlayState* play) { * Updates a variety of states based on Skull Kid's current cutscene, including his current * animation, his hand/mask type, his fade in/fade out state, and his current cutscene action. */ -void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { +void DmStk_HandleCutscene(DmStk* this, PlayState* play) { s32 pad; s32 cueChannel; @@ -1676,6 +1724,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { this->handType = SK_HAND_TYPE_DEFAULT; DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0); break; + + default: + break; } } @@ -1781,7 +1832,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { DmStk_UpdateCollision(this, play); } - DmStk_UpdateCutscenes(this, play); + DmStk_HandleCutscene(this, play); DmStk_PlaySfxForCutscenes(this, play); // This handles the cutscene where the player takes out the Deku Pipes for the first time. @@ -1809,6 +1860,9 @@ void DmStk_Update(Actor* thisx, PlayState* play) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_END; } break; + + default: + break; } // This code is responsible for making in-game time pass while using the telescope in the Astral Observatory. @@ -1854,6 +1908,9 @@ s32 DmStk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p *dList = NULL; } break; + + default: + break; } } else if (limbIndex == SKULL_KID_LIMB_HEAD) { *dList = NULL; @@ -1924,6 +1981,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot Matrix_Pop(); } break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); @@ -1964,6 +2024,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL); break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); @@ -2008,6 +2071,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHand); } break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 8ad403366..584edd42e 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -15,7 +15,7 @@ void DmTag_Destroy(Actor* thisx, PlayState* play); void DmTag_Update(Actor* thisx, PlayState* play); void func_80C229AC(DmTag* this, PlayState* play); -void func_80C229EC(DmTag* this, PlayState* play); +void DmTag_DoNothing(DmTag* this, PlayState* play); void func_80C229FC(DmTag* this, PlayState* play); ActorInit Dm_Tag_InitVars = { @@ -162,6 +162,9 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW; this->unk_1A4++; break; + + default: + break; } return ret; } @@ -190,9 +193,13 @@ s32* func_80C22880(DmTag* this, PlayState* play) { return D_80C22BF0; } return D_80C22C30; + case 2: this->msgEventCallback = func_80C224D8; return D_80C22BFC; + + default: + break; } return NULL; } @@ -217,7 +224,7 @@ void func_80C229AC(DmTag* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; } -void func_80C229EC(DmTag* this, PlayState* play) { +void DmTag_DoNothing(DmTag* this, PlayState* play) { } void func_80C229FC(DmTag* this, PlayState* play) { @@ -241,7 +248,7 @@ void DmTag_Init(Actor* thisx, PlayState* play) { this->unk_18C = 0; SubS_UpdateFlags(&this->unk_18C, 4, 7); this->actor.flags &= ~ACTOR_FLAG_1; - this->actionFunc = func_80C229EC; + this->actionFunc = DmTag_DoNothing; } else if (this->actor.room == 2) { Actor_Kill(&this->actor); } else { diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index 30d1cb3ef..a5c678647 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -29,16 +29,6 @@ ActorInit Dm_Zl_InitVars = { (ActorFunc)DmZl_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, - { &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, - { &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, - { &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, - { &gDmZl4GivingItemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, - { &gDmZl4RaisingOcarinaToPlayAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, - { &gDmZl4PlayingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, -}; - typedef enum { /* 0 */ ZELDA_ANIM_FACING_AWAY, /* 1 */ ZELDA_ANIM_TURNING_TOWARD_PLAYER, @@ -50,6 +40,16 @@ typedef enum { /* 7 */ ZELDA_ANIM_MAX } DmZlAnimation; +static AnimationInfo sAnimationInfo[ZELDA_ANIM_MAX] = { + { &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY + { &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_TURNING_TOWARD_PLAYER + { &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_PLAYER + { &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA_START + { &gDmZl4GivingItemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA + { &gDmZl4RaisingOcarinaToPlayAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_PLAYING_OCARINA_START + { &gDmZl4PlayingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_PLAYING_OCARINA +}; + static TexturePtr sMouthTextures[] = { gZl4MouthNeutralTex, gZl4MouthOpenSmilingTex, @@ -95,18 +95,19 @@ typedef enum { /* 6 */ ZELDA_EYE_STATE_CLOSED2 } DmZlEyeStates; -/** - * This function is always called with unusedExtraOffset = 0. - */ -void DmZl_ChangeAnimation(SkelAnime* skelAnime, AnimationInfo animationInfo[], u16 unusedExtraOffset) { +void DmZl_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) { f32 endFrame; - animationInfo += unusedExtraOffset; - endFrame = (animationInfo->frameCount < 0.0f) ? Animation_GetLastFrame(animationInfo->animation) - : animationInfo->frameCount; + animInfo += animIndex; - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, endFrame, - animationInfo->mode, animationInfo->morphFrames); + if (animInfo->frameCount < 0.0f) { + endFrame = Animation_GetLastFrame(animInfo->animation); + } else { + endFrame = animInfo->frameCount; + } + + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame, + animInfo->mode, animInfo->morphFrames); } void DmZl_Init(Actor* thisx, PlayState* play) { @@ -119,7 +120,7 @@ void DmZl_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); // these three set to NULL should mean they are dynamically allocated SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skeleton, NULL, NULL, NULL, 0); - DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); + DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmZl_DoNothing; } @@ -130,32 +131,36 @@ void DmZl_Destroy(Actor* thisx, PlayState* play) { void DmZl_DoNothing(DmZl* this, PlayState* play) { } -void DmZl_UpdateCutscene(DmZl* this, PlayState* play) { - s32 cueChannel; // reused as animIndex +void DmZl_HandleCutscene(DmZl* this, PlayState* play) { + s32 cueChannel; + s32 animIndex; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_102)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_102); if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) { - s16 nextAnimIndex = ZELDA_ANIM_FACING_AWAY; + animIndex = ZELDA_ANIM_FACING_AWAY; switch (play->csCtx.actorCues[cueChannel]->id) { default: case 1: break; + case 2: - nextAnimIndex = ZELDA_ANIM_TURNING_TOWARD_PLAYER; + animIndex = ZELDA_ANIM_TURNING_TOWARD_PLAYER; break; + case 3: - nextAnimIndex = ZELDA_ANIM_GIVING_OCARINA_START; + animIndex = ZELDA_ANIM_GIVING_OCARINA_START; break; + case 4: - nextAnimIndex = ZELDA_ANIM_PLAYING_OCARINA_START; + animIndex = ZELDA_ANIM_PLAYING_OCARINA_START; break; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; - DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } @@ -163,13 +168,13 @@ void DmZl_UpdateCutscene(DmZl* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - cueChannel = this->animIndex; + animIndex = cueChannel = this->animIndex; - if ((cueChannel == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (cueChannel == ZELDA_ANIM_GIVING_OCARINA_START) || - (cueChannel == ZELDA_ANIM_PLAYING_OCARINA_START)) { + if ((animIndex == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (animIndex == ZELDA_ANIM_GIVING_OCARINA_START) || + (animIndex == ZELDA_ANIM_PLAYING_OCARINA_START)) { // these animations don't loop at the end, they lead into the next animation this->animIndex++; - DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); + DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); } } } @@ -256,7 +261,7 @@ void DmZl_Update(Actor* thisx, PlayState* play) { DmZl_UpdateFace(this); SkelAnime_Update(&this->skelAnime); - DmZl_UpdateCutscene(this, play); + DmZl_HandleCutscene(this, play); this->actionFunc(this, play); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 557c278c7..c9bdddf04 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -10113,7 +10113,7 @@ 0x80A2E838:("DmRavine_DoNothing",), 0x80A2E848:("DmRavine_Update",), 0x80A2E8F4:("DmRavine_Draw",), - 0x80A2E960:("func_80A2E960",), + 0x80A2E960:("DmSa_ChangeAnim",), 0x80A2E9FC:("DmSa_Init",), 0x80A2EAAC:("DmSa_Destroy",), 0x80A2EABC:("DmSa_DoNothing",), @@ -10244,11 +10244,11 @@ 0x80A37EE0:("ObjShutter_Destroy",), 0x80A37EF0:("ObjShutter_Update",), 0x80A3803C:("ObjShutter_Draw",), - 0x80A38190:("DmZl_ChangeAnimation",), + 0x80A38190:("DmZl_ChangeAnim",), 0x80A3822C:("DmZl_Init",), 0x80A382EC:("DmZl_Destroy",), 0x80A382FC:("DmZl_DoNothing",), - 0x80A3830C:("DmZl_UpdateCutscene",), + 0x80A3830C:("DmZl_HandleCutscene",), 0x80A38468:("DmZl_UpdateFace",), 0x80A385D4:("DmZl_Update",), 0x80A3862C:("DmZl_OverrideLimbDraw",), @@ -11497,7 +11497,7 @@ 0x80AA1AF8:("DmStk_ClockTower_AdjustHeightAndRotation",), 0x80AA1B9C:("DmStk_ClockTower_DeflectHit",), 0x80AA1C64:("DmStk_ClockTower_WaitForDeflectionToEnd",), - 0x80AA1D1C:("DmStk_UpdateCutscenes",), + 0x80AA1D1C:("DmStk_HandleCutscene",), 0x80AA26CC:("DmStk_UpdateCollision",), 0x80AA2720:("DmStk_ClockTower_IdleWithOcarina",), 0x80AA27EC:("DmStk_ClockTower_Idle",), @@ -11506,7 +11506,7 @@ 0x80AA2BC0:("DmStk_PostLimbDraw2",), 0x80AA33A4:("DmStk_PostLimbDraw",), 0x80AA33CC:("DmStk_Draw",), - 0x80AA5580:("func_80AA5580",), + 0x80AA5580:("DmChar00_ChangeAnim",), 0x80AA561C:("func_80AA561C",), 0x80AA5720:("func_80AA5720",), 0x80AA575C:("func_80AA575C",), @@ -11526,7 +11526,7 @@ 0x80AA5EBC:("func_80AA5EBC",), 0x80AA6178:("DmChar00_Init",), 0x80AA62EC:("DmChar00_Destroy",), - 0x80AA62FC:("func_80AA62FC",), + 0x80AA62FC:("DmChar00_HandleCutscene",), 0x80AA67F8:("func_80AA67F8",), 0x80AA695C:("func_80AA695C",), 0x80AA6A04:("DmChar00_Update",), @@ -11552,7 +11552,7 @@ 0x80AAAF2C:("DmChar02_PlaySfxForCutscenes",), 0x80AAAF78:("DmChar02_Init",), 0x80AAB03C:("DmChar02_Destroy",), - 0x80AAB04C:("DmChar02_PerformCutsceneActions",), + 0x80AAB04C:("DmChar02_HandleCutscene",), 0x80AAB19C:("DmChar02_Update",), 0x80AAB23C:("DmChar02_OverrideLimbDraw",), 0x80AAB258:("DmChar02_PostLimbDraw",), @@ -11575,11 +11575,11 @@ 0x80AABC40:("DmChar04_ChangeAnim",), 0x80AABCDC:("DmChar04_Init",), 0x80AABE24:("DmChar04_Destroy",), - 0x80AABE34:("func_80AABE34",), + 0x80AABE34:("DmChar04_HandleCutscene",), 0x80AABF28:("DmChar04_Update",), 0x80AABF74:("DmChar04_OverrideLimbDraw",), 0x80AAC03C:("DmChar04_Draw",), - 0x80AAC5A0:("func_80AAC5A0",), + 0x80AAC5A0:("DmChar05_ChangeAnim",), 0x80AAC63C:("func_80AAC63C",), 0x80AAC6E4:("func_80AAC6E4",), 0x80AAC770:("func_80AAC770",), @@ -11620,7 +11620,7 @@ 0x80AAE680:("DmChar06_SetupAction",), 0x80AAE68C:("DmChar06_Init",), 0x80AAE6E0:("DmChar06_Destroy",), - 0x80AAE6F0:("func_80AAE6F0",), + 0x80AAE6F0:("DmChar06_HandleCutscene",), 0x80AAE854:("DmChar06_Update",), 0x80AAE878:("DmChar06_Draw",), 0x80AAE9C0:("DmChar07_SetupAction",), @@ -11645,8 +11645,8 @@ 0x80AAFBA4:("DmChar08_SpawnBubbles",), 0x80AAFCCC:("func_80AAFCCC",), 0x80AAFE78:("DmChar08_DoNothing",), - 0x80AAFE88:("func_80AAFE88",), - 0x80AB01E8:("func_80AB01E8",), + 0x80AAFE88:("DmChar08_HandleCutscene",), + 0x80AB01E8:("DmChar08_UpdateAnim",), 0x80AB023C:("func_80AB023C",), 0x80AB032C:("func_80AB032C",), 0x80AB096C:("func_80AB096C",), @@ -11662,7 +11662,7 @@ 0x80AB1FA0:("func_80AB1FA0",), 0x80AB1FDC:("func_80AB1FDC",), 0x80AB2258:("DmChar09_DoNothing",), - 0x80AB2268:("func_80AB2268",), + 0x80AB2268:("DmChar09_HandleCutscene",), 0x80AB24BC:("func_80AB24BC",), 0x80AB2544:("DmChar09_Update",), 0x80AB25D8:("DmChar09_OverrideLimbDraw",), @@ -16931,7 +16931,7 @@ 0x80C1BAC8:("EnFall2_Update",), 0x80C1BAEC:("EnFall2_Draw",), 0x80C1BD90:("DmAl_ChangeAnim",), - 0x80C1BDD8:("func_80C1BDD8",), + 0x80C1BDD8:("DmAl_HandleCutscene",), 0x80C1BF08:("DmAl_Init",), 0x80C1BFB8:("DmAl_Destroy",), 0x80C1BFC8:("DmAl_Update",), @@ -16939,36 +16939,36 @@ 0x80C1C064:("DmAl_PostLimbDraw",), 0x80C1C11C:("DmAl_TransformLimbDraw",), 0x80C1C130:("DmAl_Draw",), - 0x80C1C410:("func_80C1C410",), - 0x80C1C4D8:("func_80C1C4D8",), + 0x80C1C410:("DmAn_UpdateSkelAnime",), + 0x80C1C4D8:("DmAn_ChangeAnim",), 0x80C1C5B4:("func_80C1C5B4",), 0x80C1C62C:("func_80C1C62C",), 0x80C1C83C:("func_80C1C83C",), 0x80C1C8E8:("func_80C1C8E8",), 0x80C1C958:("func_80C1C958",), - 0x80C1CAB0:("func_80C1CAB0",), - 0x80C1CC80:("func_80C1CC80",), + 0x80C1CAB0:("DmAn_HandleCutscene",), + 0x80C1CC80:("DmAn_DoNothing",), 0x80C1CC90:("DmAn_Init",), 0x80C1CCE4:("DmAn_Destroy",), 0x80C1CCF4:("DmAn_Update",), 0x80C1CD80:("func_80C1CD80",), 0x80C1CEFC:("func_80C1CEFC",), 0x80C1D0B0:("func_80C1D0B0",), - 0x80C1D410:("func_80C1D410",), + 0x80C1D410:("DmAh_ChangeAnim",), 0x80C1D458:("func_80C1D458",), 0x80C1D4D0:("func_80C1D4D0",), 0x80C1D6E0:("func_80C1D6E0",), 0x80C1D78C:("func_80C1D78C",), - 0x80C1D7FC:("func_80C1D7FC",), - 0x80C1D92C:("func_80C1D92C",), + 0x80C1D7FC:("DmAh_HandleCutscene",), + 0x80C1D92C:("DmAh_DoNothing",), 0x80C1D93C:("DmAh_Init",), 0x80C1DA48:("DmAh_Destroy",), 0x80C1DA58:("DmAh_Update",), 0x80C1DAD4:("DmAh_PostLimbDraw",), 0x80C1DB24:("DmAh_TransformLimbDraw",), 0x80C1DCD8:("DmAh_Draw",), - 0x80C1DED0:("func_80C1DED0",), - 0x80C1DF18:("func_80C1DF18",), + 0x80C1DED0:("DmNb_ChangeAnim",), + 0x80C1DF18:("DmNb_HandleCutscene",), 0x80C1E048:("DmNb_Init",), 0x80C1E0F8:("DmNb_Destroy",), 0x80C1E108:("DmNb_Update",), @@ -16992,7 +16992,7 @@ 0x80C1EAB4:("DmBal_Destroy",), 0x80C1EAC4:("DmBal_SetupDoNothing",), 0x80C1EAD8:("DmBal_DoNothing",), - 0x80C1EAE8:("func_80C1EAE8",), + 0x80C1EAE8:("DmBal_HandleCutscene",), 0x80C1EC60:("func_80C1EC60",), 0x80C1ED0C:("DmBal_UpdateEyes",), 0x80C1ED64:("DmBal_SpawnPaper",), @@ -17057,7 +17057,7 @@ 0x80C22880:("func_80C22880",), 0x80C2291C:("func_80C2291C",), 0x80C229AC:("func_80C229AC",), - 0x80C229EC:("func_80C229EC",), + 0x80C229EC:("DmTag_DoNothing",), 0x80C229FC:("func_80C229FC",), 0x80C22A40:("DmTag_Init",), 0x80C22B30:("DmTag_Destroy",), @@ -17100,15 +17100,15 @@ 0x80C23E44:("EnEndingHero6_Update",), 0x80C23F14:("func_80C23F14",), 0x80C23F6C:("EnEndingHero6_Draw",), - 0x80C24360:("func_80C24360",), - 0x80C24428:("func_80C24428",), + 0x80C24360:("DmGm_UpdateSkelAnime",), + 0x80C24428:("DmGm_ChangeAnim",), 0x80C24504:("func_80C24504",), 0x80C2457C:("func_80C2457C",), 0x80C2478C:("func_80C2478C",), 0x80C24838:("func_80C24838",), 0x80C248A8:("func_80C248A8",), - 0x80C24A00:("func_80C24A00",), - 0x80C24BD0:("func_80C24BD0",), + 0x80C24A00:("DmGm_HandleCutscene",), + 0x80C24BD0:("DmGm_DoNothing",), 0x80C24BE0:("DmGm_Init",), 0x80C24C34:("DmGm_Destroy",), 0x80C24C44:("DmGm_Update",), From 08006cc0ea4ef819d32af2051cb9349652b39e6d Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Mon, 10 Jul 2023 15:02:22 -0700 Subject: [PATCH 030/121] Document EnTanron5 (destructible props, fragments, and item drops in Twinmold's arena) (#1319) * Document EnTanron5 (destructible props, fragments, and item drops in Twinmold's arena) * Respond to engineer's review * Updated the type names, used "ruin" instead of "prop" in comments, and addressed Anon's review * Missed this instance of "prop" * Respond to engineer's review * Update OutNames too --- assets/xml/objects/object_boss02.xml | 12 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 182 +++--- src/overlays/actors/ovl_Boss_02/z_boss_02.h | 18 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 589 +++++++++++------- .../actors/ovl_En_Tanron5/z_en_tanron5.h | 64 +- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 12 +- 7 files changed, 532 insertions(+), 353 deletions(-) diff --git a/assets/xml/objects/object_boss02.xml b/assets/xml/objects/object_boss02.xml index 8a80a57f2..0f2fdd052 100644 --- a/assets/xml/objects/object_boss02.xml +++ b/assets/xml/objects/object_boss02.xml @@ -36,13 +36,13 @@ - - - + + + - - - + + + 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 393c88232..02d9cfc4c 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -9,6 +9,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" #include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h" +#include "overlays/actors/ovl_En_Tanron5/z_en_tanron5.h" #include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -41,7 +42,7 @@ Boss02* sBlueTwinmold; Boss02* sTwinmoldStatic; u8 sMusicStartTimer; DoorWarp1* sBlueWarp; -TwinmoldEffect sEffects[150]; +TwinmoldEffect sEffects[TWINMOLD_EFFECT_COUNT]; static DamageTable sBlueTwinmoldDamageTable = { /* Deku Nut */ DMG_ENTRY(0, 0x0), @@ -125,7 +126,11 @@ ActorInit Boss_02_InitVars = { (ActorFunc)Boss02_Twinmold_Draw, }; -f32 D_809DF5B0 = 1.0f; +/** + * Multiplies the scale differently depending on whether the player is wearing the Giant's Mask or not. + * When the player is wearing the Giant's Mask, this value is smaller to make the player seem larger. + */ +static f32 sGiantModeScaleFactor = 1.0f; s16 D_809DF5B4[] = { 0, 195, 190, 185, 180, 175, 170, 165, 160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 100, 95, 90, 0, @@ -482,7 +487,7 @@ void func_809DA24C(PlayState* play) { void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) { s16 i; - for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) { + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effects++) { if (effects->type == TWINMOLD_EFFECT_NONE) { effects->type = TWINMOLD_EFFECT_SAND; effects->pos = *pos; @@ -503,7 +508,7 @@ void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) { void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) { s16 i; - for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) { + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effects++) { if (effects->type == TWINMOLD_EFFECT_NONE) { effects->type = TWINMOLD_EFFECT_FRAGMENT; effects->pos = *pos; @@ -525,7 +530,7 @@ void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) { void Boss02_SpawnEffectFlash(TwinmoldEffect* effects, Vec3f* pos) { s16 i; - for (i = 0; i < ARRAY_COUNT(sEffects); i++, effects++) { + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effects++) { if ((effects->type == TWINMOLD_EFFECT_NONE) || (effects->type == TWINMOLD_EFFECT_FRAGMENT)) { effects->type = TWINMOLD_EFFECT_FLASH; effects->pos = *pos; @@ -543,7 +548,7 @@ void func_809DA50C(s32 arg0, ColliderJntSph* collider, Vec3f* arg2) { collider->elements[arg0].dim.worldSphere.center.y = arg2->y; collider->elements[arg0].dim.worldSphere.center.z = arg2->z; collider->elements[arg0].dim.worldSphere.radius = - collider->elements[arg0].dim.modelSphere.radius * collider->elements[arg0].dim.scale * D_809DF5B0; + collider->elements[arg0].dim.modelSphere.radius * collider->elements[arg0].dim.scale * sGiantModeScaleFactor; } void Boss02_Init(Actor* thisx, PlayState* play) { @@ -551,7 +556,8 @@ void Boss02_Init(Actor* thisx, PlayState* play) { s32 i; s32 pad[2]; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->actor.params == TWINMOLD_RED)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && + (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_RED)) { sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f, 0.0f, 0, 0, 0, 1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, BHEART_PARAM_NORMAL); @@ -560,7 +566,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 10; this->subCamUp.z = this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; - if (this->actor.params == TWINMOLD_STATIC) { + if (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_STATIC) { sTwinmoldStatic = this; play->specialEffects = (void*)sEffects; this->actor.update = Boss02_Static_Update; @@ -574,21 +580,22 @@ void Boss02_Init(Actor* thisx, PlayState* play) { this->unk_1D20 = 1; } R_MAGIC_CONSUME_TIMER_GIANTS_MASK = KREG(14) + 20; - this->unk_01AC = 1.0f; - Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TANRON5, 0.0f, 1000.0f, 0.0f, 0, 0, 0, 0); - } else if (this->actor.params == TWINMOLD_TAIL) { + this->giantModeScaleFactor = 1.0f; + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TANRON5, 0.0f, 1000.0f, 0.0f, 0, 0, 0, + TWINMOLD_PROP_PARAMS(TWINMOLD_PROP_TYPE_STATIC)); + } else if (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_TAIL) { this->actor.update = Boss02_Tail_Update; this->actor.draw = NULL; this->actor.hintId = TATL_HINT_ID_TWINMOLD; } else { - if (this->actor.params != TWINMOLD_BLUE) { - this->actor.params = TWINMOLD_RED; - Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, TWINMOLD_STATIC); + if (TWINMOLD_GET_TYPE(&this->actor) != TWINMOLD_TYPE_BLUE) { + this->actor.params = TWINMOLD_TYPE_RED; + Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, TWINMOLD_TYPE_STATIC); sRedTwinmold = this; sBlueTwinmold = (Boss02*)Actor_Spawn(&play->actorCtx, play, ACTOR_BOSS_02, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, - this->actor.world.rot.y, this->actor.world.rot.z, TWINMOLD_BLUE); + this->actor.world.rot.y, this->actor.world.rot.z, TWINMOLD_TYPE_BLUE); sRedTwinmold->actor.colChkInfo.damageTable = &sRedTwinmoldDamageTable; sBlueTwinmold->actor.colChkInfo.damageTable = &sBlueTwinmoldDamageTable; sRedTwinmold->otherTwinmold = sBlueTwinmold; @@ -621,7 +628,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { this->unk_014C = Rand_ZeroFloat(1000.0f); this->unk_1678 = 22; Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BOSS_02, 0.0f, 0.0f, 0.0f, 0, 0, 0, - TWINMOLD_TAIL); + TWINMOLD_TYPE_TAIL); } } @@ -710,10 +717,10 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0168 = 2000.0f; if (this->unk_0195 != 0) { - this->actor.speed = this->unk_01A8 * D_809DF5B0 * 1.25f; + this->actor.speed = this->unk_01A8 * sGiantModeScaleFactor * 1.25f; this->skelAnime.playSpeed = 2.0f; } else { - this->actor.speed = this->unk_01A8 * D_809DF5B0; + this->actor.speed = this->unk_01A8 * sGiantModeScaleFactor; } Actor_UpdateVelocityWithoutGravity(&this->actor); @@ -757,7 +764,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { } if ((this->unk_0144 < 10) && (otherTwinmold->unk_0144 >= 20)) { - this->unk_01B0.y = -1000.0f * D_809DF5B0; + this->unk_01B0.y = -1000.0f * sGiantModeScaleFactor; if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -770,28 +777,28 @@ void func_809DAB78(Boss02* this, PlayState* play) { return; case 0: - if ((this->actor.params == 0) && (Rand_ZeroOne() < 0.75f)) { + if ((TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_RED) && (Rand_ZeroOne() < 0.75f)) { this->actor.world.pos.x = player->actor.world.pos.x; this->actor.world.pos.z = player->actor.world.pos.z; - this->actor.world.pos.y = player->actor.world.pos.y - (600.0f * D_809DF5B0); + this->actor.world.pos.y = player->actor.world.pos.y - (600.0f * sGiantModeScaleFactor); } else { - this->actor.world.pos.x = Rand_CenteredFloat(5000.0f * D_809DF5B0); - this->actor.world.pos.z = Rand_CenteredFloat(5000.0f * D_809DF5B0); - this->actor.world.pos.y = -500.0f * D_809DF5B0; + this->actor.world.pos.x = Rand_CenteredFloat(5000.0f * sGiantModeScaleFactor); + this->actor.world.pos.z = Rand_CenteredFloat(5000.0f * sGiantModeScaleFactor); + this->actor.world.pos.y = -500.0f * sGiantModeScaleFactor; if (sIsInGiantMode) { this->actor.world.pos.y += 3150.0f; } } - if ((fabsf(this->actor.world.pos.x) < (500.0f * D_809DF5B0)) && - (fabsf(this->actor.world.pos.z) < (500.0f * D_809DF5B0))) { + if ((fabsf(this->actor.world.pos.x) < (500.0f * sGiantModeScaleFactor)) && + (fabsf(this->actor.world.pos.z) < (500.0f * sGiantModeScaleFactor))) { return; } case 100: this->actor.shape.rot.x = 0x4000; this->unk_01B0.x = this->actor.world.pos.x; - this->unk_01B0.y = this->actor.world.pos.y + (1000.0f * D_809DF5B0); + this->unk_01B0.y = this->actor.world.pos.y + (1000.0f * sGiantModeScaleFactor); this->unk_01B0.z = this->actor.world.pos.z; this->unk_0146[0] = 100; this->unk_0144 = 1; @@ -803,14 +810,15 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0146[0] = 150; } else { this->unk_0144 = 2; - this->unk_01B0.x = Rand_CenteredFloat(3000.0f * D_809DF5B0); - this->unk_01B0.z = Rand_CenteredFloat(3000.0f * D_809DF5B0); - if ((fabsf(this->unk_01B0.x) < (500.0f * D_809DF5B0)) && - (fabsf(this->unk_01B0.z) < (500.0f * D_809DF5B0))) { + this->unk_01B0.x = Rand_CenteredFloat(3000.0f * sGiantModeScaleFactor); + this->unk_01B0.z = Rand_CenteredFloat(3000.0f * sGiantModeScaleFactor); + if ((fabsf(this->unk_01B0.x) < (500.0f * sGiantModeScaleFactor)) && + (fabsf(this->unk_01B0.z) < (500.0f * sGiantModeScaleFactor))) { this->unk_01B0.x = 500.0f; this->unk_01B0.z = 500.0f; } - this->unk_01B0.y = Rand_ZeroFloat(800.0f * D_809DF5B0) + (200.0f * D_809DF5B0); + this->unk_01B0.y = + Rand_ZeroFloat(800.0f * sGiantModeScaleFactor) + (200.0f * sGiantModeScaleFactor); if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -825,9 +833,9 @@ void func_809DAB78(Boss02* this, PlayState* play) { } else { phi_f2 = 500.0f; } - if (sqrtf(SQ(spCC) + SQ(spC8) + SQ(spC4)) < (phi_f2 * D_809DF5B0)) { + if (sqrtf(SQ(spCC) + SQ(spC8) + SQ(spC4)) < (phi_f2 * sGiantModeScaleFactor)) { this->unk_0144 = 3; - this->unk_01B0.y = -3000.0f * D_809DF5B0; + this->unk_01B0.y = -3000.0f * sGiantModeScaleFactor; if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -844,16 +852,16 @@ void func_809DAB78(Boss02* this, PlayState* play) { case 5: this->unk_01B0.x = player->actor.world.pos.x; - this->unk_01B0.y = player->actor.world.pos.y + (100.0f * D_809DF5B0); + this->unk_01B0.y = player->actor.world.pos.y + (100.0f * sGiantModeScaleFactor); this->unk_01B0.z = player->actor.world.pos.z; if (this->unk_0146[0] == 0) { this->unk_0144 = 3; - this->unk_01B0.x = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.x; - this->unk_01B0.y = -3000.0f * D_809DF5B0; + this->unk_01B0.x = Rand_CenteredFloat(500.0f * sGiantModeScaleFactor) + this->actor.world.pos.x; + this->unk_01B0.y = -3000.0f * sGiantModeScaleFactor; if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } - this->unk_01B0.z = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.z; + this->unk_01B0.z = Rand_CenteredFloat(500.0f * sGiantModeScaleFactor) + this->actor.world.pos.z; this->unk_0146[0] = 150; this->unk_0164 = 0.0f; } @@ -864,8 +872,8 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_019A = 0x500; this->unk_01A0 = 0x1200; } else { - this->colliderCylinder.dim.radius = 150.0f * D_809DF5B0; - this->colliderCylinder.dim.height = 200.0f * D_809DF5B0; + this->colliderCylinder.dim.radius = 150.0f * sGiantModeScaleFactor; + this->colliderCylinder.dim.height = 200.0f * sGiantModeScaleFactor; this->colliderCylinder.dim.yShift = 0; Collider_UpdateCylinder(&this->actor, &this->colliderCylinder); CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); @@ -915,10 +923,11 @@ void func_809DAB78(Boss02* this, PlayState* play) { if ((s16)(BREG(71) + 140) < this->unk_0146[1]) { if (this->unk_0146[0] == 0) { Matrix_RotateYS(Math_Atan2S(-player->actor.world.pos.x, -player->actor.world.pos.z), MTXMODE_NEW); - Matrix_MultVecZ(1500.0f * D_809DF5B0, &spA4); + Matrix_MultVecZ(1500.0f * sGiantModeScaleFactor, &spA4); this->unk_0146[0] = 50; this->unk_01B0.x = player->actor.world.pos.x + spA4.x; - this->unk_01B0.y = Rand_CenteredFloat(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0); + this->unk_01B0.y = + Rand_CenteredFloat(500.0f * sGiantModeScaleFactor) + (600.0f * sGiantModeScaleFactor); if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -926,7 +935,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { } this->unk_0168 = 3000.0f; } else { - this->unk_01B0.y += 10.0f * D_809DF5B0; + this->unk_01B0.y += 10.0f * sGiantModeScaleFactor; this->unk_0168 = 5000.0f; } this->unk_019A = 0x1000; @@ -961,21 +970,21 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_1678--; if (this->unk_1678 <= 0) { this->unk_0144 = 22; - this->actor.gravity = -1.0f * D_809DF5B0; + this->actor.gravity = -1.0f * sGiantModeScaleFactor; this->actor.velocity.y = 0.0f; - this->actor.terminalVelocity = -1000.0f * D_809DF5B0; + this->actor.terminalVelocity = -1000.0f * sGiantModeScaleFactor; this->unk_0164 = Rand_CenteredFloat(0.05f); spCC = player->actor.world.pos.x - this->actor.world.pos.x; spC4 = player->actor.world.pos.z - this->actor.world.pos.z; - if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * D_809DF5B0)) { - this->actor.speed = 15.0f * D_809DF5B0; + if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * sGiantModeScaleFactor)) { + this->actor.speed = 15.0f * sGiantModeScaleFactor; } spCC = this->actor.world.pos.x; spC4 = this->actor.world.pos.z; - if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * D_809DF5B0)) { - this->actor.speed = 15.0f * D_809DF5B0; + if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * sGiantModeScaleFactor)) { + this->actor.speed = 15.0f * sGiantModeScaleFactor; } if (otherTwinmold->unk_0144 >= 10) { @@ -1026,30 +1035,30 @@ void func_809DAB78(Boss02* this, PlayState* play) { for (i = 0; i < 15; i++) { Matrix_RotateYF(((2.0f * (i * M_PI)) / 15.0f) + sp9C, MTXMODE_NEW); - Matrix_MultVecZ((10 - this->unk_0146[0]) * (D_809DF5B0 * 300.0f) * 0.1f, &sp90); + Matrix_MultVecZ((10 - this->unk_0146[0]) * (sGiantModeScaleFactor * 300.0f) * 0.1f, &sp90); spD0.x = this->unk_0170.x + sp90.x; - spD0.y = this->unk_0170.y + (1000.0f * D_809DF5B0); + spD0.y = this->unk_0170.y + (1000.0f * sGiantModeScaleFactor); spD0.z = this->unk_0170.z + sp90.z; if (BgCheck_EntityRaycastFloor3(&play->colCtx, &sp8C, &sp88, &spD0) != BGCHECK_Y_MIN) { spA0 = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp8C, &spD0); - Matrix_MultVecZ(5.0f * D_809DF5B0, &sp70); - sp70.y = 2.0f * D_809DF5B0; - sp64.y = 0.3f * D_809DF5B0; + Matrix_MultVecZ(5.0f * sGiantModeScaleFactor, &sp70); + sp70.y = 2.0f * sGiantModeScaleFactor; + sp64.y = 0.3f * sGiantModeScaleFactor; sp64.z = 0.0f; sp64.x = 0.0f; sp7C.x = spD0.x; sp7C.y = spA0; sp7C.z = spD0.z; func_800B0F18(play, &sp7C, &sp70, &sp64, &D_809DFA98, &D_809DFA98, - (Rand_ZeroFloat(500.0f) + 1200.0f) * D_809DF5B0, 20.0f * D_809DF5B0, - Rand_ZeroFloat(5.0f) + 14.0f); + (Rand_ZeroFloat(500.0f) + 1200.0f) * sGiantModeScaleFactor, + 20.0f * sGiantModeScaleFactor, Rand_ZeroFloat(5.0f) + 14.0f); } } } } - this->colliderCylinder.dim.radius = 150.0f * D_809DF5B0; - this->colliderCylinder.dim.height = 200.0f * D_809DF5B0; + this->colliderCylinder.dim.radius = 150.0f * sGiantModeScaleFactor; + this->colliderCylinder.dim.height = 200.0f * sGiantModeScaleFactor; this->colliderCylinder.dim.yShift = 0; Collider_UpdateCylinder(&this->actor, &this->colliderCylinder); CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderCylinder.base); @@ -1206,16 +1215,16 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_SAND_OLD - SFX_FLAG); if (this->unk_0144 > 20) { - sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * sGiantModeScaleFactor) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * sGiantModeScaleFactor) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * sGiantModeScaleFactor) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } if ((this->unk_014C % 2) == 0) { - sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * sGiantModeScaleFactor) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * sGiantModeScaleFactor) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * sGiantModeScaleFactor) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } } @@ -1281,7 +1290,7 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) { void Boss02_Static_Update(Actor* thisx, PlayState* play) { Boss02* this = THIS; - this->unk_01AC = D_809DF5B0; + this->giantModeScaleFactor = sGiantModeScaleFactor; play->envCtx.sandstormState = 0xD; if (sBlueWarp != NULL) { @@ -1352,7 +1361,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (this->actor.params == 0) { + if (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_RED) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldRedSkinTex)); } else { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldBlueSkinTex)); @@ -1478,12 +1487,12 @@ void Boss02_UpdateEffects(PlayState* play) { floorY = 3150.0f; } - for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) { + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { if (effect->type) { effect->timer++; - effect->pos.x += effect->velocity.x * D_809DF5B0; - effect->pos.y += effect->velocity.y * D_809DF5B0; - effect->pos.z += effect->velocity.z * D_809DF5B0; + effect->pos.x += effect->velocity.x * sGiantModeScaleFactor; + effect->pos.y += effect->velocity.y * sGiantModeScaleFactor; + effect->pos.z += effect->velocity.z * sGiantModeScaleFactor; effect->velocity.y += effect->accel.y; if (effect->type < TWINMOLD_EFFECT_FRAGMENT) { @@ -1525,7 +1534,7 @@ void Boss02_DrawEffects(PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) { + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { if (effect->type == TWINMOLD_EFFECT_SAND) { if (!flag) { gSPDisplayList(POLY_XLU_DISP++, gTwinmoldDustMaterialDL); @@ -1545,7 +1554,8 @@ void Boss02_DrawEffects(PlayState* play) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, 1.0f, MTXMODE_APPLY); + Matrix_Scale(effect->scale * sGiantModeScaleFactor, effect->scale * sGiantModeScaleFactor, 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++, gTwinmoldDustModelDL); @@ -1553,7 +1563,7 @@ void Boss02_DrawEffects(PlayState* play) { } effect = (TwinmoldEffect*)play->specialEffects; - for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) { + for (i = 0, flag = false; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { if (effect->type == TWINMOLD_EFFECT_FRAGMENT) { if (!flag) { gDPSetCombineLERP(POLY_OPA_DISP++, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, @@ -1565,8 +1575,8 @@ void Boss02_DrawEffects(PlayState* play) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); Matrix_RotateYS(effect->rotY, MTXMODE_APPLY); Matrix_RotateXS(effect->rotX, MTXMODE_APPLY); - Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, - MTXMODE_APPLY); + Matrix_Scale(effect->scale * sGiantModeScaleFactor, effect->scale * sGiantModeScaleFactor, + effect->scale * sGiantModeScaleFactor, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gEffFragments1DL); @@ -1574,7 +1584,7 @@ void Boss02_DrawEffects(PlayState* play) { } effect = (TwinmoldEffect*)play->specialEffects; - for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) { + for (i = 0, flag = false; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { if (effect->type == TWINMOLD_EFFECT_FLASH) { if (!flag) { //! @bug - dev forgot to set flag to 1, should only apply to first entry? gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); @@ -1585,7 +1595,8 @@ void Boss02_DrawEffects(PlayState* play) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, 1.0f, MTXMODE_APPLY); + Matrix_Scale(effect->scale * sGiantModeScaleFactor, effect->scale * sGiantModeScaleFactor, 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++, gLightOrbModelDL); @@ -1593,7 +1604,7 @@ void Boss02_DrawEffects(PlayState* play) { } effect = (TwinmoldEffect*)play->specialEffects; - for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) { + for (i = 0, flag = false; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { if (effect->type == TWINMOLD_EFFECT_BLACK_DUST) { if (!flag) { gSPDisplayList(POLY_XLU_DISP++, gTwinmoldDustMaterialDL); @@ -1608,7 +1619,8 @@ void Boss02_DrawEffects(PlayState* play) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, 1.0f, MTXMODE_APPLY); + Matrix_Scale(effect->scale * sGiantModeScaleFactor, effect->scale * sGiantModeScaleFactor, 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++, gTwinmoldDustModelDL); @@ -1771,12 +1783,12 @@ void func_809DD934(Boss02* this, PlayState* play) { if (sp57) { sIsInGiantMode = 1 - sIsInGiantMode; if (!sIsInGiantMode) { - D_809DF5B0 = 1.0f; + sGiantModeScaleFactor = 1.0f; } else { - D_809DF5B0 = 0.1f; + sGiantModeScaleFactor = 0.1f; } - this->unk_01AC = D_809DF5B0; + this->giantModeScaleFactor = sGiantModeScaleFactor; if (!sIsInGiantMode) { if (sBlueWarp != NULL) { sBlueWarp->unk_203 = 0; @@ -2183,8 +2195,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) { this->subCamEye.y = 3160.0f; } - if (this->subCamAtNext.y < (100.0f * D_809DF5B0)) { - this->subCamAtNext.y = (100.0f * D_809DF5B0); + if (this->subCamAtNext.y < (100.0f * sGiantModeScaleFactor)) { + this->subCamAtNext.y = (100.0f * sGiantModeScaleFactor); } this->subCamEye.z = player->actor.world.pos.z; @@ -2236,7 +2248,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { if ((this->unk_1D20 != 0) && (this->subCamId != SUB_CAM_ID_DONE)) { subCamEye = this->subCamEye; - subCamEye.y += sp58 * D_809DF5B0; + subCamEye.y += sp58 * sGiantModeScaleFactor; Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &subCamEye, &this->subCamUp); this->subCamUp.z = this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.h b/src/overlays/actors/ovl_Boss_02/z_boss_02.h index 4fbd8b471..f3024c241 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h @@ -6,6 +6,8 @@ struct Boss02; +#define TWINMOLD_GET_TYPE(thisx) ((thisx)->params) + typedef void (*Boss02ActionFunc)(struct Boss02*, PlayState*); typedef struct { @@ -25,17 +27,19 @@ typedef struct { typedef enum { /* 0 */ TWINMOLD_EFFECT_NONE, /* 1 */ TWINMOLD_EFFECT_SAND, // The sand kicked up when Twinmold touches the ground - /* 2 */ TWINMOLD_EFFECT_BLACK_DUST, // Unused + /* 2 */ TWINMOLD_EFFECT_BLACK_DUST, // The dust that appears when either Twinmold or the player destroys a ruin /* 3 */ TWINMOLD_EFFECT_FRAGMENT, // The fragments that fly off when the parts of Twinmold explode /* 4 */ TWINMOLD_EFFECT_FLASH // The flashes of light that appear when the parts of Twinmold explode } TwinmoldEffectType; +#define TWINMOLD_EFFECT_COUNT 150 + typedef enum { - /* 0 */ TWINMOLD_RED, - /* 35 */ TWINMOLD_BLUE = 35, - /* 100 */ TWINMOLD_TAIL = 100, - /* 200 */ TWINMOLD_STATIC = 200 -} TwinmoldParam; + /* 0 */ TWINMOLD_TYPE_RED, + /* 35 */ TWINMOLD_TYPE_BLUE = 35, + /* 100 */ TWINMOLD_TYPE_TAIL = 100, + /* 200 */ TWINMOLD_TYPE_STATIC = 200 +} TwinmoldType; typedef struct Boss02 { /* 0x0000 */ Actor actor; @@ -66,7 +70,7 @@ typedef struct Boss02 { /* 0x01A0 */ f32 unk_01A0; /* 0x01A4 */ s16 unk_01A4; /* 0x01A8 */ f32 unk_01A8; - /* 0x01AC */ f32 unk_01AC; + /* 0x01AC */ f32 giantModeScaleFactor; /* 0x01B0 */ Vec3f unk_01B0; /* 0x01BC */ Vec3f unk_01BC[200]; /* 0x0B1C */ Vec3f unk_0B1C[200]; 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 e9c43fca8..38e1ba8c6 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -1,7 +1,23 @@ /* * File: z_en_tanron5.c * Overlay: ovl_En_Tanron5 - * Description: Destructible props in Twinmold's arena + * Description: Destructible ruins, fragments, and item drops in Twinmold's arena. + * + * This actor is responsible for three different interactive props in Twinmold's arena, all of which can be further + * divided into more categories. The main thing this actor handles are the destructible ruins placed around the arena, + * of which there are two kinds. There are pillars with Majora's Mask on them, and there are ruins in a roughly + * pyramidal shape. While both types of ruin behave in roughly the same way, how they implement this behavior can + * sometimes be quite different. + * + * When Twinmold or the player wearing the Giant's Mask hits one of these destructible ruins, various fragments + * of the ruin fly off from the point of impact. These fragments are handled by this actor as well. The fragments + * can be large or small, and the two sizes behave almost identically outside of two small differences. Large + * fragments can damage the player and sink into the sand once they hit the ground, whereas small fragments + * deal no damage and despawn upon touching the ground. + * + * Sometimes, item drops can also appear when a destructible ruin is hit; this actor is responsible for handling + * these drops too. There are drops that give the player 10 arrows, and drops that give the player a big magic + * jar, and these drops behave identically outside of what item they give when collected by the player. */ #include "z_en_tanron5.h" @@ -18,10 +34,15 @@ void EnTanron5_Destroy(Actor* thisx, PlayState* play); void EnTanron5_Update(Actor* thisx, PlayState* play2); void EnTanron5_Draw(Actor* thisx, PlayState* play); -void func_80BE5818(Actor* thisx, PlayState* play2); -void func_80BE5C10(Actor* thisx, PlayState* play); +void EnTanron5_RuinFragmentItemDrop_Update(Actor* thisx, PlayState* play2); +void EnTanron5_ItemDrop_Draw(Actor* thisx, PlayState* play); -s32 D_80BE5D80 = 0; +typedef enum { + /* 0 */ TWINMOLD_PROP_ITEM_DROP_TYPE_10_ARROWS, + /* 1 */ TWINMOLD_PROP_ITEM_DROP_TYPE_MAGIC_JAR_BIG +} TwinmoldPropItemDropType; + +s32 sFragmentAndItemDropCount = 0; ActorInit En_Tanron5_InitVars = { ACTOR_EN_TANRON5, @@ -55,90 +76,136 @@ static ColliderCylinderInit sCylinderInit = { { 70, 450, 0, { 0, 0, 0 } }, }; -f32 D_80BE5DD0 = 1.0f; +/** + * Multiplies the scale differently depending on whether the player is wearing the Giant's Mask or not. + * When the player is wearing the Giant's Mask, this value is smaller to make the player seem larger. + */ +static f32 sGiantModeScaleFactor = 1.0f; -Vec2s D_80BE5DD4[] = { - { 0x4B0, 0x9C4 }, { -0x4B0, 0x9C4 }, { 0x4B0, -0x9C4 }, { -0x4B0, -0x9C4 }, { 0x9C4, 0x4B0 }, - { -0x9C4, 0x4B0 }, { 0x9C4, -0x4B0 }, { -0x9C4, -0x4B0 }, { 0x3E8, 0x3E8 }, { -0x3E8, 0x3E8 }, - { 0x3E8, -0x3E8 }, { -0x3E8, -0x3E8 }, { 0x000, -0x3E8 }, { 0x000, 0x3E8 }, { 0x3E8, 0x000 }, - { -0x3E8, 0x000 }, { 0x000, -0x7D0 }, { 0x000, 0x7D0 }, { 0x7D0, 0x000 }, { -0x7D0, 0x000 }, +/** + * Stores the X and Z spawn positions for all of the ruins. Their Y spawn position is determined by the + * height of the floor, so there's no need to store it. + */ +static Vec2s sSpawnPosList[] = { + { 1200, 2500 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_1 + { -1200, 2500 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_2 + { 1200, -2500 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_3 + { -1200, -2500 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_4 + { 2500, 1200 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_5 + { -2500, 1200 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_6 + { 2500, -1200 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_7 + { -2500, -1200 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_8 + { 1000, 1000 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_9 + { -1000, 1000 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_10 + { 1000, -1000 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_11 + { -1000, -1000 }, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_12 + { 0, -1000 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_1 + { 0, 1000 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_2 + { 1000, 0 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_3 + { -1000, 0 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_4 + { 0, -2000 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_5 + { 0, 2000 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_6 + { 2000, 0 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_7 + { -2000, 0 }, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_8 }; -Gfx* D_80BE5E24[] = { - gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, - gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, - gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, gTwinmoldMajoraPillarDL, - gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, - gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, gTwinmoldPyramidRuinDL, +/** + * Display lists for all ruins. + */ +static Gfx* sDLists[] = { + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_1 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_2 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_3 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_4 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_5 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_6 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_7 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_8 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_9 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_10 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_11 + gTwinmoldRuinPillarDL, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_12 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_1 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_2 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_3 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_4 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_5 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_6 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_7 + gTwinmoldRuinPyramidDL, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_8 }; -f32 D_80BE5E74[] = { - 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, - 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, +/** + * The initial base scale for all ruins. In the final game, this array isn't very useful, + * since they're all the same value, but this could be used to make some ruins larger or + * smaller than the others. + */ +static f32 sBaseScales[] = { + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_1 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_2 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_3 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_4 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_5 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_6 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_7 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_8 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_9 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_10 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_11 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PILLAR_12 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_1 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_2 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_3 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_4 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_5 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_6 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_7 + 0.09f, // TWINMOLD_PROP_TYPE_RUIN_PYRAMID_8 }; -typedef struct { - /* 0x00 */ Vec3f unk_00; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ f32 unk_10; - /* 0x14 */ f32 unk_14; - /* 0x18 */ Vec3f unk_18; - /* 0x24 */ u8 unk_24; - /* 0x26 */ s16 unk_26; - /* 0x28 */ UNK_TYPE1 unk28[0x4]; - /* 0x2C */ s16 unk_2C; - /* 0x2E */ UNK_TYPE1 unk2E[0x6]; - /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; -} EnTanron5Effect; // size = 0x3C - -void func_80BE4930(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { +/** + * Spawns the sand effect that appears when a ruin fragment hits the ground. + */ +void EnTanron5_SpawnEffectSand(TwinmoldEffect* effect, Vec3f* pos, f32 scale) { s16 i; - for (i = 0; i < 150; i++, effect++) { - if (effect->unk_24 == 0) { - effect->unk_24 = 1; - - effect->unk_00 = *arg1; - - effect->unk_0C = Rand_CenteredFloat(10.0f); - effect->unk_10 = Rand_ZeroFloat(2.0f) + 3.0f; - effect->unk_14 = Rand_CenteredFloat(10.0f); - - effect->unk_18.y = -0.15f; - effect->unk_18.x = 0.0f; - effect->unk_18.z = 0.0f; - - effect->unk_2C = Rand_ZeroFloat(100.0f) + 200.0f; - effect->unk_26 = 0; - effect->unk_34 = arg2; - effect->unk_38 = 2.0f * arg2; + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { + if (effect->type == TWINMOLD_EFFECT_NONE) { + effect->type = TWINMOLD_EFFECT_SAND; + effect->pos = *pos; + effect->velocity.x = Rand_CenteredFloat(10.0f); + effect->velocity.y = Rand_ZeroFloat(2.0f) + 3.0f; + effect->velocity.z = Rand_CenteredFloat(10.0f); + effect->accel.y = -0.15f; + effect->accel.x = effect->accel.z = 0.0f; + effect->alpha = Rand_ZeroFloat(100.0f) + 200.0f; + effect->timer = 0; + effect->scale = scale; + effect->targetScale = 2.0f * scale; break; } } } -void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { +/** + * Spawns the black dust that appears whenever part of a ruin is destroyed. + */ +void EnTanron5_SpawnEffectBlackDust(TwinmoldEffect* effect, Vec3f* pos, f32 scale) { s16 i; - for (i = 0; i < 150; i++, effect++) { - if (effect->unk_24 == 0) { - effect->unk_24 = 2; - - effect->unk_00 = *arg1; - - effect->unk_0C = Rand_CenteredFloat(30.0f); - effect->unk_10 = Rand_ZeroFloat(7.0f); - effect->unk_14 = Rand_CenteredFloat(30.0f); - - effect->unk_18.y = -0.3f; - effect->unk_18.x = 0.0f; - effect->unk_18.z = 0.0f; - - effect->unk_2C = Rand_ZeroFloat(70.0f) + 150.0f; - effect->unk_26 = 0; - effect->unk_34 = arg2; - effect->unk_38 = 2.0f * arg2; + for (i = 0; i < TWINMOLD_EFFECT_COUNT; i++, effect++) { + if (effect->type == TWINMOLD_EFFECT_NONE) { + effect->type = TWINMOLD_EFFECT_BLACK_DUST; + effect->pos = *pos; + effect->velocity.x = Rand_CenteredFloat(30.0f); + effect->velocity.y = Rand_ZeroFloat(7.0f); + effect->velocity.z = Rand_CenteredFloat(30.0f); + effect->accel.y = -0.3f; + effect->accel.x = effect->accel.z = 0.0f; + effect->alpha = Rand_ZeroFloat(70.0f) + 150.0f; + effect->timer = 0; + effect->scale = scale; + effect->targetScale = 2.0f * scale; break; } } @@ -147,54 +214,60 @@ void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { void EnTanron5_Init(Actor* thisx, PlayState* play) { EnTanron5* this = THIS; - if (ENTANRON5_GET(&this->actor) >= ENTANRON5_100) { - D_80BE5D80++; - if (D_80BE5D80 > 60) { + if (TWINMOLD_PROP_GET_TYPE(&this->actor) >= TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_1) { + // This is a ruin fragment or item drop; if there are more than 60 fragments or drops + // already spawned, immediately kill this one. Otherwise, set up the fragment or drop + // to fly off while spinning randomly. + sFragmentAndItemDropCount++; + if (sFragmentAndItemDropCount > 60) { Actor_Kill(&this->actor); return; } - this->unk_198 = Rand_CenteredFloat(0x2000); - this->unk_19A = Rand_CenteredFloat(0x2000); + // fragmentRotationalVelocityX is in a union with itemDropRotZ, so for item drops, this code + // will initialize its z-rotation to a random value. + this->fragmentRotationalVelocityX = Rand_CenteredFloat(0x2000); + this->fragmentRotationalVelocityY = Rand_CenteredFloat(0x2000); - if (ENTANRON5_GET(&this->actor) < ENTANRON5_107) { - Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * D_80BE5DD0); + if (TWINMOLD_PROP_GET_TYPE(&this->actor) <= TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_7) { + Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * sGiantModeScaleFactor); } else { - Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.015f) + 0.01f) * D_80BE5DD0); + Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.015f) + 0.01f) * sGiantModeScaleFactor); } - this->actor.speed = (Rand_ZeroFloat(10.0f) + 10.0f) * D_80BE5DD0; - this->actor.velocity.y = (Rand_ZeroFloat(10.0f) + 15.0f) * D_80BE5DD0; - this->actor.gravity = -2.5f * D_80BE5DD0; - this->actor.terminalVelocity = -1000.0f * D_80BE5DD0; - this->actor.update = func_80BE5818; + this->actor.speed = (Rand_ZeroFloat(10.0f) + 10.0f) * sGiantModeScaleFactor; + this->actor.velocity.y = (Rand_ZeroFloat(10.0f) + 15.0f) * sGiantModeScaleFactor; + this->actor.gravity = -2.5f * sGiantModeScaleFactor; + this->actor.terminalVelocity = -1000.0f * sGiantModeScaleFactor; + this->actor.update = EnTanron5_RuinFragmentItemDrop_Update; - if (ENTANRON5_GET(&this->actor) >= ENTANRON5_110) { - this->actor.draw = func_80BE5C10; - this->unk_1A0 = Rand_ZeroFloat(1.999f); - Actor_SetScale(&this->actor, D_80BE5DD0 * 0.03f); - this->unk_144 = 250; + if (TWINMOLD_PROP_GET_TYPE(&this->actor) >= TWINMOLD_PROP_TYPE_ITEM_DROP_1) { + this->actor.draw = EnTanron5_ItemDrop_Draw; + this->itemDropType = Rand_ZeroFloat(1.999f); + Actor_SetScale(&this->actor, sGiantModeScaleFactor * 0.03f); + this->timer = 250; this->actor.shape.rot.x = this->actor.shape.rot.y = this->actor.shape.rot.z = 0; } else { - this->unk_148 = gRuinFragmentDL; - this->unk_144 = 150; + this->dList = gRuinFragmentDL; + this->timer = 150; } - } else if (ENTANRON5_GET(&this->actor) == ENTANRON5_0) { + } else if (TWINMOLD_PROP_GET_TYPE(&this->actor) == TWINMOLD_PROP_TYPE_STATIC) { EnTanron5* child; s32 i; - for (i = 0; i < ARRAY_COUNT(D_80BE5E74); i++) { - child = - (EnTanron5*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, D_80BE5DD4[i].x, - this->actor.world.pos.y, D_80BE5DD4[i].z, 0, Rand_ZeroFloat(0x10000), 0, i + 1); + // Spawns all of the ruins in the right places. Gets killed after everything is spawned. + for (i = 0; i < ARRAY_COUNT(sSpawnPosList); i++) { + child = (EnTanron5*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, sSpawnPosList[i].x, + this->actor.world.pos.y, sSpawnPosList[i].z, 0, Rand_ZeroFloat(0x10000), 0, + TWINMOLD_PROP_PARAMS(TWINMOLD_PROP_TYPE_RUIN_PILLAR_1 + i)); child->actor.parent = this->actor.parent; - child->unk_19C = D_80BE5E74[i]; + child->baseScale = sBaseScales[i]; - Actor_SetScale(&child->actor, child->unk_19C); + Actor_SetScale(&child->actor, child->baseScale); - child->unk_148 = D_80BE5E24[i]; - if (child->unk_148 == gTwinmoldPyramidRuinDL) { + child->dList = sDLists[i]; + if (child->dList == gTwinmoldRuinPyramidDL) { child->actor.shape.rot.y = 0; } @@ -203,6 +276,8 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } else { + // This is a ruin; update its y-position to be just below the floor, so it looks like it's + // buried in the sand. Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y = this->actor.floorHeight + -20.0f; } @@ -211,25 +286,31 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { void EnTanron5_Destroy(Actor* thisx, PlayState* play) { EnTanron5* this = THIS; - if (ENTANRON5_GET(&this->actor) >= ENTANRON5_100) { - D_80BE5D80--; + if (TWINMOLD_PROP_GET_TYPE(&this->actor) >= TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_1) { + sFragmentAndItemDropCount--; } } +/** + * This is the update function for the destructible ruins (both the pillar and pyarmid ruins). + */ void EnTanron5_Update(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnTanron5* this = THIS; Boss02* boss02 = (Boss02*)this->actor.parent; Player* player = GET_PLAYER(play2); s32 i; - s32 phi_v0; - s32 spC4; - Vec3f spB8; + s32 yawDiff; + s32 fragmentAndItemCount; + Vec3f pos; - if (this->unk_1A0 >= 3) { - this->unk_1A0++; + // When a ruin is destroyed (i.e., it is hit three times), it will reduce its scale to 0.0f (making + // it effectively invisible and intangible), then wait an additional 37 frames before actually + // calling Actor_Kill to despawn. The reason for this extra waiting period is unknown. + if (this->hitCount >= 3) { + this->hitCount++; Actor_SetScale(&this->actor, 0.0f); - if (this->unk_1A0 >= 40) { + if (this->hitCount >= 40) { Actor_Kill(&this->actor); } return; @@ -237,154 +318,184 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) { // required } - if (this->unk_144 != 0) { - this->unk_144--; - } + DECR(this->timer); + //! @bug This code will keep sGiantModeScaleFactor up-to-date so long as at least one ruin is still active. + //! However, once the last ruin is destroyed, this code will no longer run, so sGiantModeScaleFactor will + //! get "stuck" at whatever its current value is. This is a problem, because other instances of EnTanron5, + //! like the item drops, rely on this variable being updated to function properly. Getting in this "stuck" + //! state can result in odd behavior for these other instances, like item drops not being obtainable when + //! the player is normal-sized. + //! + //! The strange waiting period before despawning seen above may be an attempt to mitigate this, but it + //! doesn't work. It doesn't update sGiantModeScaleFactor, and even if it did, waiting 37 frames before + //! despawning is far too short of a time to wait, since item drops take 250 frames to despawn. if (boss02->actor.update != NULL) { - D_80BE5DD0 = boss02->unk_01AC; + sGiantModeScaleFactor = boss02->giantModeScaleFactor; } else { - D_80BE5DD0 = 1.0f; + sGiantModeScaleFactor = 1.0f; } - Actor_SetScale(&this->actor, this->unk_19C * D_80BE5DD0); + Actor_SetScale(&this->actor, this->baseScale * sGiantModeScaleFactor); - if (this->unk_148 == gTwinmoldMajoraPillarDL) { - this->collider.dim.radius = 65.0f * D_80BE5DD0; - this->collider.dim.height = 380.0f * D_80BE5DD0; - } else if (this->unk_1A0 == 0) { - this->collider.dim.radius = 85.0f * D_80BE5DD0; - this->collider.dim.height = 200.0f * D_80BE5DD0; - } else if (this->unk_1A0 == 1) { - this->collider.dim.radius = 95.0f * D_80BE5DD0; - this->collider.dim.height = 100.0f * D_80BE5DD0; - } else if (this->unk_1A0 == 2) { - this->collider.dim.radius = 95.0f * D_80BE5DD0; - this->collider.dim.height = 30.0f * D_80BE5DD0; + if (this->dList == gTwinmoldRuinPillarDL) { + this->collider.dim.radius = 65.0f * sGiantModeScaleFactor; + this->collider.dim.height = 380.0f * sGiantModeScaleFactor; + } else if (this->hitCount == 0) { + this->collider.dim.radius = 85.0f * sGiantModeScaleFactor; + this->collider.dim.height = 200.0f * sGiantModeScaleFactor; + } else if (this->hitCount == 1) { + this->collider.dim.radius = 95.0f * sGiantModeScaleFactor; + this->collider.dim.height = 100.0f * sGiantModeScaleFactor; + } else if (this->hitCount == 2) { + this->collider.dim.radius = 95.0f * sGiantModeScaleFactor; + this->collider.dim.height = 30.0f * sGiantModeScaleFactor; } - if (this->unk_144 == 0) { + if (this->timer == 0) { if (this->collider.base.acFlags & AC_HIT) { ColliderInfo* acHitInfo = this->collider.info.acHitInfo; Actor* ac = this->collider.base.ac; this->collider.base.acFlags &= ~AC_HIT; - spC4 = 10; + fragmentAndItemCount = 10; if (Play_InCsMode(play)) { - this->unk_144 = 1; + // In Twinmold's opening cutscene, it emerges from the sand beneath a ruin and destroys it. + // Setting the timer to 1 here allows Twinmold to hit the ruin every single frame during the + // cutscene, allowing it to destory the ruin in only 3 frames. + this->timer = 1; } else { - this->unk_144 = 5; - spC4 = (s32)Rand_ZeroFloat(2.99f) + 10; + this->timer = 5; + fragmentAndItemCount = (s32)Rand_ZeroFloat(2.99f) + 10; } - if ((KREG(19) != 0) || ((acHitInfo->toucher.dmgFlags & 0x05000202) && (D_80BE5DD0 < 0.5f)) || + if ((KREG(19) != 0) || ((acHitInfo->toucher.dmgFlags & 0x05000202) && (sGiantModeScaleFactor < 0.5f)) || (ac->id == ACTOR_BOSS_02)) { - if (this->unk_148 == gTwinmoldMajoraPillarDL) { - Math_Vec3f_Copy(&spB8, &this->actor.world.pos); - spB8.y += D_80BE5DD0 * 300.0f; + if (this->dList == gTwinmoldRuinPillarDL) { + // To create the appearance of the pillar shrinking after being hit, push it further into the floor, + // spawn some ruin fragments, and also spawn some black dust effects. + Math_Vec3f_Copy(&pos, &this->actor.world.pos); + pos.y += sGiantModeScaleFactor * 300.0f; - for (i = 3; i < spC4; i++) { - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, spB8.x, spB8.y, spB8.z, - Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, i + 100); + // This will spawn four normal-sized ruin fragments, three small ruin fragments, and + // zero, one, or two item drops, depending on the result of Rand_ZeroFloat above. + for (i = 3; i < fragmentAndItemCount; i++) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, pos.x, pos.y, pos.z, + Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, + TWINMOLD_PROP_PARAMS(TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_1 + i)); } for (i = 0; i < 6; i++) { - func_80BE4A2C(play->specialEffects, &spB8, Rand_ZeroFloat(3.0f) + 6.0f); + EnTanron5_SpawnEffectBlackDust(play->specialEffects, &pos, Rand_ZeroFloat(3.0f) + 6.0f); } - this->actor.world.pos.y -= D_80BE5DD0 * 130.0f; + this->actor.world.pos.y -= sGiantModeScaleFactor * 130.0f; } else { - f32 spAC; - f32 spA8; - Vec3f sp9C; + f32 yFactor; + f32 xzFactor; + Vec3f fragmentAndDustPos; - if (this->unk_1A0 == 0) { - spAC = 180.0f; - this->unk_19C *= 1.4f; - } else if (this->unk_1A0 == 1) { - spAC = 230.0f; - this->unk_19C *= 1.37f; - } else if (this->unk_1A0 == 2) { - spAC = 780.0f; - this->unk_19C *= 1.5f; + // Check the number of times this pyramid ruin has been hit to scale it accordingly. + if (this->hitCount == 0) { + yFactor = 180.0f; + this->baseScale *= 1.4f; + } else if (this->hitCount == 1) { + yFactor = 230.0f; + this->baseScale *= 1.37f; + } else if (this->hitCount == 2) { + yFactor = 780.0f; + this->baseScale *= 1.5f; } - // TODO: determine if unk_1A0 ever has a different value from these 3, which will cause UB from spAC - // being uninitialised - this->actor.world.pos.y -= D_80BE5DD0 * spAC; - Actor_SetScale(&this->actor, this->unk_19C * D_80BE5DD0); - Math_Vec3f_Copy(&spB8, &this->actor.world.pos); - for (i = 0; i < spC4; i++) { - if (this->unk_1A0 == 0) { - spA8 = 100.0f; - spAC = 180.0f; - } else if (this->unk_1A0 == 1) { - spA8 = 200.0f; - spAC = 100.0f; - } else if (this->unk_1A0 == 2) { - spA8 = 250.0f; - spAC = 50.0f; + this->actor.world.pos.y -= sGiantModeScaleFactor * yFactor; + Actor_SetScale(&this->actor, this->baseScale * sGiantModeScaleFactor); + Math_Vec3f_Copy(&pos, &this->actor.world.pos); + + for (i = 0; i < fragmentAndItemCount; i++) { + if (this->hitCount == 0) { + xzFactor = 100.0f; + yFactor = 180.0f; + } else if (this->hitCount == 1) { + xzFactor = 200.0f; + yFactor = 100.0f; + } else if (this->hitCount == 2) { + xzFactor = 250.0f; + yFactor = 50.0f; } - sp9C.x = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.x; - sp9C.z = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.z; - sp9C.y = this->actor.floorHeight + (spAC * D_80BE5DD0); + fragmentAndDustPos.x = pos.x + (Rand_CenteredFloat(xzFactor) * sGiantModeScaleFactor); + fragmentAndDustPos.z = pos.z + (Rand_CenteredFloat(xzFactor) * sGiantModeScaleFactor); + fragmentAndDustPos.y = this->actor.floorHeight + (yFactor * sGiantModeScaleFactor); - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, sp9C.x, sp9C.y, sp9C.z, - Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, i + 100); + // This will spawn seven normal-sized ruin fragments, three small ruin fragments, and + // zero, one, or two item drops, depending on the result of Rand_ZeroFloat above. + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, fragmentAndDustPos.x, fragmentAndDustPos.y, + fragmentAndDustPos.z, Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, + TWINMOLD_PROP_PARAMS(TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_1 + i)); if (i < 8) { - func_80BE4A2C(play->specialEffects, &sp9C, Rand_ZeroFloat(3.0f) + 6.0f); + EnTanron5_SpawnEffectBlackDust(play->specialEffects, &fragmentAndDustPos, + Rand_ZeroFloat(3.0f) + 6.0f); } } } + // To better sell the illusion of the ruin being partially destroyed when it's hit + // rather than just being pushed into the ground (which is what actually happens), + // this code will rotate the ruin in a somewhat-random way. if (Rand_ZeroOne() < 0.333f) { - phi_v0 = 0x4000; + yawDiff = 0x4000; } else if (Rand_ZeroOne() < 0.5f) { - phi_v0 = -0x8000; + yawDiff = -0x8000; } else { - phi_v0 = -0x4000; + yawDiff = -0x4000; } - this->actor.shape.rot.y += phi_v0; + this->actor.shape.rot.y += yawDiff; Actor_PlaySfx(&this->actor, NA_SE_IT_BIG_BOMB_EXPLOSION); Actor_RequestQuakeAndRumble(&this->actor, play, 4, 4); - this->unk_1A0++; + this->hitCount++; } else { - Vec3f sp90; + // Something hit the ruin, but it wasn't Twinmold, and it wasn't the player while in giant + // mode. Play the reflect sound effect and spawn some sparks instead of breaking. + Vec3f hitPos; ColliderInfo* info = this->collider.info.acHitInfo; - sp90.x = info->bumper.hitPos.x; - sp90.y = info->bumper.hitPos.y; - sp90.z = info->bumper.hitPos.z; + hitPos.x = info->bumper.hitPos.x; + hitPos.y = info->bumper.hitPos.y; + hitPos.z = info->bumper.hitPos.z; Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_REFLECT_SW); - CollisionCheck_SpawnShieldParticlesMetal(play, &sp90); + CollisionCheck_SpawnShieldParticlesMetal(play, &hitPos); } } } Collider_UpdateCylinder(&this->actor, &this->collider); - if (this->unk_148 == gTwinmoldPyramidRuinDL) { + if (this->dList == gTwinmoldRuinPyramidDL) { this->collider.dim.pos.y = this->actor.floorHeight; } - if ((this->unk_148 == gTwinmoldMajoraPillarDL) || (D_80BE5DD0 < 0.5f)) { + if ((this->dList == gTwinmoldRuinPillarDL) || (sGiantModeScaleFactor < 0.5f)) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } else { + // The collider cylinder used for the pyramid ruin is smaller than the ruin's visual appearance. When + // the player is wearing the Giant's Mask, it works fine, but when the player is normal-sized, they can + // walk through the sides of the ruin and wander around inside it without the collider pushing them out. + // The below code prevents this from happening by manually updating the player's position if they get + // close enough to the ruin, effectively creating a collision "box" around it that pushes players out. f32 xDiff = player->actor.world.pos.x - this->actor.world.pos.x; - f32 yDiff = player->actor.world.pos.z - this->actor.world.pos.z; + f32 zDiff = player->actor.world.pos.z - this->actor.world.pos.z; - if ((fabsf(xDiff) < 120.0f) && (fabsf(yDiff) < 120.0f)) { - if (fabsf(yDiff) < fabsf(xDiff)) { + if ((fabsf(xDiff) < 120.0f) && (fabsf(zDiff) < 120.0f)) { + if (fabsf(zDiff) < fabsf(xDiff)) { if (xDiff > 0.0f) { player->actor.prevPos.x = player->actor.world.pos.x = this->actor.world.pos.x + 120.0f; } else { player->actor.prevPos.x = player->actor.world.pos.x = this->actor.world.pos.x - 120.0f; } - } else if (yDiff > 0.0f) { + } else if (zDiff > 0.0f) { player->actor.prevPos.z = player->actor.world.pos.z = this->actor.world.pos.z + 120.0f; } else { player->actor.prevPos.z = player->actor.world.pos.z = this->actor.world.pos.z - 120.0f; @@ -395,23 +506,29 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } -void func_80BE5818(Actor* thisx, PlayState* play2) { - f32 sp6C; +/** + * This is the update function for the fragments and the item drops that fly off from a destructible ruin. + */ +void EnTanron5_RuinFragmentItemDrop_Update(Actor* thisx, PlayState* play2) { + f32 interactionDistSq; s32 i; - Vec3f sp5C; + Vec3f pos; EnTanron5* this = THIS; PlayState* play = play2; - if ((ENTANRON5_GET(&this->actor) < ENTANRON5_110) && (this->unk_1A0 != 0)) { - this->unk_1A0++; - this->actor.world.pos.y -= 2.0f * D_80BE5DD0; - if (this->unk_1A0 == 40) { + // When a ruin fragment hits the floor, it will slowly sink into the sand. After sinking for 38 frames, + // the ruin fragment will despawn. + if ((TWINMOLD_PROP_GET_TYPE(&this->actor) < TWINMOLD_PROP_TYPE_ITEM_DROP_1) && (this->sinkTimer != 0)) { + this->sinkTimer++; + this->actor.world.pos.y -= 2.0f * sGiantModeScaleFactor; + if (this->sinkTimer == 40) { Actor_Kill(&this->actor); } + return; } - if (DECR(this->unk_144) == 0) { + if (DECR(this->timer) == 0) { Actor_Kill(&this->actor); } @@ -420,94 +537,102 @@ void func_80BE5818(Actor* thisx, PlayState* play2) { Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); } - if (ENTANRON5_GET(&this->actor) < ENTANRON5_110) { - this->actor.shape.rot.x += this->unk_198; - this->actor.shape.rot.y += this->unk_19A; - sp6C = 1225.0f; + if (TWINMOLD_PROP_GET_TYPE(&this->actor) < TWINMOLD_PROP_TYPE_ITEM_DROP_1) { + this->actor.shape.rot.x += this->fragmentRotationalVelocityX; + this->actor.shape.rot.y += this->fragmentRotationalVelocityY; + interactionDistSq = SQ(35.0f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - if (ENTANRON5_GET(&this->actor) < ENTANRON5_108) { - Math_Vec3f_Copy(&sp5C, &this->actor.world.pos); - sp5C.y = this->actor.floorHeight; + if (TWINMOLD_PROP_GET_TYPE(&this->actor) <= TWINMOLD_PROP_TYPE_FRAGMENT_SMALL_1) { + Math_Vec3f_Copy(&pos, &this->actor.world.pos); + pos.y = this->actor.floorHeight; for (i = 0; i < 4; i++) { - func_80BE4930(play->specialEffects, &sp5C, Rand_ZeroFloat(1.0f) + 2.0f); + EnTanron5_SpawnEffectSand(play->specialEffects, &pos, Rand_ZeroFloat(1.0f) + 2.0f); } - this->unk_1A0++; + + // Set the sinkTimer to a non-zero value so that this fragment will start sinking on the next update. + this->sinkTimer++; } else { + // Small ruin fragments don't sink into the sand; they just immediately despawn. Actor_Kill(&this->actor); } } } else { - sp6C = 400.0f; - this->unk_198 += 0x2000; + interactionDistSq = SQ(20.0f); + this->itemDropRotZ += 0x2000; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - this->unk_198 = 0; + this->itemDropRotZ = 0; this->actor.speed = 0.0f; } } - if (this->unk_1A1 == 0) { - if ((D_80BE5DD0 > 0.5f) && - ((ENTANRON5_GET(&this->actor) < ENTANRON5_108) || (ENTANRON5_GET(&this->actor) >= ENTANRON5_110))) { + if (this->hitTimer == 0) { + if ((sGiantModeScaleFactor > 0.5f) && + ((TWINMOLD_PROP_GET_TYPE(&this->actor) <= TWINMOLD_PROP_TYPE_FRAGMENT_SMALL_1) || + (TWINMOLD_PROP_GET_TYPE(&this->actor) >= TWINMOLD_PROP_TYPE_ITEM_DROP_1))) { Player* player = GET_PLAYER(play); - Vec3f temp; + Vec3f pos; - temp.x = player->actor.world.pos.x - this->actor.world.pos.x; - temp.y = (player->actor.world.pos.y + 10.0f) - this->actor.world.pos.y; - temp.z = player->actor.world.pos.z - this->actor.world.pos.z; + pos.x = player->actor.world.pos.x - this->actor.world.pos.x; + pos.y = (player->actor.world.pos.y + 10.0f) - this->actor.world.pos.y; + pos.z = player->actor.world.pos.z - this->actor.world.pos.z; - if (SQXYZ(temp) < sp6C) { - if (ENTANRON5_GET(&this->actor) >= ENTANRON5_110) { - if (this->unk_1A0 == 0) { + if (SQXYZ(pos) < interactionDistSq) { + if (TWINMOLD_PROP_GET_TYPE(&this->actor) >= TWINMOLD_PROP_TYPE_ITEM_DROP_1) { + if (this->itemDropType == TWINMOLD_PROP_ITEM_DROP_TYPE_10_ARROWS) { Item_Give(play, ITEM_ARROWS_10); } else { Item_Give(play, ITEM_MAGIC_JAR_BIG); } + Actor_Kill(&this->actor); Audio_PlaySfx(NA_SE_SY_GET_ITEM); } else { - this->unk_1A1 = 20; + // Damages the player and knocks them back. Starts a 20-frame timer to prevent + // this same ruin fragment from damaging the player again too quickly. + this->hitTimer = 20; func_800B8D50(play, NULL, 5.0f, this->actor.world.rot.y, 0.0f, 8); } } } } else { - this->unk_1A1--; + this->hitTimer--; } } void EnTanron5_Draw(Actor* thisx, PlayState* play) { EnTanron5* this = THIS; - if ((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) { + if ((-500.0f * sGiantModeScaleFactor) < this->actor.projectedPos.z) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(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++, this->unk_148); + gSPDisplayList(POLY_OPA_DISP++, this->dList); CLOSE_DISPS(play->state.gfxCtx); } } -void func_80BE5C10(Actor* thisx, PlayState* play) { +void EnTanron5_ItemDrop_Draw(Actor* thisx, PlayState* play) { EnTanron5* this = THIS; TexturePtr texture; - s32 phi_v0; + s32 shouldDraw; - if ((this->unk_144 > 50) || (this->unk_144 & 1)) { - phi_v0 = true; + // This makes the item drop flicker when it's close to despawning. + if ((this->timer > 50) || (this->timer & 1)) { + shouldDraw = true; } else { - phi_v0 = false; + shouldDraw = false; } - if (((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) && phi_v0) { + if (((-500.0f * sGiantModeScaleFactor) < this->actor.projectedPos.z) && shouldDraw) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (this->unk_1A0 == 0) { + if (this->itemDropType == TWINMOLD_PROP_ITEM_DROP_TYPE_10_ARROWS) { texture = gDropArrows1Tex; } else { texture = gDropMagicLargeTex; @@ -518,7 +643,7 @@ void func_80BE5C10(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(texture)); Matrix_Translate(0.0f, 200.0f, 0.0f, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_198, MTXMODE_APPLY); + Matrix_RotateZS(this->itemDropRotZ, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h index d40938bf8..9f8c9b676 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h @@ -5,24 +5,62 @@ struct EnTanron5; -#define ENTANRON5_GET(thisx) ((thisx)->params) +#define TWINMOLD_PROP_GET_TYPE(thisx) ((thisx)->params) +#define TWINMOLD_PROP_PARAMS(type) (type) -#define ENTANRON5_0 0 -#define ENTANRON5_100 100 -#define ENTANRON5_107 107 -#define ENTANRON5_108 108 -#define ENTANRON5_110 110 +typedef enum { + /* 0 */ TWINMOLD_PROP_TYPE_STATIC, + /* 1 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_1, + /* 2 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_2, + /* 3 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_3, + /* 4 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_4, + /* 5 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_5, + /* 6 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_6, + /* 7 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_7, + /* 8 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_8, + /* 9 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_9, + /* 10 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_10, + /* 11 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_11, + /* 12 */ TWINMOLD_PROP_TYPE_RUIN_PILLAR_12, + /* 13 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_1, + /* 14 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_2, + /* 15 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_3, + /* 16 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_4, + /* 17 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_5, + /* 18 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_6, + /* 19 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_7, + /* 20 */ TWINMOLD_PROP_TYPE_RUIN_PYRAMID_8, + /* 100 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_1 = 100, + /* 101 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_2, + /* 102 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_3, + /* 103 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_4, + /* 104 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_5, + /* 105 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_6, + /* 106 */ TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_7, + /* 107 */ TWINMOLD_PROP_TYPE_FRAGMENT_SMALL_1, + /* 108 */ TWINMOLD_PROP_TYPE_FRAGMENT_SMALL_2, + /* 109 */ TWINMOLD_PROP_TYPE_FRAGMENT_SMALL_3, + /* 110 */ TWINMOLD_PROP_TYPE_ITEM_DROP_1, + /* 111 */ TWINMOLD_PROP_TYPE_ITEM_DROP_2 +} TwinmoldPropType; typedef struct EnTanron5 { /* 0x000 */ Actor actor; - /* 0x144 */ s16 unk_144; - /* 0x148 */ Gfx* unk_148; + /* 0x144 */ s16 timer; + /* 0x148 */ Gfx* dList; /* 0x14C */ ColliderCylinder collider; - /* 0x198 */ s16 unk_198; - /* 0x19A */ s16 unk_19A; - /* 0x19C */ f32 unk_19C; - /* 0x1A0 */ u8 unk_1A0; - /* 0x1A1 */ u8 unk_1A1; + /* 0x198 */ union { + s16 fragmentRotationalVelocityX; + s16 itemDropRotZ; + }; + /* 0x19A */ s16 fragmentRotationalVelocityY; + /* 0x19C */ f32 baseScale; + /* 0x1A0 */ union { + u8 hitCount; // used by destructible ruins + u8 sinkTimer; // used by ruin fragments + u8 itemDropType; // used by item drops + }; + /* 0x1A1 */ u8 hitTimer; } EnTanron5; // size = 0x1A4 #endif // Z_EN_TANRON5_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c9bdddf04..c89753261 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16100,14 +16100,14 @@ 0x80BE42A4:("EnTanron4_FlyNearActor",), 0x80BE4734:("EnTanron4_Update",), 0x80BE4804:("EnTanron4_Draw",), - 0x80BE4930:("func_80BE4930",), - 0x80BE4A2C:("func_80BE4A2C",), + 0x80BE4930:("EnTanron5_SpawnEffectSand",), + 0x80BE4A2C:("EnTanron5_SpawnEffectBlackDust",), 0x80BE4B1C:("EnTanron5_Init",), 0x80BE4F24:("EnTanron5_Destroy",), 0x80BE4F54:("EnTanron5_Update",), - 0x80BE5818:("func_80BE5818",), + 0x80BE5818:("EnTanron5_RuinFragmentItemDrop_Update",), 0x80BE5B58:("EnTanron5_Draw",), - 0x80BE5C10:("func_80BE5C10",), + 0x80BE5C10:("EnTanron5_ItemDrop_Draw",), 0x80BE6040:("EnTanron6_Init",), 0x80BE60AC:("EnTanron6_Destroy",), 0x80BE60BC:("EnTanron6_DoNothing",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 9b61c54c7..4faf91aea 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -10024,7 +10024,7 @@ 0x809DF550:("D_809DF550","UNK_TYPE1","",0x1), 0x809DF570:("D_809DF570","UNK_TYPE1","",0x1), 0x809DF590:("Boss_02_InitVars","UNK_TYPE1","",0x1), - 0x809DF5B0:("D_809DF5B0","f32","",0x4), + 0x809DF5B0:("sGiantModeScaleFactor","f32","",0x4), 0x809DF5B4:("D_809DF5B4","UNK_TYPE2","[24]",0x30), 0x809DF5E4:("D_809DF5E4","UNK_TYPE2","[24]",0x30), 0x809DF614:("D_809DF614","UNK_TYPE1","",0x1), @@ -15917,13 +15917,13 @@ 0x80BE48AC:("D_80BE48AC","f32","",0x4), 0x80BE48B0:("D_80BE48B0","f32","",0x4), 0x80BE48B4:("D_80BE48B4","f32","",0x4), - 0x80BE5D80:("D_80BE5D80","UNK_TYPE4","",0x4), + 0x80BE5D80:("sFragmentAndItemDropCount","UNK_TYPE4","",0x4), 0x80BE5D84:("En_Tanron5_InitVars","UNK_TYPE1","",0x1), 0x80BE5DA4:("D_80BE5DA4","UNK_TYPE1","",0x1), - 0x80BE5DD0:("D_80BE5DD0","f32","",0x4), - 0x80BE5DD4:("D_80BE5DD4","UNK_TYPE2","",0x2), - 0x80BE5E24:("D_80BE5E24","UNK_TYPE1","",0x1), - 0x80BE5E74:("D_80BE5E74","UNK_TYPE1","",0x1), + 0x80BE5DD0:("sGiantModeScaleFactor","f32","",0x4), + 0x80BE5DD4:("sSpawnPosList","UNK_TYPE2","",0x2), + 0x80BE5E24:("sDLists","UNK_TYPE1","",0x1), + 0x80BE5E74:("sBaseScales","UNK_TYPE1","",0x1), 0x80BE5ED0:("D_80BE5ED0","f32","",0x4), 0x80BE5ED4:("D_80BE5ED4","f32","",0x4), 0x80BE5ED8:("D_80BE5ED8","f32","",0x4), From 7cbd63c33ddc7f3a22f38f8926a1d07c4cd00609 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Mon, 10 Jul 2023 15:30:21 -0700 Subject: [PATCH 031/121] Provide original sequence names for all BGM and rename some sequences (#1311) * Provide original sequence names for all BGM and rename some sequences * Include official soundtrack names, respond to reviews, rename some more sequences based on new evidence * Forgot to rename the shooting gallery sequence, oops * Rephrase the comment on NA_BGM_CLOCK_TOWN_MAIN_SEQUENCE --- include/sequence.h | 260 +++++++++++++++++++------------------- src/audio/code_8019AF00.c | 40 +++--- 2 files changed, 152 insertions(+), 148 deletions(-) diff --git a/include/sequence.h b/include/sequence.h index d8a9cd95a..c9f1aa3f8 100644 --- a/include/sequence.h +++ b/include/sequence.h @@ -1,134 +1,138 @@ #ifndef SEQUENCE_H #define SEQUENCE_H -#define NA_BGM_GENERAL_SFX 0x00 // General Sound Effects -#define NA_BGM_AMBIENCE 0x01 // Ambient background noises -#define NA_BGM_TERMINA_FIELD 0x02 // Termina Field -#define NA_BGM_CHASE 0x03 // Forest Chase -#define NA_BGM_MAJORAS_THEME 0x04 // Majora's Theme "STALKID" -#define NA_BGM_CLOCK_TOWER 0x05 // The Clock Tower -#define NA_BGM_STONE_TOWER_TEMPLE 0x06 // Stone Tower Temple -#define NA_BGM_INV_STONE_TOWER_TEMPLE 0x07 // Stone Tower Temple Inverted -#define NA_BGM_FAILURE_0 0x08 // Missed Event 1 -#define NA_BGM_FAILURE_1 0x09 // Title -#define NA_BGM_HAPPY_MASK_SALESMAN 0x0A // Mask Salesman "OMENYA" -#define NA_BGM_SONG_OF_HEALING 0x0B // Song of Healing "DEMO_CURE" -#define NA_BGM_SWAMP_REGION 0x0C // Southern Swamp and Woodfall "DAMP_AREA" -#define NA_BGM_ALIEN_INVASION 0x0D // Ghost Attack "UFO" -#define NA_BGM_SWAMP_CRUISE 0x0E // Mini Game "JUNGLE_CREWS" -#define NA_BGM_SHARPS_CURSE 0x0F // Sharp's Curse -#define NA_BGM_GREAT_BAY_REGION 0x10 // Great Bay Coast "SEA_AREA" -#define NA_BGM_IKANA_REGION 0x11 // Ikana Valley -#define NA_BGM_DEKU_KING 0x12 // Court of the Deku King -#define NA_BGM_MOUNTAIN_REGION 0x13 // Mountain Village "SNOW_AREA" -#define NA_BGM_PIRATES_FORTRESS 0x14 // Pirates' Fortress "PIRATE_AREA" -#define NA_BGM_CLOCK_TOWN_DAY_1 0x15 // Clock Town Day 1 This song's filename is dummied out in MM3D "DUMMY_21" -#define NA_BGM_CLOCK_TOWN_DAY_2 0x16 // Clock Town Day 2 his song's filename is dummied out in MM3D "DUMMY_22" -#define NA_BGM_CLOCK_TOWN_DAY_3 0x17 // Clock Town Day 3 This song's filename is dummied out in MM3D "DUMMY_23" -#define NA_BGM_FILE_SELECT 0x18 // This song has no track name, as it's a duplicate of the Fairy's Fountain -#define NA_BGM_CLEAR_EVENT 0x19 // Event Clear -#define NA_BGM_ENEMY 0x1A // Battle -#define NA_BGM_BOSS 0x1B // Boss Battle -#define NA_BGM_WOODFALL_TEMPLE 0x1C // Woodfall Temple "JUNGLE_DUNGEON" -#define NA_BGM_MARKET 0x1D // Clock Town Day 1 Duplicate of #15. Interesting filename in MM3D. ✘ -#define NA_BGM_OPENING 0x1E // Forest Ambush -#define NA_BGM_INSIDE_A_HOUSE 0x1F // House "LINK_HOUSE" -#define NA_BGM_GAME_OVER 0x20 // Game Over -#define NA_BGM_CLEAR_BOSS 0x21 // Boss Clear -#define NA_BGM_GET_ITEM 0x22 // Item Catch -#define NA_BGM_GATE_OPEN 0x23 // Clock Town Day 2 Duplicate of #16. In MM3D, it shares its filename with the Door of Time song from OoT -#define NA_BGM_GET_HEART 0x24 // Complete a Heart Piece -#define NA_BGM_TIMED_MINI_GAME 0x25 // Playing a timed Minigame -#define NA_BGM_GORON_RACE 0x26 // Goron Race -#define NA_BGM_MUSIC_BOX_HOUSE 0x27 // Music Box House "ORGEL_HOUSE" -#define NA_BGM_FAIRY_FOUNTAIN 0x28 // Fairy's Fountain In MM3D, it shares its filename with the Door of Time song from OoT "GODESS" -#define NA_BGM_ZELDAS_LULLABY 0x29 // Zelda's Lullaby "HIME" -#define NA_BGM_ROSA_SISTERS 0x2A // Rosa Sisters' Dance "SISTER_DANCER" -#define NA_BGM_OPEN_CHEST 0x2B // Open Chest "OPEN_TRE_BOX" -#define NA_BGM_MARINE_RESEARCH_LAB 0x2C // Marine Research Laboratory "DRUGSTORE" -#define NA_BGM_GIANTS_THEME 0x2D // The Four Giants "KYOJIN_ROOM" -#define NA_BGM_SONG_OF_STORMS 0x2E // Guru-Guru's Song "FUSHA" -#define NA_BGM_ROMANI_RANCH 0x2F // Romani Ranch "RONRON" -#define NA_BGM_GORON_VILLAGE 0x30 // Goron Village -#define NA_BGM_MAYORS_OFFICE 0x31 // Mayor Dotour "MEETING" -#define NA_BGM_OCA_EPONA 0x32 // Ocarina Epona's Song -#define NA_BGM_OCA_SUNS 0x33 // Ocarina Sun's Song -#define NA_BGM_OCA_TIME 0x34 // Ocarina Song of Time "TIME_NORMAL" -#define NA_BGM_OCA_STORM 0x35 // Ocarina Song of Storms -#define NA_BGM_ZORA_HALL 0x36 // Zora Hall -#define NA_BGM_GET_NEW_MASK 0x37 // A New Mask -#define NA_BGM_MINI_BOSS 0x38 // Mini Boss "MIDDLE_BOSS" -#define NA_BGM_GET_SMALL_ITEM 0x39 // Small Item Catch "S_ITEM_GET" -#define NA_BGM_ASTRAL_OBSERVATORY 0x3A // Astral Observatory "TENMONDAI" -#define NA_BGM_CAVERN 0x3B // Clock Town Cavern "NORMAL_DUNGEON" -#define NA_BGM_MILK_BAR 0x3C // Milk Bar Latte -#define NA_BGM_ZELDA_APPEAR 0x3D // Meet Zelda (OoT) -#define NA_BGM_SARIAS_SONG 0x3E // Saria's Theme Song from OoT "MAYOIMORI" -#define NA_BGM_GORON_GOAL 0x3F // Goron Race Goal -#define NA_BGM_HORSE 0x40 // Gorman Race -#define NA_BGM_HORSE_GOAL 0x41 // Race Finish -#define NA_BGM_INGO 0x42 // Gorman Bros. "INGO" -#define NA_BGM_KOTAKE_POTION_SHOP 0x43 // Kotake's Potion Shop "KOTAKE_KOUME" -#define NA_BGM_SHOP 0x44 // Store -#define NA_BGM_OWL 0x45 // Gaebora's Theme -#define NA_BGM_MINI_GAME 0x46 // Target Practice -#define NA_BGM_OCA_SOARING 0x47 // Ocarina Song of Soaring "OCA_BIGWING" -#define NA_BGM_OCA_HEALING 0x48 // Ocarina Song of Healing "OCA_CURE" -#define NA_BGM_INVERTED_SONG_OF_TIME 0x49 // Inverted Song of Time "_SPEED" -#define NA_BGM_SONG_OF_DOUBLE_TIME 0x4A // Song of Double Time "TIME_JUMP" -#define NA_BGM_SONATA_OF_AWAKENING 0x4B // Sonata of Awakening "DEMO_AWAKING" -#define NA_BGM_GORON_LULLABY 0x4C // Goron Lullaby "DEMO_LULLABY" -#define NA_BGM_NEW_WAVE_BOSSA_NOVA 0x4D // New Wave Bossa Nova "DEMO_TIDE" -#define NA_BGM_ELEGY_OF_EMPTINESS 0x4E // Elegy of Emptiness "DEMO_SHELL" -#define NA_BGM_OATH_TO_ORDER 0x4F // Oath to Order "DEMO_PLEDGE" -#define NA_BGM_SWORD_TRAINING_HALL 0x50 // Sword Training "EXERCISE_HALL" -#define NA_BGM_GORON_LULLABY_INTRO 0x51 // Ocarina Goron Lullaby Intro "DEMO_LULLABY_HALF" -#define NA_BGM_OCA_FAIRY 0x52 // New Song "OCA_YOUSEI" -#define NA_BGM_BREMEN_MARCH 0x53 // Bremen March "FACEMASK" -#define NA_BGM_BALLAD_OF_THE_WIND_FISH 0x54 // Quartet performed in on the milk bar stage "QUARTET" -#define NA_BGM_SONG_OF_SOARING 0x55 // Song of Soaring "WING_WARP" -#define NA_BGM_MILK_BAR_DUPLICATE 0x56 // Milk Bar Latte Duplicate. "MILK_BAR_DUMMY" -#define NA_BGM_FINAL_HOURS 0x57 // Final Hours "TIME_LIMIT" -#define NA_BGM_MIKAU_RIFF 0x58 // Mikau's Tale "MIKAU_LIFF" -#define NA_BGM_MIKAU_FINALE 0x59 // A single guitar chord. "MIKAU_FIN" -#define NA_BGM_FROG_SONG 0x5A // Don Gero's Song -#define NA_BGM_OCA_SONATA 0x5B // Ocarina Sonata of Awakening "OCA_AWAKING" -#define NA_BGM_OCA_LULLABY 0x5C // Ocarina Goron Lullaby "OCA_LULLABY" -#define NA_BGM_OCA_NEW_WAVE 0x5D // Ocarina New Wave Bossa Nova "OCA_TIDE" -#define NA_BGM_OCA_ELEGY 0x5E // Ocarina Elegy of Emptiness "OCA_SHELL" -#define NA_BGM_OCA_OATH 0x5F // Ocarina Oath to Order "OCA_PLEDGE" -#define NA_BGM_MAJORAS_LAIR 0x60 // "LAST_DUNGEON" -#define NA_BGM_OCA_LULLABY_INTRO 0x61 // "OCA_LULLABY_HALF" -#define NA_BGM_OCA_GUITAR_BASS_SESSION 0x62 // Bass and Guitar Session "OCA_SESSION" -#define NA_BGM_PIANO_SESSION 0x63 // Piano Solo "DEMO_SESSION" -#define NA_BGM_INDIGO_GO_SESSION 0x64 // The Indigo-Go's Rehearsal "ALLPART_SESSION" -#define NA_BGM_SNOWHEAD_TEMPLE 0x65 // Snowhead Temple "SILVER_DUNGEON" -#define NA_BGM_GREAT_BAY_TEMPLE 0x66 // Great Bay Temple "DEEPBLUE_DUNGEON" -#define NA_BGM_NEW_WAVE_SAXOPHONE 0x67 // "DEMO_TIDE_SAX" -#define NA_BGM_NEW_WAVE_VOCAL 0x68 // "DEMO_TIDE_VOCAL" -#define NA_BGM_MAJORAS_WRATH 0x69 // Majora's Wrath "MUJURA_1" -#define NA_BGM_MAJORAS_INCARNATION 0x6A // Majora's Incarnation "MUJURA_2" -#define NA_BGM_MAJORAS_MASK 0x6B // Majora's Mask Battle "MUJURA_3" -#define NA_BGM_BASS_PLAY 0x6C // Bass Practice "BASS_PLAY" -#define NA_BGM_DRUMS_PLAY 0x6D // Drums Practice "DRUMS_PLAY" -#define NA_BGM_PIANO_PLAY 0x6E // Piano Practice "PIANO_PLAY" -#define NA_BGM_IKANA_CASTLE 0x6F // Ikana Castle -#define NA_BGM_GATHERING_GIANTS 0x70 // Calling the Four Giants -#define NA_BGM_KAMARO_DANCE 0x71 // Kamaro's Dance "CAMARO_DANCE" -#define NA_BGM_CREMIA_CARRIAGE 0x72 // Cremia's Carriage "DONKEY_CART" -#define NA_BGM_KEATON_QUIZ 0x73 // Keaton "QUIZ" -#define NA_BGM_END_CREDITS_1 0x74 // The End/Credits I "END_DEMO" -#define NA_BGM_OPENING_LOOP 0x75 // Forest Ambush (?) Duplicate. -#define NA_BGM_TITLE_THEME 0x76 // Title Screen -#define NA_BGM_DUNGEON_APPEAR 0x77 // Surfacing of Woodfall -#define NA_BGM_WOODFALL_CLEAR 0x78 // Woodfall Clear "PURIFICATION_0" -#define NA_BGM_SNOWHEAD_CLEAR 0x79 // Snowhead Clear "PURIFICATION_1" -#define NA_BGM_INTO_THE_MOON 0x7B // To the Moon -#define NA_BGM_GOODBYE_GIANT 0x7C // -#define NA_BGM_TATL_AND_TAEL 0x7D // Tatl and Tael "CHAT" -#define NA_BGM_MOONS_DESTRUCTION 0x7E // Moon's Destruction "MOON_VANISH" -#define NA_BGM_NO_MUSIC 0x7F // -#define NA_BGM_END_CREDITS_2 0x82 // The End/Credits II "STAFFROLL2" +// For the defines below, the names in quotes come from the official soundtrack, +// and the names in parentheses are internal names that come from MM3D. +#define NA_BGM_GENERAL_SFX 0x00 // General Sound Effects +#define NA_BGM_AMBIENCE 0x01 // Ambient background noises +#define NA_BGM_TERMINA_FIELD 0x02 // "Termina Field" (NA_BGM_FIELD) +#define NA_BGM_CHASE 0x03 // "Chase" (NA_BGM_CHASE) +#define NA_BGM_MAJORAS_THEME 0x04 // "Majora's Theme" (NA_BGM_STALKID) +#define NA_BGM_CLOCK_TOWER 0x05 // "Clock Tower" (NA_BGM_CLOCK_TOWER) +#define NA_BGM_STONE_TOWER_TEMPLE 0x06 // "Stone Tower Temple" - used for both Stone Tower and the Temple (NA_BGM_RUIN_DUNGEON_FRONT) +#define NA_BGM_INV_STONE_TOWER_TEMPLE 0x07 // "Stone Tower Temple Upside-down" - used for both Inverted Stone Tower and the Temple (NA_BGM_RUIN_DUNGEON_REVERSE) +#define NA_BGM_FAILURE_0 0x08 // "Missed Event 1" (NA_BGM_FAILURE_0) +#define NA_BGM_FAILURE_1 0x09 // "Missed Event 2" - used for failing the Milk Run (NA_BGM_FAILURE_1) +#define NA_BGM_HAPPY_MASK_SALESMAN 0x0A // "Happy Mask Saleman's Theme" (NA_BGM_OMENYA) +#define NA_BGM_SONG_OF_HEALING 0x0B // "Song Of Healing" (NA_BGM_DEMO_CURE) +#define NA_BGM_SWAMP_REGION 0x0C // "Southern Swamp" - used for both Southern Swamp and Woodfall (NA_BGM_DAMP_AREA) +#define NA_BGM_ALIEN_INVASION 0x0D // "Ghost Attack" (NA_BGM_UFO) +#define NA_BGM_SWAMP_CRUISE 0x0E // "Boat Cruise" (NA_BGM_JUNGLE_CREWS) +#define NA_BGM_SHARPS_CURSE 0x0F // "Sharp's Curse" (NA_BGM_SHARP) +#define NA_BGM_GREAT_BAY_REGION 0x10 // "Great Bay Coast" - used for Great Bay Coast, Zora Cape, and Pinnacle Rock (NA_BGM_SEA_AREA) +#define NA_BGM_IKANA_REGION 0x11 // "Ikana Valley" (NA_BGM_IKANA_AREA) +#define NA_BGM_DEKU_PALACE 0x12 // "Deku Palace" (NA_BGM_DEKU_KING) +#define NA_BGM_MOUNTAIN_REGION 0x13 // "Mountain Village" - used for Mountain Village, Snowhead, and Goron Village exterior (NA_BGM_SNOW_AREA) +#define NA_BGM_PIRATES_FORTRESS 0x14 // "Pirates' Fortress" (NA_BGM_PIRATE_AREA) +#define NA_BGM_CLOCK_TOWN_DAY_1 0x15 // "Clock Town, First Day" - Loaded from the main Clock Town seqeuence (sequence 0x1D) (NA_BGM_DUMMY_21) +#define NA_BGM_CLOCK_TOWN_DAY_2 0x16 // "Clock Town, Second Day" - Loaded from the main Clock Town seqeuence (sequence 0x1D) (NA_BGM_DUMMY_22) +#define NA_BGM_CLOCK_TOWN_DAY_3 0x17 // "Clock Town, Third Day" - Loaded from the main Clock Town seqeuence (sequence 0x1D) (NA_BGM_DUMMY_23) +#define NA_BGM_FILE_SELECT 0x18 // File Select (NA_BGM_FILE_SELECT) +#define NA_BGM_CLEAR_EVENT 0x19 // "Event Clear" (NA_BGM_EVENT_CLEAR) +#define NA_BGM_ENEMY 0x1A // "Battle" (NA_BGM_ENEMY) +#define NA_BGM_BOSS 0x1B // "Boss Battle" (NA_BGM_BOSS00) +#define NA_BGM_WOODFALL_TEMPLE 0x1C // "Woodfall Temple" (NA_BGM_JUNGLE_DUNGEON) +#define NA_BGM_CLOCK_TOWN_MAIN_SEQUENCE 0x1D // Loads one of sequences 0x15, 0x16, or 0x17. Will also play the "morning theme" if it is the start of a day (NA_BGM_MARKET) +#define NA_BGM_OPENING 0x1E // "Opening" - plays during the ambush in the opening forest area (NA_BGM_OPENING) +#define NA_BGM_INSIDE_A_HOUSE 0x1F // "House" (NA_BGM_LINK_HOUSE) +#define NA_BGM_GAME_OVER 0x20 // "Game Over" (NA_BGM_GAME_OVER) +#define NA_BGM_CLEAR_BOSS 0x21 // "Boss Clear" (NA_BGM_BOSS_CLEAR) +#define NA_BGM_GET_ITEM 0x22 // "Item Catch" (NA_BGM_ITEM_GET) +#define NA_BGM_CLOCK_TOWN_DAY_2_PTR 0x23 // Just points to the "Clock Town, Second Day" sequence (sequence 0x16) (NA_BGM_GATE_OPEN, same name as the Door of Time song from OoT) +#define NA_BGM_GET_HEART 0x24 // "Get A Heart Container!" (NA_BGM_HEART_GET) +#define NA_BGM_TIMED_MINI_GAME 0x25 // "Mini Game" (NA_BGM_MINI_GAME_2) +#define NA_BGM_GORON_RACE 0x26 // "Goron Race" (NA_BGM_GORON_RACE) +#define NA_BGM_MUSIC_BOX_HOUSE 0x27 // "Music Box House" (NA_BGM_ORGEL_HOUSE) +#define NA_BGM_FAIRY_FOUNTAIN 0x28 // "Fairy's Fountain" - just points to the File Select sequence (sequence 0x18) (NA_BGM_GODESS) +#define NA_BGM_ZELDAS_LULLABY 0x29 // "Zelda's Theme" (NA_BGM_HIME) +#define NA_BGM_ROSA_SISTERS 0x2A // "Rosa Sisters" (NA_BGM_SISTER_DANCER) +#define NA_BGM_OPEN_CHEST 0x2B // "Open Treasure Box" (NA_BGM_OPEN_TRE_BOX) +#define NA_BGM_MARINE_RESEARCH_LAB 0x2C // "Marine Research Laboratory" (NA_BGM_DRUGSTORE) +#define NA_BGM_GIANTS_THEME 0x2D // "Giants' Theme" (NA_BGM_KYOJIN_ROOM) +#define NA_BGM_SONG_OF_STORMS 0x2E // "Guru-Guru's Song" (NA_BGM_FUSHA) +#define NA_BGM_ROMANI_RANCH 0x2F // "Romani Ranch" (NA_BGM_RONRON) +#define NA_BGM_GORON_VILLAGE 0x30 // "Goron Village" (NA_BGM_GORON) +#define NA_BGM_MAYORS_OFFICE 0x31 // "Mayor's Meeting" (NA_BGM_MEETING) +#define NA_BGM_OCARINA_EPONA 0x32 // "Ocarina “Epona's Song”" (NA_BGM_OCA_EPONA) +#define NA_BGM_OCARINA_SUNS 0x33 // "Ocarina “Sun's Song”" - leftover from OoT (NA_BGM_OCA_SUNS) +#define NA_BGM_OCARINA_TIME 0x34 // "Ocarina “Song Of Time”" (NA_BGM_TIME_NORMAL) +#define NA_BGM_OCARINA_STORM 0x35 // "Ocarina “Song Of Storms”" (NA_BGM_OCA_STORM) +#define NA_BGM_ZORA_HALL 0x36 // "Zora Hall" (NA_BGM_ZORA) +#define NA_BGM_GET_NEW_MASK 0x37 // "Get A Mask!" (NA_BGM_MASK_GET) +#define NA_BGM_MINI_BOSS 0x38 // "Middle Boss Battle" (NA_BGM_MIDDLE_BOSS) +#define NA_BGM_GET_SMALL_ITEM 0x39 // "Small Item Catch" (NA_BGM_S_ITEM_GET) +#define NA_BGM_ASTRAL_OBSERVATORY 0x3A // "Astral Observatory" (NA_BGM_TENMONDAI) +#define NA_BGM_CAVERN 0x3B // "Cavern" - used for grottos (NA_BGM_NORMAL_DUNGEON) +#define NA_BGM_MILK_BAR 0x3C // "Milk Bar" (NA_BGM_MILK_BAR) +#define NA_BGM_ZELDA_APPEAR 0x3D // "Enter Zelda" - leftover from OoT (NA_BGM_APPEAR) +#define NA_BGM_SARIAS_SONG 0x3E // "Woods Of Mystery" - Saria's Song from OoT, also used when dancing with the scarecrow (NA_BGM_MAYOIMORI) +#define NA_BGM_GORON_GOAL 0x3F // "Goron Race Goal" (NA_BGM_GORON_GOAL) +#define NA_BGM_HORSE 0x40 // "Horse Race" (NA_BGM_HORSE) +#define NA_BGM_HORSE_GOAL 0x41 // "Horse Race Goal" (NA_BGM_HORSE_GOAL) +#define NA_BGM_INGO 0x42 // "Gorman Track" (NA_BGM_INGO) +#define NA_BGM_KOTAKE_POTION_SHOP 0x43 // "Magic Hags' Potion Shop" (NA_BGM_KOTAKE_KOUME) +#define NA_BGM_SHOP 0x44 // "Shop" (NA_BGM_SHOP) +#define NA_BGM_OWL 0x45 // "Owl" (NA_BGM_OWL) +#define NA_BGM_SHOOTING_GALLERY 0x46 // "Shooting Gallery" (NA_BGM_MINI_GAME) +#define NA_BGM_OCARINA_SOARING 0x47 // "Ocarina “Song Of Soaring”" (NA_BGM_OCA_BIGWING) +#define NA_BGM_OCARINA_HEALING 0x48 // "Ocarina “Song Of Healing”" (NA_BGM_OCA_CURE) +#define NA_BGM_INVERTED_SONG_OF_TIME 0x49 // "Ocarina “Inverted Song Of Time”" (NA_BGM_TIME_SPEED) +#define NA_BGM_SONG_OF_DOUBLE_TIME 0x4A // "Ocarina “Song Of Double Time”" (NA_BGM_TIME_JUMP) +#define NA_BGM_SONATA_OF_AWAKENING 0x4B // "Sonata of Awakening" (NA_BGM_DEMO_AWAKING) +#define NA_BGM_GORON_LULLABY 0x4C // "Goron Lullaby" (NA_BGM_DEMO_LULLABY) +#define NA_BGM_NEW_WAVE_BOSSA_NOVA 0x4D // "New Wave Bossa Nova" - both saxophone and vocals (NA_BGM_DEMO_TIDE) +#define NA_BGM_ELEGY_OF_EMPTINESS 0x4E // "Elegy Of Emptiness" (NA_BGM_DEMO_SHELL) +#define NA_BGM_OATH_TO_ORDER 0x4F // "Oath To Order" (NA_BGM_DEMO_PLEDGE) +#define NA_BGM_SWORD_TRAINING_HALL 0x50 // "Swordsman's School" (NA_BGM_EXERCISE_HALL) +#define NA_BGM_OCARINA_LULLABY_INTRO 0x51 // "Ocarina “Goron Lullaby Intro”" (NA_BGM_DEMO_LULLABY_HALF) +#define NA_BGM_LEARNED_NEW_SONG 0x52 // "Get The Ocarina!" (NA_BGM_OCA_YOUSEI) +#define NA_BGM_BREMEN_MARCH 0x53 // "Bremen March" (NA_BGM_FACEMASK) +#define NA_BGM_BALLAD_OF_THE_WIND_FISH 0x54 // "Ballad Of The Wind Fish" - quartet performed in on the Milk Bar stage (NA_BGM_QUARTET) +#define NA_BGM_SONG_OF_SOARING 0x55 // "Song Of Soaring" (NA_BGM_WING_WARP) +#define NA_BGM_MILK_BAR_DUPLICATE 0x56 // Just points to the "Milk Bar" sequence (sequence 0x3C) (NA_BGM_MILK_BAR_DUMMY) +#define NA_BGM_FINAL_HOURS 0x57 // "Last Day" (NA_BGM_TIME_LIMIT) +#define NA_BGM_MIKAU_RIFF 0x58 // "Mikau" - looping part of the song (NA_BGM_MIKAU_LIFF) +#define NA_BGM_MIKAU_FINALE 0x59 // "Mikau" - a single guitar chord to end the song (NA_BGM_MIKAU_FIN) +#define NA_BGM_FROG_SONG 0x5A // "Frog Song" - conducting the frogs with Don Gero's Mask (NA_BGM_FROG_SONG) +#define NA_BGM_OCARINA_SONATA 0x5B // "Ocarina “Sonata Of Awakening”" (NA_BGM_OCA_AWAKING) +#define NA_BGM_OCARINA_LULLABY 0x5C // "Ocarina “Goron Lullaby”" (NA_BGM_OCA_LULLABY) +#define NA_BGM_OCARINA_NEW_WAVE 0x5D // "Ocarina “New Wave Bossa Nova”" (NA_BGM_OCA_TIDE) +#define NA_BGM_OCARINA_ELEGY 0x5E // "Ocarina “Elegy of Emptiness”" (NA_BGM_OCA_SHELL) +#define NA_BGM_OCARINA_OATH 0x5F // "Ocarina “Oath To Order”" (NA_BGM_OCA_PLEDGE) +#define NA_BGM_MAJORAS_LAIR 0x60 // Majora Boss Room. Just points to the "Last Day" sequence (sequence 0x57) (NA_BGM_LAST_DUNGEON) +#define NA_BGM_OCARINA_LULLABY_INTRO_PTR 0x61 // Just points to the "Ocarina “Goron Lullaby Intro”" sequence (sequence 0x51) (NA_BGM_OCA_LULLABY_HALF) +#define NA_BGM_OCARINA_GUITAR_BASS_SESSION 0x62 // "Bass & Guitar Session" (NA_BGM_OCA_SESSION) +#define NA_BGM_PIANO_SESSION 0x63 // "Piano Solo" (NA_BGM_DEMO_SESSION) +#define NA_BGM_INDIGO_GO_SESSION 0x64 // "The Indigo-Go's" (NA_BGM_ALLPART_SESSION) +#define NA_BGM_SNOWHEAD_TEMPLE 0x65 // "Snowhead Temple" (NA_BGM_SILVER_DUNGEON) +#define NA_BGM_GREAT_BAY_TEMPLE 0x66 // "Great Bay Temple" (NA_BGM_DEEPBLUE_DUNGEON) +#define NA_BGM_NEW_WAVE_SAXOPHONE 0x67 // "New Wave Bossa Nova" - saxophone only, no vocals (NA_BGM_DEMO_TIDE_SAX) +#define NA_BGM_NEW_WAVE_VOCAL 0x68 // "New Wave Bossa Nova" - vocals only, no saxophone (NA_BGM_DEMO_TIDE_VOCAL) +#define NA_BGM_MAJORAS_WRATH 0x69 // "Majora's Wrath Battle" (NA_BGM_MUJURA_1) +#define NA_BGM_MAJORAS_INCARNATION 0x6A // "Majora's Incarnate Battle" (NA_BGM_MUJURA_2) +#define NA_BGM_MAJORAS_MASK 0x6B // "Majora's Mask Battle" (NA_BGM_MUJURA_3) +#define NA_BGM_BASS_PLAY 0x6C // "Bass Practice" (NA_BGM_BASS_PLAY) +#define NA_BGM_DRUMS_PLAY 0x6D // "Drums Practice" (NA_BGM_DRUMS_PLAY) +#define NA_BGM_PIANO_PLAY 0x6E // "Piano Practice" (NA_BGM_PIANO_PLAY) +#define NA_BGM_IKANA_CASTLE 0x6F // "Ikana Castle" (NA_BGM_IKANA_CASTLE) +#define NA_BGM_GATHERING_GIANTS 0x70 // "Calling The Four Giants" (NA_BGM_GATHERING) +#define NA_BGM_KAMARO_DANCE 0x71 // "Kamaro's Dance" (NA_BGM_CAMARO_DANCE) +#define NA_BGM_CREMIA_CARRIAGE 0x72 // "Cremia's Carriage" (NA_BGM_DONKEY_CART) +#define NA_BGM_KEATON_QUIZ 0x73 // "Keaton's Quiz" (NA_BGM_QUIZ) +#define NA_BGM_END_CREDITS 0x74 // "The End / Credits" - plays the first half, then loads sequence 0x7F for the second half (NA_BGM_END_DEMO) +#define NA_BGM_OPENING_LOOP 0x75 // Similar to "Opening" (sequence 0x1E), but the intro loops endlessly (NA_BGM_OPENING_LOOP) +#define NA_BGM_TITLE_THEME 0x76 // "Title Theme" (NA_BGM_TITLE) +#define NA_BGM_DUNGEON_APPEAR 0x77 // "Woodfall Rises" (NA_BGM_DUNGEON_APPEAR) +#define NA_BGM_WOODFALL_CLEAR 0x78 // "Southern Swamp Clears" (NA_BGM_PURIFICATION_0) +#define NA_BGM_SNOWHEAD_CLEAR 0x79 // "Snowhead Clear" (NA_BGM_PURIFICATION_1) +#define NA_BGM_INTO_THE_MOON 0x7B // "To The Moon" (NA_BGM_INTO_THE_MOON) +#define NA_BGM_GOODBYE_GIANT 0x7C // "The Giants' Exit" (NA_BGM_GOODBYE_GIANT) +#define NA_BGM_TATL_AND_TAEL 0x7D // "Tatl & Tael" (NA_BGM_CHAT) +#define NA_BGM_MOONS_DESTRUCTION 0x7E // "Moon's Destruction" (NA_BGM_MOON_VANISH) +#define NA_BGM_END_CREDITS_SECOND_HALF 0x7F // "The End / Credits" - second half. Sequence 0x74 loads this after playing the first half (NA_BGM_OCA_MUS) + +// This is used as a placeholder in scene commands to indicate to use the nature ambience instead. +#define NA_BGM_NO_MUSIC 0x7F #define NA_BGM_DISABLED 0xFFFF #define SEQ_FLAG_ASYNC 0x8000 diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index 8b13e0030..dcefd2eae 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -286,7 +286,7 @@ u8 sSeqFlags[] = { 0, // NA_BGM_SHARPS_CURSE SEQ_FLAG_ENEMY, // NA_BGM_GREAT_BAY_REGION SEQ_FLAG_ENEMY, // NA_BGM_IKANA_REGION - 0, // NA_BGM_DEKU_KING + 0, // NA_BGM_DEKU_PALACE SEQ_FLAG_ENEMY, // NA_BGM_MOUNTAIN_REGION 0, // NA_BGM_PIRATES_FORTRESS 0, // NA_BGM_CLOCK_TOWN_DAY_1 @@ -297,13 +297,13 @@ u8 sSeqFlags[] = { 0, // NA_BGM_ENEMY SEQ_FLAG_RESTORE, // NA_BGM_BOSS SEQ_FLAG_ENEMY, // NA_BGM_WOODFALL_TEMPLE - 0, // NA_BGM_MARKET + 0, // NA_BGM_CLOCK_TOWN_MAIN_SEQUENCE 0, // NA_BGM_OPENING SEQ_FLAG_RESUME_PREV, // NA_BGM_INSIDE_A_HOUSE SEQ_FLAG_FANFARE, // NA_BGM_GAME_OVER 0, // NA_BGM_CLEAR_BOSS SEQ_FLAG_FANFARE, // NA_BGM_GET_ITEM - SEQ_FLAG_FANFARE, // NA_BGM_GATE_OPEN + SEQ_FLAG_FANFARE, // NA_BGM_CLOCK_TOWN_DAY_2_PTR SEQ_FLAG_FANFARE, // NA_BGM_GET_HEART SEQ_FLAG_RESTORE, // NA_BGM_TIMED_MINI_GAME 0, // NA_BGM_GORON_RACE @@ -318,10 +318,10 @@ u8 sSeqFlags[] = { 0, // NA_BGM_ROMANI_RANCH 0, // NA_BGM_GORON_VILLAGE 0, // NA_BGM_MAYORS_OFFICE - SEQ_FLAG_FANFARE, // NA_BGM_OCA_EPONA - SEQ_FLAG_FANFARE, // NA_BGM_OCA_SUNS - SEQ_FLAG_FANFARE, // NA_BGM_OCA_TIME - SEQ_FLAG_FANFARE, // NA_BGM_OCA_STORM + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_EPONA + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_SUNS + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_TIME + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_STORM SEQ_FLAG_RESUME, // NA_BGM_ZORA_HALL SEQ_FLAG_FANFARE, // NA_BGM_GET_NEW_MASK SEQ_FLAG_RESTORE, // NA_BGM_MINI_BOSS @@ -338,9 +338,9 @@ u8 sSeqFlags[] = { 0, // NA_BGM_KOTAKE_POTION_SHOP SEQ_FLAG_RESUME_PREV, // NA_BGM_SHOP SEQ_FLAG_FANFARE, // NA_BGM_OWL - SEQ_FLAG_RESUME_PREV, // NA_BGM_MINI_GAME - SEQ_FLAG_FANFARE, // NA_BGM_OCA_SOARING - SEQ_FLAG_FANFARE, // NA_BGM_OCA_HEALING + SEQ_FLAG_RESUME_PREV, // NA_BGM_SHOOTING_GALLERY + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_SOARING + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_HEALING SEQ_FLAG_FANFARE, // NA_BGM_INVERTED_SONG_OF_TIME SEQ_FLAG_FANFARE, // NA_BGM_SONG_OF_DOUBLE_TIME SEQ_FLAG_FANFARE, // NA_BGM_SONATA_OF_AWAKENING @@ -349,8 +349,8 @@ u8 sSeqFlags[] = { SEQ_FLAG_FANFARE, // NA_BGM_ELEGY_OF_EMPTINESS SEQ_FLAG_FANFARE, // NA_BGM_OATH_TO_ORDER 0, // NA_BGM_SWORD_TRAINING_HALL - SEQ_FLAG_FANFARE, // NA_BGM_GORON_LULLABY_INTRO - SEQ_FLAG_FANFARE, // NA_BGM_OCA_FAIRY + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_LULLABY_INTRO + SEQ_FLAG_FANFARE, // NA_BGM_LEARNED_NEW_SONG SEQ_FLAG_FANFARE, // NA_BGM_BREMEN_MARCH SEQ_FLAG_FANFARE, // NA_BGM_BALLAD_OF_THE_WIND_FISH SEQ_FLAG_RESTORE, // NA_BGM_SONG_OF_SOARING @@ -359,14 +359,14 @@ u8 sSeqFlags[] = { SEQ_FLAG_FANFARE, // NA_BGM_MIKAU_RIFF SEQ_FLAG_FANFARE, // NA_BGM_MIKAU_FINALE 0, // NA_BGM_FROG_SONG - SEQ_FLAG_FANFARE, // NA_BGM_OCA_SONATA - SEQ_FLAG_FANFARE, // NA_BGM_OCA_LULLABY - SEQ_FLAG_FANFARE, // NA_BGM_OCA_NEW_WAVE - SEQ_FLAG_FANFARE, // NA_BGM_OCA_ELEGY - SEQ_FLAG_FANFARE, // NA_BGM_OCA_OATH + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_SONATA + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_LULLABY + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_NEW_WAVE + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_ELEGY + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_OATH 0, // NA_BGM_MAJORAS_LAIR - SEQ_FLAG_FANFARE, // NA_BGM_OCA_LULLABY_INTRO - SEQ_FLAG_FANFARE, // NA_BGM_OCA_GUITAR_BASS_SESSION + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_LULLABY_INTRO_PTR + SEQ_FLAG_FANFARE, // NA_BGM_OCARINA_GUITAR_BASS_SESSION SEQ_FLAG_FANFARE, // NA_BGM_PIANO_SESSION SEQ_FLAG_FANFARE, // NA_BGM_INDIGO_GO_SESSION SEQ_FLAG_ENEMY, // NA_BGM_SNOWHEAD_TEMPLE @@ -395,7 +395,7 @@ u8 sSeqFlags[] = { 0, // NA_BGM_GOODBYE_GIANT 0, // NA_BGM_TATL_AND_TAEL 0, // NA_BGM_MOONS_DESTRUCTION - 0, // NA_BGM_END_CREDITS_2 + 0, // NA_BGM_END_CREDITS_SECOND_HALF }; s8 sSpecReverbs[] = { From db6268a12e11c52867bf9d0307f28ab6bbf8498c Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 11 Jul 2023 09:28:25 +1000 Subject: [PATCH 032/121] Template Docs For Player Action (#1279) * generic action names * more docs * add comment * more renaming * do nothing * another rename * Swap Init * simplify name * more cleanup * setup * deku stick * PR Review * rm comment * missed some --- include/z64player.h | 4 +- .../actors/ovl_player_actor/z_player.c | 1295 ++++++++--------- tools/disasm/functions.txt | 248 ++-- tools/disasm/variables.txt | 2 +- 4 files changed, 774 insertions(+), 775 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index 29f9f7697..b74b5846a 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1072,7 +1072,7 @@ typedef enum PlayerUnkAA5 { } PlayerUnkAA5; typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); -typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play); +typedef s32 (*PlayerUpperActionFunc)(struct Player* this, struct PlayState* play); typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this); @@ -1198,7 +1198,7 @@ typedef struct Player { /* 0xAB8 */ f32 unk_AB8; /* 0xABC */ f32 unk_ABC; /* 0xAC0 */ f32 unk_AC0; - /* 0xAC4 */ PlayerFuncAC4 unk_AC4; + /* 0xAC4 */ PlayerUpperActionFunc upperActionFunc; // Upper body/item action functions /* 0xAC8 */ f32 unk_AC8; /* 0xACC */ s16 unk_ACC; /* 0xACE */ s8 unk_ACE; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index d210bc91d..acb5d28be 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -59,8 +59,6 @@ void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction); void func_80831990(PlayState* play, Player* this, ItemId item); -s32 func_80848BF4(Player* this, PlayState* play); - void func_80836988(Player* this, PlayState* play); void func_808484F0(Player* this); @@ -102,104 +100,129 @@ typedef struct AnimSfxEntry { } AnimSfxEntry; // size = 0x4 /* action funcs */ -void func_808496AC(Player* this, PlayState* play); -void func_808497A0(Player* this, PlayState* play); -void func_80849A9C(Player* this, PlayState* play); -void func_80849DD0(Player* this, PlayState* play); -void func_80849FE0(Player* this, PlayState* play); -void func_8084A26C(Player* this, PlayState* play); -void func_8084A5C0(Player* this, PlayState* play); -void func_8084A794(Player* this, PlayState* play); -void func_8084A884(Player* this, PlayState* play); -void func_8084A8E8(Player* this, PlayState* play); -void func_8084AB4C(Player* this, PlayState* play); -void func_8084AC84(Player* this, PlayState* play); -void func_8084AEEC(Player* this, PlayState* play); -void func_8084AF9C(Player* this, PlayState* play); -void func_8084B0EC(Player* this, PlayState* play); -void func_8084B288(Player* this, PlayState* play); -void func_8084B3B8(Player* this, PlayState* play); -void func_8084B4A8(Player* this, PlayState* play); -void func_8084B5C0(Player* this, PlayState* play); -void func_8084BAA4(Player* this, PlayState* play); -void func_8084BBF0(Player* this, PlayState* play); -void func_8084BC64(Player* this, PlayState* play); -void func_8084BE40(Player* this, PlayState* play); -void func_8084BF28(Player* this, PlayState* play); -void func_8084BFDC(Player* this, PlayState* play); -void func_8084C16C(Player* this, PlayState* play); -void func_8084C6EC(Player* this, PlayState* play); -void func_8084C94C(Player* this, PlayState* play); -void func_8084CA24(Player* this, PlayState* play); -void func_8084CB58(Player* this, PlayState* play); -void func_8084CCEC(Player* this, PlayState* play); -void func_8084CE84(Player* this, PlayState* play); -void func_8084D18C(Player* this, PlayState* play); -void func_8084D4EC(Player* this, PlayState* play); -void func_8084D770(Player* this, PlayState* play); -void func_8084D820(Player* this, PlayState* play); -void func_8084E034(Player* this, PlayState* play); -void func_8084E25C(Player* this, PlayState* play); -void func_8084E334(Player* this, PlayState* play); -void func_8084E434(Player* this, PlayState* play); -void func_8084E4E4(Player* this, PlayState* play); -void func_8084E58C(Player* this, PlayState* play); -void func_8084E65C(Player* this, PlayState* play); -void func_8084E724(Player* this, PlayState* play); -void func_8084E980(Player* this, PlayState* play); -void func_8084ED9C(Player* this, PlayState* play); -void func_8084EE50(Player* this, PlayState* play); -void func_8084EF9C(Player* this, PlayState* play); -void func_8084F1B8(Player* this, PlayState* play); -void func_8084F3DC(Player* this, PlayState* play); -void func_8084F4E8(Player* this, PlayState* play); -void func_8084FC0C(Player* this, PlayState* play); -void func_8084FE7C(Player* this, PlayState* play); -void func_808505D0(Player* this, PlayState* play); -void func_808508C8(Player* this, PlayState* play); -void func_80850B18(Player* this, PlayState* play); -void func_80850D68(Player* this, PlayState* play); -void func_808513EC(Player* this, PlayState* play); -void func_80851588(Player* this, PlayState* play); -void func_808516B4(Player* this, PlayState* play); -void func_808519FC(Player* this, PlayState* play); -void func_80851B58(Player* this, PlayState* play); -void func_80851BD4(Player* this, PlayState* play); -void func_8085269C(Player* this, PlayState* play); -void func_80852B28(Player* this, PlayState* play); -void func_80852C04(Player* this, PlayState* play); -void func_80852FD4(Player* this, PlayState* play); -void func_80853194(Player* this, PlayState* play); -void func_808534C0(Player* this, PlayState* play); -void func_80853754(Player* this, PlayState* play); -void func_80853850(Player* this, PlayState* play); -void func_80853A5C(Player* this, PlayState* play); -void func_80853CC0(Player* this, PlayState* play); -void func_80853D68(Player* this, PlayState* play); -void func_80854010(Player* this, PlayState* play); -void func_808540A0(Player* this, PlayState* play); -void func_80854118(Player* this, PlayState* play); -void func_8085421C(Player* this, PlayState* play); -void func_8085437C(Player* this, PlayState* play); -void func_8085439C(Player* this, PlayState* play); -void func_80854430(Player* this, PlayState* play); -void func_80854614(Player* this, PlayState* play); -void func_808546D0(Player* this, PlayState* play); -void func_80854800(Player* this, PlayState* play); -void func_808548B8(Player* this, PlayState* play); -void func_80854C70(Player* this, PlayState* play); -void func_808553F4(Player* this, PlayState* play); -void func_80855818(Player* this, PlayState* play); -void func_80855A7C(Player* this, PlayState* play); -void func_80855AF4(Player* this, PlayState* play); -void func_80855B9C(Player* this, PlayState* play); -void func_80855C28(Player* this, PlayState* play); -void func_80855E08(Player* this, PlayState* play); -void func_808561B0(Player* this, PlayState* play); -void func_80856918(Player* this, PlayState* play); -void func_808573A4(Player* this, PlayState* play); -void func_80857BE8(Player* this, PlayState* play); -void func_8085B08C(Player* this, PlayState* play); +void Player_Action_0(Player* this, PlayState* play); +void Player_Action_1(Player* this, PlayState* play); +void Player_Action_2(Player* this, PlayState* play); +void Player_Action_3(Player* this, PlayState* play); +void Player_Action_4(Player* this, PlayState* play); +void Player_Action_5(Player* this, PlayState* play); +void Player_Action_6(Player* this, PlayState* play); +void Player_Action_7(Player* this, PlayState* play); +void Player_Action_8(Player* this, PlayState* play); +void Player_Action_9(Player* this, PlayState* play); +void Player_Action_10(Player* this, PlayState* play); +void Player_Action_11(Player* this, PlayState* play); +void Player_Action_12(Player* this, PlayState* play); +void Player_Action_13(Player* this, PlayState* play); +void Player_Action_14(Player* this, PlayState* play); +void Player_Action_15(Player* this, PlayState* play); +void Player_Action_16(Player* this, PlayState* play); +void Player_Action_17(Player* this, PlayState* play); +void Player_Action_18(Player* this, PlayState* play); +void Player_Action_19(Player* this, PlayState* play); +void Player_Action_20(Player* this, PlayState* play); +void Player_Action_21(Player* this, PlayState* play); +void Player_Action_22(Player* this, PlayState* play); +void Player_Action_23(Player* this, PlayState* play); +void Player_Action_24(Player* this, PlayState* play); +void Player_Action_25(Player* this, PlayState* play); +void Player_Action_26(Player* this, PlayState* play); +void Player_Action_27(Player* this, PlayState* play); +void Player_Action_28(Player* this, PlayState* play); +void Player_Action_29(Player* this, PlayState* play); +void Player_Action_30(Player* this, PlayState* play); +void Player_Action_31(Player* this, PlayState* play); +void Player_Action_32(Player* this, PlayState* play); +void Player_Action_33(Player* this, PlayState* play); +void Player_Action_34(Player* this, PlayState* play); +void Player_Action_35(Player* this, PlayState* play); +void Player_Action_36(Player* this, PlayState* play); +void Player_Action_37(Player* this, PlayState* play); +void Player_Action_38(Player* this, PlayState* play); +void Player_Action_39(Player* this, PlayState* play); +void Player_Action_40(Player* this, PlayState* play); +void Player_Action_41(Player* this, PlayState* play); +void Player_Action_42(Player* this, PlayState* play); +void Player_Action_43(Player* this, PlayState* play); +void Player_Action_44(Player* this, PlayState* play); +void Player_Action_45(Player* this, PlayState* play); +void Player_Action_46(Player* this, PlayState* play); +void Player_Action_47(Player* this, PlayState* play); +void Player_Action_48(Player* this, PlayState* play); +void Player_Action_49(Player* this, PlayState* play); +void Player_Action_50(Player* this, PlayState* play); +void Player_Action_51(Player* this, PlayState* play); +void Player_Action_52(Player* this, PlayState* play); +void Player_Action_53(Player* this, PlayState* play); +void Player_Action_54(Player* this, PlayState* play); +void Player_Action_55(Player* this, PlayState* play); +void Player_Action_56(Player* this, PlayState* play); +void Player_Action_57(Player* this, PlayState* play); +void Player_Action_58(Player* this, PlayState* play); +void Player_Action_59(Player* this, PlayState* play); +void Player_Action_60(Player* this, PlayState* play); +void Player_Action_61(Player* this, PlayState* play); +void Player_Action_62(Player* this, PlayState* play); +void Player_Action_63(Player* this, PlayState* play); +void Player_Action_64(Player* this, PlayState* play); +void Player_Action_65(Player* this, PlayState* play); +void Player_Action_66(Player* this, PlayState* play); +void Player_Action_67(Player* this, PlayState* play); +void Player_Action_68(Player* this, PlayState* play); +void Player_Action_69(Player* this, PlayState* play); +void Player_Action_70(Player* this, PlayState* play); +void Player_Action_71(Player* this, PlayState* play); +void Player_Action_72(Player* this, PlayState* play); +void Player_Action_73(Player* this, PlayState* play); +void Player_Action_74(Player* this, PlayState* play); +void Player_Action_75(Player* this, PlayState* play); +void Player_Action_76(Player* this, PlayState* play); +void Player_Action_77(Player* this, PlayState* play); +void Player_Action_78(Player* this, PlayState* play); +void Player_Action_79(Player* this, PlayState* play); +void Player_Action_80(Player* this, PlayState* play); +void Player_Action_81(Player* this, PlayState* play); +void Player_Action_82(Player* this, PlayState* play); +void Player_Action_83(Player* this, PlayState* play); +void Player_Action_84(Player* this, PlayState* play); +void Player_Action_85(Player* this, PlayState* play); +void Player_Action_86(Player* this, PlayState* play); +void Player_Action_87(Player* this, PlayState* play); +void Player_Action_88(Player* this, PlayState* play); +void Player_Action_89(Player* this, PlayState* play); +void Player_Action_90(Player* this, PlayState* play); +void Player_Action_91(Player* this, PlayState* play); +void Player_Action_92(Player* this, PlayState* play); +void Player_Action_93(Player* this, PlayState* play); +void Player_Action_94(Player* this, PlayState* play); +void Player_Action_95(Player* this, PlayState* play); +void Player_Action_96(Player* this, PlayState* play); +void Player_Action_97(Player* this, PlayState* play); + +s32 Player_UpperAction_0(Player* this, PlayState* play); +s32 Player_UpperAction_1(Player* this, PlayState* play); +s32 Player_UpperAction_2(Player* this, PlayState* play); +s32 Player_UpperAction_3(Player* this, PlayState* play); +s32 Player_UpperAction_4(Player* this, PlayState* play); +s32 Player_UpperAction_5(Player* this, PlayState* play); +s32 Player_UpperAction_6(Player* this, PlayState* play); +s32 Player_UpperAction_7(Player* this, PlayState* play); +s32 Player_UpperAction_8(Player* this, PlayState* play); +s32 Player_UpperAction_9(Player* this, PlayState* play); +s32 Player_UpperAction_10(Player* this, PlayState* play); +s32 Player_UpperAction_11(Player* this, PlayState* play); +s32 Player_UpperAction_12(Player* this, PlayState* play); +s32 Player_UpperAction_13(Player* this, PlayState* play); +s32 Player_UpperAction_14(Player* this, PlayState* play); +s32 Player_UpperAction_15(Player* this, PlayState* play); +s32 Player_UpperAction_16(Player* this, PlayState* play); + +void Player_InitItemAction_DoNothing(PlayState* play, Player* this); +void Player_InitItemAction_DekuStick(PlayState* play, Player* this); +void Player_InitItemAction_2(PlayState* play, Player* this); +void Player_InitItemAction_SpawnExplosive(PlayState* play, Player* this); +void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this); +void Player_InitItemAction_5(PlayState* play, Player* this); s32 func_80839518(Player* this, PlayState* play); s32 func_808365DC(Player* this, PlayState* play); @@ -217,23 +240,6 @@ s32 func_80834DFC(Player* this, PlayState* play); s32 func_80838A90(Player* this, PlayState* play); s32 func_8083A0CC(Player* this, PlayState* play); -s32 func_80848780(Player* this, PlayState* play); -s32 func_808487B8(Player* this, PlayState* play); -s32 func_80848B6C(Player* this, PlayState* play); -s32 func_808490B4(Player* this, PlayState* play); -s32 func_808491B4(Player* this, PlayState* play); -s32 func_80848808(Player* this, PlayState* play); -s32 func_8084894C(Player* this, PlayState* play); -s32 func_80848A0C(Player* this, PlayState* play); -s32 func_80848AB0(Player* this, PlayState* play); -s32 func_80848E4C(Player* this, PlayState* play); -s32 func_80849054(Player* this, PlayState* play); -s32 func_8084923C(Player* this, PlayState* play); -s32 func_808492C4(Player* this, PlayState* play); -s32 func_8084933C(Player* this, PlayState* play); -s32 func_80849570(Player* this, PlayState* play); -s32 func_80849620(Player* this, PlayState* play); - /* Init Mode functions */ void Player_InitMode_0(PlayState* play, Player* this); void Player_InitMode_1(PlayState* play, Player* this); @@ -323,14 +329,6 @@ void Player_CsAnim_17(PlayState* play, Player* this, void* anim); // PlayerAnim void Player_CsAnim_18(PlayState* play, Player* this, void* entry); // AnimSfxEntry* entry void Player_CsAnim_19(PlayState* play, Player* this, void* anim); // PlayerAnimationHeader* anim -// ItemActions -void func_8082F594(PlayState* play, Player* this); -void func_8082F5A4(PlayState* play, Player* this); -void func_8082F8A0(PlayState* play, Player* this); -void func_8082F5C0(PlayState* play, Player* this); -void func_8082F7F4(PlayState* play, Player* this); -void Player_SpawnExplosive(PlayState* play, Player* this); - typedef struct struct_8085C2A4 { /* 0x0 */ PlayerAnimationHeader* unk_0; /* 0x4 */ PlayerAnimationHeader* unk_4; @@ -2847,8 +2845,8 @@ void func_8082F1AC(PlayState* play, Player* this) { } } -void func_8082F43C(PlayState* play, Player* this, PlayerFuncAC4 arg2) { - this->unk_AC4 = arg2; +void Player_SetUpperAction(PlayState* play, Player* this, PlayerUpperActionFunc upperActionFunc) { + this->upperActionFunc = upperActionFunc; this->unk_ACE = 0; this->unk_AC8 = 0.0f; func_8082E00C(this); @@ -2975,15 +2973,189 @@ PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) { } } -void func_8082F594(PlayState* play, Player* this) { +PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = { + Player_UpperAction_0, // PLAYER_IA_NONE + Player_UpperAction_0, // PLAYER_IA_LAST_USED + Player_UpperAction_0, // PLAYER_IA_FISHING_ROD + Player_UpperAction_1, // PLAYER_IA_SWORD_KOKIRI + Player_UpperAction_1, // PLAYER_IA_SWORD_RAZOR + Player_UpperAction_1, // PLAYER_IA_SWORD_GILDED + Player_UpperAction_1, // PLAYER_IA_SWORD_TWO_HANDED + Player_UpperAction_0, // PLAYER_IA_DEKU_STICK + Player_UpperAction_0, // PLAYER_IA_ZORA_FINS + Player_UpperAction_6, // PLAYER_IA_BOW + Player_UpperAction_6, // PLAYER_IA_BOW_FIRE + Player_UpperAction_6, // PLAYER_IA_BOW_ICE + Player_UpperAction_6, // PLAYER_IA_BOW_LIGHT + Player_UpperAction_6, // PLAYER_IA_HOOKSHOT + Player_UpperAction_10, // PLAYER_IA_BOMB + Player_UpperAction_10, // PLAYER_IA_POWDER_KEG + Player_UpperAction_10, // PLAYER_IA_BOMBCHU + Player_UpperAction_11, // PLAYER_IA_11 + Player_UpperAction_6, // PLAYER_IA_DEKU_NUT + Player_UpperAction_0, // PLAYER_IA_PICTOGRAPH_BOX + Player_UpperAction_0, // PLAYER_IA_OCARINA + Player_UpperAction_0, // PLAYER_IA_BOTTLE_EMPTY + Player_UpperAction_0, // PLAYER_IA_BOTTLE_FISH + Player_UpperAction_0, // PLAYER_IA_BOTTLE_SPRING_WATER + Player_UpperAction_0, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + Player_UpperAction_0, // PLAYER_IA_BOTTLE_ZORA_EGG + Player_UpperAction_0, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + Player_UpperAction_0, // PLAYER_IA_BOTTLE_GOLD_DUST + Player_UpperAction_0, // PLAYER_IA_BOTTLE_1C + Player_UpperAction_0, // PLAYER_IA_BOTTLE_SEA_HORSE + Player_UpperAction_0, // PLAYER_IA_BOTTLE_MUSHROOM + Player_UpperAction_0, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + Player_UpperAction_0, // PLAYER_IA_BOTTLE_BUG + Player_UpperAction_0, // PLAYER_IA_BOTTLE_POE + Player_UpperAction_0, // PLAYER_IA_BOTTLE_BIG_POE + Player_UpperAction_0, // PLAYER_IA_BOTTLE_POTION_RED + Player_UpperAction_0, // PLAYER_IA_BOTTLE_POTION_BLUE + Player_UpperAction_0, // PLAYER_IA_BOTTLE_POTION_GREEN + Player_UpperAction_0, // PLAYER_IA_BOTTLE_MILK + Player_UpperAction_0, // PLAYER_IA_BOTTLE_MILK_HALF + Player_UpperAction_0, // PLAYER_IA_BOTTLE_CHATEAU + Player_UpperAction_0, // PLAYER_IA_BOTTLE_FAIRY + Player_UpperAction_0, // PLAYER_IA_MOONS_TEAR + Player_UpperAction_0, // PLAYER_IA_DEED_LAND + Player_UpperAction_0, // PLAYER_IA_ROOM_KEY + Player_UpperAction_0, // PLAYER_IA_LETTER_TO_KAFEI + Player_UpperAction_0, // PLAYER_IA_MAGIC_BEANS + Player_UpperAction_0, // PLAYER_IA_DEED_SWAMP + Player_UpperAction_0, // PLAYER_IA_DEED_MOUNTAIN + Player_UpperAction_0, // PLAYER_IA_DEED_OCEAN + Player_UpperAction_0, // PLAYER_IA_32 + Player_UpperAction_0, // PLAYER_IA_LETTER_MAMA + Player_UpperAction_0, // PLAYER_IA_34 + Player_UpperAction_0, // PLAYER_IA_35 + Player_UpperAction_0, // PLAYER_IA_PENDANT_MEMORIES + Player_UpperAction_0, // PLAYER_IA_37 + Player_UpperAction_0, // PLAYER_IA_38 + Player_UpperAction_0, // PLAYER_IA_39 + Player_UpperAction_0, // PLAYER_IA_MASK_TRUTH + Player_UpperAction_0, // PLAYER_IA_MASK_KAFEIS_MASK + Player_UpperAction_0, // PLAYER_IA_MASK_ALL_NIGHT + Player_UpperAction_0, // PLAYER_IA_MASK_BUNNY + Player_UpperAction_0, // PLAYER_IA_MASK_KEATON + Player_UpperAction_0, // PLAYER_IA_MASK_GARO + Player_UpperAction_0, // PLAYER_IA_MASK_ROMANI + Player_UpperAction_0, // PLAYER_IA_MASK_CIRCUS_LEADER + Player_UpperAction_0, // PLAYER_IA_MASK_POSTMAN + Player_UpperAction_0, // PLAYER_IA_MASK_COUPLE + Player_UpperAction_0, // PLAYER_IA_MASK_GREAT_FAIRY + Player_UpperAction_0, // PLAYER_IA_MASK_GIBDO + Player_UpperAction_0, // PLAYER_IA_MASK_DON_GERO + Player_UpperAction_0, // PLAYER_IA_MASK_KAMARO + Player_UpperAction_0, // PLAYER_IA_MASK_CAPTAIN + Player_UpperAction_0, // PLAYER_IA_MASK_STONE + Player_UpperAction_0, // PLAYER_IA_MASK_BREMEN + Player_UpperAction_0, // PLAYER_IA_MASK_BLAST + Player_UpperAction_0, // PLAYER_IA_MASK_SCENTS + Player_UpperAction_0, // PLAYER_IA_MASK_GIANT + Player_UpperAction_0, // PLAYER_IA_MASK_FIERCE_DEITY + Player_UpperAction_0, // PLAYER_IA_MASK_GORON + Player_UpperAction_0, // PLAYER_IA_MASK_ZORA + Player_UpperAction_0, // PLAYER_IA_MASK_DEKU + Player_UpperAction_0, // PLAYER_IA_LENS_OF_TRUTH +}; + +typedef void (*PlayerInitItemActionFunc)(PlayState*, Player*); + +PlayerInitItemActionFunc sPlayerInitItemActionFuncs[PLAYER_IA_MAX] = { + Player_InitItemAction_DoNothing, // PLAYER_IA_NONE + Player_InitItemAction_DoNothing, // PLAYER_IA_LAST_USED + Player_InitItemAction_DoNothing, // PLAYER_IA_FISHING_ROD + Player_InitItemAction_DoNothing, // PLAYER_IA_SWORD_KOKIRI + Player_InitItemAction_DoNothing, // PLAYER_IA_SWORD_RAZOR + Player_InitItemAction_DoNothing, // PLAYER_IA_SWORD_GILDED + Player_InitItemAction_DoNothing, // PLAYER_IA_SWORD_TWO_HANDED + Player_InitItemAction_DekuStick, // PLAYER_IA_DEKU_STICK + Player_InitItemAction_5, // PLAYER_IA_ZORA_FINS + Player_InitItemAction_2, // PLAYER_IA_BOW + Player_InitItemAction_2, // PLAYER_IA_BOW_FIRE + Player_InitItemAction_2, // PLAYER_IA_BOW_ICE + Player_InitItemAction_2, // PLAYER_IA_BOW_LIGHT + Player_InitItemAction_SpawnHookshot, // PLAYER_IA_HOOKSHOT + Player_InitItemAction_SpawnExplosive, // PLAYER_IA_BOMB + Player_InitItemAction_SpawnExplosive, // PLAYER_IA_POWDER_KEG + Player_InitItemAction_SpawnExplosive, // PLAYER_IA_BOMBCHU + Player_InitItemAction_5, // PLAYER_IA_11 + Player_InitItemAction_2, // PLAYER_IA_DEKU_NUT + Player_InitItemAction_DoNothing, // PLAYER_IA_PICTOGRAPH_BOX + Player_InitItemAction_DoNothing, // PLAYER_IA_OCARINA + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_EMPTY + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_FISH + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_SPRING_WATER + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_ZORA_EGG + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_GOLD_DUST + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_1C + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_SEA_HORSE + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_MUSHROOM + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_BUG + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_POE + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_BIG_POE + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_POTION_RED + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_POTION_BLUE + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_POTION_GREEN + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_MILK + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_MILK_HALF + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_CHATEAU + Player_InitItemAction_DoNothing, // PLAYER_IA_BOTTLE_FAIRY + Player_InitItemAction_DoNothing, // PLAYER_IA_MOONS_TEAR + Player_InitItemAction_DoNothing, // PLAYER_IA_DEED_LAND + Player_InitItemAction_DoNothing, // PLAYER_IA_ROOM_KEY + Player_InitItemAction_DoNothing, // PLAYER_IA_LETTER_TO_KAFEI + Player_InitItemAction_DoNothing, // PLAYER_IA_MAGIC_BEANS + Player_InitItemAction_DoNothing, // PLAYER_IA_DEED_SWAMP + Player_InitItemAction_DoNothing, // PLAYER_IA_DEED_MOUNTAIN + Player_InitItemAction_DoNothing, // PLAYER_IA_DEED_OCEAN + Player_InitItemAction_DoNothing, // PLAYER_IA_32 + Player_InitItemAction_DoNothing, // PLAYER_IA_LETTER_MAMA + Player_InitItemAction_DoNothing, // PLAYER_IA_34 + Player_InitItemAction_DoNothing, // PLAYER_IA_35 + Player_InitItemAction_DoNothing, // PLAYER_IA_PENDANT_MEMORIES + Player_InitItemAction_DoNothing, // PLAYER_IA_37 + Player_InitItemAction_DoNothing, // PLAYER_IA_38 + Player_InitItemAction_DoNothing, // PLAYER_IA_39 + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_TRUTH + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_KAFEIS_MASK + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_ALL_NIGHT + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_BUNNY + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_KEATON + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_GARO + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_ROMANI + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_CIRCUS_LEADER + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_POSTMAN + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_COUPLE + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_GREAT_FAIRY + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_GIBDO + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_DON_GERO + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_KAMARO + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_CAPTAIN + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_STONE + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_BREMEN + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_BLAST + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_SCENTS + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_GIANT + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_FIERCE_DEITY + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_GORON + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_ZORA + Player_InitItemAction_DoNothing, // PLAYER_IA_MASK_DEKU + Player_InitItemAction_DoNothing, // PLAYER_IA_LENS_OF_TRUTH +}; + +void Player_InitItemAction_DoNothing(PlayState* play, Player* this) { } -void func_8082F5A4(PlayState* play, Player* this) { +void Player_InitItemAction_DekuStick(PlayState* play, Player* this) { this->unk_B28 = 0; this->unk_B0C = 1.0f; } -void func_8082F5C0(PlayState* play, Player* this) { +void Player_InitItemAction_2(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_8; if (this->heldItemAction == PLAYER_IA_DEKU_NUT) { @@ -2994,179 +3166,6 @@ void func_8082F5C0(PlayState* play, Player* this) { this->unk_ACC = 0; } -PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { - func_80848780, // PLAYER_IA_NONE - func_80848780, // PLAYER_IA_LAST_USED - func_80848780, // PLAYER_IA_FISHING_ROD - func_808487B8, // PLAYER_IA_SWORD_KOKIRI - func_808487B8, // PLAYER_IA_SWORD_RAZOR - func_808487B8, // PLAYER_IA_SWORD_GILDED - func_808487B8, // PLAYER_IA_SWORD_TWO_HANDED - func_80848780, // PLAYER_IA_DEKU_STICK - func_80848780, // PLAYER_IA_ZORA_FINS - func_80848B6C, // PLAYER_IA_BOW - func_80848B6C, // PLAYER_IA_BOW_FIRE - func_80848B6C, // PLAYER_IA_BOW_ICE - func_80848B6C, // PLAYER_IA_BOW_LIGHT - func_80848B6C, // PLAYER_IA_HOOKSHOT - func_808490B4, // PLAYER_IA_BOMB - func_808490B4, // PLAYER_IA_POWDER_KEG - func_808490B4, // PLAYER_IA_BOMBCHU - func_808491B4, // PLAYER_IA_11 - func_80848B6C, // PLAYER_IA_DEKU_NUT - func_80848780, // PLAYER_IA_PICTOGRAPH_BOX - func_80848780, // PLAYER_IA_OCARINA - func_80848780, // PLAYER_IA_BOTTLE_EMPTY - func_80848780, // PLAYER_IA_BOTTLE_FISH - func_80848780, // PLAYER_IA_BOTTLE_SPRING_WATER - func_80848780, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER - func_80848780, // PLAYER_IA_BOTTLE_ZORA_EGG - func_80848780, // PLAYER_IA_BOTTLE_DEKU_PRINCESS - func_80848780, // PLAYER_IA_BOTTLE_GOLD_DUST - func_80848780, // PLAYER_IA_BOTTLE_1C - func_80848780, // PLAYER_IA_BOTTLE_SEA_HORSE - func_80848780, // PLAYER_IA_BOTTLE_MUSHROOM - func_80848780, // PLAYER_IA_BOTTLE_HYLIAN_LOACH - func_80848780, // PLAYER_IA_BOTTLE_BUG - func_80848780, // PLAYER_IA_BOTTLE_POE - func_80848780, // PLAYER_IA_BOTTLE_BIG_POE - func_80848780, // PLAYER_IA_BOTTLE_POTION_RED - func_80848780, // PLAYER_IA_BOTTLE_POTION_BLUE - func_80848780, // PLAYER_IA_BOTTLE_POTION_GREEN - func_80848780, // PLAYER_IA_BOTTLE_MILK - func_80848780, // PLAYER_IA_BOTTLE_MILK_HALF - func_80848780, // PLAYER_IA_BOTTLE_CHATEAU - func_80848780, // PLAYER_IA_BOTTLE_FAIRY - func_80848780, // PLAYER_IA_MOONS_TEAR - func_80848780, // PLAYER_IA_DEED_LAND - func_80848780, // PLAYER_IA_ROOM_KEY - func_80848780, // PLAYER_IA_LETTER_TO_KAFEI - func_80848780, // PLAYER_IA_MAGIC_BEANS - func_80848780, // PLAYER_IA_DEED_SWAMP - func_80848780, // PLAYER_IA_DEED_MOUNTAIN - func_80848780, // PLAYER_IA_DEED_OCEAN - func_80848780, // PLAYER_IA_32 - func_80848780, // PLAYER_IA_LETTER_MAMA - func_80848780, // PLAYER_IA_34 - func_80848780, // PLAYER_IA_35 - func_80848780, // PLAYER_IA_PENDANT_MEMORIES - func_80848780, // PLAYER_IA_37 - func_80848780, // PLAYER_IA_38 - func_80848780, // PLAYER_IA_39 - func_80848780, // PLAYER_IA_MASK_TRUTH - func_80848780, // PLAYER_IA_MASK_KAFEIS_MASK - func_80848780, // PLAYER_IA_MASK_ALL_NIGHT - func_80848780, // PLAYER_IA_MASK_BUNNY - func_80848780, // PLAYER_IA_MASK_KEATON - func_80848780, // PLAYER_IA_MASK_GARO - func_80848780, // PLAYER_IA_MASK_ROMANI - func_80848780, // PLAYER_IA_MASK_CIRCUS_LEADER - func_80848780, // PLAYER_IA_MASK_POSTMAN - func_80848780, // PLAYER_IA_MASK_COUPLE - func_80848780, // PLAYER_IA_MASK_GREAT_FAIRY - func_80848780, // PLAYER_IA_MASK_GIBDO - func_80848780, // PLAYER_IA_MASK_DON_GERO - func_80848780, // PLAYER_IA_MASK_KAMARO - func_80848780, // PLAYER_IA_MASK_CAPTAIN - func_80848780, // PLAYER_IA_MASK_STONE - func_80848780, // PLAYER_IA_MASK_BREMEN - func_80848780, // PLAYER_IA_MASK_BLAST - func_80848780, // PLAYER_IA_MASK_SCENTS - func_80848780, // PLAYER_IA_MASK_GIANT - func_80848780, // PLAYER_IA_MASK_FIERCE_DEITY - func_80848780, // PLAYER_IA_MASK_GORON - func_80848780, // PLAYER_IA_MASK_ZORA - func_80848780, // PLAYER_IA_MASK_DEKU - func_80848780, // PLAYER_IA_LENS_OF_TRUTH -}; - -// sPlayerItemActionInits? -void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { - func_8082F594, // PLAYER_IA_NONE - func_8082F594, // PLAYER_IA_LAST_USED - func_8082F594, // PLAYER_IA_FISHING_ROD - func_8082F594, // PLAYER_IA_SWORD_KOKIRI - func_8082F594, // PLAYER_IA_SWORD_RAZOR - func_8082F594, // PLAYER_IA_SWORD_GILDED - func_8082F594, // PLAYER_IA_SWORD_TWO_HANDED - func_8082F5A4, // PLAYER_IA_DEKU_STICK - func_8082F8A0, // PLAYER_IA_ZORA_FINS - func_8082F5C0, // PLAYER_IA_BOW - func_8082F5C0, // PLAYER_IA_BOW_FIRE - func_8082F5C0, // PLAYER_IA_BOW_ICE - func_8082F5C0, // PLAYER_IA_BOW_LIGHT - func_8082F7F4, // PLAYER_IA_HOOKSHOT - Player_SpawnExplosive, // PLAYER_IA_BOMB - Player_SpawnExplosive, // PLAYER_IA_POWDER_KEG - Player_SpawnExplosive, // PLAYER_IA_BOMBCHU - func_8082F8A0, // PLAYER_IA_11 - func_8082F5C0, // PLAYER_IA_DEKU_NUT - func_8082F594, // PLAYER_IA_PICTOGRAPH_BOX - func_8082F594, // PLAYER_IA_OCARINA - func_8082F594, // PLAYER_IA_BOTTLE_EMPTY - func_8082F594, // PLAYER_IA_BOTTLE_FISH - func_8082F594, // PLAYER_IA_BOTTLE_SPRING_WATER - func_8082F594, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER - func_8082F594, // PLAYER_IA_BOTTLE_ZORA_EGG - func_8082F594, // PLAYER_IA_BOTTLE_DEKU_PRINCESS - func_8082F594, // PLAYER_IA_BOTTLE_GOLD_DUST - func_8082F594, // PLAYER_IA_BOTTLE_1C - func_8082F594, // PLAYER_IA_BOTTLE_SEA_HORSE - func_8082F594, // PLAYER_IA_BOTTLE_MUSHROOM - func_8082F594, // PLAYER_IA_BOTTLE_HYLIAN_LOACH - func_8082F594, // PLAYER_IA_BOTTLE_BUG - func_8082F594, // PLAYER_IA_BOTTLE_POE - func_8082F594, // PLAYER_IA_BOTTLE_BIG_POE - func_8082F594, // PLAYER_IA_BOTTLE_POTION_RED - func_8082F594, // PLAYER_IA_BOTTLE_POTION_BLUE - func_8082F594, // PLAYER_IA_BOTTLE_POTION_GREEN - func_8082F594, // PLAYER_IA_BOTTLE_MILK - func_8082F594, // PLAYER_IA_BOTTLE_MILK_HALF - func_8082F594, // PLAYER_IA_BOTTLE_CHATEAU - func_8082F594, // PLAYER_IA_BOTTLE_FAIRY - func_8082F594, // PLAYER_IA_MOONS_TEAR - func_8082F594, // PLAYER_IA_DEED_LAND - func_8082F594, // PLAYER_IA_ROOM_KEY - func_8082F594, // PLAYER_IA_LETTER_TO_KAFEI - func_8082F594, // PLAYER_IA_MAGIC_BEANS - func_8082F594, // PLAYER_IA_DEED_SWAMP - func_8082F594, // PLAYER_IA_DEED_MOUNTAIN - func_8082F594, // PLAYER_IA_DEED_OCEAN - func_8082F594, // PLAYER_IA_32 - func_8082F594, // PLAYER_IA_LETTER_MAMA - func_8082F594, // PLAYER_IA_34 - func_8082F594, // PLAYER_IA_35 - func_8082F594, // PLAYER_IA_PENDANT_MEMORIES - func_8082F594, // PLAYER_IA_37 - func_8082F594, // PLAYER_IA_38 - func_8082F594, // PLAYER_IA_39 - func_8082F594, // PLAYER_IA_MASK_TRUTH - func_8082F594, // PLAYER_IA_MASK_KAFEIS_MASK - func_8082F594, // PLAYER_IA_MASK_ALL_NIGHT - func_8082F594, // PLAYER_IA_MASK_BUNNY - func_8082F594, // PLAYER_IA_MASK_KEATON - func_8082F594, // PLAYER_IA_MASK_GARO - func_8082F594, // PLAYER_IA_MASK_ROMANI - func_8082F594, // PLAYER_IA_MASK_CIRCUS_LEADER - func_8082F594, // PLAYER_IA_MASK_POSTMAN - func_8082F594, // PLAYER_IA_MASK_COUPLE - func_8082F594, // PLAYER_IA_MASK_GREAT_FAIRY - func_8082F594, // PLAYER_IA_MASK_GIBDO - func_8082F594, // PLAYER_IA_MASK_DON_GERO - func_8082F594, // PLAYER_IA_MASK_KAMARO - func_8082F594, // PLAYER_IA_MASK_CAPTAIN - func_8082F594, // PLAYER_IA_MASK_STONE - func_8082F594, // PLAYER_IA_MASK_BREMEN - func_8082F594, // PLAYER_IA_MASK_BLAST - func_8082F594, // PLAYER_IA_MASK_SCENTS - func_8082F594, // PLAYER_IA_MASK_GIANT - func_8082F594, // PLAYER_IA_MASK_FIERCE_DEITY - func_8082F594, // PLAYER_IA_MASK_GORON - func_8082F594, // PLAYER_IA_MASK_ZORA - func_8082F594, // PLAYER_IA_MASK_DEKU - func_8082F594, // PLAYER_IA_LENS_OF_TRUTH -}; - void func_8082F5FC(Player* this, Actor* actor) { this->heldActor = actor; this->interactRangeActor = actor; @@ -3204,7 +3203,7 @@ ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = { { ITEM_BOMBCHU, ACTOR_EN_BOM_CHU }, // PLAYER_EXPLOSIVE_BOMBCHU }; -void Player_SpawnExplosive(PlayState* play, Player* this) { +void Player_InitItemAction_SpawnExplosive(PlayState* play, Player* this) { PlayerExplosive explosiveType; ExplosiveInfo* explosiveInfo; Actor* explosiveActor; @@ -3245,8 +3244,7 @@ void Player_SpawnExplosive(PlayState* play, Player* this) { } } -// SpawnHookshot? -void func_8082F7F4(PlayState* play, Player* this) { +void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this) { ArmsHook* armsHook; this->stateFlags1 |= PLAYER_STATE1_8; @@ -3266,7 +3264,7 @@ void func_8082F7F4(PlayState* play, Player* this) { armsHook->unk_208 = this->transformation; } -void func_8082F8A0(PlayState* play, Player* this) { +void Player_InitItemAction_5(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_1000000; } @@ -3280,7 +3278,7 @@ void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { this->unk_B0C = 0.0f; this->unk_B28 = 0; - D_8085CB3C[itemAction](play, this); + sPlayerInitItemActionFuncs[itemAction](play, this); Player_SetModelGroup(this, this->modelGroup); } @@ -3666,7 +3664,7 @@ void func_808302CC(Player* this, PlayState* play) { f32 endFrame; f32 frameSpeed; - func_8082F43C(play, this, func_80848808); + Player_SetUpperAction(play, this, Player_UpperAction_2); nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; @@ -3773,7 +3771,7 @@ s32 func_808306F8(Player* this, PlayState* play) { (gSaveContext.magicState != MAGIC_STATE_IDLE)) { Audio_PlaySfx(NA_SE_SY_ERROR); } else { - func_8082F43C(play, this, func_80848BF4); + Player_SetUpperAction(play, this, Player_UpperAction_7); this->stateFlags3 |= PLAYER_STATE3_40; this->unk_ACC = 14; @@ -3846,11 +3844,11 @@ void func_808308DC(PlayState* play, Player* this) { } void func_808309CC(PlayState* play, Player* this) { - if (func_80848808 == this->unk_AC4) { + if (Player_UpperAction_2 == this->upperActionFunc) { func_808308DC(play, this); } - func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; func_8082DCA0(play, this); @@ -3879,7 +3877,7 @@ PlayerAnimationHeader* D_8085CFDC[2] = { }; PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) { - func_8082F43C(play, this, func_8084894C); + Player_SetUpperAction(play, this, Player_UpperAction_3); func_8082DCA0(play, this); if (this->unk_B40 < 0.5f) { @@ -3935,7 +3933,7 @@ s32 func_80830B88(PlayState* play, Player* this) { } void func_80830CE8(PlayState* play, Player* this) { - func_8082F43C(play, this, func_80848AB0); + Player_SetUpperAction(play, this, Player_UpperAction_5); if (this->itemAction <= PLAYER_IA_MINUS1) { func_80123C58(this); @@ -3969,7 +3967,7 @@ s32 func_80830DF0(Player* this, PlayState* play) { s32 func_80830E30(Player* this, PlayState* play) { if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) { - func_8082F43C(play, this, func_8084923C); + Player_SetUpperAction(play, this, Player_UpperAction_12); PlayerAnimation_PlayOnce(play, &this->unk_284, (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT) @@ -4107,7 +4105,7 @@ s32 func_808313A8(PlayState* play, Player* this, Actor* actor) { void func_808313F0(Player* this, PlayState* play) { if (!func_808313A8(play, this, this->heldActor)) { - func_8082F43C(play, this, func_808490B4); + Player_SetUpperAction(play, this, Player_UpperAction_10); PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); } } @@ -4132,11 +4130,11 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, if (this->actor.flags & ACTOR_FLAG_20000000) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); this->actor.flags &= ~ACTOR_FLAG_20000000; - } else if ((func_80857BE8 == this->actionFunc) || (func_808561B0 == this->actionFunc)) { + } else if ((Player_Action_96 == this->actionFunc) || (Player_Action_93 == this->actionFunc)) { this->actor.shape.shadowDraw = ActorShadow_DrawFeet; this->actor.shape.shadowScale = this->ageProperties->shadowScale; this->unk_ABC = 0.0f; - if (func_80857BE8 == this->actionFunc) { + if (Player_Action_96 == this->actionFunc) { if (this->stateFlags3 & PLAYER_STATE3_80000) { Magic_Reset(play); } @@ -4203,7 +4201,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, return true; } -void func_8083172C(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { +void Player_SetAction_PreserveMoveFlags(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { s32 moveFlags = this->skelAnime.moveFlags; this->skelAnime.moveFlags = 0; @@ -4211,7 +4209,7 @@ void func_8083172C(PlayState* play, Player* this, PlayerActionFunc actionFunc, s this->skelAnime.moveFlags = moveFlags; } -void func_80831760(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { +void Player_SetAction_PreserveItemAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { if (this->itemAction > PLAYER_IA_MINUS1) { PlayerItemAction heldItemAction = this->itemAction; @@ -4381,7 +4379,7 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { s32 sp24 = func_801242B4(this); func_8082DE50(play, this); - Player_SetAction(play, this, sp24 ? func_80851BD4 : func_8084BFDC, 0); + Player_SetAction(play, this, sp24 ? Player_Action_62 : Player_Action_24, 0); Player_AnimationPlayOnce(play, this, anim); if (anim == &gPlayerAnim_link_derth_rebirth) { @@ -4416,21 +4414,21 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { } s32 func_80832090(Player* this) { - return (!(func_8084D770 == this->actionFunc) || + return (!(Player_Action_34 == this->actionFunc) || (((this->stateFlags3 & PLAYER_STATE3_40000000)) && ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) && - (!(func_80848808 == this->unk_AC4) || + (!(Player_UpperAction_2 == this->upperActionFunc) || Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction); } // Whether action is Bremen marching or Kamaro dancing s32 func_8083213C(Player* this) { - return (func_8084AC84 == this->actionFunc) || (func_8084AEEC == this->actionFunc); + return (Player_Action_11 == this->actionFunc) || (Player_Action_12 == this->actionFunc); } s32 func_8083216C(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) { - Player_SetAction(play, this, func_80855E08, 1); + Player_SetAction(play, this, Player_Action_92, 1); this->stateFlags3 |= PLAYER_STATE3_80; Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start); func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80)); @@ -4444,12 +4442,12 @@ s32 func_8083216C(Player* this, PlayState* play) { if (func_80832090(this)) { func_808304BC(this, play); - if (func_80852B28 == this->actionFunc) { + if (Player_Action_64 == this->actionFunc) { return true; } } - if (!this->unk_AC4(this, play)) { + if (!this->upperActionFunc(this, play)) { return false; } @@ -4511,7 +4509,7 @@ s32 func_8083249C(Player* this) { s32 func_808324EC(PlayState* play, Player* this, PlayerFuncD58 arg2, s32 csId) { this->unk_D58 = arg2; this->csId = csId; - Player_SetAction(play, this, func_8084D770, 0); + Player_SetAction(play, this, Player_Action_34, 0); func_8083249C(this); this->stateFlags2 |= PLAYER_STATE2_40; return func_8082DE14(play, this); @@ -4649,7 +4647,7 @@ void func_80832888(Player* this, PlayState* play) { } this->stateFlags1 &= ~PLAYER_STATE1_40000000; } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) && - (func_808573A4 != this->actionFunc)) { + (Player_Action_95 != this->actionFunc)) { func_8083133C(this); } } @@ -4780,7 +4778,7 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { if (arg3) { D_80862B04 = func_8083216C(this, play); - if (func_80852B28 == this->actionFunc) { + if (Player_Action_64 == this->actionFunc) { return true; } } @@ -4790,7 +4788,7 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { return true; } - if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (func_80848808 != this->unk_AC4)) { + if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) { while (*arg2 >= 0) { if (D_8085D054[*arg2](this, play)) { return true; @@ -4916,7 +4914,7 @@ void func_808334D4(PlayState* play, Player* this) { } void func_808335B0(PlayState* play, Player* this) { - Player_SetAction(play, this, func_8084CCEC, 1); + Player_SetAction(play, this, Player_Action_30, 1); func_808334D4(play, this); } @@ -5028,7 +5026,7 @@ void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { func_8083375C(this, meleeWeaponAnim); - Player_SetAction(play, this, func_808548B8, 0); + Player_SetAction(play, this, Player_Action_84, 0); this->unk_AE8 = 0; if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { @@ -5094,7 +5092,7 @@ void func_80833A64(Player* this) { } void func_80833AA0(Player* this, PlayState* play) { - if (Player_SetAction(play, this, func_8084C16C, 0)) { + if (Player_SetAction(play, this, Player_Action_25, 0)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); this->unk_AE8 = 1; } @@ -5145,7 +5143,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc } if (arg2 == 3) { - Player_SetAction(play, this, func_808546D0, 0); + Player_SetAction(play, this, Player_Action_82, 0); anim = &gPlayerAnim_link_normal_ice_down; func_8082DAD4(this); this->actor.velocity.y = 0.0f; @@ -5155,7 +5153,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc Player_PlaySfx(this, NA_SE_PL_FREEZE_S); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE); } else if (arg2 == 4) { - Player_SetAction(play, this, func_80854800, 0); + Player_SetAction(play, this, Player_Action_83, 0); func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock); func_8082DAD4(this); @@ -5167,7 +5165,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc arg5 -= this->actor.shape.rot.y; if (this->stateFlags1 & PLAYER_STATE1_8000000) { - Player_SetAction(play, this, func_80851B58, 0); + Player_SetAction(play, this, Player_Action_61, 0); Player_RequestRumble(play, this, 180, 20, 50, SQ(0)); if (arg2 == 1) { @@ -5183,7 +5181,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc } else if ((arg2 == 1) || (arg2 == 2) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) { - Player_SetAction(play, this, func_8084BC64, 0); + Player_SetAction(play, this, Player_Action_21, 0); this->stateFlags3 |= PLAYER_STATE3_2; @@ -5222,7 +5220,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc } else { PlayerAnimationHeader** animPtr = D_8085D0D4; - Player_SetAction(play, this, func_8084BBF0, 0); + Player_SetAction(play, this, Player_Action_20, 0); func_8082FC60(this); if (this->actor.colChkInfo.damage < 5) { @@ -5278,7 +5276,7 @@ s32 func_808340D4(FloorType floorType) { } void func_80834104(PlayState* play, Player* this) { - Player_SetAction(play, this, func_8085421C, 0); + Player_SetAction(play, this, Player_Action_77, 0); this->stateFlags1 |= PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000; } @@ -5445,14 +5443,14 @@ s32 func_80834600(Player* this, PlayState* play) { Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); if ((this->invincibilityTimer >= 0) && !Player_IsGoronOrDeku(this)) { - sp64 = (func_8084B5C0 == this->actionFunc); + sp64 = (Player_Action_18 == this->actionFunc); if (!func_801242B4(this)) { - Player_SetAction(play, this, func_8084BAA4, 0); + Player_SetAction(play, this, Player_Action_19, 0); } this->unk_AE7 = sp64; if ((s8)sp64 == 0) { - func_8082F43C(play, this, func_80848A0C); + Player_SetUpperAction(play, this, Player_UpperAction_4); var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] : D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)]; PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2); @@ -5557,7 +5555,7 @@ void func_80834CD0(Player* this, f32 arg1, u16 sfxId) { } void func_80834D50(PlayState* play, Player* this, PlayerAnimationHeader* anim, f32 speed, u16 sfxId) { - Player_SetAction(play, this, func_8084C16C, 1); + Player_SetAction(play, this, Player_Action_25, 1); if (anim != NULL) { func_8082DB90(play, this, anim); } @@ -5608,7 +5606,7 @@ s32 func_80834DFC(Player* this, PlayState* play) { } if (var_v1) { - Player_SetAction(play, this, func_8084D4EC, 0); + Player_SetAction(play, this, Player_Action_33, 0); yDistToLedge = this->yDistToLedge; if (this->ageProperties->unk_14 <= yDistToLedge) { @@ -5675,7 +5673,7 @@ s32 func_80834DFC(Player* this, PlayState* play) { } void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { - Player_SetAction(play, this, func_8084D820, 0); + Player_SetAction(play, this, Player_Action_35, 0); func_8082DD2C(play, this); this->csId = CS_ID_NONE; @@ -5689,7 +5687,7 @@ void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { } void func_808353DC(PlayState* play, Player* this) { - Player_SetAction(play, this, func_808508C8, 0); + Player_SetAction(play, this, Player_Action_54, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); } @@ -5876,7 +5874,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol } if (this->floorProperty == FLOOR_PROPERTY_13) { - Player_SetAction(play, this, func_808497A0, 0); + Player_SetAction(play, this, Player_Action_1, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; } else { func_80834104(play, this); @@ -6105,7 +6103,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { } } - Player_SetAction(play, this, func_8084E034, 0); + Player_SetAction(play, this, Player_Action_36, 0); this->stateFlags2 |= PLAYER_STATE2_800000; func_8082DE14(play, this); if (this->doorDirection < 0) { @@ -6167,7 +6165,7 @@ s32 func_808365DC(Player* this, PlayState* play) { ((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) || ((this->doorType >= PLAYER_DOORTYPE_HANDLE) && CutsceneManager_IsNext(CS_ID_GLOBAL_DOOR))) && (!(this->stateFlags1 & PLAYER_STATE1_800) && - (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || (func_8085437C == this->actionFunc) || + (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || (Player_Action_78 == this->actionFunc) || (this->doorType == PLAYER_DOORTYPE_STAIRCASE) || (this->doorType == PLAYER_DOORTYPE_PROXIMITY))))) { Actor* doorActor = this->doorActor; Actor* var_v0_3; @@ -6222,7 +6220,7 @@ s32 func_808365DC(Player* this, PlayState* play) { void func_80836888(Player* this, PlayState* play) { PlayerAnimationHeader* anim; - Player_SetAction(play, this, func_80849A9C, 1); + Player_SetAction(play, this, Player_Action_2, 1); if (this->unk_B40 < 0.5f) { anim = func_8082EF54(this); @@ -6238,7 +6236,7 @@ void func_80836888(Player* this, PlayState* play) { } void func_8083692C(Player* this, PlayState* play) { - Player_SetAction(play, this, func_80849DD0, 1); + Player_SetAction(play, this, Player_Action_3, 1); func_8082E438(play, this, func_8082ED20(this)); this->currentYaw = this->actor.shape.rot.y; } @@ -6257,11 +6255,11 @@ void func_808369F4(Player* this, PlayState* play) { PlayerActionFunc actionFunc; if (func_80123420(this)) { - actionFunc = func_80849A9C; + actionFunc = Player_Action_2; } else if (func_80123434(this)) { - actionFunc = func_80849DD0; + actionFunc = Player_Action_3; } else { - actionFunc = func_80849FE0; + actionFunc = Player_Action_4; } Player_SetAction(play, this, actionFunc, 1); } @@ -6279,7 +6277,7 @@ void func_80836A98(Player* this, PlayerAnimationHeader* anim, PlayState* play) { } void func_80836AD8(PlayState* play, Player* this) { - Player_SetAction(play, this, func_80857BE8, 0); + Player_SetAction(play, this, Player_Action_96, 0); this->unk_B28 = 0; this->unk_B86[1] = 0; this->unk_AF0[0].x = 0.0f; @@ -6301,7 +6299,7 @@ void func_80836B3C(PlayState* play, Player* this, f32 arg2) { } else { PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType]; - Player_SetAction(play, this, func_8084C6EC, 0); + Player_SetAction(play, this, Player_Action_26, 0); PlayerAnimation_Change(play, &this->skelAnime, anim, 1.25f * D_8085C3E4, arg2, Animation_GetLastFrame(anim), ANIMMODE_ONCE, 0.0f); } @@ -6338,7 +6336,7 @@ void func_80836D8C(Player* this) { s32 func_80836DC0(PlayState* play, Player* this) { if ((MREG(48) != 0) || func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { - Player_SetAction(play, this, func_808561B0, 0); + Player_SetAction(play, this, Player_Action_93, 0); this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); func_8082E438(play, this, &gPlayerAnim_pn_attack); Player_StopHorizontalMovement(this); @@ -6635,12 +6633,12 @@ void func_808379C0(PlayState* play, Player* this) { PlayerAnimationHeader* anim; if ((interactRangeActor->id == ACTOR_EN_ISHI) && (ENISHI_GET_1(interactRangeActor) != 0)) { - Player_SetAction(play, this, func_8084E334, 0); + Player_SetAction(play, this, Player_Action_38, 0); anim = &gPlayerAnim_link_silver_carry; } else if (((interactRangeActor->id == ACTOR_EN_BOMBF) || (interactRangeActor->id == ACTOR_EN_KUSA) || (interactRangeActor->id == ACTOR_EN_KUSA2) || (interactRangeActor->id == ACTOR_OBJ_GRASS_CARRY)) && (Player_GetStrength() <= PLAYER_STRENGTH_DEKU)) { - Player_SetAction(play, this, func_8084E4E4, 0); + Player_SetAction(play, this, Player_Action_40, 0); anim = &gPlayerAnim_link_normal_nocarry_free; this->actor.world.pos.x = @@ -6650,7 +6648,7 @@ void func_808379C0(PlayState* play, Player* this) { this->currentYaw = this->actor.shape.rot.y = interactRangeActor->yawTowardsPlayer + 0x8000; } else { - Player_SetAction(play, this, func_8084E25C, 0); + Player_SetAction(play, this, Player_Action_37, 0); anim = D_8085BE84[PLAYER_ANIMGROUP_12][this->modelAnimType]; } @@ -6662,7 +6660,7 @@ void func_808379C0(PlayState* play, Player* this) { } void func_80837B60(PlayState* play, Player* this) { - func_8083172C(play, this, func_8084E980, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_44, 0); this->exchangeItemId = PLAYER_IA_NONE; this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); @@ -6673,18 +6671,18 @@ void func_80837B60(PlayState* play, Player* this) { } void func_80837BD0(PlayState* play, Player* this) { - func_8083172C(play, this, func_8084FE7C, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_52, 0); } void func_80837BF8(PlayState* play, Player* this) { - Player_SetAction(play, this, func_8084ED9C, 0); + Player_SetAction(play, this, Player_Action_45, 0); } void func_80837C20(PlayState* play, Player* this) { s32 sp1C = this->unk_AE8; s32 sp18 = this->unk_AE7; - func_8083172C(play, this, func_8084F4E8, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_50, 0); this->actor.velocity.y = 0.0f; this->unk_AE8 = sp1C; @@ -6692,7 +6690,7 @@ void func_80837C20(PlayState* play, Player* this) { } void func_80837C78(PlayState* play, Player* this) { - func_8083172C(play, this, func_80852C04, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_65, 0); this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000); if (this->getItemId == GI_HEART_CONTAINER) { @@ -6708,7 +6706,7 @@ void func_80837CEC(PlayState* play, Player* this, CollisionPoly* arg2, f32 arg3, f32 nx = COLPOLY_GET_NORMAL(arg2->normal.x); f32 nz = COLPOLY_GET_NORMAL(arg2->normal.z); - Player_SetAction(play, this, func_8084F1B8, 0); + Player_SetAction(play, this, Player_Action_48, 0); func_8082DE50(play, this); Player_AnimationPlayOnce(play, this, anim); @@ -6814,7 +6812,7 @@ s32 func_80837DEC(Player* this, PlayState* play) { } void func_808381A0(Player* this, PlayerAnimationHeader* anim, PlayState* play) { - Player_SetAction(play, this, func_8084F3DC, 0); + Player_SetAction(play, this, Player_Action_49, 0); PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f); } @@ -6863,9 +6861,9 @@ void func_8083827C(Player* this, PlayState* play) { return; } - if ((func_8084C16C == this->actionFunc) || (func_8084C94C == this->actionFunc) || - (func_8084CA24 == this->actionFunc) || (func_80857BE8 == this->actionFunc) || - (func_808546D0 == this->actionFunc) || (func_80854800 == this->actionFunc)) { + if ((Player_Action_25 == this->actionFunc) || (Player_Action_27 == this->actionFunc) || + (Player_Action_28 == this->actionFunc) || (Player_Action_96 == this->actionFunc) || + (Player_Action_82 == this->actionFunc) || (Player_Action_83 == this->actionFunc)) { return; } @@ -6880,7 +6878,7 @@ void func_8083827C(Player* this, PlayState* play) { } temp_t0 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y); - Player_SetAction(play, this, func_8084C16C, 1); + Player_SetAction(play, this, Player_Action_25, 1); func_8082DD2C(play, this); this->floorSfxOffset = this->prevFloorSfxOffset; @@ -6904,7 +6902,7 @@ void func_8083827C(Player* this, PlayState* play) { if (WaterBox_GetSurface1(play, &play->colCtx, sp4C.x, sp4C.z, &sp44, &sp58) && ((sp44 - sp48) > 50.0f)) { func_80834DB8(this, &gPlayerAnim_link_normal_run_jump_water_fall, 6.0f, play); - Player_SetAction(play, this, func_8084C94C, 0); + Player_SetAction(play, this, Player_Action_27, 0); return; } } @@ -6964,7 +6962,7 @@ s32 func_808387A0(PlayState* play, Player* this) { if (this->unk_AA5 == PLAYER_UNKAA5_4) { Player_StopCutscene(this); this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; - Player_SetAction(play, this, func_8085B08C, 0); + Player_SetAction(play, this, Player_Action_97, 0); if (this->unk_3BA) { this->stateFlags1 |= PLAYER_STATE1_20000000; } @@ -6997,7 +6995,7 @@ PlayerAnimationHeader* D_8085D160[PLAYER_FORM_MAX] = { void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerForm) { func_8082DE50(play, this); - func_80831760(play, this, func_808553F4, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_86, 0); func_8082E4A4(play, this, D_8085D160[this->transformation]); gSaveContext.save.playerForm = playerForm; this->stateFlags1 |= PLAYER_STATE1_2; @@ -7008,14 +7006,14 @@ void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerFor } void func_808389BC(PlayState* play, Player* this) { - func_80831760(play, this, func_80855AF4, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_89, 0); func_8082E4A4(play, this, &gPlayerAnim_cl_setmask); this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); func_8082DAD4(this); } void func_80838A20(PlayState* play, Player* this) { - func_80831760(play, this, func_80855B9C, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_90, 0); func_8082DB90(play, this, &gPlayerAnim_cl_maskoff); this->currentMask = PLAYER_MASK_NONE; this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); @@ -7194,7 +7192,7 @@ s32 func_80838A90(Player* this, PlayState* play) { Player_StopCutscene(this); this->itemAction = PLAYER_IA_NONE; - func_80831760(play, this, func_80853A5C, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_71, 0); talkActor = this->talkActor; this->itemAction = heldItemTemp; this->csId = CS_ID_NONE; @@ -7206,7 +7204,7 @@ s32 func_80838A90(Player* this, PlayState* play) { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_40); if (this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) { Inventory_ChangeAmmo(ITEM_MAGIC_BEANS, -1); - func_80831760(play, this, func_8084B4A8, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_17, 0); this->currentYaw = talkActor->yawTowardsPlayer + 0x8000; this->actor.shape.rot.y = this->currentYaw; if (talkActor->xzDistToPlayer < 40.0f) { @@ -7245,14 +7243,14 @@ s32 func_80838A90(Player* this, PlayState* play) { if (bottleAction > PLAYER_BOTTLE_NONE) { Player_StopCutscene(this); if (bottleAction >= PLAYER_BOTTLE_FAIRY) { - func_80831760(play, this, func_80853754, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_69, 0); func_8082DB90(play, this, &gPlayerAnim_link_bottle_bug_out); } else if ((bottleAction > PLAYER_BOTTLE_EMPTY) && (bottleAction < PLAYER_BOTTLE_POE)) { - func_80831760(play, this, func_80853850, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_70, 0); func_8082DB90(play, this, &gPlayerAnim_link_bottle_fish_out); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]; } else { - func_80831760(play, this, func_80853194, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_67, 0); func_8082E4A4(play, this, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drinkstart @@ -7269,7 +7267,7 @@ s32 func_80838A90(Player* this, PlayState* play) { } else { this->csId = CS_ID_NONE; } - func_80831760(play, this, func_8085269C, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_63, 0); if ((this->skelAnime.playSpeed < 0.0f) || ((this->skelAnime.animation != D_8085D17C[this->transformation]) && (this->skelAnime.animation != D_8085D190[this->transformation]))) { @@ -7290,7 +7288,7 @@ s32 func_80838A90(Player* this, PlayState* play) { if (func_8083868C(play, this) != CAM_MODE_NORMAL) { Player_StopCutscene(this); if (!(this->stateFlags1 & PLAYER_STATE1_800000)) { - Player_SetAction(play, this, func_8084E724, 1); + Player_SetAction(play, this, Player_Action_43, 1); this->unk_AE8 = 13; func_80836D8C(this); if (this->unk_AA5 == PLAYER_UNKAA5_2) { @@ -7426,7 +7424,7 @@ void func_808395F0(PlayState* play, Player* this, PlayerMeleeWeaponAnimation mel } func_80833864(play, this, meleeWeaponAnim); - Player_SetAction(play, this, func_8084CB58, 0); + Player_SetAction(play, this, Player_Action_29, 0); this->stateFlags3 |= PLAYER_STATE3_2; this->linearVelocity = linearVelocity; this->currentYaw = this->actor.shape.rot.y; @@ -7496,7 +7494,7 @@ void func_80839860(Player* this, PlayState* play, s32 arg2) { void func_80839978(PlayState* play, Player* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->itemAction = PLAYER_IA_OCARINA; - func_80831760(play, this, func_8084AC84, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_11, 0); func_8082DB60(play, this, &gPlayerAnim_clink_normal_okarina_walk); func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_200); this->stateFlags3 |= PLAYER_STATE3_20000000; @@ -7508,7 +7506,7 @@ void func_80839978(PlayState* play, Player* this) { void func_80839A10(PlayState* play, Player* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->itemAction = PLAYER_IA_NONE; - func_80831760(play, this, func_8084AEEC, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_12, 0); func_8082DB60(play, this, &gPlayerAnim_alink_dance_loop); this->stateFlags2 |= PLAYER_STATE2_2000000; Audio_PlayFanfare(NA_BGM_KAMARO_DANCE); @@ -7524,7 +7522,7 @@ s32 func_80839A84(PlayState* play, Player* this) { return false; } - Player_SetAction(play, this, func_808573A4, 0); + Player_SetAction(play, this, Player_Action_95, 0); this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); this->unk_ADC = 4; func_808373A4(play, this); @@ -7599,13 +7597,13 @@ void func_80839E3C(Player* this, PlayState* play) { } void func_80839E74(Player* this, PlayState* play) { - Player_SetAction(play, this, func_80849FE0, 1); + Player_SetAction(play, this, Player_Action_4, 1); Player_AnimationPlayOnce(play, this, func_8082ED20(this)); this->currentYaw = this->actor.shape.rot.y; } void func_80839ED0(Player* this, PlayState* play) { - if (!(this->stateFlags3 & PLAYER_STATE3_80) && (func_80852B28 != this->actionFunc) && !func_8083213C(this)) { + if (!(this->stateFlags3 & PLAYER_STATE3_80) && (Player_Action_64 != this->actionFunc) && !func_8083213C(this)) { func_80836D8C(this); if (!(this->stateFlags1 & PLAYER_STATE1_40)) { if (func_801242B4(this)) { @@ -7641,7 +7639,7 @@ void func_8083A04C(Player* this) { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { this->currentBoots = PLAYER_BOOTS_ZORA_LAND; } - if (func_808508C8 == this->actionFunc) { + if (Player_Action_54 == this->actionFunc) { this->unk_AE8 = 20; } } else { @@ -7692,7 +7690,7 @@ s32 func_8083A274(Player* this, PlayState* play) { !func_80123434(this) && (this->targetedActor == NULL))) { func_8082DC38(this); func_8082DCA0(play, this); - if (Player_SetAction(play, this, func_8084B5C0, 0)) { + if (Player_SetAction(play, this, Player_Action_18, 0)) { this->stateFlags1 |= PLAYER_STATE1_400000; if (this->transformation != PLAYER_FORM_GORON) { PlayerAnimationHeader* anim; @@ -7775,7 +7773,7 @@ s32 func_8083A580(Player* this, PlayState* play) { s32 func_8083A658(PlayState* play, Player* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - Player_SetAction(play, this, func_80852B28, 0); + Player_SetAction(play, this, Player_Action_64, 0); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_light_bom); this->unk_AA5 = PLAYER_UNKAA5_0; return true; @@ -7791,7 +7789,7 @@ struct_8085D200 D_8085D200[] = { s32 func_8083A6C0(PlayState* play, Player* this) { if (D_80862B48 != 0) { if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { - Player_SetAction(play, this, func_808534C0, 0); + Player_SetAction(play, this, Player_Action_68, 0); if (this->actor.depthInWater > 12.0f) { this->unk_AE8 = 1; } @@ -7806,14 +7804,14 @@ s32 func_8083A6C0(PlayState* play, Player* this) { } void func_8083A794(Player* this, PlayState* play) { - if ((func_8084AF9C != this->actionFunc) && (func_8084B0EC != this->actionFunc)) { + if ((Player_Action_13 != this->actionFunc) && (Player_Action_14 != this->actionFunc)) { this->unk_B70 = 0; this->unk_B34 = 0.0f; this->unk_B38 = 0.0f; func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]); } - Player_SetAction(play, this, func_8082FBE8(this) ? func_8084B0EC : func_8084AF9C, 1); + Player_SetAction(play, this, func_8082FBE8(this) ? Player_Action_14 : Player_Action_13, 1); } void func_8083A844(Player* this, PlayState* play, s16 currentYaw) { @@ -7830,7 +7828,7 @@ s32 func_8083A878(PlayState* play, Player* this, f32 arg2) { &waterBox)) { ySurface -= this->actor.world.pos.y; if (this->ageProperties->unk_24 <= ySurface) { - Player_SetAction(play, this, func_80850B18, 0); + Player_SetAction(play, this, Player_Action_55, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000); this->unk_AE8 = 20; @@ -7994,7 +7992,7 @@ void Player_InitMode_F(PlayState* play, Player* this) { } void func_8083AECC(Player* this, s16 currentYaw, PlayState* play) { - Player_SetAction(play, this, func_8084A5C0, 1); + Player_SetAction(play, this, Player_Action_6, 1); PlayerAnimation_CopyJointToMorph(play, &this->skelAnime); this->unk_B38 = 0.0f; this->unk_B34 = 0.0f; @@ -8002,12 +8000,12 @@ void func_8083AECC(Player* this, s16 currentYaw, PlayState* play) { } void func_8083AF30(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084A26C, 1); + Player_SetAction(play, this, Player_Action_5, 1); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType]); } void func_8083AF8C(Player* this, s16 currentYaw, PlayState* play) { - Player_SetAction(play, this, func_8084B288, 1); + Player_SetAction(play, this, Player_Action_15, 1); PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_walk, 1.0f, 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_anchor_back_walk), ANIMMODE_ONCE, -6.0f); this->linearVelocity = 8.0f; @@ -8015,19 +8013,19 @@ void func_8083AF8C(Player* this, s16 currentYaw, PlayState* play) { } void func_8083B030(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084A8E8, 1); + Player_SetAction(play, this, Player_Action_9, 1); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]); this->unk_B38 = 0.0f; } void func_8083B090(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084B3B8, 1); + Player_SetAction(play, this, Player_Action_16, 1); PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_brake, 6.0f / 3.0f); } void func_8083B0E4(PlayState* play, Player* this, s16 currentYaw) { this->currentYaw = currentYaw; - Player_SetAction(play, this, func_8084AB4C, 1); + Player_SetAction(play, this, Player_Action_10, 1); this->unk_B4E = 1200; this->unk_B4E *= D_8085C3E4; PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 1.0f, 0.0f, @@ -8037,7 +8035,7 @@ void func_8083B0E4(PlayState* play, Player* this, s16 currentYaw) { void func_8083B1A0(Player* this, PlayState* play) { PlayerAnimationHeader* anim; - Player_SetAction(play, this, func_80849FE0, 1); + Player_SetAction(play, this, Player_Action_4, 1); if (this->unk_B40 < 0.5f) { anim = D_8085BE84[PLAYER_ANIMGROUP_27][this->modelAnimType]; } else { @@ -8048,7 +8046,7 @@ void func_8083B1A0(Player* this, PlayState* play) { } void func_8083B23C(Player* this, PlayState* play) { - Player_SetAction(play, this, func_80849A9C, 1); + Player_SetAction(play, this, Player_Action_2, 1); func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]); this->unk_AE8 = 1; } @@ -8089,8 +8087,8 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { ((ABS_ALT(this->unk_AAA) < 0x2EE0) && (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && ((s32)SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) <= CONVEYOR_SPEED_SLOW))))) { - if (func_8085B08C != this->actionFunc) { - Player_SetAction(play, this, func_808516B4, 0); + if (Player_Action_97 != this->actionFunc) { + Player_SetAction(play, this, Player_Action_59, 0); } Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_swimer_swim_deep_start); @@ -8108,7 +8106,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { if ((this->transformation != PLAYER_FORM_DEKU) && ((this->stateFlags1 & PLAYER_STATE1_400) || ((this->stateFlags2 & PLAYER_STATE2_400) && - (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (((Player_Action_56 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || (this->unk_AAA < -0x1555)))) && ((this->actor.depthInWater - this->actor.velocity.y) < this->ageProperties->unk_30)) { s32 temp_v0_3; @@ -8121,7 +8119,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { if (this->stateFlags3 & PLAYER_STATE3_8000) { sp2A = this->unk_B86[1]; sp24 = this->unk_B48 * 1.5f; - Player_SetAction(play, this, func_8084CA24, 1); + Player_SetAction(play, this, Player_Action_28, 1); this->stateFlags3 |= PLAYER_STATE3_8000; this->stateFlags1 &= ~PLAYER_STATE1_8000000; sp24 = CLAMP_MAX(sp24, 13.5f); @@ -8139,7 +8137,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { } if (input != NULL) { - Player_SetAction(play, this, func_808519FC, 1); + Player_SetAction(play, this, Player_Action_60, 1); if (this->stateFlags1 & PLAYER_STATE1_400) { this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); } @@ -8156,7 +8154,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { } void func_8083B73C(PlayState* play, Player* this, s16 currentYaw) { - Player_SetAction(play, this, func_808513EC, 0); + Player_SetAction(play, this, Player_Action_57, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); this->actor.shape.rot.y = currentYaw; this->currentYaw = currentYaw; @@ -8164,7 +8162,7 @@ void func_8083B73C(PlayState* play, Player* this, s16 currentYaw) { void func_8083B798(PlayState* play, Player* this) { if (this->transformation == PLAYER_FORM_ZORA) { - Player_SetAction(play, this, func_808513EC, 0); + Player_SetAction(play, this, Player_Action_57, 0); PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim, 1.0f, Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim), 0.0f, ANIMMODE_LOOP, 0.0f); this->unk_B48 = 2.0f; @@ -8179,7 +8177,7 @@ void func_8083B798(PlayState* play, Player* this) { void func_8083B850(PlayState* play, Player* this) { this->currentBoots = PLAYER_BOOTS_ZORA_LAND; this->prevBoots = PLAYER_BOOTS_ZORA_LAND; - Player_SetAction(play, this, func_80850D68, 0); + Player_SetAction(play, this, Player_Action_56, 0); this->unk_B48 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)); Player_OverrideBlureColors(play, this, 1, 8); this->currentBoots = PLAYER_BOOTS_ZORA_LAND; @@ -8199,13 +8197,13 @@ void func_8083B930(PlayState* play, Player* this) { PlayerAnimationHeader* var_a2; if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || - (func_80857BE8 == this->actionFunc)) { + (Player_Action_96 == this->actionFunc)) { func_8082DE50(play, this); - if (func_8084CA24 == this->actionFunc) { + if (Player_Action_28 == this->actionFunc) { func_8083B850(play, this); this->stateFlags3 |= PLAYER_STATE3_8000; - } else if ((this->transformation == PLAYER_FORM_ZORA) && (func_8084C94C == this->actionFunc)) { + } else if ((this->transformation == PLAYER_FORM_ZORA) && (Player_Action_27 == this->actionFunc)) { func_8083B850(play, this); this->stateFlags3 |= PLAYER_STATE3_8000; func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); @@ -8213,11 +8211,11 @@ void func_8083B930(PlayState* play, Player* this) { this->stateFlags2 &= ~PLAYER_STATE2_400; func_8083B3B4(play, this, NULL); this->unk_AE7 = 1; - } else if (func_8084C94C == this->actionFunc) { - Player_SetAction(play, this, func_808516B4, 0); + } else if (Player_Action_27 == this->actionFunc) { + Player_SetAction(play, this, Player_Action_59, 0); func_8083B798(play, this); } else { - Player_SetAction(play, this, func_808508C8, 1); + Player_SetAction(play, this, Player_Action_54, 1); func_8082E438(play, this, (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ? &gPlayerAnim_link_swimer_wait2swim_wait : &gPlayerAnim_link_swimer_land2swim_wait); @@ -8253,8 +8251,9 @@ void func_8083BB4C(PlayState* play, Player* this) { } } - if ((this->actor.parent == NULL) && (func_8084D4EC != this->actionFunc) && (func_8084F3DC != this->actionFunc) && - ((func_8084CA24 != this->actionFunc) || (this->actor.velocity.y < -2.0f))) { + if ((this->actor.parent == NULL) && (Player_Action_33 != this->actionFunc) && + (Player_Action_49 != this->actionFunc) && + ((Player_Action_28 != this->actionFunc) || (this->actor.velocity.y < -2.0f))) { if (this->ageProperties->unk_2C < this->actor.depthInWater) { if (this->transformation == PLAYER_FORM_GORON) { func_80834140(play, this, &gPlayerAnim_link_swimer_swim_down); @@ -8280,7 +8279,7 @@ void func_8083BB4C(PlayState* play, Player* this) { func_80169EFC(&play->state); func_808345C8(); } else { - Player_SetAction(play, this, func_808497A0, 0); + Player_SetAction(play, this, Player_Action_1, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; } func_8083B8D0(play, this); @@ -8288,16 +8287,16 @@ void func_8083BB4C(PlayState* play, Player* this) { } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && - (func_8084E724 != this->actionFunc) && (func_80851B58 != this->actionFunc) && - (func_80851BD4 != this->actionFunc) && (func_808508C8 != this->actionFunc) && - (func_808513EC != this->actionFunc) && (func_80851588 != this->actionFunc) && - (func_808516B4 != this->actionFunc) && (func_808519FC != this->actionFunc) && - (func_80850B18 != this->actionFunc) && (func_80850D68 != this->actionFunc))) { + (Player_Action_43 != this->actionFunc) && (Player_Action_61 != this->actionFunc) && + (Player_Action_62 != this->actionFunc) && (Player_Action_54 != this->actionFunc) && + (Player_Action_57 != this->actionFunc) && (Player_Action_58 != this->actionFunc) && + (Player_Action_59 != this->actionFunc) && (Player_Action_60 != this->actionFunc) && + (Player_Action_55 != this->actionFunc) && (Player_Action_56 != this->actionFunc))) { func_8083B930(play, this); } } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.depthInWater < this->ageProperties->unk_24) && - (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (((Player_Action_56 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { if (this->skelAnime.moveFlags == 0) { func_8083B0E4(play, this, this->actor.shape.rot.y); @@ -8422,7 +8421,7 @@ void func_8083BF54(PlayState* play, Player* this) { var_fv1 = (this->stateFlags1 & PLAYER_STATE1_4000000) ? -fabsf(this->linearVelocity) - : ((func_80850D68 == this->actionFunc) + : ((Player_Action_56 == this->actionFunc) ? (ABS_ALT(this->unk_B8A) * -0.004f) + (this->unk_B48 * -0.38f) : this->actor.velocity.y); @@ -8668,7 +8667,7 @@ PlayerAnimationHeader* sPlayerSlopeSlipAnims[] = { s32 Player_HandleSlopes(PlayState* play, Player* this) { if (!Player_InBlockingCsMode(play, this) && !(this->cylinder.base.ocFlags1 & OC1_HIT)) { - if ((func_80853D68 != this->actionFunc) && (func_80857BE8 != this->actionFunc) && + if ((Player_Action_73 != this->actionFunc) && (Player_Action_96 != this->actionFunc) && (sPlayerFloorEffect == FLOOR_EFFECT_1)) { s16 playerVelYaw = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); Vec3f slopeNormal; @@ -8683,7 +8682,7 @@ s32 Player_HandleSlopes(PlayState* play, Player* this) { velYawToDownwardSlope = downwardSlopeYaw - playerVelYaw; if (ABS_ALT(velYawToDownwardSlope) > 0x3E80) { // 87.9 degrees - var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->floorPitch) : slopeNormal.y; + var_fa1 = (Player_Action_96 == this->actionFunc) ? Math_CosS(this->floorPitch) : slopeNormal.y; slopeSlowdownSpeed = (1.0f - var_fa1) * 40.0f; temp_fv1 = fabsf(this->actor.speed) + slopeSlowdownSpeed; slopeSlowdownSpeedStep = SQ(temp_fv1) * 0.011f; @@ -8693,7 +8692,7 @@ s32 Player_HandleSlopes(PlayState* play, Player* this) { this->pushedYaw = downwardSlopeYaw; Math_StepToF(&this->pushedSpeed, slopeSlowdownSpeed, slopeSlowdownSpeedStep); } else { - Player_SetAction(play, this, func_80853D68, 0); + Player_SetAction(play, this, Player_Action_73, 0); func_8082DE50(play, this); func_8082E514(play, this, sPlayerSlopeSlipAnims[this->unk_AE7]); this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); @@ -8841,7 +8840,7 @@ s32 func_8083D23C(Player* this, PlayState* play) { // Player_SetAction_Throwing void func_8083D6DC(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084E65C, 1); + Player_SetAction(play, this, Player_Action_42, 1); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_28][this->modelAnimType]); } @@ -8860,7 +8859,7 @@ s32 func_8083D78C(Player* this, PlayState* play) { CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { if (!func_808313A8(play, this, this->heldActor)) { if (!func_8083D738(this, this->heldActor)) { - Player_SetAction(play, this, func_8084E58C, 1); + Player_SetAction(play, this, Player_Action_41, 1); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_29][this->modelAnimType]); return true; } @@ -8989,7 +8988,7 @@ s32 func_8083D860(Player* this, PlayState* play) { } void func_8083DCC4(Player* this, PlayerAnimationHeader* anim, PlayState* play) { - func_8083172C(play, this, func_8084FC0C, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_51, 0); PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 4.0f / 3.0f); } @@ -9042,7 +9041,7 @@ void func_8083DEE4(PlayState* play, Player* this) { void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { if (!func_80832558(play, this, func_80837BF8)) { - Player_SetAction(play, this, func_8084ED9C, 0); + Player_SetAction(play, this, Player_Action_45, 0); } Player_AnimationPlayOnce(play, this, anim); @@ -9106,13 +9105,13 @@ s32 func_8083E14C(PlayState* play, Player* this) { } void func_8083E234(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084EE50, 0); + Player_SetAction(play, this, Player_Action_46, 0); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_start); this->stateFlags2 |= PLAYER_STATE2_10; } void func_8083E28C(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084EF9C, 0); + Player_SetAction(play, this, Player_Action_47, 0); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_34][this->modelAnimType]); this->stateFlags2 |= PLAYER_STATE2_10; } @@ -9407,7 +9406,7 @@ void func_8083EE60(Player* this, PlayState* play) { } void func_8083F144(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084A794, 1); + Player_SetAction(play, this, Player_Action_7, 1); func_8082E438(play, this, &gPlayerAnim_link_normal_back_brake); } @@ -9429,7 +9428,7 @@ s32 func_8083F190(Player* this, f32* arg1, s16* arg2, PlayState* play) { } void func_8083F230(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084A884, 1); + Player_SetAction(play, this, Player_Action_8, 1); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_brake_end); } @@ -9723,20 +9722,20 @@ PlayerAnimationHeader* D_8085D294[] = { }; void func_808400CC(PlayState* play, Player* this) { - if (func_8084B5C0 != this->actionFunc) { + if (Player_Action_18 != this->actionFunc) { func_8082DD2C(play, this); if ((this->transformation != PLAYER_FORM_HUMAN) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { u8 moveFlags = this->skelAnime.moveFlags; s32 pad; this->skelAnime.moveFlags = 0; - Player_SetAction(play, this, func_80854C70, 0); + Player_SetAction(play, this, Player_Action_85, 0); this->skelAnime.moveFlags = moveFlags; } else { s32 var_v1; s32 pad; - Player_SetAction(play, this, func_80854C70, 0); + Player_SetAction(play, this, Player_Action_85, 0); if (func_80123420(this)) { var_v1 = 2; } else { @@ -9979,13 +9978,13 @@ s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { } if (!(this->stateFlags3 & PLAYER_STATE3_1000)) { - if ((this->stateFlags3 & PLAYER_STATE3_8000) && (func_8084CA24 != this->actionFunc)) { - Player_SetAction(play, this, func_80851B58, 0); + if ((this->stateFlags3 & PLAYER_STATE3_8000) && (Player_Action_28 != this->actionFunc)) { + Player_SetAction(play, this, Player_Action_61, 0); func_8082DB90(play, this, &gPlayerAnim_link_swimer_swim_hit); func_8082DD2C(play, this); this->linearVelocity *= 0.2f; } else { - Player_SetAction(play, this, func_8084C6EC, 0); + Player_SetAction(play, this, Player_Action_26, 0); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]); this->unk_AE8 = 1; } @@ -10029,11 +10028,11 @@ s32 func_80840CD4(Player* this, PlayState* play) { } void func_80840DEC(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084CE84, 1); + Player_SetAction(play, this, Player_Action_31, 1); } void func_80840E24(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084D18C, 1); + Player_SetAction(play, this, Player_Action_32, 1); } void func_80840E5C(Player* this, PlayState* play) { @@ -10044,7 +10043,7 @@ void func_80840E5C(Player* this, PlayState* play) { } void func_80840EC0(Player* this, PlayState* play) { - Player_SetAction(play, this, func_8084CCEC, 1); + Player_SetAction(play, this, Player_Action_30, 1); Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); this->unk_AE8 = 1; this->unk_B38 = 0.0f; @@ -10120,7 +10119,7 @@ void Player_InitMode_0(PlayState* play, Player* this) { } void Player_InitMode_2(PlayState* play, Player* this) { - Player_SetAction(play, this, func_80854118, 0); + Player_SetAction(play, this, Player_Action_76, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_okarina_warp_goal, 2.0f / 3.0f, 0.0f, 24.0f, ANIMMODE_ONCE, 0.0f); @@ -10154,7 +10153,7 @@ void func_80841358(PlayState* play, Player* this, s32 arg2) { Vec3f D_8085D2B4 = { -1.0f, 69.0f, 20.0f }; void Player_InitMode_1(PlayState* play, Player* this) { - Player_SetAction(play, this, func_80852FD4, 0); + Player_SetAction(play, this, Player_Action_66, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; Math_Vec3f_Copy(&this->actor.world.pos, &D_8085D2B4); this->currentYaw = this->actor.shape.rot.y = -0x8000; @@ -10169,13 +10168,13 @@ void Player_InitMode_1(PlayState* play, Player* this) { } void Player_InitMode_3(PlayState* play, Player* this) { - Player_SetAction(play, this, func_8085437C, 0); + Player_SetAction(play, this, Player_Action_78, 0); func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } void Player_InitMode_4(PlayState* play, Player* this) { func_80834DB8(this, &gPlayerAnim_link_normal_jump, 12.0f, play); - Player_SetAction(play, this, func_8085439C, 0); + Player_SetAction(play, this, Player_Action_79, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; this->fallStartHeight = this->actor.world.pos.y; } @@ -10185,20 +10184,20 @@ void Player_InitMode_7(PlayState* play, Player* this) { } void Player_InitMode_5(PlayState* play, Player* this) { - Player_SetAction(play, this, func_808540A0, 0); + Player_SetAction(play, this, Player_Action_75, 0); this->actor.draw = NULL; this->stateFlags1 |= PLAYER_STATE1_20000000; } void Player_InitMode_6(PlayState* play, Player* this) { if (gSaveContext.save.isOwlSave) { - Player_SetAction(play, this, func_808496AC, 0); + Player_SetAction(play, this, Player_Action_0, 0); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_AE8 = 0x28; gSaveContext.save.isOwlSave = false; } else { - Player_SetAction(play, this, func_80849FE0, 0); + Player_SetAction(play, this, Player_Action_4, 0); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); this->stateFlags1 |= PLAYER_STATE1_20000000; this->stateFlags2 |= PLAYER_STATE2_20000000; @@ -10209,7 +10208,7 @@ void Player_InitMode_6(PlayState* play, Player* this) { // InitModes 0x8 and 0x9 void func_80841744(PlayState* play, Player* this) { - Player_SetAction(play, this, func_80855C28, 0); + Player_SetAction(play, this, Player_Action_91, 0); if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); this->itemAction = PLAYER_IA_OCARINA; @@ -10418,10 +10417,10 @@ void Player_Init(Actor* thisx, PlayState* play) { } if ((this->csMode == PLAYER_CSMODE_9) || (this->csMode == PLAYER_CSMODE_93)) { - Player_SetAction(play, this, func_8085B08C, 0); + Player_SetAction(play, this, Player_Action_97, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; } else { - Player_SetAction(play, this, func_80855818, 0); + Player_SetAction(play, this, Player_Action_87, 0); this->actor.shape.rot.y = this->currentYaw; if (this->prevMask != PLAYER_MASK_NONE) { @@ -10456,7 +10455,7 @@ void Player_Init(Actor* thisx, PlayState* play) { if (this->actor.shape.rot.x != 0) { this->actor.shape.rot.x = 0; this->csMode = PLAYER_CSMODE_68; - Player_SetAction(play, this, func_8085B08C, 0); + Player_SetAction(play, this, Player_Action_97, 0); this->stateFlags1 |= PLAYER_STATE1_20000000; return; } @@ -10619,7 +10618,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { } doActionB = -1; - sp38 = func_801242B4(this) || (func_8084CA24 == this->actionFunc); + sp38 = func_801242B4(this) || (Player_Action_28 == this->actionFunc); // Set B do action if (this->transformation == PLAYER_FORM_GORON) { @@ -10674,7 +10673,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { doActionA = DO_ACTION_SNAP; } else if (Player_InBlockingCsMode(play, this) || (this->actor.flags & ACTOR_FLAG_20000000) || (this->stateFlags1 & PLAYER_STATE1_1000) || (this->stateFlags3 & PLAYER_STATE3_80000) || - (func_80854430 == this->actionFunc)) { + (Player_Action_80 == this->actionFunc)) { doActionA = DO_ACTION_NONE; } else if (this->stateFlags1 & PLAYER_STATE1_100000) { doActionA = DO_ACTION_RETURN; @@ -10701,7 +10700,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->rideActor != NULL))) { doActionA = DO_ACTION_CLIMB; } else if ((this->stateFlags1 & PLAYER_STATE1_800000) && - (!EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (func_808505D0 != this->actionFunc))) { + (!EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (Player_Action_53 != this->actionFunc))) { if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) { if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->id == ACTOR_DM_CHAR08)) { doActionA = DO_ACTION_SPEAK; @@ -10848,7 +10847,7 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { f32 speedScale; f32 ceilingCheckHeight; u32 updBgCheckInfoFlags; - s32 spAC = (func_8084D820 == this->actionFunc) && (this->unk_397 == 4); + s32 spAC = (Player_Action_35 == this->actionFunc) && (this->unk_397 == 4); sPlayerPrevFloorProperty = this->floorProperty; @@ -10867,7 +10866,7 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; } else if (!(this->stateFlags1 & PLAYER_STATE1_1) && - ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) { + ((Player_Action_36 == this->actionFunc) || (Player_Action_35 == this->actionFunc))) { updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT); @@ -10876,7 +10875,7 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; } } else { - if (func_808561B0 == this->actionFunc) { + if (Player_Action_93 == this->actionFunc) { updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_800; } else if ((this->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (this->linearVelocity >= 8.0f)) { updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | @@ -11158,7 +11157,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_80)) { camMode = CAM_MODE_HOOKSHOT; Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->actor.parent); - } else if (func_8084BC64 == this->actionFunc) { + } else if (Player_Action_21 == this->actionFunc) { camMode = CAM_MODE_STILL; } else if (this->stateFlags3 & PLAYER_STATE3_8000) { if (this->stateFlags1 & PLAYER_STATE1_8000000) { @@ -11222,12 +11221,12 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { camMode = CAM_MODE_CLIMB; } else if (this->stateFlags1 & PLAYER_STATE1_80000) { camMode = CAM_MODE_FREEFALL; - } else if (((func_808548B8 == this->actionFunc) && + } else if (((Player_Action_84 == this->actionFunc) && (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) || (this->stateFlags3 & PLAYER_STATE3_8) || - ((func_8084FE7C == this->actionFunc) && (this->unk_AE8 == 0)) || - (func_808505D0 == this->actionFunc)) { + ((Player_Action_52 == this->actionFunc) && (this->unk_AE8 == 0)) || + (Player_Action_53 == this->actionFunc)) { camMode = CAM_MODE_STILL; } else { camMode = CAM_MODE_NORMAL; @@ -11489,7 +11488,7 @@ void func_80844784(PlayState* play, Player* this) { ((this->pushedSpeed != 0.0f) || (this->windSpeed != 0.0f) || (play->envCtx.windSpeed >= 50.0f)) && (!Player_InCsMode(play)) && !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) && - !(this->stateFlags3 & PLAYER_STATE3_100) && (func_8084D4EC != this->actionFunc) && + !(this->stateFlags3 & PLAYER_STATE3_100) && (Player_Action_33 != this->actionFunc) && (this->actor.id == ACTOR_PLAYER)) { this->actor.velocity.x += this->pushedSpeed * Math_SinS(this->pushedYaw); this->actor.velocity.z += this->pushedSpeed * Math_CosS(this->pushedYaw); @@ -11504,7 +11503,7 @@ void func_80844784(PlayState* play, Player* this) { if ((sp50 > 0.0f) && (this->transformation == PLAYER_FORM_DEKU) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - if (Player_SetAction(play, this, func_80856918, 1)) { + if (Player_SetAction(play, this, Player_Action_94, 1)) { this->stateFlags3 |= PLAYER_STATE3_2000 | PLAYER_STATE3_1000000; func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); Audio_SetSfxTimerLerpInterval(4, 2); @@ -11699,7 +11698,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { func_8083B930(play, this); this->stateFlags2 &= ~PLAYER_STATE2_400; - if (func_808508C8 == this->actionFunc) { + if (Player_Action_54 == this->actionFunc) { this->unk_AE8 = 20; } } @@ -11779,7 +11778,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Math_StepToF(&this->pushedSpeed, 0.0f, (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 2.0f); } if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && - !(this->stateFlags3 & PLAYER_STATE3_80) && (func_80854430 != this->actionFunc)) { + !(this->stateFlags3 & PLAYER_STATE3_80) && (Player_Action_80 != this->actionFunc)) { func_8083BB4C(play, this); if (!Play_InCsMode(play)) { if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_80000000) && @@ -11810,7 +11809,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Player_DetectSecrets(play, this); } } - } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (func_8084D820 == this->actionFunc) && + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (Player_Action_35 == this->actionFunc) && (this->unk_397 == 4)) { this->actor.world.pos.y = this->actor.prevPos.y; } @@ -11836,14 +11835,14 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if ((this->csMode != PLAYER_CSMODE_END) || !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000 | PLAYER_STATE1_4000000))) { - if (func_8085B08C != this->actionFunc) { + if (Player_Action_97 != this->actionFunc) { this->unk_AA5 = PLAYER_UNKAA5_4; if (this->csMode == PLAYER_CSMODE_5) { func_808387A0(play, this); func_8082DAD4(this); } } - } else if (func_8085B08C != this->actionFunc) { + } else if (Player_Action_97 != this->actionFunc) { Player_CsAction_End(play, this, NULL); } } else { @@ -11996,7 +11995,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_800000)) && !(this->stateFlags3 & PLAYER_STATE3_10000000)) { - if ((func_808561B0 != this->actionFunc) && (func_80853D68 != this->actionFunc) && + if ((Player_Action_93 != this->actionFunc) && (Player_Action_73 != this->actionFunc) && (this->actor.draw != NULL)) { if ((this->actor.id != ACTOR_PLAYER) && (this->csMode == PLAYER_CSMODE_110)) { this->cylinder.dim.radius = 8; @@ -12005,8 +12004,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } } if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) { - if ((func_808561B0 != this->actionFunc) && - ((func_80857BE8 != this->actionFunc) || (this->unk_AE7 != 1))) { + if ((Player_Action_93 != this->actionFunc) && + ((Player_Action_96 != this->actionFunc) || (this->unk_AE7 != 1))) { if (this->cylinder.base.atFlags != AT_NONE) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base); } @@ -12565,14 +12564,14 @@ void func_808477D0(PlayState* play, Player* this, Input* input, f32 arg3) { s32 func_80847880(PlayState* play, Player* this) { if (play->unk_1887C != 0) { if (play->sceneId == SCENE_20SICHITAI) { - Player_SetAction(play, this, func_80854430, 0); + Player_SetAction(play, this, Player_Action_80, 0); play->unk_1887C = 0; this->csMode = PLAYER_CSMODE_NONE; return true; } func_8082DE50(play, this); - Player_SetAction(play, this, func_80854614, 0); + Player_SetAction(play, this, Player_Action_81, 0); if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) { func_80831990(play, this, ITEM_BOW); } @@ -12684,7 +12683,7 @@ s32 func_80847BF0(Player* this, PlayState* play) { (EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A))) { rideActor->actor.child = NULL; - func_8083172C(play, this, func_808505D0, 0); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_53, 0); this->unk_B48 = sp34 - rideActor->actor.world.pos.y; Player_AnimationPlayOnce(play, this, @@ -12756,7 +12755,7 @@ void func_80847FF8(Player* this, f32* arg1, f32 arg2, s16 arg3) { } void func_80848048(PlayState* play, Player* this) { - Player_SetAction(play, this, func_80851588, 0); + Player_SetAction(play, this, Player_Action_58, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); } @@ -12946,30 +12945,30 @@ void func_80848640(PlayState* play, Player* this) { } } -s32 func_80848780(Player* this, PlayState* play) { +s32 Player_UpperAction_0(Player* this, PlayState* play) { if (func_80830B88(play, this)) { return true; } return false; } -s32 func_808487B8(Player* this, PlayState* play) { +s32 Player_UpperAction_1(Player* this, PlayState* play) { if (func_80830B88(play, this) || func_80830DF0(this, play)) { return true; } return false; } -s32 func_80848808(Player* this, PlayState* play) { +s32 Player_UpperAction_2(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->unk_284) || ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0))))) { - func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; D_80862B4C = D_80862B48; - return this->unk_AC4(this, play); + return this->upperActionFunc(this, play); } if (func_8082ED94(this) != 0) { @@ -12982,7 +12981,7 @@ s32 func_80848808(Player* this, PlayState* play) { return true; } -s32 func_8084894C(Player* this, PlayState* play) { +s32 Player_UpperAction_3(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->unk_284); if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { func_80830CE8(play, this); @@ -12996,7 +12995,7 @@ s32 func_8084894C(Player* this, PlayState* play) { return true; } -s32 func_80848A0C(Player* this, PlayState* play) { +s32 Player_UpperAction_4(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->unk_284)) { PlayerAnimationHeader* anim; f32 lastFrame; @@ -13011,20 +13010,20 @@ s32 func_80848A0C(Player* this, PlayState* play) { return true; } -s32 func_80848AB0(Player* this, PlayState* play) { +s32 Player_UpperAction_5(Player* this, PlayState* play) { // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284)) D_80862B48 = D_80862B4C; if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) { - func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); this->unk_AA4 = 0; - this->unk_AC4(this, play); + this->upperActionFunc(this, play); return false; } return true; } -s32 func_80848B6C(Player* this, PlayState* play) { +s32 Player_UpperAction_6(Player* this, PlayState* play) { if (this->unk_B28 >= 0) { this->unk_B28 = -this->unk_B28; } @@ -13056,7 +13055,7 @@ u16 D_8085D5FC[] = { NA_SE_NONE, }; -s32 func_80848BF4(Player* this, PlayState* play) { +s32 Player_UpperAction_7(Player* this, PlayState* play) { s32 index; s32 temp; @@ -13089,7 +13088,7 @@ s32 func_80848BF4(Player* this, PlayState* play) { func_80831010(this, play); if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) { - func_8082F43C(play, this, func_80848E4C); + Player_SetUpperAction(play, this, Player_UpperAction_8); if (this->unk_B28 >= 0) { if (index != 0) { if (!func_80831194(play, this)) { @@ -13112,7 +13111,7 @@ s32 func_80848BF4(Player* this, PlayState* play) { return 1; } -s32 func_80848E4C(Player* this, PlayState* play) { +s32 Player_UpperAction_8(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->unk_284); if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) { @@ -13148,9 +13147,9 @@ s32 func_80848E4C(Player* this, PlayState* play) { } if (Player_IsHoldingHookshot(this)) { - func_8082F43C(play, this, func_80848B6C); + Player_SetUpperAction(play, this, Player_UpperAction_6); } else { - func_8082F43C(play, this, func_80849054); + Player_SetUpperAction(play, this, Player_UpperAction_9); PlayerAnimation_PlayOnce(play, &this->unk_284, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf : &gPlayerAnim_link_bow_bow_shoot_end); @@ -13161,14 +13160,14 @@ s32 func_80848E4C(Player* this, PlayState* play) { return true; } -s32 func_80849054(Player* this, PlayState* play) { +s32 Player_UpperAction_9(Player* this, PlayState* play) { if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) { - func_8082F43C(play, this, func_80848B6C); + Player_SetUpperAction(play, this, Player_UpperAction_6); } return true; } -s32 func_808490B4(Player* this, PlayState* play) { +s32 Player_UpperAction_10(Player* this, PlayState* play) { Actor* heldActor = this->heldActor; if (heldActor == NULL) { @@ -13191,16 +13190,16 @@ s32 func_808490B4(Player* this, PlayState* play) { } return true; } - return func_80848780(this, play); + return Player_UpperAction_0(this, play); } -s32 func_808491B4(Player* this, PlayState* play) { +s32 Player_UpperAction_11(Player* this, PlayState* play) { if (func_80830B88(play, this)) { return true; } if (this->stateFlags1 & PLAYER_STATE1_2000000) { - func_8082F43C(play, this, func_80849570); + Player_SetUpperAction(play, this, Player_UpperAction_15); } else if (func_80831094(this, play)) { return true; } @@ -13208,9 +13207,9 @@ s32 func_808491B4(Player* this, PlayState* play) { return false; } -s32 func_8084923C(Player* this, PlayState* play) { +s32 Player_UpperAction_12(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->unk_284)) { - func_8082F43C(play, this, func_808492C4); + Player_SetUpperAction(play, this, Player_UpperAction_13); PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim); } if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) { @@ -13219,19 +13218,19 @@ s32 func_8084923C(Player* this, PlayState* play) { return true; } -s32 func_808492C4(Player* this, PlayState* play) { +s32 Player_UpperAction_13(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->unk_284); func_80831010(this, play); if (D_80862B4C == 0) { - func_8082F43C(play, this, func_8084933C); + Player_SetUpperAction(play, this, Player_UpperAction_14); PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack); } return true; } -s32 func_8084933C(Player* this, PlayState* play) { +s32 Player_UpperAction_14(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->unk_284)) { - func_8082F43C(play, this, func_80849570); + Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) { Vec3f pos; @@ -13290,13 +13289,13 @@ s32 func_8084933C(Player* this, PlayState* play) { return true; } -s32 func_80849570(Player* this, PlayState* play) { +s32 Player_UpperAction_15(Player* this, PlayState* play) { if (func_80830B88(play, this)) { return true; } if (this->stateFlags3 & PLAYER_STATE3_800000) { - func_8082F43C(play, this, func_80849620); + Player_SetUpperAction(play, this, Player_UpperAction_16); PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch); this->stateFlags3 &= ~PLAYER_STATE3_800000; Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG); @@ -13307,26 +13306,26 @@ s32 func_80849570(Player* this, PlayState* play) { return false; } -s32 func_80849620(Player* this, PlayState* play) { - if (!func_808491B4(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { +s32 Player_UpperAction_16(Player* this, PlayState* play) { + if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { if (this->stateFlags1 & PLAYER_STATE1_2000000) { - func_8082F43C(play, this, func_80849570); + Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; } else { - func_8082F43C(play, this, func_80848780); + Player_SetUpperAction(play, this, Player_UpperAction_0); } } return true; } -void func_808496AC(Player* this, PlayState* play) { +void Player_Action_0(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); if (DECR(this->unk_AE8) == 0) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { Player_StopCutscene(this); - Player_SetAction(play, this, func_80849FE0, 0); + Player_SetAction(play, this, Player_Action_4, 0); this->stateFlags1 &= ~PLAYER_STATE1_20000000; } } else if (this->unk_AE8 == 30) { @@ -13338,7 +13337,7 @@ void func_808496AC(Player* this, PlayState* play) { } } -void func_808497A0(Player* this, PlayState* play) { +void Player_Action_1(Player* this, PlayState* play) { this->stateFlags3 |= PLAYER_STATE3_10000000; PlayerAnimation_Update(play, &this->skelAnime); func_8083216C(this, play); @@ -13410,7 +13409,7 @@ void func_808497A0(Player* this, PlayState* play) { } } -void func_80849A9C(Player* this, PlayState* play) { +void Player_Action_2(Player* this, PlayState* play) { f32 sp44; s16 sp42; s32 temp_v0; @@ -13432,7 +13431,7 @@ void func_80849A9C(Player* this, PlayState* play) { return; } - if (!func_8082FB68(this) && (!func_80123434(this) || (func_8084894C != this->unk_AC4))) { + if (!func_8082FB68(this) && (!func_80123434(this) || (Player_UpperAction_3 != this->upperActionFunc))) { func_8083B29C(this, play); return; } @@ -13471,7 +13470,7 @@ void func_80849A9C(Player* this, PlayState* play) { } } -void func_80849DD0(Player* this, PlayState* play) { +void Player_Action_3(Player* this, PlayState* play) { f32 sp3C; s16 sp3A; s32 temp_v0; @@ -13492,11 +13491,11 @@ void func_80849DD0(Player* this, PlayState* play) { return; } if (!func_80123434(this)) { - func_8083172C(play, this, func_80849FE0, 1); + Player_SetAction_PreserveMoveFlags(play, this, Player_Action_4, 1); this->currentYaw = this->actor.shape.rot.y; return; } - if (func_8084894C == this->unk_AC4) { + if (Player_UpperAction_3 == this->upperActionFunc) { func_8083B23C(this, play); return; } @@ -13522,7 +13521,7 @@ void func_80849DD0(Player* this, PlayState* play) { } } -void func_80849FE0(Player* this, PlayState* play) { +void Player_Action_4(Player* this, PlayState* play) { s32 temp_v0 = func_8082ED94(this); s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); f32 sp3C; @@ -13580,7 +13579,7 @@ void func_80849FE0(Player* this, PlayState* play) { } } -void func_8084A26C(Player* this, PlayState* play) { +void Player_Action_5(Player* this, PlayState* play) { f32 var_fv0; s16 temp_v0_3; f32 sp44; @@ -13662,7 +13661,7 @@ void func_8084A26C(Player* this, PlayState* play) { } } -void func_8084A5C0(Player* this, PlayState* play) { +void Player_Action_6(Player* this, PlayState* play) { f32 sp34; s16 sp32; s32 sp2C; @@ -13701,7 +13700,7 @@ void func_8084A5C0(Player* this, PlayState* play) { } } -void func_8084A794(Player* this, PlayState* play) { +void Player_Action_7(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); f32 sp30; s16 sp2E; @@ -13725,7 +13724,7 @@ void func_8084A794(Player* this, PlayState* play) { } } -void func_8084A884(Player* this, PlayState* play) { +void Player_Action_8(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); if (func_80833058(play, this, D_8085D004, 1)) { @@ -13737,7 +13736,7 @@ void func_8084A884(Player* this, PlayState* play) { } } -void func_8084A8E8(Player* this, PlayState* play) { +void Player_Action_9(Player* this, PlayState* play) { f32 sp3C; s16 sp3A; s32 var_v0; @@ -13794,7 +13793,7 @@ void func_8084A8E8(Player* this, PlayState* play) { } } -void func_8084AB4C(Player* this, PlayState* play) { +void Player_Action_10(Player* this, PlayState* play) { f32 sp34; s16 sp32; @@ -13824,7 +13823,7 @@ void func_8084AB4C(Player* this, PlayState* play) { this->currentYaw = this->actor.shape.rot.y; } -void func_8084AC84(Player* this, PlayState* play) { +void Player_Action_11(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; if (this->linearVelocity < 1.0f) { @@ -13835,7 +13834,7 @@ void func_8084AC84(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); if (!func_80847880(play, this) && - (!func_80833058(play, this, D_8085D01C, 1) || (func_8084AC84 == this->actionFunc))) { + (!func_80833058(play, this, D_8085D01C, 1) || (Player_Action_11 == this->actionFunc))) { f32 sp3C; f32 temp_fv0; f32 temp_fv1; @@ -13870,12 +13869,12 @@ void func_8084AC84(Player* this, PlayState* play) { } } -void func_8084AEEC(Player* this, PlayState* play) { +void Player_Action_12(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; PlayerAnimation_Update(play, &this->skelAnime); func_80832F24(this); if (!func_80847880(play, this)) { - if (!func_80833058(play, this, D_8085D01C, 0) || (func_8084AEEC == this->actionFunc)) { + if (!func_80833058(play, this, D_8085D01C, 0) || (Player_Action_12 == this->actionFunc)) { if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { func_80839E74(this, play); } @@ -13883,7 +13882,7 @@ void func_8084AEEC(Player* this, PlayState* play) { } } -void func_8084AF9C(Player* this, PlayState* play) { +void Player_Action_13(Player* this, PlayState* play) { f32 sp2C; // player speed? s16 sp2A; @@ -13912,7 +13911,7 @@ void func_8084AF9C(Player* this, PlayState* play) { } } -void func_8084B0EC(Player* this, PlayState* play) { +void Player_Action_14(Player* this, PlayState* play) { f32 sp2C; s16 sp2A; @@ -13943,7 +13942,7 @@ void func_8084B0EC(Player* this, PlayState* play) { } } -void func_8084B288(Player* this, PlayState* play) { +void Player_Action_15(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); f32 sp30; s16 sp2E; @@ -13968,7 +13967,7 @@ void func_8084B288(Player* this, PlayState* play) { } } -void func_8084B3B8(Player* this, PlayState* play) { +void Player_Action_16(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); f32 sp30; s16 sp2E; @@ -13989,7 +13988,7 @@ void func_8084B3B8(Player* this, PlayState* play) { } } -void func_8084B4A8(Player* this, PlayState* play) { +void Player_Action_17(Player* this, PlayState* play) { if (this->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082E794(this); @@ -14009,7 +14008,7 @@ void func_8084B4A8(Player* this, PlayState* play) { } // Player_Action_Shielding -void func_8084B5C0(Player* this, PlayState* play) { +void Player_Action_18(Player* this, PlayState* play) { func_80832F24(this); if (this->transformation == PLAYER_FORM_GORON) { @@ -14115,12 +14114,12 @@ void func_8084B5C0(Player* this, PlayState* play) { this->unk_AA6 |= 0xC1; } -void func_8084BAA4(Player* this, PlayState* play) { +void Player_Action_19(Player* this, PlayState* play) { func_80832F24(this); if (this->unk_AE7 == 0) { D_80862B04 = func_8083216C(this, play); - if ((func_8084894C == this->unk_AC4) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { - Player_SetAction(play, this, func_80849A9C, 1); + if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { + Player_SetAction(play, this, Player_Action_2, 1); } } else { s32 temp_v0; @@ -14131,7 +14130,7 @@ void func_8084BAA4(Player* this, PlayState* play) { PlayerAnimationHeader* anim; f32 lastFrame; - Player_SetAction(play, this, func_8084B5C0, 1); + Player_SetAction(play, this, Player_Action_18, 1); Player_SetModelsForHoldingShield(this); anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; lastFrame = Animation_GetLastFrame(anim); @@ -14140,7 +14139,7 @@ void func_8084BAA4(Player* this, PlayState* play) { } } -void func_8084BBF0(Player* this, PlayState* play) { +void Player_Action_20(Player* this, PlayState* play) { s32 temp_v0; func_80832F24(this); @@ -14152,7 +14151,7 @@ void func_8084BBF0(Player* this, PlayState* play) { } } -void func_8084BC64(Player* this, PlayState* play) { +void Player_Action_21(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; func_808345A8(this); @@ -14185,7 +14184,7 @@ void func_8084BC64(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { this->unk_AE8++; } else { - Player_SetAction(play, this, func_8084BE40, 0); + Player_SetAction(play, this, Player_Action_22, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; } @@ -14202,7 +14201,7 @@ void func_8084BC64(Player* this, PlayState* play) { } } -void func_8084BE40(Player* this, PlayState* play) { +void Player_Action_22(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); func_808345A8(this); func_80832F24(this); @@ -14210,7 +14209,7 @@ void func_8084BE40(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { this->unk_AE8++; } else { - Player_SetAction(play, this, func_8084BF28, 0); + Player_SetAction(play, this, Player_Action_23, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; } @@ -14226,7 +14225,7 @@ AnimSfxEntry D_8085D604[] = { ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, STOP), }; -void func_8084BF28(Player* this, PlayState* play) { +void Player_Action_23(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_808345A8(this); @@ -14252,7 +14251,7 @@ AnimSfxEntry D_8085D60C[] = { ANIMSFX(ANIMSFX_TYPE_8, 170, NA_SE_NONE, STOP), }; -void func_8084BFDC(Player* this, PlayState* play) { +void Player_Action_24(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && (this->actor.depthInWater <= 0.0f)) { if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) || (sPlayerFloorType == FLOOR_TYPE_9) || ((func_808340AC(sPlayerFloorType) >= 0) && @@ -14282,7 +14281,7 @@ s32 func_8084C124(PlayState* play, Player* this) { return false; } -void func_8084C16C(Player* this, PlayState* play) { +void Player_Action_25(Player* this, PlayState* play) { f32 sp44; s16 sp42; Actor* heldActor; @@ -14394,7 +14393,7 @@ AnimSfxEntry D_8085D61C[] = { }; // Player_Action_Rolling // Handles bonking too? -void func_8084C6EC(Player* this, PlayState* play) { +void Player_Action_26(Player* this, PlayState* play) { s32 animFinished; this->stateFlags2 |= PLAYER_STATE2_20; @@ -14455,7 +14454,7 @@ void func_8084C6EC(Player* this, PlayState* play) { } } -void func_8084C94C(Player* this, PlayState* play) { +void Player_Action_27(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -14473,7 +14472,7 @@ void func_8084C94C(Player* this, PlayState* play) { } } -void func_8084CA24(Player* this, PlayState* play) { +void Player_Action_28(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -14497,7 +14496,7 @@ void func_8084CA24(Player* this, PlayState* play) { } } -void func_8084CB58(Player* this, PlayState* play) { +void Player_Action_29(Player* this, PlayState* play) { AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; f32 sp38; s16 sp36; @@ -14527,7 +14526,7 @@ void func_8084CB58(Player* this, PlayState* play) { } } -void func_8084CCEC(Player* this, PlayState* play) { +void Player_Action_30(Player* this, PlayState* play) { f32 sp34; s16 sp32; s32 temp_v0; @@ -14563,7 +14562,7 @@ void func_8084CCEC(Player* this, PlayState* play) { } } -void func_8084CE84(Player* this, PlayState* play) { +void Player_Action_31(Player* this, PlayState* play) { s32 var_v1; s32 temp_v0_2; f32 temp_ft4; @@ -14623,7 +14622,7 @@ void func_8084CE84(Player* this, PlayState* play) { } } -void func_8084D18C(Player* this, PlayState* play) { +void Player_Action_32(Player* this, PlayState* play) { f32 sp5C = fabsf(this->linearVelocity); f32 var_fa0; @@ -14682,7 +14681,7 @@ void func_8084D18C(Player* this, PlayState* play) { } } -void func_8084D4EC(Player* this, PlayState* play) { +void Player_Action_33(Player* this, PlayState* play) { s32 animFinished; f32 frame; s32 temp_v0; @@ -14749,7 +14748,7 @@ void func_8084D4EC(Player* this, PlayState* play) { } } -void func_8084D770(Player* this, PlayState* play) { +void Player_Action_34(Player* this, PlayState* play) { s32 temp_v0; this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); @@ -14767,7 +14766,7 @@ void func_8084D770(Player* this, PlayState* play) { } } -void func_8084D820(Player* this, PlayState* play) { +void Player_Action_35(Player* this, PlayState* play) { if (func_80838A90(this, play) == 0) { if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { func_80833AA0(this, play); @@ -14918,7 +14917,7 @@ void func_8084D820(Player* this, PlayState* play) { if (play->unk_1887C != 0) { play->func_18780(this, play); - Player_SetAction(play, this, func_80854430, 0); + Player_SetAction(play, this, Player_Action_80, 0); if (play->sceneId == 0x45) { play->unk_1887C = 0; } @@ -14935,7 +14934,7 @@ void func_8084D820(Player* this, PlayState* play) { } // door stuff -void func_8084E034(Player* this, PlayState* play) { +void Player_Action_36(Player* this, PlayState* play) { EnDoor* doorActor = (EnDoor*)this->doorActor; s32 sp38 = (doorActor != NULL) && (doorActor->doorType == ENDOOR_TYPE_7); s32 animFinished; @@ -14984,7 +14983,7 @@ void func_8084E034(Player* this, PlayState* play) { } // grab/hold an actor (?) -void func_8084E25C(Player* this, PlayState* play) { +void Player_Action_37(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -15008,7 +15007,7 @@ void func_8084E25C(Player* this, PlayState* play) { } // grab/hold an actor (?) -void func_8084E334(Player* this, PlayState* play) { +void Player_Action_38(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -15025,13 +15024,13 @@ void func_8084E334(Player* this, PlayState* play) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L); } } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { - Player_SetAction(play, this, func_8084E434, 1); + Player_SetAction(play, this, Player_Action_39, 1); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_silver_throw); } } // throw held actor (?) -void func_8084E434(Player* this, PlayState* play) { +void Player_Action_39(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_80836988(this, play); } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) { @@ -15046,7 +15045,7 @@ void func_8084E434(Player* this, PlayState* play) { } } -void func_8084E4E4(Player* this, PlayState* play) { +void Player_Action_40(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait); this->unk_AE8 = 15; @@ -15061,7 +15060,7 @@ void func_8084E4E4(Player* this, PlayState* play) { } // Player_Action_PutDownObject? -void func_8084E58C(Player* this, PlayState* play) { +void Player_Action_41(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -15081,7 +15080,7 @@ void func_8084E58C(Player* this, PlayState* play) { } // Player_Action_Throwing -void func_8084E65C(Player* this, PlayState* play) { +void Player_Action_42(Player* this, PlayState* play) { f32 sp34; s16 yaw; @@ -15095,7 +15094,7 @@ void func_8084E65C(Player* this, PlayState* play) { } } -void func_8084E724(Player* this, PlayState* play) { +void Player_Action_43(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_8000000) { func_808475B4(this); func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); @@ -15136,7 +15135,7 @@ void func_8084E724(Player* this, PlayState* play) { this->currentYaw = this->actor.shape.rot.y; } -void func_8084E980(Player* this, PlayState* play) { +void Player_Action_44(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083249C(this); @@ -15168,9 +15167,9 @@ void func_8084E980(Player* this, PlayState* play) { } if (this->stateFlags1 & PLAYER_STATE1_800000) { - func_8084FE7C(this, play); + Player_Action_52(this, play); } else if (func_801242B4(this)) { - func_808508C8(this, play); + Player_Action_54(this, play); if (this->actor.depthInWater > 100.0f) { this->actor.velocity.y = 0.0f; this->actor.gravity = 0.0f; @@ -15218,7 +15217,7 @@ void func_8084E980(Player* this, PlayState* play) { } } -void func_8084ED9C(Player* this, PlayState* play) { +void Player_Action_45(Player* this, PlayState* play) { f32 sp34; s16 sp32; s32 temp_v0; @@ -15242,7 +15241,7 @@ AnimSfxEntry D_8085D650[] = { ANIMSFX(ANIMSFX_TYPE_FLOOR, 21, NA_SE_PL_SLIP, STOP), }; -void func_8084EE50(Player* this, PlayState* play) { +void Player_Action_46(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) { @@ -15283,7 +15282,7 @@ AnimSfxEntry D_8085D658[] = { Vec3f D_8085D660 = { 0.0f, 268 * 0.1f, -60.0f }; -void func_8084EF9C(Player* this, PlayState* play) { +void Player_Action_47(Player* this, PlayState* play) { PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_35][this->modelAnimType]; this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); @@ -15341,7 +15340,7 @@ void func_8084EF9C(Player* this, PlayState* play) { } } -void func_8084F1B8(Player* this, PlayState* play) { +void Player_Action_48(Player* this, PlayState* play) { f32 sp3C; s16 sp3A; @@ -15394,7 +15393,7 @@ void func_8084F1B8(Player* this, PlayState* play) { } } -void func_8084F3DC(Player* this, PlayState* play) { +void Player_Action_49(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -15412,7 +15411,7 @@ void func_8084F3DC(Player* this, PlayState* play) { } } -void func_8084F4E8(Player* this, PlayState* play) { +void Player_Action_50(Player* this, PlayState* play) { s32 yStick = sPlayerControlInput->rel.stick_y; s32 xStick = sPlayerControlInput->rel.stick_x; f32 var_fv0; @@ -15562,7 +15561,7 @@ AnimSfxEntry D_8085D67C[] = { ANIMSFX(ANIMSFX_TYPE_SURFACE, 30, NA_SE_PL_WALK_LADDER, STOP), }; -void func_8084FC0C(Player* this, PlayState* play) { +void Player_Action_51(Player* this, PlayState* play) { s32 temp_v0; this->stateFlags2 |= PLAYER_STATE2_40; @@ -15667,7 +15666,7 @@ AnimSfxEntry D_8085D6E8[] = { ANIMSFX(ANIMSFX_TYPE_GENERAL, 136, NA_SE_PL_CALM_PAT, STOP), }; -void func_8084FE7C(Player* this, PlayState* play) { +void Player_Action_52(Player* this, PlayState* play) { EnHorse* rideActor = (EnHorse*)this->rideActor; this->stateFlags2 |= PLAYER_STATE2_40; @@ -15846,7 +15845,7 @@ AnimSfxEntry D_8085D708[] = { ANIMSFX(ANIMSFX_TYPE_GENERAL, 25, NA_SE_PL_SLIPDOWN, STOP), }; -void func_808505D0(Player* this, PlayState* play) { +void Player_Action_53(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80847E2C(this, 1.0f, 10.0f); @@ -15904,7 +15903,7 @@ s32 func_80850854(PlayState* play, Player* this) { return false; } -void func_808508C8(Player* this, PlayState* play) { +void Player_Action_54(Player* this, PlayState* play) { f32 sp34; s16 sp32; @@ -15959,7 +15958,7 @@ void func_808508C8(Player* this, PlayState* play) { } } -void func_80850B18(Player* this, PlayState* play) { +void Player_Action_55(Player* this, PlayState* play) { if (!func_80838A90(this, play)) { this->stateFlags2 |= PLAYER_STATE2_20; func_808477D0(play, this, NULL, this->linearVelocity); @@ -15993,7 +15992,7 @@ void func_80850D20(PlayState* play, Player* this) { func_8083F8A8(play, this, 12.0f, -1, 1.0f, 160, 20, true); } -void func_80850D68(Player* this, PlayState* play) { +void Player_Action_56(Player* this, PlayState* play) { f32 sp44; s16 sp42; s16 sp40; @@ -16124,7 +16123,7 @@ void func_80850D68(Player* this, PlayState* play) { func_80850BA8(this); } -void func_808513EC(Player* this, PlayState* play) { +void Player_Action_57(Player* this, PlayState* play) { f32 sp34; s16 sp32; s16 sp30; @@ -16157,7 +16156,7 @@ void func_808513EC(Player* this, PlayState* play) { } } -void func_80851588(Player* this, PlayState* play) { +void Player_Action_58(Player* this, PlayState* play) { f32 sp2C; s16 sp2A; @@ -16180,7 +16179,7 @@ void func_80851588(Player* this, PlayState* play) { } } -void func_808516B4(Player* this, PlayState* play) { +void Player_Action_59(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; this->actor.gravity = 0.0f; @@ -16244,7 +16243,7 @@ void func_808516B4(Player* this, PlayState* play) { } } -void func_808519FC(Player* this, PlayState* play) { +void Player_Action_60(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8082F164(this, BTN_R); @@ -16268,7 +16267,7 @@ void func_808519FC(Player* this, PlayState* play) { func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); } -void func_80851B58(Player* this, PlayState* play) { +void Player_Action_61(Player* this, PlayState* play) { func_808475B4(this); Math_StepToF(&this->linearVelocity, 0.0f, 0.4f); if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity < 10.0f)) { @@ -16276,7 +16275,7 @@ void func_80851B58(Player* this, PlayState* play) { } } -void func_80851BD4(Player* this, PlayState* play) { +void Player_Action_62(Player* this, PlayState* play) { func_808475B4(this); if (PlayerAnimation_Update(play, &this->skelAnime) && (this == GET_PLAYER(play))) { func_80840770(play, this); @@ -16492,7 +16491,7 @@ void func_808525C4(PlayState* play, Player* this) { } } -void func_8085269C(Player* this, PlayState* play) { +void Player_Action_63(Player* this, PlayState* play) { if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == D_8085D17C[this->transformation])) || ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) { @@ -16558,7 +16557,7 @@ void func_8085269C(Player* this, PlayState* play) { CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); this->actor.flags &= ~ACTOR_FLAG_20000000; - func_80831760(play, this, func_80855A7C, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_88, 0); this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; } else if (this->unk_AA5 == PLAYER_UNKAA5_4) { f32 temp_fa0 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x; @@ -16580,7 +16579,7 @@ void func_8085269C(Player* this, PlayState* play) { } } -void func_80852B28(Player* this, PlayState* play) { +void Player_Action_64(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -16612,7 +16611,7 @@ AnimSfxEntry D_8085D74C[] = { ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 120, NA_SE_NONE, STOP), }; -void func_80852C04(Player* this, PlayState* play) { +void Player_Action_65(Player* this, PlayState* play) { func_8083249C(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -16709,7 +16708,7 @@ AnimSfxEntry D_8085D75C[] = { ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 15, NA_SE_NONE, STOP), }; -void func_80852FD4(Player* this, PlayState* play) { +void Player_Action_66(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { if (this->unk_AE7 == 0) { if (DECR(this->unk_AE8) == 0) { @@ -16756,7 +16755,7 @@ u8 D_8085D790[] = { 1 | 2, // PLAYER_IA_BOTTLE_CHATEAU }; -void func_80853194(Player* this, PlayState* play) { +void Player_Action_67(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -16854,7 +16853,7 @@ struct_8085D798 D_8085D798[] = { { ACTOR_EN_ELF, 6, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, }; -void func_808534C0(Player* this, PlayState* play) { +void Player_Action_68(Player* this, PlayState* play) { struct_8085D200* sp24 = &D_8085D200[this->unk_AE8]; func_80832F24(this); @@ -16928,7 +16927,7 @@ void func_808534C0(Player* this, PlayState* play) { Vec3f D_8085D7EC = { 0.0f, 0.0f, 5.0f }; -void func_80853754(Player* this, PlayState* play) { +void Player_Action_69(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -16949,7 +16948,7 @@ void func_80853754(Player* this, PlayState* play) { } } -void func_80853850(Player* this, PlayState* play) { +void Player_Action_70(Player* this, PlayState* play) { static Vec3f D_8085D7F8 = { 10.0f, 268 * 0.1f, 30.0f }; static s8 D_8085D804[PLAYER_FORM_MAX] = { 0x2D, // PLAYER_FORM_FIERCE_DEITY @@ -17023,7 +17022,7 @@ AnimSfxEntry D_8085D840[] = { ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_PUT_OUT_ITEM, STOP), }; -void func_80853A5C(Player* this, PlayState* play) { +void Player_Action_71(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; this->stateFlags3 |= PLAYER_STATE3_4000000; @@ -17079,7 +17078,7 @@ void func_80853A5C(Player* this, PlayState* play) { } } -void func_80853CC0(Player* this, PlayState* play) { +void Player_Action_72(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -17096,7 +17095,7 @@ void func_80853CC0(Player* this, PlayState* play) { } } -void func_80853D68(Player* this, PlayState* play) { +void Player_Action_73(Player* this, PlayState* play) { CollisionPoly* floorPoly; f32 var_fv0; f32 temp_fv1; @@ -17158,23 +17157,23 @@ void func_80853D68(Player* this, PlayState* play) { void func_80859CE0(PlayState* play, Player* this, s32 arg2); -void func_80854010(Player* this, PlayState* play) { +void Player_Action_74(Player* this, PlayState* play) { if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) { func_80859CE0(play, this, 0); - Player_SetAction(play, this, func_8085B08C, 0); - func_8085B08C(this, play); + Player_SetAction(play, this, Player_Action_97, 0); + Player_Action_97(this, play); } } -void func_808540A0(Player* this, PlayState* play) { - Player_SetAction(play, this, func_80854010, 0); +void Player_Action_75(Player* this, PlayState* play) { + Player_SetAction(play, this, Player_Action_74, 0); this->unk_AE8 = 0x28; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); } void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue); -void func_80854118(Player* this, PlayState* play) { +void Player_Action_76(Player* this, PlayState* play) { if (sPlayerYDistToFloor < 150.0f) { if (PlayerAnimation_Update(play, &this->skelAnime)) { if (this->unk_AE8 == 0) { @@ -17202,7 +17201,7 @@ void func_80854118(Player* this, PlayState* play) { } } -void func_8085421C(Player* this, PlayState* play) { +void Player_Action_77(Player* this, PlayState* play) { if (this->skelAnime.animation == NULL) { this->stateFlags2 |= PLAYER_STATE2_4000; } else { @@ -17238,11 +17237,11 @@ void func_8085421C(Player* this, PlayState* play) { } } -void func_8085437C(Player* this, PlayState* play) { +void Player_Action_78(Player* this, PlayState* play) { func_808365DC(this, play); } -void func_8085439C(Player* this, PlayState* play) { +void Player_Action_79(Player* this, PlayState* play) { this->actor.gravity = -1.0f; PlayerAnimation_Update(play, &this->skelAnime); @@ -17253,7 +17252,7 @@ void func_8085439C(Player* this, PlayState* play) { } } -void func_80854430(Player* this, PlayState* play) { +void Player_Action_80(Player* this, PlayState* play) { if (play->unk_1887C < 0) { play->unk_1887C = 0; func_80839ED0(this, play); @@ -17261,7 +17260,7 @@ void func_80854430(Player* this, PlayState* play) { if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { play->unk_1887C = 10; func_80847880(play, this); - Player_SetAction(play, this, func_80854430, 1); + Player_SetAction(play, this, Player_Action_80, 1); this->unk_AE7 = 1; } else { play->unk_1887C = 0; @@ -17283,16 +17282,16 @@ void func_80854430(Player* this, PlayState* play) { } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_A)) { play->unk_1887C = -1; - func_80854614(this, play); - Player_SetAction(play, this, func_80854430, 0); + Player_Action_81(this, play); + Player_SetAction(play, this, Player_Action_80, 0); this->unk_AE7 = 0; } else { play->unk_1887C = 10; - func_80854614(this, play); + Player_Action_81(this, play); } } -void func_80854614(Player* this, PlayState* play) { +void Player_Action_81(Player* this, PlayState* play) { this->unk_AA5 = PLAYER_UNKAA5_3; func_8083868C(play, this); PlayerAnimation_Update(play, &this->skelAnime); @@ -17308,7 +17307,7 @@ void func_80854614(Player* this, PlayState* play) { } } -void func_808546D0(Player* this, PlayState* play) { +void Player_Action_82(Player* this, PlayState* play) { if (this->unk_AE7 >= 0) { if (this->unk_AE7 < 6) { this->unk_AE7++; @@ -17338,7 +17337,7 @@ void func_808546D0(Player* this, PlayState* play) { } } -void func_80854800(Player* this, PlayState* play) { +void Player_Action_83(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808345A8(this); @@ -17353,7 +17352,7 @@ void func_80854800(Player* this, PlayState* play) { this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG)); } -void func_808548B8(Player* this, PlayState* play) { +void Player_Action_84(Player* this, PlayState* play) { AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; if (this->skelAnime.curFrame < (this->skelAnime.endFrame - 6.0f)) { @@ -17417,7 +17416,7 @@ void func_808548B8(Player* this, PlayState* play) { } this->skelAnime.moveFlags = 0; - Player_SetAction(play, this, func_80849FE0, 1); + Player_SetAction(play, this, Player_Action_4, 1); func_8082EC9C(play, this, anim); this->currentYaw = this->actor.shape.rot.y; this->skelAnime.moveFlags = moveFlags; @@ -17433,7 +17432,7 @@ void func_808548B8(Player* this, PlayState* play) { } } -void func_80854C70(Player* this, PlayState* play) { +void Player_Action_85(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_80832F24(this); @@ -17643,7 +17642,7 @@ struct_8085D910 D_8085D910[] = { { 9, 0x32, 0xA, 0xD }, }; -void func_808553F4(Player* this, PlayState* play) { +void Player_Action_86(Player* this, PlayState* play) { struct_8085D910* sp4C = D_8085D910; s32 sp48 = false; @@ -17726,7 +17725,7 @@ void func_808553F4(Player* this, PlayState* play) { func_808550D0(play, this, this->unk_B10[4], this->unk_B10[5], (this->transformation == PLAYER_FORM_HUMAN) ? 0 : 1); } -void func_80855818(Player* this, PlayState* play) { +void Player_Action_87(Player* this, PlayState* play) { Camera_ChangeMode(play->cameraPtrs[play->activeCamId], (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); @@ -17767,7 +17766,7 @@ void func_80855818(Player* this, PlayState* play) { func_808550D0(play, this, 0, this->unk_B10[5], (this->prevMask == PLAYER_MASK_NONE) ? 0 : 1); } -void func_80855A7C(Player* this, PlayState* play) { +void Player_Action_88(Player* this, PlayState* play) { if (this->unk_AE8++ > 90) { play->msgCtx.ocarinaMode = 4; func_8085B384(this, play); @@ -17777,7 +17776,7 @@ void func_80855A7C(Player* this, PlayState* play) { } // Giant's Mask -void func_80855AF4(Player* this, PlayState* play) { +void Player_Action_89(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80855218(play, this, NULL); @@ -17794,7 +17793,7 @@ void func_80855AF4(Player* this, PlayState* play) { } } -void func_80855B9C(Player* this, PlayState* play) { +void Player_Action_90(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; PlayerAnimation_Update(play, &this->skelAnime); @@ -17811,7 +17810,7 @@ void func_80855B9C(Player* this, PlayState* play) { } } -void func_80855C28(Player* this, PlayState* play) { +void Player_Action_91(Player* this, PlayState* play) { s16 sp3E; s32 pad; PlayerAnimationHeader* sp34; @@ -17853,7 +17852,7 @@ void func_80855C28(Player* this, PlayState* play) { } } -void func_80855E08(Player* this, PlayState* play) { +void Player_Action_92(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; if (PlayerAnimation_Update(play, &this->skelAnime)) { @@ -17931,7 +17930,7 @@ void func_80856110(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, } // Deku Flower related -void func_808561B0(Player* this, PlayState* play) { +void Player_Action_93(Player* this, PlayState* play) { DynaPolyActor* dyna; s32 aux = 0xAE; f32 temp_fv0_2; @@ -18023,7 +18022,7 @@ void func_808561B0(Player* this, PlayState* play) { this->unk_ABC = 0.0f; this->actor.world.pos.y += temp_fv0_2 * this->actor.scale.y; func_80834DB8(this, &gPlayerAnim_pn_kakku, speed, play); - Player_SetAction(play, this, func_80856918, 1); + Player_SetAction(play, this, Player_Action_94, 1); this->boomerangActor = NULL; this->stateFlags3 |= PLAYER_STATE3_200; @@ -18119,7 +18118,7 @@ Vec3f D_8085D960 = { -30.0f, 50.0f, 0.0f }; Vec3f D_8085D96C = { 30.0f, 50.0f, 0.0f }; // Flying as Deku? -void func_80856918(Player* this, PlayState* play) { +void Player_Action_94(Player* this, PlayState* play) { if ((this->boomerangActor != NULL) && (this->boomerangActor->update == NULL)) { this->boomerangActor = NULL; } @@ -18310,7 +18309,7 @@ void func_80856918(Player* this, PlayState* play) { } // Deku spinning related -void func_808573A4(Player* this, PlayState* play) { +void Player_Action_95(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; PlayerAnimation_Update(play, &this->skelAnime); @@ -18410,7 +18409,7 @@ void func_808577E0(Player* this) { s32 func_80857950(PlayState* play, Player* this) { if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) { - Player_SetAction(play, this, func_80849FE0, 1); + Player_SetAction(play, this, Player_Action_4, 1); Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f, ANIMMODE_ONCE, 0.0f); @@ -18464,7 +18463,7 @@ void func_80857AEC(PlayState* play, Player* this) { } // Goron rolling related -void func_80857BE8(Player* this, PlayState* play) { +void Player_Action_96(Player* this, PlayState* play) { if (func_80833058(play, this, D_8085D050, 0)) { return; } @@ -18484,7 +18483,7 @@ void func_80857BE8(Player* this, PlayState* play) { s32 spD8; if (func_80840A30(play, this, &this->unk_B08, (this->doorType == PLAYER_DOORTYPE_STAIRCASE) ? 0.0f : 12.0f)) { - if (func_80857BE8 != this->actionFunc) { + if (Player_Action_96 != this->actionFunc) { return; } @@ -20050,7 +20049,7 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { } } -void func_8085B08C(Player* this, PlayState* play) { +void Player_Action_97(Player* this, PlayState* play) { if (this->csMode != this->prevCsMode) { D_80862B6C = this->skelAnime.moveFlags; func_8082E794(this); @@ -20074,7 +20073,7 @@ s32 Player_StartFishing(PlayState* play) { // Player_GrabPlayerImpl? Player_GrabPlayerNoChecks? void func_8085B170(PlayState* play, Player* this) { func_8082DE50(play, this); - Player_SetAction(play, this, func_80853CC0, 0); + Player_SetAction(play, this, Player_Action_72, 0); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack); this->stateFlags2 |= PLAYER_STATE2_80; func_8082DAD4(this); @@ -20100,7 +20099,7 @@ s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { if (this != NULL) { if (csMode == PLAYER_CSMODE_NONE) { - return func_8084E034 == this->actionFunc; + return Player_Action_36 == this->actionFunc; } if ((this->actor.id == ACTOR_EN_TEST3) && (csMode < 0)) { @@ -20115,7 +20114,7 @@ s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { if ((player->actor.id == ACTOR_EN_TEST3) || !Player_InBlockingCsMode(play, player)) { func_8082DE50(play, player); - Player_SetAction(play, player, func_8085B08C, 0); + Player_SetAction(play, player, Player_Action_97, 0); player->csMode = csMode; player->csActor = &this->actor; func_8082DAD4(player); @@ -20127,7 +20126,7 @@ s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { } void func_8085B384(Player* this, PlayState* play) { - Player_SetAction(play, this, func_80849FE0, 1); + Player_SetAction(play, this, Player_Action_4, 1); func_8082E438(play, this, func_8082ED20(this)); this->currentYaw = this->actor.shape.rot.y; } @@ -20262,7 +20261,7 @@ PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId) { this->itemAction = PLAYER_IA_NONE; this->actionFunc = NULL; - func_80831760(play, this, func_80853A5C, 0); + Player_SetAction_PreserveItemAction(play, this, Player_Action_71, 0); this->csId = CS_ID_GLOBAL_TALK; this->itemAction = itemAction; Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_give_other); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c89753261..220695b00 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4313,16 +4313,16 @@ 0x8082F0E4:("Player_SetCylinderForAttack",), 0x8082F164:("func_8082F164",), 0x8082F1AC:("func_8082F1AC",), - 0x8082F43C:("func_8082F43C",), + 0x8082F43C:("Player_SetUpperAction",), 0x8082F470:("func_8082F470",), 0x8082F524:("Player_ItemToItemAction",), - 0x8082F594:("func_8082F594",), - 0x8082F5A4:("func_8082F5A4",), - 0x8082F5C0:("func_8082F5C0",), + 0x8082F594:("Player_InitItemAction_DoNothing",), + 0x8082F5A4:("Player_InitItemAction_DekuStick",), + 0x8082F5C0:("Player_InitItemAction_2",), 0x8082F5FC:("func_8082F5FC",), - 0x8082F62C:("Player_SpawnExplosive",), - 0x8082F7F4:("func_8082F7F4",), - 0x8082F8A0:("func_8082F8A0",), + 0x8082F62C:("Player_InitItemAction_SpawnExplosive",), + 0x8082F7F4:("Player_InitItemAction_SpawnHookshot",), + 0x8082F8A0:("Player_InitItemAction_5",), 0x8082F8BC:("func_8082F8BC",), 0x8082F938:("Player_OverrideBlureColors",), 0x8082FA5C:("func_8082FA5C",), @@ -4360,8 +4360,8 @@ 0x808313F0:("func_808313F0",), 0x80831454:("func_80831454",), 0x80831494:("Player_SetAction",), - 0x8083172C:("func_8083172C",), - 0x80831760:("func_80831760",), + 0x8083172C:("Player_SetAction_PreserveMoveFlags",), + 0x80831760:("Player_SetAction_PreserveItemAction",), 0x808317C4:("func_808317C4",), 0x80831814:("func_80831814",), 0x808318C0:("func_808318C0",), @@ -4644,94 +4644,94 @@ 0x808484F0:("func_808484F0",), 0x80848570:("func_80848570",), 0x80848640:("func_80848640",), - 0x80848780:("func_80848780",), - 0x808487B8:("func_808487B8",), - 0x80848808:("func_80848808",), - 0x8084894C:("func_8084894C",), - 0x80848A0C:("func_80848A0C",), - 0x80848AB0:("func_80848AB0",), - 0x80848B6C:("func_80848B6C",), - 0x80848BF4:("func_80848BF4",), - 0x80848E4C:("func_80848E4C",), - 0x80849054:("func_80849054",), - 0x808490B4:("func_808490B4",), - 0x808491B4:("func_808491B4",), - 0x8084923C:("func_8084923C",), - 0x808492C4:("func_808492C4",), - 0x8084933C:("func_8084933C",), - 0x80849570:("func_80849570",), - 0x80849620:("func_80849620",), - 0x808496AC:("func_808496AC",), - 0x808497A0:("func_808497A0",), - 0x80849A9C:("func_80849A9C",), - 0x80849DD0:("func_80849DD0",), - 0x80849FE0:("func_80849FE0",), - 0x8084A26C:("func_8084A26C",), - 0x8084A5C0:("func_8084A5C0",), - 0x8084A794:("func_8084A794",), - 0x8084A884:("func_8084A884",), - 0x8084A8E8:("func_8084A8E8",), - 0x8084AB4C:("func_8084AB4C",), - 0x8084AC84:("func_8084AC84",), - 0x8084AEEC:("func_8084AEEC",), - 0x8084AF9C:("func_8084AF9C",), - 0x8084B0EC:("func_8084B0EC",), - 0x8084B288:("func_8084B288",), - 0x8084B3B8:("func_8084B3B8",), - 0x8084B4A8:("func_8084B4A8",), - 0x8084B5C0:("func_8084B5C0",), - 0x8084BAA4:("func_8084BAA4",), - 0x8084BBF0:("func_8084BBF0",), - 0x8084BC64:("func_8084BC64",), - 0x8084BE40:("func_8084BE40",), - 0x8084BF28:("func_8084BF28",), - 0x8084BFDC:("func_8084BFDC",), + 0x80848780:("Player_UpperAction_0",), + 0x808487B8:("Player_UpperAction_1",), + 0x80848808:("Player_UpperAction_2",), + 0x8084894C:("Player_UpperAction_3",), + 0x80848A0C:("Player_UpperAction_4",), + 0x80848AB0:("Player_UpperAction_5",), + 0x80848B6C:("Player_UpperAction_6",), + 0x80848BF4:("Player_UpperAction_7",), + 0x80848E4C:("Player_UpperAction_8",), + 0x80849054:("Player_UpperAction_9",), + 0x808490B4:("Player_UpperAction_10",), + 0x808491B4:("Player_UpperAction_11",), + 0x8084923C:("Player_UpperAction_12",), + 0x808492C4:("Player_UpperAction_13",), + 0x8084933C:("Player_UpperAction_14",), + 0x80849570:("Player_UpperAction_15",), + 0x80849620:("Player_UpperAction_16",), + 0x808496AC:("Player_Action_0",), + 0x808497A0:("Player_Action_1",), + 0x80849A9C:("Player_Action_2",), + 0x80849DD0:("Player_Action_3",), + 0x80849FE0:("Player_Action_4",), + 0x8084A26C:("Player_Action_5",), + 0x8084A5C0:("Player_Action_6",), + 0x8084A794:("Player_Action_7",), + 0x8084A884:("Player_Action_8",), + 0x8084A8E8:("Player_Action_9",), + 0x8084AB4C:("Player_Action_10",), + 0x8084AC84:("Player_Action_11",), + 0x8084AEEC:("Player_Action_12",), + 0x8084AF9C:("Player_Action_13",), + 0x8084B0EC:("Player_Action_14",), + 0x8084B288:("Player_Action_15",), + 0x8084B3B8:("Player_Action_16",), + 0x8084B4A8:("Player_Action_17",), + 0x8084B5C0:("Player_Action_18",), + 0x8084BAA4:("Player_Action_19",), + 0x8084BBF0:("Player_Action_20",), + 0x8084BC64:("Player_Action_21",), + 0x8084BE40:("Player_Action_22",), + 0x8084BF28:("Player_Action_23",), + 0x8084BFDC:("Player_Action_24",), 0x8084C124:("func_8084C124",), - 0x8084C16C:("func_8084C16C",), - 0x8084C6EC:("func_8084C6EC",), - 0x8084C94C:("func_8084C94C",), - 0x8084CA24:("func_8084CA24",), - 0x8084CB58:("func_8084CB58",), - 0x8084CCEC:("func_8084CCEC",), - 0x8084CE84:("func_8084CE84",), - 0x8084D18C:("func_8084D18C",), - 0x8084D4EC:("func_8084D4EC",), - 0x8084D770:("func_8084D770",), - 0x8084D820:("func_8084D820",), - 0x8084E034:("func_8084E034",), - 0x8084E25C:("func_8084E25C",), - 0x8084E334:("func_8084E334",), - 0x8084E434:("func_8084E434",), - 0x8084E4E4:("func_8084E4E4",), - 0x8084E58C:("func_8084E58C",), - 0x8084E65C:("func_8084E65C",), - 0x8084E724:("func_8084E724",), - 0x8084E980:("func_8084E980",), - 0x8084ED9C:("func_8084ED9C",), - 0x8084EE50:("func_8084EE50",), - 0x8084EF9C:("func_8084EF9C",), - 0x8084F1B8:("func_8084F1B8",), - 0x8084F3DC:("func_8084F3DC",), - 0x8084F4E8:("func_8084F4E8",), - 0x8084FC0C:("func_8084FC0C",), + 0x8084C16C:("Player_Action_25",), + 0x8084C6EC:("Player_Action_26",), + 0x8084C94C:("Player_Action_27",), + 0x8084CA24:("Player_Action_28",), + 0x8084CB58:("Player_Action_29",), + 0x8084CCEC:("Player_Action_30",), + 0x8084CE84:("Player_Action_31",), + 0x8084D18C:("Player_Action_32",), + 0x8084D4EC:("Player_Action_33",), + 0x8084D770:("Player_Action_34",), + 0x8084D820:("Player_Action_35",), + 0x8084E034:("Player_Action_36",), + 0x8084E25C:("Player_Action_37",), + 0x8084E334:("Player_Action_38",), + 0x8084E434:("Player_Action_39",), + 0x8084E4E4:("Player_Action_40",), + 0x8084E58C:("Player_Action_41",), + 0x8084E65C:("Player_Action_42",), + 0x8084E724:("Player_Action_43",), + 0x8084E980:("Player_Action_44",), + 0x8084ED9C:("Player_Action_45",), + 0x8084EE50:("Player_Action_46",), + 0x8084EF9C:("Player_Action_47",), + 0x8084F1B8:("Player_Action_48",), + 0x8084F3DC:("Player_Action_49",), + 0x8084F4E8:("Player_Action_50",), + 0x8084FC0C:("Player_Action_51",), 0x8084FD7C:("func_8084FD7C",), 0x8084FE48:("func_8084FE48",), - 0x8084FE7C:("func_8084FE7C",), - 0x808505D0:("func_808505D0",), + 0x8084FE7C:("Player_Action_52",), + 0x808505D0:("Player_Action_53",), 0x80850734:("func_80850734",), 0x80850854:("func_80850854",), - 0x808508C8:("func_808508C8",), - 0x80850B18:("func_80850B18",), + 0x808508C8:("Player_Action_54",), + 0x80850B18:("Player_Action_55",), 0x80850BA8:("func_80850BA8",), 0x80850BF8:("func_80850BF8",), 0x80850D20:("func_80850D20",), - 0x80850D68:("func_80850D68",), - 0x808513EC:("func_808513EC",), - 0x80851588:("func_80851588",), - 0x808516B4:("func_808516B4",), - 0x808519FC:("func_808519FC",), - 0x80851B58:("func_80851B58",), - 0x80851BD4:("func_80851BD4",), + 0x80850D68:("Player_Action_56",), + 0x808513EC:("Player_Action_57",), + 0x80851588:("Player_Action_58",), + 0x808516B4:("Player_Action_59",), + 0x808519FC:("Player_Action_60",), + 0x80851B58:("Player_Action_61",), + 0x80851BD4:("Player_Action_62",), 0x80851C40:("func_80851C40",), 0x80851D30:("func_80851D30",), 0x80851EAC:("func_80851EAC",), @@ -4741,58 +4741,58 @@ 0x80852290:("func_80852290",), 0x8085255C:("func_8085255C",), 0x808525C4:("func_808525C4",), - 0x8085269C:("func_8085269C",), - 0x80852B28:("func_80852B28",), - 0x80852C04:("func_80852C04",), - 0x80852FD4:("func_80852FD4",), + 0x8085269C:("Player_Action_63",), + 0x80852B28:("Player_Action_64",), + 0x80852C04:("Player_Action_65",), + 0x80852FD4:("Player_Action_66",), 0x808530E0:("func_808530E0",), - 0x80853194:("func_80853194",), - 0x808534C0:("func_808534C0",), - 0x80853754:("func_80853754",), - 0x80853850:("func_80853850",), - 0x80853A5C:("func_80853A5C",), - 0x80853CC0:("func_80853CC0",), - 0x80853D68:("func_80853D68",), - 0x80854010:("func_80854010",), - 0x808540A0:("func_808540A0",), - 0x80854118:("func_80854118",), - 0x8085421C:("func_8085421C",), - 0x8085437C:("func_8085437C",), - 0x8085439C:("func_8085439C",), - 0x80854430:("func_80854430",), - 0x80854614:("func_80854614",), - 0x808546D0:("func_808546D0",), - 0x80854800:("func_80854800",), - 0x808548B8:("func_808548B8",), - 0x80854C70:("func_80854C70",), + 0x80853194:("Player_Action_67",), + 0x808534C0:("Player_Action_68",), + 0x80853754:("Player_Action_69",), + 0x80853850:("Player_Action_70",), + 0x80853A5C:("Player_Action_71",), + 0x80853CC0:("Player_Action_72",), + 0x80853D68:("Player_Action_73",), + 0x80854010:("Player_Action_74",), + 0x808540A0:("Player_Action_75",), + 0x80854118:("Player_Action_76",), + 0x8085421C:("Player_Action_77",), + 0x8085437C:("Player_Action_78",), + 0x8085439C:("Player_Action_79",), + 0x80854430:("Player_Action_80",), + 0x80854614:("Player_Action_81",), + 0x808546D0:("Player_Action_82",), + 0x80854800:("Player_Action_83",), + 0x808548B8:("Player_Action_84",), + 0x80854C70:("Player_Action_85",), 0x80854CD0:("func_80854CD0",), 0x80854EFC:("func_80854EFC",), 0x808550D0:("func_808550D0",), 0x80855218:("func_80855218",), - 0x808553F4:("func_808553F4",), - 0x80855818:("func_80855818",), - 0x80855A7C:("func_80855A7C",), - 0x80855AF4:("func_80855AF4",), - 0x80855B9C:("func_80855B9C",), - 0x80855C28:("func_80855C28",), - 0x80855E08:("func_80855E08",), + 0x808553F4:("Player_Action_86",), + 0x80855818:("Player_Action_87",), + 0x80855A7C:("Player_Action_88",), + 0x80855AF4:("Player_Action_89",), + 0x80855B9C:("Player_Action_90",), + 0x80855C28:("Player_Action_91",), + 0x80855E08:("Player_Action_92",), 0x80855F9C:("func_80855F9C",), 0x80856000:("func_80856000",), 0x80856074:("func_80856074",), 0x80856110:("func_80856110",), - 0x808561B0:("func_808561B0",), + 0x808561B0:("Player_Action_93",), 0x808566C0:("func_808566C0",), 0x8085687C:("func_8085687C",), 0x80856888:("func_80856888",), - 0x80856918:("func_80856918",), - 0x808573A4:("func_808573A4",), + 0x80856918:("Player_Action_94",), + 0x808573A4:("Player_Action_95",), 0x80857640:("func_80857640",), 0x808576BC:("func_808576BC",), 0x808577E0:("func_808577E0",), 0x80857950:("func_80857950",), 0x80857A44:("func_80857A44",), 0x80857AEC:("func_80857AEC",), - 0x80857BE8:("func_80857BE8",), + 0x80857BE8:("Player_Action_96",), 0x80858C84:("func_80858C84",), 0x80858CC8:("func_80858CC8",), 0x80858D48:("func_80858D48",), @@ -4874,7 +4874,7 @@ 0x8085AC9C:("func_8085AC9C",), 0x8085AD5C:("func_8085AD5C",), 0x8085ADA0:("Player_CsAction_48",), - 0x8085B08C:("func_8085B08C",), + 0x8085B08C:("Player_Action_97",), 0x8085B134:("Player_StartFishing",), 0x8085B170:("func_8085B170",), 0x8085B1F0:("Player_GrabPlayer",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 4faf91aea..6c743d181 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4947,7 +4947,7 @@ 0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1), 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), - 0x8085CB3C:("D_8085CB3C","UNK_PTR","",0x4), + 0x8085CB3C:("sPlayerInitItemActionFuncs","UNK_PTR","",0x4), 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1), 0x8085CD00:("D_8085CD00","s8","[36]",0x24), 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1), From 913cd981c0b0213da3542b6368f026ea0d8214e3 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 10 Jul 2023 19:47:39 -0700 Subject: [PATCH 033/121] Deku Playground Docs (#1318) * Actor shared memory * EnGameLupy * EnLiftNuts * object_dnt * PR Suggestions * Things I missed * sPad * Format * PR comments --- assets/xml/objects/object_dnt.xml | 189 +++-- include/functions.h | 6 +- include/z64actor.h | 6 +- include/z64save.h | 8 +- src/code/z_actor.c | 44 +- src/code/z_sram_NES.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 52 +- .../actors/ovl_En_Gamelupy/z_en_gamelupy.c | 100 +-- .../actors/ovl_En_Gamelupy/z_en_gamelupy.h | 20 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 750 ++++++++++-------- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h | 20 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 52 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 52 +- tools/disasm/functions.txt | 102 +-- tools/sizes/code_functions.csv | 6 +- tools/weekeventregconvert.py | 8 +- 16 files changed, 760 insertions(+), 657 deletions(-) diff --git a/assets/xml/objects/object_dnt.xml b/assets/xml/objects/object_dnt.xml index 9f3fcf996..658720258 100644 --- a/assets/xml/objects/object_dnt.xml +++ b/assets/xml/objects/object_dnt.xml @@ -1,91 +1,106 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/functions.h b/include/functions.h index 9a4decc25..66265e454 100644 --- a/include/functions.h +++ b/include/functions.h @@ -499,9 +499,9 @@ void TitleCard_InitBossName(GameState* gameState, TitleCardContext* titleCtx, Te s32 Actor_SetPlayerImpact(PlayState* play, PlayerImpactType type, s32 timer, f32 dist, Vec3f* pos); f32 Actor_GetPlayerImpact(PlayState* play, f32 range, Vec3f* pos, PlayerImpactType* type); -void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size); -void* func_800B6608(PlayState* play, s16 id); -void* func_800B6680(PlayState* play, s16 id); +void* Actor_AddSharedMemoryEntry(PlayState* play, s16 id, void* ptr, size_t size); +void* Actor_FreeSharedMemoryEntry(PlayState* play, s16 id); +void* Actor_FindSharedMemoryEntry(PlayState* play, s16 id); void Actor_Kill(Actor* actor); void Actor_SetWorldToHome(Actor* actor); void Actor_SetFocus(Actor* actor, f32 height); diff --git a/include/z64actor.h b/include/z64actor.h index c25033e4a..4dfc4ead0 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -348,11 +348,11 @@ typedef struct PlayerImpact { /* 0x08 */ Vec3f pos; } PlayerImpact; // size = 0x14 -typedef struct ActorContext_unk_20C { +typedef struct ActorSharedMemoryEntry { /* 0x0 */ s16 id; /* 0x2 */ s8 isDynamicallyInitialised; /* 0x4 */ void* ptr; -} ActorContext_unk_20C; // size = 0x8 +} ActorSharedMemoryEntry; // size = 0x8 typedef struct ActorContextSceneFlags { /* 0x00 */ u32 switches[4]; // First 0x40 are permanent, second 0x40 are temporary @@ -412,7 +412,7 @@ typedef struct ActorContext { /* 0x1E4 */ TitleCardContext titleCtxt; /* 0x1F4 */ PlayerImpact playerImpact; /* 0x208 */ UNK_TYPE1 unk_208[0x4]; - /* 0x20C */ ActorContext_unk_20C unk_20C[8]; + /* 0x20C */ ActorSharedMemoryEntry actorSharedMemory[8]; /* 0x24C */ UNK_TYPE1 unk_24C[0x4]; /* 0x250 */ void* absoluteSpace; // Space used to allocate actor overlays of alloc type ALLOCTYPE_ABSOLUTE /* 0x254 */ struct EnTorch2* elegyShells[5]; // PLAYER_FORM_MAX diff --git a/include/z64save.h b/include/z64save.h index ca0625ad2..fa44ebfe1 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -674,10 +674,10 @@ typedef enum { #define WEEKEVENTREG_14_02 PACK_WEEKEVENTREG_FLAG(14, 0x02) #define WEEKEVENTREG_14_04 PACK_WEEKEVENTREG_FLAG(14, 0x04) #define WEEKEVENTREG_DRANK_CHATEAU_ROMANI PACK_WEEKEVENTREG_FLAG(14, 0x08) -#define WEEKEVENTREG_14_10 PACK_WEEKEVENTREG_FLAG(14, 0x10) -#define WEEKEVENTREG_14_20 PACK_WEEKEVENTREG_FLAG(14, 0x20) -#define WEEKEVENTREG_14_40 PACK_WEEKEVENTREG_FLAG(14, 0x40) -#define WEEKEVENTREG_14_80 PACK_WEEKEVENTREG_FLAG(14, 0x80) +#define WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1 PACK_WEEKEVENTREG_FLAG(14, 0x10) +#define WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2 PACK_WEEKEVENTREG_FLAG(14, 0x20) +#define WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_3 PACK_WEEKEVENTREG_FLAG(14, 0x40) +#define WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE PACK_WEEKEVENTREG_FLAG(14, 0x80) #define WEEKEVENTREG_15_01 PACK_WEEKEVENTREG_FLAG(15, 0x01) #define WEEKEVENTREG_15_02 PACK_WEEKEVENTREG_FLAG(15, 0x02) #define WEEKEVENTREG_15_04 PACK_WEEKEVENTREG_FLAG(15, 0x04) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 843b0eafd..0d72410ad 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -956,33 +956,37 @@ f32 Actor_GetPlayerImpact(PlayState* play, f32 range, Vec3f* pos, PlayerImpactTy } /** - * Initializes an element of the `play->actorCtx.unk_20C` array to the `arg2` pointer, or allocates one using the - * `size` argument in case `arg2` is NULL. This element is associated to an `id` + * Initializes an element of the `play->actorCtx.actorSharedMemory` array to the `ptr` pointer, or allocates one using + * the `size` argument in case `ptr` is NULL. This element is associated to an `id`. * - * In success returns the allocated pointer if `arg2` was NULL or the `arg2` pointer otherwise - * In failure (There's no space left in `play->actorCtx.unk_20C` or an allocation error happened) returns NULL + * This allows allows different actors the ability to access the varible, and thus communicate with each other by + * reading/setting the value. + * + * In success: returns the allocated pointer if `ptr` was NULL or the `ptr` pointer otherwise. + * In failure (There's no space left in `play->actorCtx.actorSharedMemory` or an allocation error happened): returns + * NULL. * * Note there are no duplicated id checks. * * Used only by EnLiftNuts. */ -void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size) { - ActorContext_unk_20C* entry = play->actorCtx.unk_20C; +void* Actor_AddSharedMemoryEntry(PlayState* play, s16 id, void* ptr, size_t size) { + ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory; s32 i; - for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) { + for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) { if (entry->id == 0) { - if (arg2 == NULL) { - arg2 = ZeldaArena_Malloc(size); - if (arg2 == NULL) { + if (ptr == NULL) { + ptr = ZeldaArena_Malloc(size); + if (ptr == NULL) { return NULL; } entry->isDynamicallyInitialised = true; } entry->id = id; - entry->ptr = arg2; - return arg2; + entry->ptr = ptr; + return ptr; } entry++; @@ -992,18 +996,18 @@ void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size) { } /** - * Frees the first element of `play->actorCtx.unk_20C` with id `id`. + * Frees the first element of `play->actorCtx.actorSharedMemory` with id `id`. * * If success, the free'd pointer is returned. * If failure, NULL is returned. * * Used only by EnLiftNuts. */ -void* func_800B6608(PlayState* play, s16 id) { - ActorContext_unk_20C* entry = play->actorCtx.unk_20C; +void* Actor_FreeSharedMemoryEntry(PlayState* play, s16 id) { + ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory; s32 i; - for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) { + for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) { if (id == entry->id) { entry->id = 0; if (entry->isDynamicallyInitialised) { @@ -1020,16 +1024,16 @@ void* func_800B6608(PlayState* play, s16 id) { } /** - * Retrieves the first pointer stored with the id `id`. + * Retrieves the first pointer stored with the id `id` from `play->actorCtx.actorSharedMemory`. * If there's no pointer stored with that id, NULL is returned. * * Used only by EnGamelupy. */ -void* func_800B6680(PlayState* play, s16 id) { - ActorContext_unk_20C* entry = play->actorCtx.unk_20C; +void* Actor_FindSharedMemoryEntry(PlayState* play, s16 id) { + ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory; s32 i; - for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) { + for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) { if (id == entry->id) { return entry->ptr; } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 7e0caa640..41c9fa9da 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -88,7 +88,7 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 11 */ 0, /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10), /* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE), - /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_14_80), + /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE), /* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20), /* 16 */ 0, /* 17 */ 0, 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 a5900670d..4b1114c59 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -63,29 +63,29 @@ static ColliderCylinderInitType1 sCylinderInit = { }; static AnimationInfoS sAnimationInfo[] = { - { &object_dnt_Anim_005488, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00B0B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_004AA0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004E38, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_005CA8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0038CC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004700, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003438, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001E2C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_000994, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_002268, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002F08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00577C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002670, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubRiseUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubExcitedEndAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedPoundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubThinkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubBobAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, }; static u16 D_80BF048C[] = { @@ -1598,7 +1598,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { EnAkindonuts* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dnt_Skel_00AC70, &object_dnt_Anim_005488, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gBusinessScrubSkel, &gBusinessScrubStandingAnim, this->jointTable, this->morphTable, 28); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); @@ -1679,9 +1679,9 @@ s32 EnAkindonuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V if (limbIndex == 26) { if ((this->unk_338 == 6) || (this->unk_338 == 5) || (this->unk_338 == 7)) { - *dList = object_dnt_DL_001350; + *dList = gBusinessScrubEyesWideDL; } else { - *dList = object_dnt_DL_008290; + *dList = gBusinessScrubEyesDL; } } return false; 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 b9936c53c..97567e5f4 100644 --- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c +++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c @@ -16,12 +16,12 @@ void EnGamelupy_Destroy(Actor* thisx, PlayState* play); void EnGamelupy_Update(Actor* thisx, PlayState* play); void EnGamelupy_Draw(Actor* thisx, PlayState* play); -void func_80AF6958(EnGamelupy* this, PlayState* play); -void func_80AF69A8(EnGamelupy* this, PlayState* play); -void func_80AF6A78(EnGamelupy* this, PlayState* play); -void func_80AF6944(EnGamelupy* this); -void func_80AF6994(EnGamelupy* this); -void func_80AF6A38(EnGamelupy* this); +void EnGamelupy_FindSharedMemory(EnGamelupy* this, PlayState* play); +void EnGamelupy_Idle(EnGamelupy* this, PlayState* play); +void EnGamelupy_Collected(EnGamelupy* this, PlayState* play); +void EnGamelupy_SetupFindSharedMemory(EnGamelupy* this); +void EnGamelupy_SetupIdle(EnGamelupy* this); +void EnGamelupy_SetupCollected(EnGamelupy* this); ActorInit En_Gamelupy_InitVars = { ACTOR_EN_GAMELUPY, @@ -74,15 +74,15 @@ void EnGamelupy_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.gravity = -0.5f; this->actor.shape.rot.y = Rand_Next(); - this->unk_19C = 0; - this->unk_19E = 0; - this->unk_1A0 = 0x7D0; - if (this->actor.params == 1) { - this->rupeeIndex = 1; + this->collectedTimer = 0; + this->sparklesAngle = 0; + this->sparklesAngleStep = 0x7D0; + if (EN_GAMELUPY_GET_TYPE(&this->actor) == ENGAMELUPY_TYPE_BLUE) { + this->type = ENGAMELUPY_TYPE_BLUE; } else { - this->rupeeIndex = 0; + this->type = ENGAMELUPY_TYPE_GREEN; } - func_80AF6944(this); + EnGamelupy_SetupFindSharedMemory(this); } void EnGamelupy_Destroy(Actor* thisx, PlayState* play) { @@ -91,77 +91,77 @@ void EnGamelupy_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AF6854(EnGamelupy* this, PlayState* play) { - Vec3f sp4C; - Vec3f sp40; - Vec3f sp30; +void EnGamelupy_SpawnSparkles(EnGamelupy* this, PlayState* play) { + Vec3f pos; + Vec3f accel; + Vec3f velocity; - sp4C = this->actor.world.pos; - sp30.x = Math_SinS(this->unk_19E) * 3.0f; - sp30.y = 5.5f; - sp30.z = Math_CosS(this->unk_19E) * 3.0f; - sp40.x = -0.05f * sp30.x; - sp40.y = -0.4f; - sp40.z = -0.05f * sp30.z; - EffectSsKirakira_SpawnDispersed(play, &sp4C, &sp30, &sp40, &sPrimColor, &sEnvColor, 3000, 40); - this->unk_19E += this->unk_1A0; + pos = this->actor.world.pos; + velocity.x = Math_SinS(this->sparklesAngle) * 3.0f; + velocity.y = 5.5f; + velocity.z = Math_CosS(this->sparklesAngle) * 3.0f; + accel.x = -0.05f * velocity.x; + accel.y = -0.4f; + accel.z = -0.05f * velocity.z; + EffectSsKirakira_SpawnDispersed(play, &pos, &velocity, &accel, &sPrimColor, &sEnvColor, 3000, 40); + this->sparklesAngle += this->sparklesAngleStep; } -void func_80AF6944(EnGamelupy* this) { - this->actionFunc = func_80AF6958; +void EnGamelupy_SetupFindSharedMemory(EnGamelupy* this) { + this->actionFunc = EnGamelupy_FindSharedMemory; } -void func_80AF6958(EnGamelupy* this, PlayState* play) { - s16* unk_198 = func_800B6680(play, ACTOR_EN_GAMELUPY); +void EnGamelupy_FindSharedMemory(EnGamelupy* this, PlayState* play) { + s16* minigameScore = Actor_FindSharedMemoryEntry(play, ACTOR_EN_GAMELUPY); - if (unk_198 != NULL) { - this->unk_198 = unk_198; - func_80AF6994(this); + if (minigameScore != NULL) { + this->minigameScore = minigameScore; + EnGamelupy_SetupIdle(this); } } -void func_80AF6994(EnGamelupy* this) { - this->actionFunc = func_80AF69A8; +void EnGamelupy_SetupIdle(EnGamelupy* this) { + this->actionFunc = EnGamelupy_Idle; } -void func_80AF69A8(EnGamelupy* this, PlayState* play) { +void EnGamelupy_Idle(EnGamelupy* this, PlayState* play) { if (this->collider.base.ocFlags1 & OC1_HIT) { - *this->unk_198 += 50; - if (this->rupeeIndex == 1) { + *this->minigameScore += ENGAMELUPY_POINTS; + if (this->type == ENGAMELUPY_TYPE_BLUE) { Rupees_ChangeBy(5); } else { Rupees_ChangeBy(1); } - func_80AF6A38(this); + EnGamelupy_SetupCollected(this); } this->actor.shape.rot.y += 0x1F4; } -void func_80AF6A38(EnGamelupy* this) { - this->unk_19C = 0; +void EnGamelupy_SetupCollected(EnGamelupy* this) { + this->collectedTimer = 0; this->actor.gravity = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_SY_GET_RUPY); - this->actionFunc = func_80AF6A78; + this->actionFunc = EnGamelupy_Collected; } -void func_80AF6A78(EnGamelupy* this, PlayState* play) { +void EnGamelupy_Collected(EnGamelupy* this, PlayState* play) { f32 scale; Player* player = GET_PLAYER(play); - if (this->unk_19C > 30) { + if (this->collectedTimer > 30) { Actor_Kill(&this->actor); } else { - this->unk_19C++; + this->collectedTimer++; this->actor.world.pos = player->actor.world.pos; this->actor.world.pos.y += 40.0f; - scale = (30.0f - this->unk_19C) * 0.001f; + scale = (30.0f - this->collectedTimer) * 0.001f; Actor_SetScale(&this->actor, scale); - func_80AF6854(this, play); + EnGamelupy_SpawnSparkles(this, play); } this->actor.shape.rot.y += 0x3E8; } -void func_80AF6B40(EnGamelupy* this, PlayState* play) { +void EnGamelupy_UpdateCollision(EnGamelupy* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } @@ -172,7 +172,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, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8); - func_80AF6B40(this, play); + EnGamelupy_UpdateCollision(this, play); } void EnGamelupy_Draw(Actor* thisx, PlayState* play) { @@ -184,7 +184,7 @@ void EnGamelupy_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeTextures[this->rupeeIndex])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeTextures[this->type])); gSPDisplayList(POLY_OPA_DISP++, gRupeeDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h index 5d45f3168..d9e5d2b7d 100644 --- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h +++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h @@ -5,17 +5,27 @@ struct EnGamelupy; +#define ENGAMELUPY_POINTS 50 + typedef void (*EnGamelupyActionFunc)(struct EnGamelupy*, PlayState*); +#define EN_GAMELUPY_GET_TYPE(thisx) ((thisx)->params) + +typedef enum { + /* 0 */ ENGAMELUPY_TYPE_GREEN, + /* 1 */ ENGAMELUPY_TYPE_BLUE, + /* 2 */ ENGAMELUPY_TYPE_MAX +} EnGamelupyType; + typedef struct EnGamelupy { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ EnGamelupyActionFunc actionFunc; - /* 0x194 */ s32 rupeeIndex; - /* 0x198 */ s16* unk_198; - /* 0x19C */ s16 unk_19C; - /* 0x19E */ s16 unk_19E; - /* 0x1A0 */ s16 unk_1A0; + /* 0x194 */ s32 type; + /* 0x198 */ s16* minigameScore; // Pointer to shared memory location with actor EnLiftNuts + /* 0x19C */ s16 collectedTimer; + /* 0x19E */ s16 sparklesAngle; + /* 0x1A0 */ s16 sparklesAngleStep; } EnGamelupy; // size = 0x1A4 #endif // Z_EN_GAMELUPY_H 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 cae3ae6e1..5755d9f9b 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 @@ -5,6 +5,7 @@ */ #include "z_en_lift_nuts.h" +#include "overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) @@ -15,39 +16,38 @@ void EnLiftNuts_Destroy(Actor* thisx, PlayState* play); void EnLiftNuts_Update(Actor* thisx, PlayState* play); void EnLiftNuts_Draw(Actor* thisx, PlayState* play); -void func_80AEA910(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_HandleConversation5(EnLiftNuts* this, PlayState* play); -s32 func_80AE9B8C(void); -void func_80AE9F28(EnLiftNuts* this); -void func_80AE9F70(EnLiftNuts* this, PlayState* play); -void func_80AEA044(EnLiftNuts* this, PlayState* play); -void func_80AEA0B4(EnLiftNuts* this); -void func_80AEA128(EnLiftNuts* this, PlayState* play); -void func_80AEA1A0(EnLiftNuts* this, PlayState* play); -void func_80AEABF0(EnLiftNuts* this); -void func_80AEAC64(EnLiftNuts* this, PlayState* play); -void func_80AEACF8(EnLiftNuts* this, PlayState* play); -void func_80AEAEAC(EnLiftNuts* this); -void func_80AEAF14(EnLiftNuts* this, PlayState* play); -void func_80AEAF8C(EnLiftNuts* this); -void func_80AEAFA0(EnLiftNuts* this, PlayState* play); -void func_80AEB114(EnLiftNuts* this); -void func_80AEB148(EnLiftNuts* this, PlayState* play); -void func_80AEB1C8(EnLiftNuts* this); -void func_80AEB230(EnLiftNuts* this, PlayState* play); -void func_80AEB280(EnLiftNuts* this); -void func_80AEB294(EnLiftNuts* this, PlayState* play); -void func_80AEB3E0(EnLiftNuts* this, PlayState* play); -void func_80AEB428(EnLiftNuts* this, PlayState* play); -void func_80AEB584(EnLiftNuts* this); -void func_80AEB598(EnLiftNuts* this, PlayState* play); -void func_80AEB684(EnLiftNuts* this); -void func_80AEB698(EnLiftNuts* this, PlayState* play); -void func_80AEB828(EnLiftNuts* this); -void func_80AEB8A4(EnLiftNuts* this, PlayState* play); -void func_80AEB934(EnLiftNuts* this, PlayState* play); -void func_80AEB974(EnLiftNuts* this); -void func_80AEB9E0(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupIdleHidden(EnLiftNuts* this); +void EnLiftNuts_IdleHidden(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_Burrow(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupIdle(EnLiftNuts* this); +void EnLiftNuts_RiseUp(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_Idle(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupStartConversation(EnLiftNuts* this); +void EnLiftNuts_StartConversation(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_HandleConversation(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupMove(EnLiftNuts* this); +void EnLiftNuts_Move(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupMovePlayer(EnLiftNuts* this); +void EnLiftNuts_MovePlayer(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupStartGame(EnLiftNuts* this); +void EnLiftNuts_StartGame(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupStartGameImmediately(EnLiftNuts* this); +void EnLiftNuts_StartGameImmediately(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupRunGame(EnLiftNuts* this); +void EnLiftNuts_RunGame(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupEndGame(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_EndGame(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupGiveReward(EnLiftNuts* this); +void EnLiftNuts_GiveReward(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupResumeConversation(EnLiftNuts* this); +void EnLiftNuts_ResumeConversation(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_SetupStartHiding(EnLiftNuts* this); +void EnLiftNuts_StartHiding(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_Hide(EnLiftNuts* this, PlayState* play); +void EnLiftNuts_UpdateEyes(EnLiftNuts* this); +void EnLiftNuts_SpawnDust(EnLiftNuts* this, PlayState* play); ActorInit En_Lift_Nuts_InitVars = { ACTOR_EN_LIFT_NUTS, @@ -61,34 +61,54 @@ ActorInit En_Lift_Nuts_InitVars = { (ActorFunc)EnLiftNuts_Draw, }; -static AnimationInfo sAnimations[] = { - { &object_dnt_Anim_005488, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_00B0B4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_004AA0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_0029E8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_005CA8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_dnt_Anim_0038CC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_003CC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_dnt_Anim_0012F4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_004700, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_001BC8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_003438, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -2.0f }, - { &object_dnt_Anim_001E2C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_000994, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_002268, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_dnt_Anim_002F08, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_00577C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_dnt_Anim_004E38, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_0029E8, 1.0f, 4.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_dnt_Anim_0029E8, 1.0f, 8.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, +typedef enum { + /* 0 */ ENLIFTNUTS_ANIM_STANDING, + /* 1 */ ENLIFTNUTS_ANIM_WALK, + /* 2 */ ENLIFTNUTS_ANIM_RISE_UP, + /* 3 */ ENLIFTNUTS_ANIM_BURROW_LONG, + /* 4 */ ENLIFTNUTS_ANIM_EXCITED_START, + /* 5 */ ENLIFTNUTS_ANIM_EXCITED_LOOP, + /* 6 */ ENLIFTNUTS_ANIM_EXCITED_END, + /* 7 */ ENLIFTNUTS_ANIM_TAKE_OFF_HAT, + /* 8 */ ENLIFTNUTS_ANIM_FLY_START, + /* 9 */ ENLIFTNUTS_ANIM_FLY_LOOP, + /* 10 */ ENLIFTNUTS_ANIM_SHOCKED_START, + /* 11 */ ENLIFTNUTS_ANIM_SHOCKED_SHAKE_HEAD, + /* 12 */ ENLIFTNUTS_ANIM_SHOCKED_POUND, + /* 13 */ ENLIFTNUTS_ANIM_SHOCKED_END, + /* 14 */ ENLIFTNUTS_ANIM_THINK, + /* 15 */ ENLIFTNUTS_ANIM_BOB, + /* 16 */ ENLIFTNUTS_ANIM_JUMP, + /* 17 */ ENLIFTNUTS_ANIM_BURROW_HALF, + /* 18 */ ENLIFTNUTS_ANIM_BURROW_SHORT, + /* 19 */ ENLIFTNUTS_ANIM_MAX +} EnLiftNutsAnimation; + +static AnimationInfo sAnimations[ENLIFTNUTS_ANIM_MAX] = { + { &gBusinessScrubStandingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubWalkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubRiseUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubBurrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubExcitedStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gBusinessScrubExcitedLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubExcitedEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gBusinessScrubTakeOffHatAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubFlyStartAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubShockedStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -2.0f }, + { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubShockedPoundAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubShockedEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gBusinessScrubThinkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubBobAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gBusinessScrubJumpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubBurrowAnim, 1.0f, 4.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gBusinessScrubBurrowAnim, 1.0f, 8.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, }; -Gfx* D_80AEBF18[] = { - object_dnt_DL_008290, - object_dnt_DL_001350, - object_dnt_DL_001420, - NULL, -}; +Gfx* sEyeTextures[] = { gBusinessScrubEyesDL, gBusinessScrubEyesWideDL, gBusinessScrubEyesSquintDL }; + +static s32 sPad = 0; static ColliderCylinderInit sCylinderInit = { { @@ -112,48 +132,54 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -void func_80AE9A20(EnLiftNuts* this, PlayState* play) { - static s16 D_80AEBF60 = 0; - static s32 D_80AEBF64 = false; +void EnLiftNuts_AddSharedMemoryEntry(EnLiftNuts* this, PlayState* play) { + static s16 sMinigameScore = 0; + static s32 sAddedSharedMemory = false; - if (!D_80AEBF64) { - func_800B6584(play, ACTOR_EN_GAMELUPY, &D_80AEBF60, sizeof(s16)); - D_80AEBF64 = true; + if (!sAddedSharedMemory) { + Actor_AddSharedMemoryEntry(play, ACTOR_EN_GAMELUPY, &sMinigameScore, sizeof(s16)); + sAddedSharedMemory = true; } - this->ptr_1EC = &D_80AEBF60; + this->minigameScore = &sMinigameScore; } -void func_80AE9A80(EnLiftNuts* this, PlayState* play) { - static s16 D_80AEBF68 = false; +void EnLiftNuts_FreeSharedMemoryEntry(EnLiftNuts* this, PlayState* play) { + static s16 sFreedSharedMemory = false; - if (!D_80AEBF68) { - func_800B6608(play, ACTOR_EN_GAMELUPY); - D_80AEBF68 = true; + if (!sFreedSharedMemory) { + Actor_FreeSharedMemoryEntry(play, ACTOR_EN_GAMELUPY); + sFreedSharedMemory = true; } } -s32 func_80AE9AC4(EnLiftNuts* this, s32 arg1) { - static s32 D_80AEBF6C = 0; +typedef enum { + /* 0 */ ENLIFTNUTS_AUTOTALK_MODE_CHECK_OFF, + /* 1 */ ENLIFTNUTS_AUTOTALK_MODE_SET_ON, + /* 2 */ ENLIFTNUTS_AUTOTALK_MODE_SET_OFF +} EnLiftNutsAutotalkMode; - switch (arg1) { - case 0: - if (D_80AEBF6C == 0) { +s32 EnLiftNuts_Autotalk(EnLiftNuts* this, EnLiftNutsAutotalkMode mode) { + static s32 sIsAutotalkOn = false; + + switch (mode) { + case ENLIFTNUTS_AUTOTALK_MODE_CHECK_OFF: + if (!sIsAutotalkOn) { return true; } break; - case 1: - if (D_80AEBF6C == 0) { - this->unk_34E = 1; - D_80AEBF6C = 1; + case ENLIFTNUTS_AUTOTALK_MODE_SET_ON: + if (!sIsAutotalkOn) { + this->autotalk = true; + sIsAutotalkOn = true; return true; } break; - case 2: - if (D_80AEBF6C == 1) { - this->unk_34E = 0; - D_80AEBF6C = 0; + case ENLIFTNUTS_AUTOTALK_MODE_SET_OFF: + if (sIsAutotalkOn == true) { + this->autotalk = false; + sIsAutotalkOn = false; return true; } break; @@ -161,60 +187,93 @@ s32 func_80AE9AC4(EnLiftNuts* this, s32 arg1) { default: break; } + return false; } -s32 func_80AE9B4C(s32 arg0, s32 arg1) { - static s32 D_80AEBF70 = 0; +typedef enum { + /* 0 */ ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, + /* 1 */ ENLIFTNUTS_MINIGAME_STATE_MODE_SET +} EnLiftNutsMiniGameStateMode; - if (arg0 == 0) { - if (D_80AEBF70 == arg1) { +typedef enum { + /* 0 */ ENLIFTNUTS_MINIGAME_STATE_NONE, + /* 1 */ ENLIFTNUTS_MINIGAME_STATE_STARTING, + /* 2 */ ENLIFTNUTS_MINIGAME_STATE_RUNNING, + /* 3 */ ENLIFTNUTS_MINIGAME_STATE_AFTER, + /* 4 */ ENLIFTNUTS_MINIGAME_STATE_HIDING +} EnLiftNutsMiniGameState; + +/** + * Will either check or set the current minigame state based on the given mode + * + * @return boolean, based on the mode + * ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK: true if the current minigame state equals the provided state, false otherwise + * ENLIFTNUTS_MINIGAME_STATE_MODE_SET: true if the minigame state was set succesfully to the provided state, false + * otherwise + */ +s32 EnLiftNuts_MinigameState(EnLiftNutsMiniGameStateMode mode, EnLiftNutsMiniGameState state) { + static EnLiftNutsMiniGameState sMinigameState = ENLIFTNUTS_MINIGAME_STATE_NONE; + + if (mode == ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK) { + if (sMinigameState == state) { return true; } - } else if (arg0 == 1) { - D_80AEBF70 = arg1; + } else if (mode == ENLIFTNUTS_MINIGAME_STATE_MODE_SET) { + sMinigameState = state; return true; } return false; } -s32 func_80AE9B8C() { - s32 ret = 0; +s32 EnLiftNuts_GetNumDaysWon(void) { + s32 numDays = 0; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { - ret = 1; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1)) { + numDays++; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20)) { - ret++; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2)) { + numDays++; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { - ret++; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_3)) { + numDays++; } - return ret; + return numDays; } -void func_80AE9BCC(EnLiftNuts* this, PlayState* play) { - if ((this->actionFunc != func_80AEB934) && (this->actionFunc != func_80AEB8A4) && - (this->actionFunc != func_80AEACF8) && (this->actionFunc != func_80AEAC64) && - (this->actionFunc != func_80AEA044) && (this->actionFunc != func_80AEB598) && - (this->actionFunc != func_80AEB698) && !func_80AE9B4C(0, 3) && (func_80AE9B8C() == 3) && - (GET_PLAYER_FORM == PLAYER_FORM_DEKU) && (this->actor.xzDistToPlayer < 150.0f)) { - func_80AEB828(this); +/** + * Will check if the actor should hide, and if so starts hiding. + */ +void EnLiftNuts_TryHide(EnLiftNuts* this, PlayState* play) { + if (((this->actionFunc == EnLiftNuts_Hide) || (this->actionFunc == EnLiftNuts_StartHiding) || + (this->actionFunc == EnLiftNuts_HandleConversation) || (this->actionFunc == EnLiftNuts_StartConversation) || + (this->actionFunc == EnLiftNuts_Burrow) || (this->actionFunc == EnLiftNuts_GiveReward) || + (this->actionFunc == EnLiftNuts_ResumeConversation))) { + return; + } + + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_AFTER)) { + return; + } + + if ((EnLiftNuts_GetNumDaysWon() == 3) && (GET_PLAYER_FORM == PLAYER_FORM_DEKU) && + (this->actor.xzDistToPlayer < 150.0f)) { + EnLiftNuts_SetupStartHiding(this); } } void EnLiftNuts_Init(Actor* thisx, PlayState* play) { + s32 pad; EnLiftNuts* this = THIS; Path* path; - Vec3s* pathPos; - s32 pad; + Vec3s* points; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dnt_Skel_00AC70, &object_dnt_Anim_0029E8, this->jointTable, - this->morphTable, OBJECT_DNT_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gBusinessScrubSkel, &gBusinessScrubBurrowAnim, this->jointTable, + this->morphTable, BUSINESS_SCRUB_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); @@ -228,31 +287,31 @@ void EnLiftNuts_Init(Actor* thisx, PlayState* play) { } } this->actor.targetMode = 0; - this->unk_354 = 0; - this->unk_34E = 0; - this->unk_356 = 0; - this->unk_1E4 = 0; - this->unk_1E8 = 0; + this->timer = 0; + this->autotalk = false; + this->isFirstTimeHiding = false; + this->eyeTexIndex = 0; + this->unk1E8 = 0; this->actor.gravity = -2.0f; - path = &play->setupPathList[ENLIFTNUTS_GET_FF00(&this->actor)]; - pathPos = Lib_SegmentedToVirtual(path->points); - this->vec_1D8.x = pathPos->x; - this->vec_1D8.y = pathPos->y; - this->vec_1D8.z = pathPos->z; - func_80AE9A20(this, play); + path = &play->setupPathList[ENLIFTNUTS_GET_PATH_INDEX(&this->actor)]; + points = Lib_SegmentedToVirtual(path->points); + this->waypointPos.x = points[0].x; + this->waypointPos.y = points[0].y; + this->waypointPos.z = points[0].z; + EnLiftNuts_AddSharedMemoryEntry(this, play); if (!Flags_GetSwitch(play, 0x41)) { - func_80AE9B4C(1, 0); - func_80AE9F28(this); - } else if (func_80AE9AC4(this, 0)) { + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_NONE); + EnLiftNuts_SetupIdleHidden(this); + } else if (EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_CHECK_OFF)) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - func_80AE9AC4(this, 1); - func_80AE9B4C(1, 3); - func_80AEA0B4(this); + EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_SET_ON); + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_AFTER); + EnLiftNuts_SetupIdle(this); } else { - func_80AE9F28(this); + EnLiftNuts_SetupIdleHidden(this); } } @@ -260,77 +319,79 @@ void EnLiftNuts_Destroy(Actor* thisx, PlayState* play) { EnLiftNuts* this = THIS; Collider_DestroyCylinder(play, &this->collider); - func_80AE9A80(this, play); + EnLiftNuts_FreeSharedMemoryEntry(this, play); } -void func_80AE9F28(EnLiftNuts* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 18); - this->actionFunc = func_80AE9F70; - this->unk_354 = 0; +void EnLiftNuts_SetupIdleHidden(EnLiftNuts* this) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BURROW_SHORT); + this->actionFunc = EnLiftNuts_IdleHidden; + this->timer = 0; } -void func_80AE9F70(EnLiftNuts* this, PlayState* play) { - if (this->unk_354 < 40) { - this->unk_354++; +void EnLiftNuts_IdleHidden(EnLiftNuts* this, PlayState* play) { + if (this->timer < 40) { + this->timer++; } else if (this->actor.xzDistToPlayer < 100.0f) { - func_80AEA0B4(this); + EnLiftNuts_SetupIdle(this); } } -void func_80AE9FC8(EnLiftNuts* this) { - if (this->actionFunc == func_80AEA1A0) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 17); +void EnLiftNuts_SetupBurrow(EnLiftNuts* this) { + if (this->actionFunc == EnLiftNuts_Idle) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BURROW_HALF); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BURROW_LONG); } Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); - this->actionFunc = func_80AEA044; + this->actionFunc = EnLiftNuts_Burrow; } -void func_80AEA044(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_Burrow(EnLiftNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80AE9F28(this); + EnLiftNuts_SetupIdleHidden(this); } else if (Animation_OnFrame(&this->skelAnime, 5.0f)) { - func_80AEB9E0(this, play); + EnLiftNuts_SpawnDust(this, play); } } -void func_80AEA0B4(EnLiftNuts* this) { - if (func_80AE9B4C(0, 1)) { - this->actionFunc = func_80AEA1A0; +void EnLiftNuts_SetupIdle(EnLiftNuts* this) { + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_STARTING)) { + this->actionFunc = EnLiftNuts_Idle; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_RISE_UP); Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); - this->actionFunc = func_80AEA128; + this->actionFunc = EnLiftNuts_RiseUp; } } -void func_80AEA128(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_RiseUp(EnLiftNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 15); - this->actionFunc = func_80AEA1A0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BOB); + this->actionFunc = EnLiftNuts_Idle; } else if (Animation_OnFrame(&this->skelAnime, 8.0f)) { - func_80AEB9E0(this, play); + EnLiftNuts_SpawnDust(this, play); } } -void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { - if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && (this->unk_34E == 1)) { +void EnLiftNuts_Idle(EnLiftNuts* this, PlayState* play) { + if ((EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_AFTER) || + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_STARTING)) && + (this->autotalk == true)) { this->actor.flags |= ACTOR_FLAG_10000; } else if (this->actor.xzDistToPlayer > 120.0f) { - func_80AE9FC8(this); + EnLiftNuts_SetupBurrow(this); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (GET_PLAYER_FORM == PLAYER_FORM_DEKU) { - if (func_80AE9B4C(0, 0)) { + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_NONE)) { switch (CURRENT_DAY) { case 1: if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1)) { Message_StartTextbox(play, 0x27D9, &this->actor); this->textId = 0x27D9; } else { @@ -345,13 +406,13 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2)) { Message_StartTextbox(play, 0x27DB, &this->actor); this->textId = 0x27DB; break; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1)) { Message_StartTextbox(play, 0x27DC, &this->actor); this->textId = 0x27DC; } else { @@ -366,13 +427,13 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_3)) { Message_StartTextbox(play, 0x27DE, &this->actor); this->textId = 0x27DE; - } else if (func_80AE9B8C() == 2) { + } else if (EnLiftNuts_GetNumDaysWon() == 2) { Message_StartTextbox(play, 0x27DF, &this->actor); this->textId = 0x27DF; - } else if (func_80AE9B8C() == 1) { + } else if (EnLiftNuts_GetNumDaysWon() == 1) { Message_StartTextbox(play, 0x27E0, &this->actor); this->textId = 0x27E0; } else { @@ -381,13 +442,14 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { } break; } - } else if (func_80AE9B4C(0, 3)) { + } else if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, + ENLIFTNUTS_MINIGAME_STATE_AFTER)) { if (Flags_GetSwitch(play, 0x40)) { Flags_UnsetSwitch(play, 0x40); Inventory_SaveDekuPlaygroundHighScore(4); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && - (CURRENT_DAY == 3)) { - this->unk_354 = 0; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2) && (CURRENT_DAY == 3)) { + this->timer = 0; Message_StartTextbox(play, 0x27F4, &this->actor); this->textId = 0x27F4; } else { @@ -411,7 +473,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { } Flags_UnsetSwitch(play, 0x41); this->actor.flags &= ~ACTOR_FLAG_10000; - } else if (!Flags_GetSwitch(play, 0x42)) { + } else if (!Flags_GetSwitch(play, 0x42)) { // Explain Rules Flags_SetSwitch(play, 0x42); Message_StartTextbox(play, 0x27E6, &this->actor); this->textId = 0x27E6; @@ -440,9 +502,9 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27D8, &this->actor); this->textId = 0x27D8; } - func_80AEABF0(this); - } else if (func_80AE9AC4(this, 0) || (this->unk_34E == 1)) { - if (this->unk_34E == 1) { + EnLiftNuts_SetupStartConversation(this); + } else if (EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_CHECK_OFF) || (this->autotalk == true)) { + if (this->autotalk == true) { func_800B8614(&this->actor, play, 200.0f); } else if (this->actor.playerHeightRel >= -13.0f) { func_800B8614(&this->actor, play, 100.0f); @@ -451,7 +513,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000, 0x500); } -void func_80AEA7A4(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_HandleConversationChoice(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Message_ShouldAdvance(play)) { @@ -465,13 +527,13 @@ void func_80AEA7A4(EnLiftNuts* this, PlayState* play) { Rupees_ChangeBy(-10); } else { Audio_PlaySfx(NA_SE_SY_ERROR); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); Message_StartTextbox(play, 0x27E4, &this->actor); this->textId = 0x27E4; } } else { Audio_PlaySfx_MessageCancel(); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); Message_StartTextbox(play, 0x27E3, &this->actor); this->textId = 0x27E3; } @@ -480,20 +542,21 @@ void func_80AEA7A4(EnLiftNuts* this, PlayState* play) { case 0x238D: if (play->msgCtx.choiceIndex == 0) { // Yes player->stateFlags1 |= PLAYER_STATE1_20; - func_80AEB1C8(this); + EnLiftNuts_SetupStartGameImmediately(this); } else { - func_80AE9FC8(this); + EnLiftNuts_SetupBurrow(this); } break; default: - func_80AE9FC8(this); + EnLiftNuts_SetupBurrow(this); break; } } } -void func_80AEA910(EnLiftNuts* this, PlayState* play) { +// TODO: name based on TEXT_STATE_5 +void EnLiftNuts_HandleConversation5(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Message_ShouldAdvance(play)) { @@ -513,17 +576,17 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { case 0x27E3: case 0x27E4: - func_80AE9FC8(this); + EnLiftNuts_SetupBurrow(this); break; case 0x27E5: Message_CloseTextbox(play); player->stateFlags1 |= PLAYER_STATE1_20; - func_80AEAEAC(this); + EnLiftNuts_SetupMove(this); break; case 0x27E6: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); switch (CURRENT_DAY) { case 1: Message_StartTextbox(play, 0x27E7, &this->actor); @@ -555,19 +618,19 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { case 0x27FA: Message_CloseTextbox(play); player->stateFlags1 &= ~PLAYER_STATE1_20; - func_80AEB114(this); + EnLiftNuts_SetupStartGame(this); break; case 0x27EE: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 0x10); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_JUMP); Message_StartTextbox(play, 0x27EF, &this->actor); this->textId = 0x27EF; break; case 0x27EF: Message_CloseTextbox(play); - func_80AEB584(this); - func_80AEB598(this, play); + EnLiftNuts_SetupGiveReward(this); + EnLiftNuts_GiveReward(this, play); break; case 0x27F1: @@ -576,22 +639,22 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { break; case 0x27F2: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); Message_StartTextbox(play, 0x27F3, &this->actor); this->textId = 0x27F3; break; case 0x27F4: Message_CloseTextbox(play); - func_80AEB584(this); - func_80AEB598(this, play); + EnLiftNuts_SetupGiveReward(this); + EnLiftNuts_GiveReward(this, play); break; case 0x27F5: Message_CloseTextbox(play); - func_80AE9B4C(1, 0); + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_NONE); player->stateFlags1 &= ~PLAYER_STATE1_20; - func_80AE9FC8(this); + EnLiftNuts_SetupBurrow(this); break; case 0x27F9: @@ -605,54 +668,54 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { } } -void func_80AEABF0(EnLiftNuts* this) { - this->unk_354 = 0; +void EnLiftNuts_SetupStartConversation(EnLiftNuts* this) { + this->timer = 0; - if (this->actionFunc != func_80AEB698) { - if (func_80AE9B4C(0, 0)) { + if (this->actionFunc != EnLiftNuts_ResumeConversation) { + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_NONE)) { Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 16); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_JUMP); } - this->actionFunc = func_80AEAC64; + this->actionFunc = EnLiftNuts_StartConversation; } -void func_80AEAC64(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_StartConversation(EnLiftNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { if ((this->textId == 0x27EE) || (this->textId == 0x27F4) || (this->textId == 0x27F5)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 10); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_SHOCKED_START); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_STANDING); } - this->actionFunc = func_80AEACF8; + this->actionFunc = EnLiftNuts_HandleConversation; } } -void func_80AEACF8(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_HandleConversation(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); switch (Message_GetState(&play->msgCtx)) { - case 0: - case 1: - case 2: - case 3: + case TEXT_STATE_NONE: + case TEXT_STATE_1: + case TEXT_STATE_CLOSING: + case TEXT_STATE_3: break; - case 4: - func_80AEA7A4(this, play); + case TEXT_STATE_CHOICE: + EnLiftNuts_HandleConversationChoice(this, play); break; - case 5: - func_80AEA910(this, play); + case TEXT_STATE_5: + EnLiftNuts_HandleConversation5(this, play); break; - case 6: + case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { player->stateFlags1 &= ~PLAYER_STATE1_20; - func_80AE9FC8(this); - func_80AE9AC4(this, 2); - if (func_80AE9B4C(0, 3)) { - func_80AE9B4C(1, 0); + EnLiftNuts_SetupBurrow(this); + EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_SET_OFF); + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_AFTER)) { + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_NONE); } } break; @@ -665,22 +728,22 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->textId) { case 0x27EE: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_SHOCKED_SHAKE_HEAD); break; case 0x27EF: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); break; case 0x27F4: - if (this->unk_354 == 0) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 11); - this->unk_354++; - } else if (this->unk_354 == 4) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 12); - this->unk_354 = 0; + if (this->timer == 0) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_SHOCKED_SHAKE_HEAD); + this->timer++; + } else if (this->timer == 4) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_SHOCKED_POUND); + this->timer = 0; } else { - this->unk_354++; + this->timer++; } break; @@ -688,106 +751,111 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { break; } } - func_80AEB974(this); + EnLiftNuts_UpdateEyes(this); } -void func_80AEAEAC(EnLiftNuts* this) { +void EnLiftNuts_SetupMove(EnLiftNuts* this) { this->actor.speed = 2.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); - func_80AE9AC4(this, 1); - func_80AE9B4C(1, 1); - this->actionFunc = func_80AEAF14; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); + EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_SET_ON); + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_STARTING); + this->actionFunc = EnLiftNuts_Move; } -void func_80AEAF14(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_Move(EnLiftNuts* this, PlayState* play) { f32 dist; Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 10, 0x1000, 0x500); - dist = Math_Vec3f_StepTo(&this->actor.world.pos, &this->vec_1D8, this->actor.speed); + dist = Math_Vec3f_StepTo(&this->actor.world.pos, &this->waypointPos, this->actor.speed); this->actor.world.pos.y += this->actor.gravity; if (dist == 0.0f) { - func_80AEAF8C(this); + EnLiftNuts_SetupMovePlayer(this); } } -void func_80AEAF8C(EnLiftNuts* this) { - this->actionFunc = func_80AEAFA0; +void EnLiftNuts_SetupMovePlayer(EnLiftNuts* this) { + this->actionFunc = EnLiftNuts_MovePlayer; } -void func_80AEAFA0(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_MovePlayer(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 dist; - f32 temp_fv0; + f32 magnitude; + s16 playerYaw; s16 yaw; - s16 sp28; s16 yawDiff; - sp28 = this->actor.yawTowardsPlayer - 0x8000; - yaw = Math_Vec3f_Yaw(&player->actor.world.pos, &this->actor.home.pos); - yawDiff = yaw - sp28; + yaw = this->actor.yawTowardsPlayer - 0x8000; + playerYaw = Math_Vec3f_Yaw(&player->actor.world.pos, &this->actor.home.pos); + yawDiff = playerYaw - yaw; dist = Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos); if (this->actor.xzDistToPlayer < dist) { if (ABS_ALT(yawDiff) < 0x2000) { - yaw = (yawDiff > 0) ? (yaw + 0x2000) : (yaw - 0x2000); + playerYaw = (yawDiff > 0) ? (playerYaw + 0x2000) : (playerYaw - 0x2000); } } + if (dist < 5.0f) { - temp_fv0 = 10.0f; + magnitude = 10.0f; } else if (dist < 30.0f) { - temp_fv0 = 40.0f; + magnitude = 40.0f; } else { - temp_fv0 = 80.0f; + magnitude = 80.0f; } - play->actorCtx.unk268 = 1; - func_800B6F20(play, &play->actorCtx.unk_26C, temp_fv0, yaw); + play->actorCtx.unk268 = true; + func_800B6F20(play, &play->actorCtx.unk_26C, magnitude, playerYaw); + if (dist < 5.0f) { - func_80AEA0B4(this); + EnLiftNuts_SetupIdle(this); } } -void func_80AEB114(EnLiftNuts* this) { +void EnLiftNuts_SetupStartGame(EnLiftNuts* this) { Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME); - this->actionFunc = func_80AEB148; + this->actionFunc = EnLiftNuts_StartGame; } -void func_80AEB148(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_StartGame(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (player->stateFlags3 & PLAYER_STATE3_200) { this->actor.speed = 2.0f; SET_EVENTINF(EVENTINF_34); - Interface_StartTimer(4, 0); - func_80AE9B4C(1, 2); + Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_RUNNING); Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND); - func_80AEB280(this); + EnLiftNuts_SetupRunGame(this); } } -void func_80AEB1C8(EnLiftNuts* this) { +/** + * Does not wait for the player to pop out of the flower to start the minigame. + */ +void EnLiftNuts_SetupStartGameImmediately(EnLiftNuts* this) { this->actor.speed = 2.0f; SET_EVENTINF(EVENTINF_34); - Interface_StartTimer(4, 0); - func_80AE9B4C(1, 2); - this->actionFunc = func_80AEB230; + Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_RUNNING); + this->actionFunc = EnLiftNuts_StartGameImmediately; } -void func_80AEB230(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_StartGameImmediately(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) { player->stateFlags1 &= ~PLAYER_STATE1_20; - func_80AEB280(this); + EnLiftNuts_SetupRunGame(this); } } -void func_80AEB280(EnLiftNuts* this) { - this->actionFunc = func_80AEB294; +void EnLiftNuts_SetupRunGame(EnLiftNuts* this) { + this->actionFunc = EnLiftNuts_RunGame; } -void func_80AEB294(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_RunGame(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.floorBgId == BG_ACTOR_MAX) && @@ -795,10 +863,10 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120))) { player->stateFlags1 |= PLAYER_STATE1_20; Flags_SetSwitch(play, 0x41); - func_80AEB3E0(this, play); + EnLiftNuts_SetupEndGame(this, play); } - if (*this->ptr_1EC == 300) { + if (*this->minigameScore == (ENGAMELUPY_POINTS * 6)) { player->stateFlags1 |= PLAYER_STATE1_20; if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) < @@ -806,33 +874,33 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { Flags_SetSwitch(play, 0x40); } Flags_SetSwitch(play, 0x41); - func_80AEB3E0(this, play); + EnLiftNuts_SetupEndGame(this, play); } } -void func_80AEB3E0(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_SetupEndGame(EnLiftNuts* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_FOUND); - this->unk_354 = 0; + this->timer = 0; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - this->actionFunc = func_80AEB428; + this->actionFunc = EnLiftNuts_EndGame; } -void func_80AEB428(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_EndGame(EnLiftNuts* this, PlayState* play) { s32 pad; - if (this->unk_354 == 10) { + if (this->timer == 10) { if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) > gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { Message_StartTextbox(play, 0x27EA, &this->actor); this->textId = 0x27EA; - } else if (*this->ptr_1EC == 300) { + } else if (*this->minigameScore == (ENGAMELUPY_POINTS * 6)) { Message_StartTextbox(play, 0x27F8, &this->actor); this->textId = 0x27F8; } else { Message_StartTextbox(play, 0x27EC, &this->actor); this->textId = 0x27EC; } - } else if (this->unk_354 == 30) { + } else if (this->timer == 30) { CLEAR_EVENTINF(EVENTINF_34); gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(DEKU_SCRUB_PLAYGROUND, 1); gSaveContext.nextCutsceneIndex = 0; @@ -841,40 +909,45 @@ void func_80AEB428(EnLiftNuts* this, PlayState* play) { play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } - this->unk_354++; + this->timer++; } -void func_80AEB584(EnLiftNuts* this) { - this->actionFunc = func_80AEB598; +void EnLiftNuts_SetupGiveReward(EnLiftNuts* this) { + this->actionFunc = EnLiftNuts_GiveReward; } -void func_80AEB598(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_GiveReward(EnLiftNuts* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) { - SET_WEEKEVENTREG(WEEKEVENTREG_14_80); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2) && (CURRENT_DAY == 3) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE); } - func_80AEB684(this); - } else if ((this->textId == 0x27F4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) { + EnLiftNuts_SetupResumeConversation(this); + } else if ((this->textId == 0x27F4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE)) { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); } } -void func_80AEB684(EnLiftNuts* this) { - this->actionFunc = func_80AEB698; +void EnLiftNuts_SetupResumeConversation(EnLiftNuts* this) { + this->actionFunc = EnLiftNuts_ResumeConversation; } -void func_80AEB698(EnLiftNuts* this, PlayState* play) { +/** + * Resumes the current conversation after giving player the reward for winning the minigame. + */ +void EnLiftNuts_ResumeConversation(EnLiftNuts* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 13); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2) && (CURRENT_DAY == 3)) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_SHOCKED_END); Message_StartTextbox(play, 0x27F5, &this->actor); this->textId = 0x27F5; - } else if (func_80AE9B8C() > 0) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); + } else if (EnLiftNuts_GetNumDaysWon() > 0) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_WALK); Message_StartTextbox(play, 0x27F0, &this->actor); this->textId = 0x27F0; } else { @@ -882,18 +955,18 @@ void func_80AEB698(EnLiftNuts* this, PlayState* play) { this->textId = 0x27F1; } this->actor.flags &= ~ACTOR_FLAG_10000; - func_80AEABF0(this); + EnLiftNuts_SetupStartConversation(this); switch (CURRENT_DAY) { case 1: - SET_WEEKEVENTREG(WEEKEVENTREG_14_10); + SET_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1); break; case 2: - SET_WEEKEVENTREG(WEEKEVENTREG_14_20); + SET_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2); break; case 3: - SET_WEEKEVENTREG(WEEKEVENTREG_14_40); + SET_WEEKEVENTREG(WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_3); break; default: @@ -904,64 +977,63 @@ void func_80AEB698(EnLiftNuts* this, PlayState* play) { } } -void func_80AEB828(EnLiftNuts* this) { - if (!func_80AE9B4C(0, 4)) { - func_80AE9B4C(1, 4); - this->unk_356 = 1; +void EnLiftNuts_SetupStartHiding(EnLiftNuts* this) { + if (!EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_HIDING)) { + EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_SET, ENLIFTNUTS_MINIGAME_STATE_HIDING); + this->isFirstTimeHiding = true; } - if (this->actionFunc == func_80AE9F70) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 15); + if (this->actionFunc == EnLiftNuts_IdleHidden) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BOB); } - this->unk_354 = 0; - this->actionFunc = func_80AEB8A4; + this->timer = 0; + this->actionFunc = EnLiftNuts_StartHiding; } -void func_80AEB8A4(EnLiftNuts* this, PlayState* play) { - if (this->unk_354 == 22) { - if (this->unk_356 == 1) { +void EnLiftNuts_StartHiding(EnLiftNuts* this, PlayState* play) { + if (this->timer == 22) { + if (this->isFirstTimeHiding == true) { Message_StartTextbox(play, 0x27F6, &this->actor); this->textId = 0x27F6; } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 17); - this->actionFunc = func_80AEB934; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, ENLIFTNUTS_ANIM_BURROW_HALF); + this->actionFunc = EnLiftNuts_Hide; } - this->unk_354++; + this->timer++; } -void func_80AEB934(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_Hide(EnLiftNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 5.0f)) { - func_80AEB9E0(this, play); + EnLiftNuts_SpawnDust(this, play); } } -void func_80AEB974(EnLiftNuts* this) { - s16 textId = this->textId; - - switch (textId) { - default: - this->unk_1E4 = 0; - break; - +void EnLiftNuts_UpdateEyes(EnLiftNuts* this) { + switch (this->textId) { case 0x27EE: case 0x27EF: - this->unk_1E4 = 1; + this->eyeTexIndex = 1; break; case 0x27F5: - this->unk_1E4 = 2; + this->eyeTexIndex = 2; break; case 0x27F4: - if (this->unk_354 == 0) { - this->unk_1E4 = 2; - break; + if (this->timer == 0) { + this->eyeTexIndex = 2; + } else { + this->eyeTexIndex = 1; } - this->unk_1E4 = 1; + break; + + default: + this->eyeTexIndex = 0; + break; } } -void func_80AEB9E0(EnLiftNuts* this, PlayState* play) { - Vec3f worldPos = this->actor.world.pos; +void EnLiftNuts_SpawnDust(EnLiftNuts* this, PlayState* play) { + Vec3f pos = this->actor.world.pos; Vec3f velocity; Vec3f accel; Color_RGBA8 primColor = { 170, 130, 90, 255 }; @@ -978,11 +1050,11 @@ void func_80AEB9E0(EnLiftNuts* this, PlayState* play) { accel.x = -0.2f * velocity.x; accel.z = -0.2f * velocity.z; - func_800B0EB0(play, &worldPos, &velocity, &accel, &primColor, &envColor, 80, 25, 10); + func_800B0EB0(play, &pos, &velocity, &accel, &primColor, &envColor, 80, 25, 10); } } -void func_80AEBB30(EnLiftNuts* this, PlayState* play) { +void EnLiftNuts_UpdateCollision(EnLiftNuts* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } @@ -992,35 +1064,37 @@ 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, UPDBGCHECKINFO_FLAG_4); - func_80AE9BCC(this, play); + EnLiftNuts_UpdateCollision(this, play); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); + EnLiftNuts_TryHide(this, play); - if (func_80AE9B4C(0, 2)) { - thisx->flags &= ~ACTOR_FLAG_1; + if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_RUNNING)) { + this->actor.flags &= ~ACTOR_FLAG_1; } } s32 EnLiftNuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnLiftNuts* this = THIS; - if ((limbIndex == OBJECT_DNT_LIMB_0F) || (limbIndex == OBJECT_DNT_LIMB_10) || (limbIndex == OBJECT_DNT_LIMB_15) || - (limbIndex == OBJECT_DNT_LIMB_17) || (limbIndex == OBJECT_DNT_LIMB_18) || (limbIndex == OBJECT_DNT_LIMB_15) || - (limbIndex == OBJECT_DNT_LIMB_1B)) { + if ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_HAT) || (limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || (limbIndex == BUSINESS_SCRUB_LIMB_SCALP) || + (limbIndex == BUSINESS_SCRUB_LIMB_HAIR) || (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_ARM_BAG)) { *dList = NULL; } - if (limbIndex == OBJECT_DNT_LIMB_1A) { - *dList = D_80AEBF18[this->unk_1E4]; + if (limbIndex == BUSINESS_SCRUB_LIMB_EYES) { + *dList = sEyeTextures[this->eyeTexIndex]; } return false; } void EnLiftNuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { static Vec3f sFocusOffset = { 0.0f, 0.0f, 0.0f }; + EnLiftNuts* this = THIS; - if (limbIndex == OBJECT_DNT_LIMB_19) { - Matrix_MultVec3f(&sFocusOffset, &thisx->focus.pos); + if (limbIndex == BUSINESS_SCRUB_LIMB_HAT) { + Matrix_MultVec3f(&sFocusOffset, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h index 9a54132a4..2ee5897bd 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h @@ -8,25 +8,25 @@ struct EnLiftNuts; typedef void (*EnLiftNutsActionFunc)(struct EnLiftNuts*, PlayState*); -#define ENLIFTNUTS_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) +#define ENLIFTNUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) typedef struct EnLiftNuts { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnLiftNutsActionFunc actionFunc; - /* 0x1D8 */ Vec3f vec_1D8; - /* 0x1E4 */ s32 unk_1E4; - /* 0x1E8 */ s32 unk_1E8; - /* 0x1EC */ s16* ptr_1EC; - /* 0x1F0 */ Vec3s jointTable[OBJECT_DNT_LIMB_MAX]; - /* 0x298 */ Vec3s morphTable[OBJECT_DNT_LIMB_MAX]; + /* 0x1D8 */ Vec3f waypointPos; + /* 0x1E4 */ s32 eyeTexIndex; + /* 0x1E8 */ s32 unk1E8; // Set but never used + /* 0x1EC */ s16* minigameScore; // Pointer to shared memory location with actor EnGamelupy + /* 0x1F0 */ Vec3s jointTable[BUSINESS_SCRUB_LIMB_MAX]; + /* 0x298 */ Vec3s morphTable[BUSINESS_SCRUB_LIMB_MAX]; /* 0x340 */ UNK_TYPE1 unk_340[0xC]; /* 0x34C */ s16 textId; - /* 0x34E */ s16 unk_34E; + /* 0x34E */ s16 autotalk; /* 0x350 */ UNK_TYPE1 unk_350[0x4]; - /* 0x354 */ s16 unk_354; - /* 0x356 */ s16 unk_356; + /* 0x354 */ s16 timer; // Frame counter used for various different things + /* 0x356 */ s16 isFirstTimeHiding; } EnLiftNuts; // size = 0x358 #endif // Z_EN_LIFT_NUTS_H 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 0a3eee798..085610542 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -65,29 +65,29 @@ static ColliderCylinderInitType1 sCylinderInit = { }; static AnimationInfoS sAnimationInfo[] = { - { &object_dnt_Anim_005488, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00B0B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_004AA0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004E38, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_005CA8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0038CC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004700, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003438, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001E2C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_000994, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_002268, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002F08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00577C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002670, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubRiseUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubExcitedEndAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedPoundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubThinkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubBobAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, }; Gfx* D_80BCCCDC[] = { gKakeraLeafMiddle, gKakeraLeafTip }; @@ -691,7 +691,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { } Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dnt_Skel_00AC70, &object_dnt_Anim_005488, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gBusinessScrubSkel, &gBusinessScrubStandingAnim, this->jointTable, this->morphTable, 28); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); @@ -794,9 +794,9 @@ s32 EnScopenuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve if (limbIndex == 26) { if ((this->unk_33C == 0x162F) || (this->unk_33C == 0x1630)) { - *dList = object_dnt_DL_001420; + *dList = gBusinessScrubEyesSquintDL; } else { - *dList = object_dnt_DL_008290; + *dList = gBusinessScrubEyesDL; } } 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 21359a0a6..6e54b9be6 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -81,29 +81,29 @@ static ColliderCylinderInitType1 sCylinderInit = { }; static AnimationInfoS sAnimationInfo[] = { - { &object_dnt_Anim_005488, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00B0B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_004AA0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004E38, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_005CA8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0038CC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_004700, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_003438, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001E2C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_000994, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_002268, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002F08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_00577C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_0029E8, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, - { &object_dnt_Anim_0029E8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_001BC8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dnt_Anim_0012F4, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dnt_Anim_002670, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubRiseUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubExcitedLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubExcitedEndAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedPoundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubShockedEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubThinkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubBobAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubBurrowAnim, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gBusinessScrubTakeOffHatAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, }; static InitChainEntry sInitChain[] = { @@ -953,7 +953,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { } Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dnt_Skel_00AC70, &object_dnt_Anim_005488, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gBusinessScrubSkel, &gBusinessScrubStandingAnim, this->jointTable, this->morphTable, 28); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); @@ -1106,9 +1106,9 @@ s32 EnSellnuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec if (limbIndex == 26) { if ((this->unk_34C == 6) || (this->unk_34C == 5) || (this->unk_34C == 7)) { - *dList = object_dnt_DL_001350; + *dList = gBusinessScrubEyesWideDL; } else { - *dList = object_dnt_DL_008290; + *dList = gBusinessScrubEyesDL; } } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 220695b00..9ef37a3e4 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -700,9 +700,9 @@ 0x800B6474:("Actor_UpdatePlayerImpact",), 0x800B648C:("Actor_SetPlayerImpact",), 0x800B64FC:("Actor_GetPlayerImpact",), - 0x800B6584:("func_800B6584",), - 0x800B6608:("func_800B6608",), - 0x800B6680:("func_800B6680",), + 0x800B6584:("Actor_AddSharedMemoryEntry",), + 0x800B6608:("Actor_FreeSharedMemoryEntry",), + 0x800B6680:("Actor_FindSharedMemoryEntry",), 0x800B670C:("Actor_Kill",), 0x800B672C:("Actor_SetWorldToHome",), 0x800B675C:("Actor_SetFocus",), @@ -12504,48 +12504,48 @@ 0x80AE939C:("func_80AE939C",), 0x80AE9574:("ObjBigicicle_Update",), 0x80AE9780:("ObjBigicicle_Draw",), - 0x80AE9A20:("func_80AE9A20",), - 0x80AE9A80:("func_80AE9A80",), - 0x80AE9AC4:("func_80AE9AC4",), - 0x80AE9B4C:("func_80AE9B4C",), - 0x80AE9B8C:("func_80AE9B8C",), - 0x80AE9BCC:("func_80AE9BCC",), + 0x80AE9A20:("EnLiftNuts_AddSharedMemoryEntry",), + 0x80AE9A80:("EnLiftNuts_FreeSharedMemoryEntry",), + 0x80AE9AC4:("EnLiftNuts_Autotalk",), + 0x80AE9B4C:("EnLiftNuts_GameState",), + 0x80AE9B8C:("EnLiftNuts_GetNumDaysWon",), + 0x80AE9BCC:("EnLiftNuts_TryHide",), 0x80AE9CA8:("EnLiftNuts_Init",), 0x80AE9EEC:("EnLiftNuts_Destroy",), - 0x80AE9F28:("func_80AE9F28",), - 0x80AE9F70:("func_80AE9F70",), - 0x80AE9FC8:("func_80AE9FC8",), - 0x80AEA044:("func_80AEA044",), - 0x80AEA0B4:("func_80AEA0B4",), - 0x80AEA128:("func_80AEA128",), - 0x80AEA1A0:("func_80AEA1A0",), - 0x80AEA7A4:("func_80AEA7A4",), - 0x80AEA910:("func_80AEA910",), - 0x80AEABF0:("func_80AEABF0",), - 0x80AEAC64:("func_80AEAC64",), - 0x80AEACF8:("func_80AEACF8",), - 0x80AEAEAC:("func_80AEAEAC",), - 0x80AEAF14:("func_80AEAF14",), - 0x80AEAF8C:("func_80AEAF8C",), - 0x80AEAFA0:("func_80AEAFA0",), - 0x80AEB114:("func_80AEB114",), - 0x80AEB148:("func_80AEB148",), - 0x80AEB1C8:("func_80AEB1C8",), - 0x80AEB230:("func_80AEB230",), - 0x80AEB280:("func_80AEB280",), - 0x80AEB294:("func_80AEB294",), - 0x80AEB3E0:("func_80AEB3E0",), - 0x80AEB428:("func_80AEB428",), - 0x80AEB584:("func_80AEB584",), - 0x80AEB598:("func_80AEB598",), - 0x80AEB684:("func_80AEB684",), - 0x80AEB698:("func_80AEB698",), - 0x80AEB828:("func_80AEB828",), - 0x80AEB8A4:("func_80AEB8A4",), - 0x80AEB934:("func_80AEB934",), - 0x80AEB974:("func_80AEB974",), - 0x80AEB9E0:("func_80AEB9E0",), - 0x80AEBB30:("func_80AEBB30",), + 0x80AE9F28:("EnLiftNuts_SetupIdleHidden",), + 0x80AE9F70:("EnLiftNuts_IdleHidden",), + 0x80AE9FC8:("EnLiftNuts_SetupBurrow",), + 0x80AEA044:("EnLiftNuts_Burrow",), + 0x80AEA0B4:("EnLiftNuts_SetupIdle",), + 0x80AEA128:("EnLiftNuts_RiseUp",), + 0x80AEA1A0:("EnLiftNuts_Idle",), + 0x80AEA7A4:("EnLiftNuts_HandleConversationChoice",), + 0x80AEA910:("EnLiftNuts_HandleConversation5",), + 0x80AEABF0:("EnLiftNuts_SetupStartConversation",), + 0x80AEAC64:("EnLiftNuts_StartConversation",), + 0x80AEACF8:("EnLiftNuts_HandleConversation",), + 0x80AEAEAC:("EnLiftNuts_SetupMove",), + 0x80AEAF14:("EnLiftNuts_Move",), + 0x80AEAF8C:("EnLiftNuts_SetupMovePlayer",), + 0x80AEAFA0:("EnLiftNuts_MovePlayer",), + 0x80AEB114:("EnLiftNuts_SetupStartGame",), + 0x80AEB148:("EnLiftNuts_StartGame",), + 0x80AEB1C8:("EnLiftNuts_SetupStartGameImmediately",), + 0x80AEB230:("EnLiftNuts_StartGameImmediately",), + 0x80AEB280:("EnLiftNuts_SetupRunGame",), + 0x80AEB294:("EnLiftNuts_RunGame",), + 0x80AEB3E0:("EnLiftNuts_SetupEndGame",), + 0x80AEB428:("EnLiftNuts_EndGame",), + 0x80AEB584:("EnLiftNuts_SetupGiveReward",), + 0x80AEB598:("EnLiftNuts_GiveReward",), + 0x80AEB684:("EnLiftNuts_SetupResumeConversation",), + 0x80AEB698:("EnLiftNuts_ResumeConversation",), + 0x80AEB828:("EnLiftNuts_SetupStartHiding",), + 0x80AEB8A4:("EnLiftNuts_StartHiding",), + 0x80AEB934:("EnLiftNuts_Hide",), + 0x80AEB974:("EnLiftNuts_UpdateEyes",), + 0x80AEB9E0:("EnLiftNuts_SpawnDust",), + 0x80AEBB30:("EnLiftNuts_UpdateCollision",), 0x80AEBB74:("EnLiftNuts_Update",), 0x80AEBC18:("func_80AEBC18",), 0x80AEBC90:("func_80AEBC90",), @@ -12699,14 +12699,14 @@ 0x80AF6094:("EnWdhand_Draw",), 0x80AF6760:("EnGamelupy_Init",), 0x80AF6828:("EnGamelupy_Destroy",), - 0x80AF6854:("func_80AF6854",), - 0x80AF6944:("func_80AF6944",), - 0x80AF6958:("func_80AF6958",), - 0x80AF6994:("func_80AF6994",), - 0x80AF69A8:("func_80AF69A8",), - 0x80AF6A38:("func_80AF6A38",), - 0x80AF6A78:("func_80AF6A78",), - 0x80AF6B40:("func_80AF6B40",), + 0x80AF6854:("EnGamelupy_SpawnSparkles",), + 0x80AF6944:("EnGamelupy_SetupFindSharedMemory",), + 0x80AF6958:("EnGamelupy_FindSharedMemory",), + 0x80AF6994:("EnGamelupy_SetupIdle",), + 0x80AF69A8:("EnGamelupy_Idle",), + 0x80AF6A38:("EnGamelupy_SetupCollected",), + 0x80AF6A78:("EnGamelupy_Collected",), + 0x80AF6B40:("EnGamelupy_UpdateCollision",), 0x80AF6B84:("EnGamelupy_Update",), 0x80AF6BF8:("EnGamelupy_Draw",), 0x80AF6DE0:("func_80AF6DE0",), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index fb3d05207..25d7f3b61 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -214,9 +214,9 @@ asm/non_matchings/code/z_actor/Actor_InitPlayerImpact.s,Actor_InitPlayerImpact,0 asm/non_matchings/code/z_actor/Actor_UpdatePlayerImpact.s,Actor_UpdatePlayerImpact,0x800B6474,0x6 asm/non_matchings/code/z_actor/Actor_SetPlayerImpact.s,Actor_SetPlayerImpact,0x800B648C,0x1C asm/non_matchings/code/z_actor/Actor_GetPlayerImpact.s,Actor_GetPlayerImpact,0x800B64FC,0x22 -asm/non_matchings/code/z_actor/func_800B6584.s,func_800B6584,0x800B6584,0x21 -asm/non_matchings/code/z_actor/func_800B6608.s,func_800B6608,0x800B6608,0x1E -asm/non_matchings/code/z_actor/func_800B6680.s,func_800B6680,0x800B6680,0x23 +asm/non_matchings/code/z_actor/Actor_AddSharedMemoryEntry.s,func_800B6584,0x800B6584,0x21 +asm/non_matchings/code/z_actor/Actor_FreeSharedMemoryEntry.s,func_800B6608,0x800B6608,0x1E +asm/non_matchings/code/z_actor/Actor_FindSharedMemoryEntry.s,func_800B6680,0x800B6680,0x23 asm/non_matchings/code/z_actor/Actor_Kill.s,Actor_Kill,0x800B670C,0x8 asm/non_matchings/code/z_actor/Actor_SetWorldToHome.s,Actor_SetWorldToHome,0x800B672C,0xC asm/non_matchings/code/z_actor/Actor_SetFocus.s,Actor_SetFocus,0x800B675C,0x11 diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 45faf5f0e..b724b1f21 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -120,10 +120,10 @@ weekEventReg = { (14 << 8) | 0x02: "WEEKEVENTREG_14_02", (14 << 8) | 0x04: "WEEKEVENTREG_14_04", (14 << 8) | 0x08: "WEEKEVENTREG_DRANK_CHATEAU_ROMANI", - (14 << 8) | 0x10: "WEEKEVENTREG_14_10", - (14 << 8) | 0x20: "WEEKEVENTREG_14_20", - (14 << 8) | 0x40: "WEEKEVENTREG_14_40", - (14 << 8) | 0x80: "WEEKEVENTREG_14_80", + (14 << 8) | 0x10: "WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_1", + (14 << 8) | 0x20: "WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_2", + (14 << 8) | 0x40: "WEEKEVENTREG_WON_DEKU_PLAYGROUND_DAY_3", + (14 << 8) | 0x80: "WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE", (15 << 8) | 0x01: "WEEKEVENTREG_15_01", (15 << 8) | 0x02: "WEEKEVENTREG_15_02", (15 << 8) | 0x04: "WEEKEVENTREG_15_04", From e7f3921414d6d6c71aed92006f9bc8a1a9329789 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 13 Jul 2023 12:08:56 +1000 Subject: [PATCH 034/121] Animation Cleanup Part 2: En_A* Actors (#1322) * en_A * more cleanup * more cleanup * another one * more cleanup * Suggestion * Oops --- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 104 +++--- src/overlays/actors/ovl_En_Ah/z_en_ah.h | 9 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 279 ++++++++++++----- .../ovl_En_Akindonuts/z_en_akindonuts.h | 7 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 115 ++++--- src/overlays/actors/ovl_En_Al/z_en_al.h | 15 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 17 +- src/overlays/actors/ovl_En_And/z_en_and.c | 57 ++-- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 45 +-- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 5 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.h | 3 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 295 ++++++++++++------ src/overlays/actors/ovl_En_Az/z_en_az.h | 5 +- tools/disasm/functions.txt | 8 +- 14 files changed, 633 insertions(+), 331 deletions(-) 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 0a8df4f40..b199d9716 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -81,12 +81,22 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_ah_Anim_002280, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_ah_Anim_000968, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ ENAH_ANIM_NONE = -1, + /* 0 */ ENAH_ANIM_0, + /* 1 */ ENAH_ANIM_1, + /* 2 */ ENAH_ANIM_2, + /* 3 */ ENAH_ANIM_3, + /* 4 */ ENAH_ANIM_4, + /* 5 */ ENAH_ANIM_MAX +} EnAhAnimation; + +static AnimationInfoS sAnimationInfo[ENAH_ANIM_MAX] = { + { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAH_ANIM_0 + { &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAH_ANIM_1 + { &object_ah_Anim_002280, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAH_ANIM_2 + { &object_ah_Anim_000968, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAH_ANIM_3 + { &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAH_ANIM_4 }; s16 D_80BD3EBC[] = { 0, 0, 1, 0 }; @@ -127,29 +137,30 @@ Actor* func_80BD2A30(EnAh* this, PlayState* play, u8 actorCat, s16 actorId) { return foundActor; } -void func_80BD2AE0(EnAh* this) { - this->skelAnime.playSpeed = this->unk_2DC; +void EnAh_UpdateSkelAnime(EnAh* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BD2B0C(EnAh* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnAh_ChangeAnim(EnAh* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg1 == 0) || (arg1 == 1)) { - if ((this->unk_300 != 0) && (this->unk_300 != 1)) { - phi_v1 = true; + if ((animIndex == ENAH_ANIM_0) || (animIndex == ENAH_ANIM_1)) { + if ((this->animIndex != ENAH_ANIM_0) && (this->animIndex != ENAH_ANIM_1)) { + changeAnim = true; } - } else if (arg1 != this->unk_300) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { - this->unk_300 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_2DC = this->skelAnime.playSpeed; + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + + return didAnimChange; } void func_80BD2BA4(EnAh* this, PlayState* play) { @@ -185,6 +196,9 @@ void func_80BD2C6C(EnAh* this) { this->unk_2FA = 4; } break; + + default: + break; } if (!phi_a3 && (this->unk_2FA == 4)) { @@ -283,11 +297,14 @@ void func_80BD2FD0(EnAh* this, PlayState* play) { s32 func_80BD30C0(EnAh* this, PlayState* play) { switch (this->unk_1DC) { case 1: - func_80BD2B0C(this, 0); + EnAh_ChangeAnim(this, ENAH_ANIM_0); break; case 2: - func_80BD2B0C(this, 4); + EnAh_ChangeAnim(this, ENAH_ANIM_4); + break; + + default: break; } return false; @@ -295,10 +312,10 @@ s32 func_80BD30C0(EnAh* this, PlayState* play) { void func_80BD3118(EnAh* this, PlayState* play) { if (this->unk_2FE == 0) { - func_80BD2B0C(this, 2); + EnAh_ChangeAnim(this, ENAH_ANIM_2); this->unk_2FE++; } else if ((this->unk_2FE == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80BD2B0C(this, 3); + EnAh_ChangeAnim(this, ENAH_ANIM_3); this->unk_2FE++; } } @@ -324,6 +341,9 @@ s32 func_80BD3198(EnAh* this, PlayState* play) { this->unk_2F6 = 2; this->unk_2F8 = 8; break; + + default: + break; } } this->unk_2DA = temp; @@ -360,6 +380,9 @@ s32* func_80BD3294(EnAh* this, PlayState* play) { case 2: return D_80BD3DF8; + + default: + break; } return NULL; } @@ -382,9 +405,10 @@ s32 func_80BD3374(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80BD3EC4.pos); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BD3EC4.rot); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - func_80BD2B0C(this, 0); + EnAh_ChangeAnim(this, ENAH_ANIM_0); SubS_UpdateFlags(&this->unk_2D8, 3, 7); this->unk_2D8 |= 0x40; + return true; } @@ -394,9 +418,10 @@ s32 func_80BD33FC(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80BD3ED8.pos); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BD3ED8.rot); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - func_80BD2B0C(this, 4); + EnAh_ChangeAnim(this, ENAH_ANIM_4); SubS_UpdateFlags(&this->unk_2D8, 3, 7); this->unk_2D8 |= (0x40 | 0x10); + return true; } @@ -409,7 +434,7 @@ s32 func_80BD3484(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80BD3EEC.rot); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); } - func_80BD2B0C(this, 4); + EnAh_ChangeAnim(this, ENAH_ANIM_4); this->unk_2D8 |= (0x40 | 0x8); this->unk_2D8 |= 0x10; this->unk_2D8 |= 0x80; @@ -425,10 +450,6 @@ s32 func_80BD3548(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_2D8 = 0; switch (scheduleOutput->result) { - default: - ret = false; - break; - case 1: ret = func_80BD3374(this, play, scheduleOutput); break; @@ -440,6 +461,10 @@ s32 func_80BD3548(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 3: ret = func_80BD3484(this, play, scheduleOutput); break; + + default: + ret = false; + break; } return ret; } @@ -517,9 +542,10 @@ void EnAh_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->jointTable, this->morphTable, 17); - this->unk_300 = -1; - func_80BD2B0C(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->jointTable, this->morphTable, + OBJECT_AH_LIMB_MAX); + this->animIndex = ENAH_ANIM_NONE; + EnAh_ChangeAnim(this, ENAH_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->actor.targetMode = 6; @@ -548,7 +574,7 @@ void EnAh_Update(Actor* thisx, PlayState* play) { if (this->unk_1DC != 0) { func_80BD3198(this, play); - func_80BD2AE0(this); + EnAh_UpdateSkelAnime(this); func_80BD2C6C(this); func_80BD2FD0(this, play); radius = this->collider.dim.radius + 60; @@ -566,7 +592,7 @@ void EnAh_Update(Actor* thisx, PlayState* play) { void EnAh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnAh* this = THIS; - if (limbIndex == 7) { + if (limbIndex == OBJECT_AH_LIMB_07) { Matrix_MultVec3f(&D_80BD3F00, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } @@ -589,7 +615,7 @@ void EnAh_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == 7) { + if (limbIndex == OBJECT_AH_LIMB_07) { SubS_UpdateLimb(BINANG_ADD(this->unk_2EC + this->unk_2F0, 0x4000), BINANG_ADD(this->unk_2EE + this->unk_2F2 + this->actor.shape.rot.y, 0x4000), this->unk_1E8, this->unk_200, stepRot, overrideRot); @@ -600,7 +626,7 @@ void EnAh_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_200[0].x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_200[0].z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == 2) { + } else if (limbIndex == OBJECT_AH_LIMB_02) { SubS_UpdateLimb(BINANG_ADD(this->unk_2F0, 0x4000), BINANG_ADD(this->unk_2F2 + this->actor.shape.rot.y, 0x4000), &this->unk_1E8[1], &this->unk_200[1], stepRot, overrideRot); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.h b/src/overlays/actors/ovl_En_Ah/z_en_ah.h index d361a8358..d03e01199 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.h +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.h @@ -2,6 +2,7 @@ #define Z_EN_AH_H #include "global.h" +#include "objects/object_ah/object_ah.h" struct EnAh; @@ -19,11 +20,11 @@ typedef struct EnAh { /* 0x1E4 */ Actor* unk_1E4; /* 0x1E8 */ Vec3f unk_1E8[2]; /* 0x200 */ Vec3s unk_200[2]; - /* 0x20C */ Vec3s jointTable[17]; - /* 0x272 */ Vec3s morphTable[17]; + /* 0x20C */ Vec3s jointTable[OBJECT_AH_LIMB_MAX]; + /* 0x272 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX]; /* 0x2D8 */ u16 unk_2D8; /* 0x2DA */ u16 unk_2DA; - /* 0x2DC */ f32 unk_2DC; + /* 0x2DC */ f32 animPlaySpeed; /* 0x2E0 */ UNK_TYPE1 unk2E0[0xC]; /* 0x2EC */ s16 unk_2EC; /* 0x2EE */ s16 unk_2EE; @@ -35,7 +36,7 @@ typedef struct EnAh { /* 0x2FA */ s16 unk_2FA; /* 0x2FC */ s16 unk_2FC; /* 0x2FE */ s16 unk_2FE; - /* 0x300 */ s32 unk_300; + /* 0x300 */ s32 animIndex; } EnAh; // size = 0x304 #endif // Z_EN_AH_H 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 4b1114c59..15787c39e 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -62,30 +62,58 @@ static ColliderCylinderInitType1 sCylinderInit = { { 27, 32, 0, { 0, 0, 0 } }, }; -static AnimationInfoS sAnimationInfo[] = { - { &gBusinessScrubStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubRiseUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubExcitedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubExcitedLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubExcitedEndAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubTakeOffHatAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubFlyStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubShockedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubShockedPoundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubShockedEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubThinkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubBobAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gBusinessScrubBurrowAnim, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubBurrowAnim, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, - { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBusinessScrubTakeOffHatAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +typedef enum { + /* -1 */ ENAKINDONUTS_ANIM_NONE = -1, + /* 0x00 */ ENAKINDONUTS_ANIM_0, + /* 0x01 */ ENAKINDONUTS_ANIM_1, + /* 0x02 */ ENAKINDONUTS_ANIM_2, + /* 0x03 */ ENAKINDONUTS_ANIM_3, + /* 0x04 */ ENAKINDONUTS_ANIM_4, + /* 0x05 */ ENAKINDONUTS_ANIM_5, + /* 0x06 */ ENAKINDONUTS_ANIM_6, + /* 0x07 */ ENAKINDONUTS_ANIM_7, + /* 0x08 */ ENAKINDONUTS_ANIM_8, + /* 0x09 */ ENAKINDONUTS_ANIM_9, + /* 0x0A */ ENAKINDONUTS_ANIM_10, + /* 0x0B */ ENAKINDONUTS_ANIM_11, + /* 0x0C */ ENAKINDONUTS_ANIM_12, + /* 0x0D */ ENAKINDONUTS_ANIM_13, + /* 0x0E */ ENAKINDONUTS_ANIM_14, + /* 0x0F */ ENAKINDONUTS_ANIM_15, + /* 0x10 */ ENAKINDONUTS_ANIM_16, + /* 0x11 */ ENAKINDONUTS_ANIM_17, + /* 0x12 */ ENAKINDONUTS_ANIM_18, + /* 0x13 */ ENAKINDONUTS_ANIM_19, + /* 0x14 */ ENAKINDONUTS_ANIM_20, + /* 0x15 */ ENAKINDONUTS_ANIM_21, + /* 0x16 */ ENAKINDONUTS_ANIM_22, + /* 0x17 */ ENAKINDONUTS_ANIM_MAX +} EnAkindonutsAnimation; + +static AnimationInfoS sAnimationInfo[ENAKINDONUTS_ANIM_MAX] = { + { &gBusinessScrubStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_0 + { &gBusinessScrubWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_1 + { &gBusinessScrubRiseUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_2 + { &gBusinessScrubJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_3 + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_4 + { &gBusinessScrubExcitedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_5 + { &gBusinessScrubExcitedLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_6 + { &gBusinessScrubExcitedEndAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_7 + { &gBusinessScrubTakeOffHatAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_8 + { &gBusinessScrubFlyStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_9 + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_10 + { &gBusinessScrubShockedStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_11 + { &gBusinessScrubShockedShakeHeadAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_12 + { &gBusinessScrubShockedPoundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_13 + { &gBusinessScrubShockedEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_14 + { &gBusinessScrubThinkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_15 + { &gBusinessScrubBobAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAKINDONUTS_ANIM_16 + { &gBusinessScrubBurrowAnim, 1.0f, 8, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_17 + { &gBusinessScrubBurrowAnim, 1.0f, 4, -1, ANIMMODE_ONCE, -4 }, // ENAKINDONUTS_ANIM_18 + { &gBusinessScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_19 + { &gBusinessScrubFlyLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAKINDONUTS_ANIM_20 + { &gBusinessScrubTakeOffHatAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_21 + { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAKINDONUTS_ANIM_22 }; static u16 D_80BF048C[] = { @@ -434,6 +462,9 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -457,6 +488,9 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -517,6 +551,9 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -528,6 +565,9 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -541,10 +581,13 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { if (player->transformation == PLAYER_FORM_DEKU) { this->unk_33C = 0x15F4; break; - } else if (player->transformation == PLAYER_FORM_GORON) { + } + + if (player->transformation == PLAYER_FORM_GORON) { this->unk_33C = 0x15FE; break; } + this->unk_33C = 0x15FC; break; @@ -612,6 +655,9 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -634,6 +680,9 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -695,6 +744,9 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -706,6 +758,9 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -719,10 +774,13 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { if (player->transformation == PLAYER_FORM_GORON) { this->unk_33C = 0x1607; break; - } else if (player->transformation == PLAYER_FORM_ZORA) { + } + + if (player->transformation == PLAYER_FORM_ZORA) { this->unk_33C = 0x1610; break; } + this->unk_33C = 0x160E; break; @@ -785,6 +843,9 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -807,6 +868,9 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -863,6 +927,9 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x161A; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -874,6 +941,9 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { case 0x161A: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -946,6 +1016,9 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x1629; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -968,6 +1041,9 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { case 0x1629: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -1024,6 +1100,9 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; return; + + default: + break; } } else if (this->unk_32C & 0x10) { this->unk_32C &= ~0x10; @@ -1035,6 +1114,9 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { case 0x15EF: this->unk_32C |= 1; break; + + default: + break; } Message_StartTextbox(play, this->unk_33C, &this->actor); @@ -1153,12 +1235,15 @@ void func_80BEE938(EnAkindonuts* this, PlayState* play) { this->unk_2DC = func_80BEE274; } break; + + default: + break; } } void func_80BEEB20(EnAkindonuts* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 sp24 = Animation_GetLastFrame(&sAnimationInfo[this->unk_338].animation->common); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(&sAnimationInfo[this->animIndex].animation->common); s16 phi_v0; Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xE38); @@ -1179,39 +1264,39 @@ void func_80BEEB20(EnAkindonuts* this, PlayState* play) { if (phi_v0) { Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); this->actionFunc = func_80BEEDC0; - this->unk_338 = 3; + this->animIndex = ENAKINDONUTS_ANIM_3; this->collider.dim.height = 64; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 3); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_3); return; } } - if (sp26 == sp24) { - if ((this->unk_338 == 4) || (this->unk_338 == 18)) { - this->unk_338 = 17; + if (curFrame == endFrame) { + if ((this->animIndex == ENAKINDONUTS_ANIM_4) || (this->animIndex == ENAKINDONUTS_ANIM_18)) { + this->animIndex = ENAKINDONUTS_ANIM_17; this->collider.dim.height = 0; Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17); - } else if (this->unk_338 == 2) { - this->unk_338 = 16; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_17); + } else if (this->animIndex == ENAKINDONUTS_ANIM_2) { + this->animIndex = ENAKINDONUTS_ANIM_16; this->collider.dim.height = 32; Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 16); - } else if (this->unk_338 == 17) { + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_16); + } else if (this->animIndex == ENAKINDONUTS_ANIM_17) { phi_v0 = DECR(this->unk_33A); if (phi_v0 == 0) { this->unk_33A = Rand_ZeroOne() * 10.0f; - this->unk_338 = 2; + this->animIndex = ENAKINDONUTS_ANIM_2; this->collider.dim.height = 32; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 2); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_2); } - } else if (this->unk_338 == 16) { + } else if (this->animIndex == ENAKINDONUTS_ANIM_16) { phi_v0 = DECR(this->unk_33A); if (phi_v0 == 0) { this->unk_33A = Rand_S16Offset(40, 40); - this->unk_338 = 18; + this->animIndex = ENAKINDONUTS_ANIM_18; this->collider.dim.height = 32; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 18); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_18); } } } @@ -1220,7 +1305,7 @@ void func_80BEEB20(EnAkindonuts* this, PlayState* play) { void func_80BEEDC0(EnAkindonuts* this, PlayState* play) { if (this->skelAnime.curFrame == this->skelAnime.endFrame) { this->actionFunc = func_80BEEE10; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_0); } } @@ -1237,8 +1322,8 @@ void func_80BEEE10(EnAkindonuts* this, PlayState* play) { func_800B8614(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { - this->unk_338 = 4; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = ENAKINDONUTS_ANIM_4; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_4); this->actionFunc = func_80BEEB20; } } @@ -1260,9 +1345,9 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->unk_32C &= ~0x4; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->unk_338 = 8; + this->animIndex = ENAKINDONUTS_ANIM_8; this->unk_33C = 0; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = func_80BEF518; } else { this->unk_2DC(this, play); @@ -1281,6 +1366,9 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->unk_32C |= 0x10; this->unk_2DC(this, play); break; + + default: + break; } } } else if (talkState == TEXT_STATE_16) { @@ -1299,19 +1387,19 @@ void func_80BEF18C(EnAkindonuts* this, PlayState* play) { void func_80BEF20C(EnAkindonuts* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - s16 sp24 = this->skelAnime.curFrame; - s16 sp22 = Animation_GetLastFrame(&sAnimationInfo[this->unk_338].animation->common); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(&sAnimationInfo[this->animIndex].animation->common); if (this->unk_356 == 40) { - this->unk_338 = 5; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 5); + this->animIndex = ENAKINDONUTS_ANIM_5; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_5); } this->unk_356++; - if ((sp24 == sp22) && (this->unk_338 == 5)) { - this->unk_338 = 6; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 6); + if ((curFrame == endFrame) && (this->animIndex == ENAKINDONUTS_ANIM_5)) { + this->animIndex = ENAKINDONUTS_ANIM_6; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_6); } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -1361,10 +1449,10 @@ void func_80BEF4B8(EnAkindonuts* this, PlayState* play) { } void func_80BEF518(EnAkindonuts* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 sp24 = Animation_GetLastFrame(&sAnimationInfo[this->unk_338].animation->common); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(&sAnimationInfo[this->animIndex].animation->common); - switch (sp26) { + switch (curFrame) { case 10: this->unk_33E = 1; this->unk_340 = 0.1f; @@ -1418,6 +1506,9 @@ void func_80BEF518(EnAkindonuts* this, PlayState* play) { case 24: this->unk_344 = 1.0f; break; + + default: + break; } if (this->unk_35E == 0) { @@ -1433,10 +1524,10 @@ void func_80BEF518(EnAkindonuts* this, PlayState* play) { } } - if (sp26 == sp24) { + if (curFrame == endFrame) { this->unk_33E = 3; - this->unk_338 = 19; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338); + this->animIndex = ENAKINDONUTS_ANIM_19; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN); this->unk_32C &= ~2; this->unk_32C |= 0x80; @@ -1468,10 +1559,10 @@ void func_80BEF770(EnAkindonuts* this, PlayState* play) { void func_80BEF83C(EnAkindonuts* this, PlayState* play) { Vec3f sp34; - s16 sp32 = this->skelAnime.curFrame; - s16 sp30 = Animation_GetLastFrame(&sAnimationInfo[this->unk_338].animation->common); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(&sAnimationInfo[this->animIndex].animation->common); - if (sp32 == sp30) { + if (curFrame == endFrame) { Math_SmoothStepToS(&this->unk_362, 0x1C71, 3, 0x100, 0); this->unk_352 += this->unk_362; this->actor.shape.yOffset = 1500.0f; @@ -1494,8 +1585,8 @@ void func_80BEF83C(EnAkindonuts* this, PlayState* play) { } if ((this->actor.home.pos.y + 22.5f) < this->actor.world.pos.y) { this->unk_34C = 0.3f; - this->unk_338 = 9; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338); + this->animIndex = ENAKINDONUTS_ANIM_9; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); this->actionFunc = func_80BEF9F0; } @@ -1513,8 +1604,8 @@ void func_80BEF9F0(EnAkindonuts* this, PlayState* play) { if ((this->actor.home.pos.y + 200.0f) < this->actor.world.pos.y) { Math_ApproachF(&this->actor.velocity.y, 0.0f, 0.2f, 1.0f); - this->unk_338 = 10; - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338); + this->animIndex = ENAKINDONUTS_ANIM_10; + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); if (ENAKINDONUTS_GET_3(&this->actor) == ENAKINDONUTS_3_2) { this->unk_32C |= 0x2; } @@ -1599,7 +1690,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); SkelAnime_InitFlex(play, &this->skelAnime, &gBusinessScrubSkel, &gBusinessScrubStandingAnim, this->jointTable, - this->morphTable, 28); + this->morphTable, BUSINESS_SCRUB_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); @@ -1617,10 +1708,10 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { } } - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 4); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENAKINDONUTS_ANIM_4); this->unk_32C |= 0x2; this->unk_32C |= 0x4; - this->unk_338 = 4; + this->animIndex = ENAKINDONUTS_ANIM_4; this->csId = this->actor.csId; func_80BEE938(this, play); this->actionFunc = func_80BEEB20; @@ -1650,35 +1741,48 @@ void EnAkindonuts_Update(Actor* thisx, PlayState* play) { s32 EnAkindonuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnAkindonuts* this = THIS; - if (((this->unk_338 == 4) && (this->unk_33E == 0)) || ((this->unk_338 == 8) && (this->unk_33E == 0)) || - (this->unk_338 == 18) || (this->unk_338 == 2) || (this->unk_338 == 3) || (this->unk_338 == 17) || - (this->unk_338 == 5) || (this->unk_338 == 6) || (this->unk_338 == 7) || (this->unk_338 == 16)) { - if ((limbIndex == 16) || (limbIndex == 21) || (limbIndex == 27) || (limbIndex == 23) || (limbIndex == 24) || - (limbIndex == 15)) { + if (((this->animIndex == ENAKINDONUTS_ANIM_4) && (this->unk_33E == 0)) || + ((this->animIndex == ENAKINDONUTS_ANIM_8) && (this->unk_33E == 0)) || + (this->animIndex == ENAKINDONUTS_ANIM_18) || (this->animIndex == ENAKINDONUTS_ANIM_2) || + (this->animIndex == ENAKINDONUTS_ANIM_3) || (this->animIndex == ENAKINDONUTS_ANIM_17) || + (this->animIndex == ENAKINDONUTS_ANIM_5) || (this->animIndex == ENAKINDONUTS_ANIM_6) || + (this->animIndex == ENAKINDONUTS_ANIM_7) || (this->animIndex == ENAKINDONUTS_ANIM_16)) { + if ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_BAG) || (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_ARM_BAG) || (limbIndex == BUSINESS_SCRUB_LIMB_SCALP) || + (limbIndex == BUSINESS_SCRUB_LIMB_HAIR) || (limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_HAT)) { *dList = NULL; } - } else if ((this->unk_338 == 8) || (this->unk_338 == 19)) { + } else if ((this->animIndex == ENAKINDONUTS_ANIM_8) || (this->animIndex == ENAKINDONUTS_ANIM_19)) { switch (this->unk_33E) { case 1: - if ((limbIndex == 16) || (limbIndex == 21) || (limbIndex == 27) || (limbIndex == 25)) { + if ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_ARM_BAG) || (limbIndex == BUSINESS_SCRUB_LIMB_HAT)) { *dList = NULL; } break; case 2: case 3: - if ((limbIndex == 16) || (limbIndex == 21) || (limbIndex == 27) || (limbIndex == 15) || - (limbIndex == 25)) { + if ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_ARM_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_HAT) || (limbIndex == BUSINESS_SCRUB_LIMB_HAT)) { *dList = NULL; } break; + + default: + break; } - } else if (((this->unk_338 == 9) || (this->unk_338 == 10)) && ((limbIndex == 15) || (limbIndex == 25))) { + } else if (((this->animIndex == ENAKINDONUTS_ANIM_9) || (this->animIndex == ENAKINDONUTS_ANIM_10)) && + ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_HAT) || (limbIndex == BUSINESS_SCRUB_LIMB_HAT))) { *dList = NULL; } - if (limbIndex == 26) { - if ((this->unk_338 == 6) || (this->unk_338 == 5) || (this->unk_338 == 7)) { + if (limbIndex == BUSINESS_SCRUB_LIMB_EYES) { + if ((this->animIndex == ENAKINDONUTS_ANIM_6) || (this->animIndex == ENAKINDONUTS_ANIM_5) || + (this->animIndex == ENAKINDONUTS_ANIM_7)) { *dList = gBusinessScrubEyesWideDL; } else { *dList = gBusinessScrubEyesDL; @@ -1693,15 +1797,18 @@ void EnAkindonuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 void EnAkindonuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { EnAkindonuts* this = THIS; - if (((this->unk_33E == 1) || (this->unk_33E == 2)) && ((limbIndex == 23) || (limbIndex == 24))) { + if (((this->unk_33E == 1) || (this->unk_33E == 2)) && + ((limbIndex == BUSINESS_SCRUB_LIMB_SCALP) || (limbIndex == BUSINESS_SCRUB_LIMB_HAIR))) { Matrix_Scale(this->unk_340, this->unk_344, this->unk_348, MTXMODE_APPLY); } - if ((this->unk_338 == 9) && ((limbIndex == 16) || (limbIndex == 21) || (limbIndex == 27))) { + if ((this->animIndex == ENAKINDONUTS_ANIM_9) && + ((limbIndex == BUSINESS_SCRUB_LIMB_RIGHT_HAND_BAG) || (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_HAND_BAG) || + (limbIndex == BUSINESS_SCRUB_LIMB_LEFT_ARM_BAG))) { Matrix_Scale(this->unk_34C, this->unk_34C, this->unk_34C, MTXMODE_APPLY); } - if (limbIndex == 24) { + if (limbIndex == BUSINESS_SCRUB_LIMB_HAIR) { Matrix_RotateYS(this->unk_352, MTXMODE_APPLY); } } diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 680fdbb75..09df4fca3 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -2,6 +2,7 @@ #define Z_EN_AKINDONUTS_H #include "global.h" +#include "objects/object_dnt/object_dnt.h" struct EnAkindonuts; @@ -22,15 +23,15 @@ typedef enum { typedef struct EnAkindonuts { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[28]; - /* 0x230 */ Vec3s morphTable[28]; + /* 0x188 */ Vec3s jointTable[BUSINESS_SCRUB_LIMB_MAX]; + /* 0x230 */ Vec3s morphTable[BUSINESS_SCRUB_LIMB_MAX]; /* 0x2D8 */ EnAkindonutsActionFunc actionFunc; /* 0x2DC */ EnAkindonutsUnkFunc unk_2DC; /* 0x2E0 */ ColliderCylinder collider; /* 0x32C */ u16 unk_32C; /* 0x330 */ Path* path; /* 0x334 */ s32 unk_334; - /* 0x338 */ s16 unk_338; + /* 0x338 */ s16 animIndex; /* 0x33A */ s16 unk_33A; /* 0x33C */ u16 unk_33C; /* 0x33E */ s16 unk_33E; diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 2568d6617..02a2004a4 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -5,7 +5,6 @@ */ #include "z_en_al.h" -#include "objects/object_al/object_al.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -119,11 +118,28 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_al_Anim_000C54, 1.0f, 0, -1, 0, -4 }, { &object_al_Anim_00DBE0, 1.0f, 0, -1, 0, 0 }, - { &object_al_Anim_00DBE0, 1.0f, 0, -1, 0, -4 }, { &object_al_Anim_00ACA0, 1.0f, 0, -1, 2, 0 }, - { &object_al_Anim_00ACA0, -1.0f, 0, -1, 2, 0 }, { &object_al_Anim_00CA28, 1.0f, 0, -1, 0, -4 }, - { &object_al_Anim_00BCA4, 1.0f, 0, -1, 2, 0 }, { &object_al_Anim_00A764, 1.0f, 0, -1, 0, -4 }, +typedef enum { + /* -1 */ ENAL_ANIM_NONE = -1, + /* 0 */ ENAL_ANIM_0, + /* 1 */ ENAL_ANIM_1, + /* 2 */ ENAL_ANIM_2, + /* 3 */ ENAL_ANIM_3, + /* 4 */ ENAL_ANIM_4, + /* 5 */ ENAL_ANIM_5, + /* 6 */ ENAL_ANIM_6, + /* 7 */ ENAL_ANIM_7, + /* 8 */ ENAL_ANIM_MAX +} EnAlAnimation; + +static AnimationInfoS sAnimationInfo[ENAL_ANIM_MAX] = { + { &object_al_Anim_000C54, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAL_ANIM_0 + { &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAL_ANIM_1 + { &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAL_ANIM_2 + { &object_al_Anim_00ACA0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAL_ANIM_3 + { &object_al_Anim_00ACA0, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAL_ANIM_4 + { &object_al_Anim_00CA28, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAL_ANIM_5 + { &object_al_Anim_00BCA4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAL_ANIM_6 + { &object_al_Anim_00A764, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENAL_ANIM_7 }; Vec3f D_80BE0070 = { 1000.0f, 0.0f, 0.0f }; @@ -159,30 +175,30 @@ Actor* func_80BDE1A0(EnAl* this, PlayState* play, u8 arg0, s16 arg1) { return foundActor; } -void func_80BDE250(EnAl* this) { - this->skelAnime.playSpeed = this->unk_4C8; +void EnAl_UpdateSkelAnime(EnAl* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BDE27C(EnAl* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnAl_ChangeAnim(EnAl* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg1 == 1) || (arg1 == 2)) { - if ((this->unk_4F8 != 1) && (this->unk_4F8 != 2)) { - phi_v1 = true; + if ((animIndex == ENAL_ANIM_1) || (animIndex == ENAL_ANIM_2)) { + if ((this->animIndex != ENAL_ANIM_1) && (this->animIndex != ENAL_ANIM_2)) { + changeAnim = true; } - } else if (arg1 != this->unk_4F8) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { - this->unk_4F8 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_4C8 = this->skelAnime.playSpeed; + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + return didAnimChange; } void func_80BDE318(EnAl* this, PlayState* play) { @@ -258,7 +274,7 @@ s32 func_80BDE4E0(EnAl* this, s16* arg1, s16 arg2) { if (arg2 == *arg1) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_80BDE27C(this, 3); + EnAl_ChangeAnim(this, ENAL_ANIM_3); this->unk_4E8 = 0; (*arg1)++; } @@ -272,7 +288,7 @@ s32 func_80BDE4E0(EnAl* this, s16* arg1, s16 arg2) { if ((temp != (this->actor.world.rot.y / 364)) && (this->unk_4E8 < 20)) { Math_ApproachS(&this->actor.world.rot.y, sp42, 3, 0x2AA8); } else { - func_80BDE27C(this, 5); + EnAl_ChangeAnim(this, ENAL_ANIM_5); this->actor.world.rot.y = sp42; this->unk_4E8 = 0; (*arg1)++; @@ -293,7 +309,7 @@ s32 func_80BDE678(EnAl* this, s16* arg1, s16 arg2) { if (arg2 == *arg1) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_80BDE27C(this, 4); + EnAl_ChangeAnim(this, ENAL_ANIM_4); this->unk_4E8 = 0; (*arg1)++; } @@ -305,7 +321,7 @@ s32 func_80BDE678(EnAl* this, s16* arg1, s16 arg2) { if ((temp != (this->actor.world.rot.y / 364)) && (this->unk_4E8 < 20)) { Math_ApproachS(&this->actor.world.rot.y, sp22, 3, 0x2AA8); } else { - func_80BDE27C(this, 2); + EnAl_ChangeAnim(this, ENAL_ANIM_2); this->actor.world.rot.y = sp22; this->unk_4E8 = 0; (*arg1)++; @@ -353,6 +369,9 @@ s32 func_80BDE7FC(EnAl* this, PlayState* play) { this->unk_4E6++; sp20 = true; break; + + default: + break; } return sp20; } @@ -424,6 +443,9 @@ s32 func_80BDEA14(EnAl* this, PlayState* play) { sp18 = true; } break; + + default: + break; } return sp18; } @@ -470,8 +492,10 @@ s32* func_80BDEABC(EnAl* this, PlayState* play) { return D_80BDFF24; } return D_80BDFDF8; + + default: + return NULL; } - return NULL; } s32 func_80BDEC2C(EnAl* this, PlayState* play) { @@ -548,12 +572,12 @@ void func_80BDEE5C(EnAl* this) { void func_80BDEF3C(EnAl* this, PlayState* play) { if (this->unk_4E4 == 0) { - func_80BDE27C(this, 7); + EnAl_ChangeAnim(this, ENAL_ANIM_7); this->unk_4C2 &= ~0x20; this->unk_4C2 |= 0x200; this->unk_4E4++; } else if ((this->unk_4E4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80BDE27C(this, 0); + EnAl_ChangeAnim(this, ENAL_ANIM_0); this->unk_4C2 &= ~0x200; this->unk_4C2 |= 0x20; this->unk_4E4++; @@ -562,10 +586,10 @@ void func_80BDEF3C(EnAl* this, PlayState* play) { void func_80BDEFE4(EnAl* this, PlayState* play) { if (this->unk_4E4 == 0) { - func_80BDE27C(this, 6); + EnAl_ChangeAnim(this, ENAL_ANIM_6); this->unk_4E4 += 1; } else if ((this->unk_4E4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80BDE27C(this, 5); + EnAl_ChangeAnim(this, ENAL_ANIM_5); this->unk_4E4 += 1; } } @@ -619,7 +643,10 @@ s32 func_80BDF064(EnAl* this, PlayState* play) { case 0x2B19: case 0x2B20: case 0x2B3C: - func_80BDE27C(this, 5); + EnAl_ChangeAnim(this, ENAL_ANIM_5); + break; + + default: break; } } @@ -642,7 +669,7 @@ s32 func_80BDF244(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { Actor* temp_v0 = func_80BDE1A0(this, play, ACTORCAT_NPC, ACTOR_EN_TOTO); if ((sp20 != NULL) && (sp20->update != NULL) && (temp_v0 != NULL) && (temp_v0->update != NULL)) { - func_80BDE27C(this, 0); + EnAl_ChangeAnim(this, ENAL_ANIM_0); SubS_UpdateFlags(&this->unk_4C2, 3, 7); this->unk_368 = sp20; this->unk_4C2 |= 0x20; @@ -656,13 +683,16 @@ s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { switch (scheduleOutput->result) { case 1: - func_80BDE27C(this, 0); + EnAl_ChangeAnim(this, ENAL_ANIM_0); break; case 2: this->unk_4F0 = PLAYER_IA_NONE; this->unk_4EA = 0; - func_80BDE27C(this, 2); + EnAl_ChangeAnim(this, ENAL_ANIM_2); + break; + + default: break; } return true; @@ -741,6 +771,9 @@ void func_80BDF578(EnAl* this, PlayState* play) { case 2: func_80BDF414(this, play); break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); @@ -784,8 +817,8 @@ void EnAl_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gMadameAromaSkel, NULL, this->jointTable, this->morphTable, MADAME_AROMA_LIMB_MAX); - this->unk_4F8 = -1; - func_80BDE27C(this, 1); + this->animIndex = ENAL_ANIM_NONE; + EnAl_ChangeAnim(this, ENAL_ANIM_1); Collider_InitAndSetCylinder(play, &this->unk_310, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); @@ -811,7 +844,7 @@ void EnAl_Update(Actor* thisx, PlayState* play) { func_80BDF064(this, play); if (this->unk_35C != 0) { - func_80BDE250(this); + EnAl_UpdateSkelAnime(this); func_80BDEE5C(this); func_8013C964(&this->actor, play, this->unk_4D4, 30.0f, this->unk_4F0, this->unk_4C2 & 7); func_80BDE318(this, play); @@ -831,6 +864,9 @@ s32 EnAl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po case MADAME_AROMA_LIMB_HEAD: break; + + default: + break; } return false; } @@ -867,6 +903,9 @@ void EnAl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_MultVec3f(&D_80BE0070, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); break; + + default: + break; } } @@ -887,7 +926,7 @@ void EnAl_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { stepRot = false; } - if (limbIndex == 16) { + if (limbIndex == MADAME_AROMA_LIMB_HEAD) { SubS_UpdateLimb(this->unk_4DC + 0x4000, this->unk_4DE + this->actor.shape.rot.y + 0x4000, &this->unk_36C, &this->unk_378, stepRot, overrideRot); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.h b/src/overlays/actors/ovl_En_Al/z_en_al.h index 77e1011bf..de6390287 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.h +++ b/src/overlays/actors/ovl_En_Al/z_en_al.h @@ -2,6 +2,7 @@ #define Z_EN_AL_H #include "global.h" +#include "objects/object_al/object_al.h" struct EnAl; @@ -22,14 +23,14 @@ typedef struct EnAl { /* 0x368 */ Actor* unk_368; /* 0x36C */ Vec3f unk_36C; /* 0x378 */ Vec3s unk_378; - /* 0x37E */ Vec3s jointTable[27]; - /* 0x420 */ Vec3s morphTable[27]; + /* 0x37E */ Vec3s jointTable[MADAME_AROMA_LIMB_MAX]; + /* 0x420 */ Vec3s morphTable[MADAME_AROMA_LIMB_MAX]; /* 0x4C2 */ u16 unk_4C2; /* 0x4C4 */ u16 unk_4C4; - /* 0x4C8 */ f32 unk_4C8; - /* 0x4CC */ UNK_TYPE1 unk4CC[8]; + /* 0x4C8 */ f32 animPlaySpeed; + /* 0x4CC */ UNK_TYPE1 unk4CC[0x8]; /* 0x4D4 */ f32 unk_4D4; - /* 0x4D8 */ UNK_TYPE1 unk4D8[4]; + /* 0x4D8 */ UNK_TYPE1 unk4D8[0x4]; /* 0x4DC */ s16 unk_4DC; /* 0x4DE */ s16 unk_4DE; /* 0x4E0 */ s16 unk_4E0; @@ -41,8 +42,8 @@ typedef struct EnAl { /* 0x4EC */ EnAlUnkFunc unk_4EC; /* 0x4F0 */ s32 unk_4F0; /* 0x4F4 */ s32 unk_4F4; - /* 0x4F8 */ s32 unk_4F8; - /* 0x4FC */ UNK_TYPE1 unk4FC[4]; + /* 0x4F8 */ s32 animIndex; + /* 0x4FC */ UNK_TYPE1 unk4FC[0x4]; } EnAl; // size = 0x500 #endif // Z_EN_AL_H 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 a5b3f91d6..c36b8a34a 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -203,9 +203,9 @@ void EnAm_SpawnEffects(EnAm* this, PlayState* play) { } void func_808AFF9C(EnAm* this) { - f32 lastFrame = Animation_GetLastFrame(&gArmosPushedBackAnim); + f32 endFrame = Animation_GetLastFrame(&gArmosPushedBackAnim); - Animation_Change(&this->skelAnime, &gArmosPushedBackAnim, 0.0f, lastFrame, lastFrame, ANIMMODE_LOOP, 0.0f); + Animation_Change(&this->skelAnime, &gArmosPushedBackAnim, 0.0f, endFrame, endFrame, ANIMMODE_LOOP, 0.0f); this->enemyCollider.info.bumper.dmgFlags = 0x80000088; this->interactCollider.info.bumper.dmgFlags = 0x77CFFF77; if (this->actor.colChkInfo.health != 0) { @@ -379,8 +379,9 @@ void func_808B066C(EnAm* this, PlayState* play) { } void EnAm_TakeDamage(EnAm* this, PlayState* play) { - Animation_Change(&this->skelAnime, &gArmosTakeDamageAnim, 1.0f, 4.0f, - Animation_GetLastFrame(&gArmosTakeDamageAnim) - 6, ANIMMODE_ONCE, 0.0f); + f32 endFrame = Animation_GetLastFrame(&gArmosTakeDamageAnim) - 6; + + Animation_Change(&this->skelAnime, &gArmosTakeDamageAnim, 1.0f, 4.0f, endFrame, ANIMMODE_ONCE, 0.0f); func_800BE504(&this->actor, &this->enemyCollider); this->actor.speed = 6.0f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, @@ -539,16 +540,16 @@ void EnAm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, phi_s2 = 0; phi_s1 = 0; - if (limbIndex == 4) { + if (limbIndex == OBJECT_AM_LIMB_04) { phi_s2 = &this->limbPos[0]; phi_s1 = D_808B1128; phi_s3 = 5; - } else if (limbIndex == 13) { + } else if (limbIndex == OBJECT_AM_LIMB_0D) { phi_s2 = &this->limbPos[9]; phi_s1 = D_808B117C; phi_s3 = 4; - } else if ((limbIndex == 7) || (limbIndex == 10)) { - phi_s2 = (limbIndex == 7) ? &this->limbPos[5] : &this->limbPos[7]; + } else if ((limbIndex == OBJECT_AM_LIMB_07) || (limbIndex == OBJECT_AM_LIMB_0A)) { + phi_s2 = (limbIndex == OBJECT_AM_LIMB_07) ? &this->limbPos[5] : &this->limbPos[7]; phi_s1 = D_808B1164; phi_s3 = 2; } else { diff --git a/src/overlays/actors/ovl_En_And/z_en_and.c b/src/overlays/actors/ovl_En_And/z_en_and.c index d3c9adcec..8c450a8ac 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -29,25 +29,38 @@ ActorInit En_And_InitVars = { (ActorFunc)EnAnd_Draw, }; -static AnimationInfoS sAnimationInfo[] = { - { &gAndStaticAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gAndIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gAndWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gAndRaiseHeadAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gAndRaisedHeadLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gAndRaiseHandAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gAndRaisedHandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gAndRaisedHandWalkAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +typedef enum { + /* -1 */ ENAND_ANIM_NONE = -1, + /* 0 */ ENAND_ANIM_0, + /* 1 */ ENAND_ANIM_1, + /* 2 */ ENAND_ANIM_2, + /* 3 */ ENAND_ANIM_3, + /* 4 */ ENAND_ANIM_4, + /* 5 */ ENAND_ANIM_5, + /* 6 */ ENAND_ANIM_6, + /* 7 */ ENAND_ANIM_7, + /* 8 */ ENAND_ANIM_MAX +} EnAndAnimation; + +static AnimationInfoS sAnimationInfo[ENAND_ANIM_MAX] = { + { &gAndStaticAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAND_ANIM_0 + { &gAndIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAND_ANIM_1 + { &gAndWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAND_ANIM_2 + { &gAndRaiseHeadAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAND_ANIM_3 + { &gAndRaisedHeadLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAND_ANIM_4 + { &gAndRaiseHandAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAND_ANIM_5 + { &gAndRaisedHandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAND_ANIM_6 + { &gAndRaisedHandWalkAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAND_ANIM_7 }; s32 EnAnd_ChangeAnim(EnAnd* this, s32 animIndex) { - s32 ret = false; + s32 didAnimChange = false; if (this->animIndex != animIndex) { this->animIndex = animIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void EnAnd_Blink(EnAnd* this) { @@ -61,8 +74,10 @@ void EnAnd_Blink(EnAnd* this) { } void EnAnd_HandleCutscene(EnAnd* this, PlayState* play) { - s32 csAnimations[] = { 0, 1, 2, 3, 5, 7 }; - u16 cueType; + s32 csAnimIndex[] = { + ENAND_ANIM_0, ENAND_ANIM_1, ENAND_ANIM_2, ENAND_ANIM_3, ENAND_ANIM_5, ENAND_ANIM_7, + }; + u16 cueId; s32 cueChannel; if (play->csCtx.state != CS_STATE_IDLE) { @@ -74,15 +89,15 @@ void EnAnd_HandleCutscene(EnAnd* this, PlayState* play) { } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_565)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_565); - cueType = play->csCtx.actorCues[cueChannel]->id; - if (this->cueId != (u8)cueType) { - this->cueId = cueType; - EnAnd_ChangeAnim(this, csAnimations[cueType]); + cueId = play->csCtx.actorCues[cueChannel]->id; + if (this->cueId != (u8)cueId) { + this->cueId = cueId; + EnAnd_ChangeAnim(this, csAnimIndex[cueId]); } switch (this->cueId) { case 3: case 4: - if ((this->animIndex == 3) || (this->animIndex == 5)) { + if ((this->animIndex == ENAND_ANIM_3) || (this->animIndex == ENAND_ANIM_5)) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnAnd_ChangeAnim(this, this->animIndex + 1); } @@ -106,8 +121,8 @@ void EnAnd_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gAndSkel, NULL, this->jointTable, this->morphTable, OBJECT_AND_LIMB_MAX); - this->animIndex = -1; - EnAnd_ChangeAnim(this, 0); + this->animIndex = ENAND_ANIM_NONE; + EnAnd_ChangeAnim(this, ENAND_ANIM_0); Actor_SetScale(&this->actor, 0.01f); this->actor.flags &= ~ACTOR_FLAG_1; this->flags |= 8; 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 4ba8d07cd..47372da43 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 @@ -45,12 +45,13 @@ ActorInit En_Aob_01_InitVars = { }; typedef enum { - /* 0 */ EN_AOB01_ANIM_IDLE_1, + /* 0 */ EN_AOB01_ANIM_IDLE, /* 1 */ EN_AOB01_ANIM_LAUGH_START, /* 2 */ EN_AOB01_ANIM_LAUGH_LOOP, /* 3 */ EN_AOB01_ANIM_SURPRISE_START, /* 4 */ EN_AOB01_ANIM_SURPRISE_LOOP, - /* 5 */ EN_AOB01_ANIM_IDLE_2 + /* 5 */ EN_AOB01_ANIM_IDLE_MORPH, + /* 6 */ EN_AOB01_ANIM_MAX } EnAob01Animation; typedef enum { @@ -60,13 +61,13 @@ typedef enum { /* 3 */ EN_AOB01_EYE_MAX } EnAob01EyeTexture; -static AnimationInfo sAnimationInfo[] = { - { &gMamamuYanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gMamamuYanLaughStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gMamamuYanLaughLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gMamamuYanSurpriseStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gMamamuYanSurpriseLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gMamamuYanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, +static AnimationInfo sAnimationInfo[EN_AOB01_ANIM_MAX] = { + { &gMamamuYanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // EN_AOB01_ANIM_IDLE + { &gMamamuYanLaughStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // EN_AOB01_ANIM_LAUGH_START + { &gMamamuYanLaughLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // EN_AOB01_ANIM_LAUGH_LOOP + { &gMamamuYanSurpriseStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // EN_AOB01_ANIM_SURPRISE_START + { &gMamamuYanSurpriseLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // EN_AOB01_ANIM_SURPRISE_LOOP + { &gMamamuYanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // EN_AOB01_ANIM_IDLE_MORPH }; static ColliderCylinderInit sCylinderInit = { @@ -182,10 +183,10 @@ void EnAob01_SpawnRacedogs(EnAob01* this, PlayState* play) { */ s32 EnAob01_ProcessLaughAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->animIndex == EN_AOB01_ANIM_LAUGH_START) { - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->animIndex = EN_AOB01_ANIM_LAUGH_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_LAUGH_LOOP); return true; @@ -206,16 +207,16 @@ s32 EnAob01_ProcessLaughAnim(EnAob01* this) { */ s32 EnAob01_ProcessSurpriseAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((this->animIndex == EN_AOB01_ANIM_IDLE_1) || (this->animIndex == EN_AOB01_ANIM_IDLE_2)) { - if (curFrame == lastFrame) { + if ((this->animIndex == EN_AOB01_ANIM_IDLE) || (this->animIndex == EN_AOB01_ANIM_IDLE_MORPH)) { + if (curFrame == endFrame) { this->animIndex = EN_AOB01_ANIM_SURPRISE_START; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_SURPRISE_START); return true; } } else if (this->animIndex == EN_AOB01_ANIM_SURPRISE_START) { - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->animIndex = EN_AOB01_ANIM_SURPRISE_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_SURPRISE_LOOP); return true; @@ -234,12 +235,12 @@ s32 EnAob01_ProcessSurpriseAnim(EnAob01* this) { */ s32 EnAob01_ProcessIdleAnim(EnAob01* this) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((this->animIndex != EN_AOB01_ANIM_IDLE_1) && (this->animIndex != EN_AOB01_ANIM_IDLE_2)) { - if (curFrame == lastFrame) { - this->animIndex = EN_AOB01_ANIM_IDLE_2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE_2); + if ((this->animIndex != EN_AOB01_ANIM_IDLE) && (this->animIndex != EN_AOB01_ANIM_IDLE_MORPH)) { + if (curFrame == endFrame) { + this->animIndex = EN_AOB01_ANIM_IDLE_MORPH; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE_MORPH); return true; } } else { @@ -1105,8 +1106,8 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { MAMAMU_YAN_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->animIndex = EN_AOB01_ANIM_IDLE_1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE_1); + this->animIndex = EN_AOB01_ANIM_IDLE; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_AOB01_ANIM_IDLE); Actor_SetScale(&this->actor, 0.01f); switch (GET_EVENTINF_DOG_RACE_STATE) { 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 eb9662f89..304dc3a3e 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -85,7 +85,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { if (ARROW_IS_ARROW(this->actor.params)) { SkelAnime_Init(play, &this->arrow.skelAnime, &gameplay_keep_Skel_014560, &gameplay_keep_Anim_0128BC, - this->arrow.jointTable, this->arrow.jointTable, 5); + this->arrow.jointTable, this->arrow.jointTable, ARROW_LIMB_MAX); if (this->actor.params < ARROW_TYPE_FIRE) { if (this->actor.params == ARROW_TYPE_NORMAL_HORSE) { D_8088C234.elemDuration = 4; @@ -193,6 +193,9 @@ void func_8088A594(EnArrow* this, PlayState* play) { case ARROW_TYPE_DEKU_BUBBLE: Player_PlaySfx(player, NA_SE_PL_DEKUNUTS_FIRE); break; + + default: + break; } this->actionFunc = func_8088ACE0; diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h index 14d5bef94..3aaf4e4c8 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h @@ -2,6 +2,7 @@ #define Z_EN_ARROW_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnArrow; @@ -34,7 +35,7 @@ typedef enum ArrowMagic { typedef struct { /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[5]; + /* 0x188 */ Vec3s jointTable[ARROW_LIMB_MAX]; } EnArrowArrow; // size = 0x1A8 typedef struct { 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 26e91978f..b4ce21b6c 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -5,7 +5,6 @@ */ #include "z_en_az.h" -#include "objects/object_az/object_az.h" #include "overlays/actors/ovl_En_Twig/z_en_twig.h" #include "overlays/actors/ovl_En_Fish/z_en_fish.h" @@ -59,6 +58,7 @@ void func_80A97EAC(EnAz* this, PlayState* play); void func_80A97F9C(EnAz* this, PlayState* play); typedef enum { + /* -1 */ BEAVER_ANIM_NONE = -1, /* 0 */ BEAVER_ANIM_IDLE, /* 1 */ BEAVER_ANIM_WALK, /* 2 */ BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, @@ -72,24 +72,25 @@ typedef enum { /* 10 */ BEAVER_ANIM_TALK_TO_RIGHT, /* 11 */ BEAVER_ANIM_BOW, /* 12 */ BEAVER_ANIM_IDLE_FACE_LEFT, - /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT + /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT, + /* 14 */ BEAVER_ANIM_IDLE_FACE_MAX } BeaverAnimation; -static AnimationSpeedInfo sAnimationInfo[] = { - { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, - { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverSwimWithSpinningTail, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverSwimWithRaisedTail, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, - { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, - { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, +static AnimationSpeedInfo sAnimationSpeedInfo[BEAVER_ANIM_IDLE_FACE_MAX] = { + { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, // BEAVER_ANIM_IDLE + { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_WALK + { &gBeaverSwimWithSpinningTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL + { &gBeaverSwimWithRaisedTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_RAISED_TAIL + { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK + { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_WAVE_ARMS + { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_RIGHT + { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_LEFT + { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM + { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_LEFT + { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_RIGHT + { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, // BEAVER_ANIM_BOW + { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_LEFT + { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_RIGHT }; ActorInit En_Az_InitVars = { @@ -211,30 +212,37 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; + case 2: phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04); break; + case 4: phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2); break; + case 1: phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; + case 3: phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04); break; + case 5: phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2); break; + case 6: phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; + default: phi_v1 = true; break; @@ -278,16 +286,16 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { this->unk_374 |= 0x100; this->unk_376 |= 0x100; } - Animation_Change(&this->skelAnime, sAnimationInfo[BEAVER_ANIM_IDLE].animation, 1.0f, - Animation_GetLastFrame(sAnimationInfo[BEAVER_ANIM_IDLE].animation) * Rand_ZeroOne(), - Animation_GetLastFrame(sAnimationInfo[BEAVER_ANIM_IDLE].animation), - sAnimationInfo[BEAVER_ANIM_IDLE].mode, sAnimationInfo[BEAVER_ANIM_IDLE].morphFrames); + Animation_Change(&this->skelAnime, sAnimationSpeedInfo[BEAVER_ANIM_IDLE].animation, 1.0f, + Animation_GetLastFrame(sAnimationSpeedInfo[BEAVER_ANIM_IDLE].animation) * Rand_ZeroOne(), + Animation_GetLastFrame(sAnimationSpeedInfo[BEAVER_ANIM_IDLE].animation), + sAnimationSpeedInfo[BEAVER_ANIM_IDLE].mode, sAnimationSpeedInfo[BEAVER_ANIM_IDLE].morphFrames); this->unk_37E = 0; this->unk_380 = 0; this->unk_384 = 0; this->actor.gravity = -1.0f; this->unk_376 = this->unk_374; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); this->skelAnime.curFrame = Rand_ZeroOne() * this->skelAnime.endFrame; switch (gSaveContext.save.entrance) { @@ -310,6 +318,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { func_80A95DA0(this, play); } break; + case ENTRANCE(WATERFALL_RAPIDS, 3): this->unk_2FA = 0; if (!(this->unk_374 & 2)) { @@ -320,6 +329,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { } func_80A97C0C(this, play); break; + case ENTRANCE(WATERFALL_RAPIDS, 1): if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { @@ -350,6 +360,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { func_80A97D5C(this, play); } break; + case ENTRANCE(WATERFALL_RAPIDS, 2): if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { @@ -383,6 +394,9 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { this->actionFunc = func_80A97C24; } break; + + default: + break; } if (sp4E >= 0) { this->brother = NULL; @@ -548,10 +562,11 @@ s32 func_80A95B34(PlayState* play, ActorPathing* actorPathing) { if (this->unk_374 & 0x100) { if (!(this->unk_374 & 8)) { if (this->unk_374 & 2) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM, &this->animIndex); - } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM, &this->animIndex); + } else { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); } this->unk_374 |= 8; } @@ -562,7 +577,7 @@ s32 func_80A95B34(PlayState* play, ActorPathing* actorPathing) { } } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { if (this->unk_374 & 8) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_WALK, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_WALK, &this->animIndex); this->unk_374 &= ~8; } ret = func_80A95534(play, actorPathing); @@ -576,7 +591,7 @@ void func_80A95C5C(EnAz* this, PlayState* play) { this->actor.draw = NULL; this->actor.world.pos.y = this->actor.home.pos.y + 120.0f; this->actor.gravity = -1.0f; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_3C0 = 0; @@ -610,7 +625,7 @@ void func_80A95DA0(EnAz* this, PlayState* play) { this->unk_36C = 4.0f; this->actor.speed = 4.0f; this->actor.gravity = 0.0f; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); @@ -662,7 +677,7 @@ void func_80A95FE8(EnAz* this, PlayState* play) { this->actor.shape.rot.z = 0; Actor_MoveWithoutGravityReverse(&this->actor); } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); this->unk_374 &= ~0x1000; this->actor.gravity = -1.0f; this->actor.speed = 0.0f; @@ -701,63 +716,73 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0xCD: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); this->actor.textId = 0x10F2; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &brother->animIndex); break; + case 0x10CE: this->actor.textId = 0x10CF; SET_WEEKEVENTREG(WEEKEVENTREG_16_40); break; + case 0x10CF: this->actor.textId = 0x10D0; break; + case 0x10D0: this->actor.textId = 0x10D1; ret = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_WAVE_ARMS, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); break; + case 0x10D1: this->actor.textId = 0x10D2; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10D2: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x10D6; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10D3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &this->animIndex); } break; + case 0x10D3: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); this->unk_374 |= 0x20; ret = 0; break; + case 0x10D4: this->actor.textId = 0x10D2; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10D6: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); func_80A979DC(this, play); this->unk_2FA = 1; ret = 0; break; + case 0x10D7: this->actor.textId = 0x10D8; break; + case 0x10D8: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -765,15 +790,21 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 2: this->unk_2FA = 1; break; + case 4: this->unk_2FA = 3; break; + case 7: this->unk_2FA = 6; break; + case 9: this->unk_2FA = 8; break; + + default: + break; } ret = 0; } else { @@ -781,6 +812,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { this->actor.textId = 0x10D9; } break; + case 0x10D9: if ((this->unk_2FA == 3) || (this->unk_2FA == 8)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); @@ -789,11 +821,13 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { func_80A979DC(this, play); ret = 0; break; + case 0x10DA: this->actor.textId = 0x10DB; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10DB: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -803,51 +837,61 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10DC; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &this->animIndex); } break; + case 0x10DC: func_80A94AB8(this, play, 0); func_80A979DC(this, play); this->unk_374 |= 0x20; ret = 0; break; + case 0x10DD: func_80A98EFC(this, play, 0x10DE, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); this->unk_374 |= 0x8000; ret = 2; break; + case 0x10DE: func_80A98EFC(this, play, 0x10DF, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10DF: func_80A98EFC(this, play, 0x10E0, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); ret = 0; break; + case 0x10E0: func_80A98EFC(this, play, 0x10E1, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10E1: func_80A98EFC(this, play, 0x10E2, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); ret = 0; break; + case 0x10E2: this->actor.textId = 0x10E3; ret = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10E3: func_80A98EFC(this, play, 0x10E4, BEAVER_ANIM_IDLE, BEAVER_ANIM_TALK); ret = 0; break; + case 0x10E4: func_80A98EFC(this, play, 0x10E5, BEAVER_ANIM_IDLE, BEAVER_ANIM_TALK); ret = 0; break; + case 0x10E5: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -855,43 +899,49 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10E6; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_TO_LEFT, - &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_TALK_TO_LEFT, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE_FACE_RIGHT, &brother->animIndex); } break; + case 0x10E6: this->actor.textId = 0x10E7; func_80A98EFC(this, play, 0x10E7, BEAVER_ANIM_IDLE, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10E7: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); func_80A94AB8(this, play, 0); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); func_80A979DC(this, play); ret = 0; break; + case 0x10E8: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); this->unk_2FA = 3; ret = 0; break; + case 0x10E9: func_80A98EFC(this, play, 0x10EA, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK); ret = 0; break; + case 0x10EA: func_80A98EFC(this, play, 0x10EB, BEAVER_ANIM_IDLE, BEAVER_ANIM_TALK); ret = 0; break; + case 0x10EB: if (play->msgCtx.choiceIndex == 0) { play->msgCtx.msgMode = 0x44; @@ -900,9 +950,11 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 4: this->unk_2FA = 3; break; + case 7: this->unk_2FA = 6; break; + case 9: default: this->unk_2FA = 8; @@ -913,16 +965,18 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10EC; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_LAUGH_LEFT, - &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_LAUGH_LEFT, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE_FACE_RIGHT, &brother->animIndex); } break; + case 0x10EC: - func_80A98EFC(this, play, 0x10ED, -1, BEAVER_ANIM_LAUGH_RIGHT); + func_80A98EFC(this, play, 0x10ED, BEAVER_ANIM_NONE, BEAVER_ANIM_LAUGH_RIGHT); ret = 0; break; + case 0x10ED: if ((this->unk_2FA == 4) || (this->unk_2FA == 9)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); @@ -931,18 +985,22 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { func_80A979DC(this, play); ret = 0; break; + case 0x10EE: func_80A98EFC(this, play, 0x10EF, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10EF: func_80A98EFC(this, play, 0x10F0, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); ret = 0; break; + case 0x10F0: func_80A98EFC(this, play, 0x10F1, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10F1: SET_WEEKEVENTREG(WEEKEVENTREG_93_01); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_80)) { @@ -951,45 +1009,52 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { this->getItemId = GI_BOTTLE; SET_WEEKEVENTREG(WEEKEVENTREG_23_80); } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); ret = 7; break; + case 0x10F2: case 0x1109: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); func_80A94AB8(this, play, 0); func_80A979DC(this, play); ret = 0; break; + case 0x10F3: func_80A98EFC(this, play, 0x10F4, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10F4: func_80A98EFC(this, play, 0x10F5, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); ret = 0; break; + case 0x10F5: func_80A98EFC(this, play, 0x10F6, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10F6: func_80A98EFC(this, play, 0x10F7, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_WAVE_ARMS); ret = 0; break; + case 0x10F7: this->actor.textId = 0x10F8; ret = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10F8: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -998,50 +1063,56 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } else { this->actor.textId = 0x10FA; } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10F9; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &brother->animIndex); } break; + case 0x10F9: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); this->unk_374 |= 0x20; ret = 0; break; + case 0x10FA: case 0x1107: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); this->unk_2FA = 6; ret = 0; break; + case 0x10FB: func_80A98EFC(this, play, 0x10FC, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x10FC: func_80A98EFC(this, play, 0x10FD, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK); ret = 0; break; + case 0x10FD: this->actor.textId = 0x10FE; ret = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); break; + case 0x10FE: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -1050,52 +1121,59 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } else { this->actor.textId = 0x1101; } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); } else { Audio_PlaySfx_MessageCancel(); this->actor.textId = 0x10FF; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_TO_LEFT, - &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_TALK_TO_LEFT, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE_FACE_RIGHT, &brother->animIndex); } break; + case 0x10FF: func_80A98EFC(this, play, 0x1100, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x1100: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); func_80A94AB8(this, play, 0); func_80A979DC(this, play); ret = 0; break; + case 0x1101: case 0x1108: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); this->unk_2FA = 8; ret = 0; break; + case 0x1102: func_80A98EFC(this, play, 0x1103, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x1103: func_80A98EFC(this, play, 0x1104, BEAVER_ANIM_IDLE_FACE_RIGHT, BEAVER_ANIM_TALK_TO_LEFT); ret = 0; break; + case 0x1104: func_80A98EFC(this, play, 0x1105, BEAVER_ANIM_IDLE_FACE_LEFT, BEAVER_ANIM_TALK_TO_RIGHT); ret = 0; break; + case 0x1105: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->getItemId = GI_RUPEE_PURPLE; @@ -1103,25 +1181,27 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { this->getItemId = GI_HEART_PIECE; SET_WEEKEVENTREG(WEEKEVENTREG_25_01); } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); ret = 7; break; + case 0x1106: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &brother->animIndex); func_80A94AB8(this, play, 0); func_80A979DC(this, play); ret = 0; break; + case 0x10D5: default: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); this->unk_374 |= 0x20; ret = 0; @@ -1129,10 +1209,12 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { } } break; + case TEXT_STATE_NONE: case TEXT_STATE_1: case TEXT_STATE_CLOSING: case TEXT_STATE_3: + default: break; } return ret; @@ -1147,32 +1229,37 @@ void func_80A97114(EnAz* this, PlayState* play) { case 0x10DA: case 0x10DD: case 0x10E9: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10EE: case 0x10F3: case 0x10FB: case 0x1102: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_TO_LEFT, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK_TO_LEFT, &this->animIndex); sp20 = true; break; + case 0x10F2: case 0x1106: case 0x1109: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &this->animIndex); if (brother != NULL) { - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_BOW, &brother->animIndex); } break; + + default: + break; } if ((brother != NULL) && sp20) { if (this->unk_374 & 2) { - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE_FACE_RIGHT, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE_FACE_RIGHT, &brother->animIndex); } else { - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE_FACE_LEFT, + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE_FACE_LEFT, &brother->animIndex); } } @@ -1196,6 +1283,7 @@ s32 func_80A97274(EnAz* this, PlayState* play) { textId = 0x10D4; } break; + case 2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { SET_WEEKEVENTREG(WEEKEVENTREG_24_04); @@ -1205,6 +1293,7 @@ s32 func_80A97274(EnAz* this, PlayState* play) { textId = 0x10DA; } break; + case 4: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { textId = 0x10EE; @@ -1212,10 +1301,12 @@ s32 func_80A97274(EnAz* this, PlayState* play) { textId = 0x10E9; } break; + case 5: CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); textId = 0x10F3; break; + case 7: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { SET_WEEKEVENTREG(WEEKEVENTREG_24_04); @@ -1224,6 +1315,7 @@ s32 func_80A97274(EnAz* this, PlayState* play) { textId = 0x10E9; } break; + case 9: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { textId = 0x1102; @@ -1320,12 +1412,16 @@ void func_80A97410(EnAz* this, PlayState* play) { if (temp_a0 == 0) { switch (this->unk_3D2) { case 0x10CE: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_TALK, &this->animIndex); break; + case 0x10D4: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_TALK_WAVE_ARMS, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + BEAVER_ANIM_TALK_WAVE_ARMS, &this->animIndex); + break; + + default: break; } Message_StartTextbox(play, this->unk_3D2, &this->actor); @@ -1415,6 +1511,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { case TEXT_STATE_NONE: Message_StartTextbox(play, 0x10D7, NULL); break; + case TEXT_STATE_CHOICE: case TEXT_STATE_5: case TEXT_STATE_DONE: @@ -1423,6 +1520,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { case 0x10D7: Message_ContinueTextbox(play, 0x10D8); break; + case 0x10D8: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); @@ -1438,14 +1536,19 @@ void func_80A97AB4(EnAz* this, PlayState* play) { Message_ContinueTextbox(play, 0x10D9); } break; + case 0x10D9: func_80A94AB8(this, play, 0); func_80A979DC(this, play); break; + + default: + break; } } case TEXT_STATE_1: case TEXT_STATE_CLOSING: + default: break; } } @@ -1462,7 +1565,7 @@ void func_80A97C24(EnAz* this, PlayState* play) { void func_80A97C4C(EnAz* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == BEAVER_ANIM_BOW)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); } func_80A97410(this, play); if ((this->unk_2FA == 1) || (this->unk_2FA == 3) || (this->unk_2FA == 6) || (this->unk_2FA == 8)) { @@ -1514,7 +1617,7 @@ void func_80A97EAC(EnAz* this, PlayState* play) { this->actor.speed = 8.0f; this->actor.gravity = 0.0f; this->actor.velocity.y = 6.0f; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); @@ -1906,14 +2009,15 @@ void func_80A98EFC(EnAz* this, PlayState* play, u16 textId, s32 animIndex, s32 b EnAz* brother = this->brother; Actor_ChangeFocus(&this->actor, play, &brother->actor); - if (animIndex >= 0) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, animIndex, &this->animIndex); + if (animIndex > BEAVER_ANIM_NONE) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, animIndex, &this->animIndex); } this->actor.textId = 0; brother->actor.textId = textId; brother->unk_378 = 5; - if ((brotherAnimIndex >= 0) && (brotherAnimIndex != brother->animIndex)) { - SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, brotherAnimIndex, &brother->animIndex); + if ((brotherAnimIndex > BEAVER_ANIM_NONE) && (brotherAnimIndex != brother->animIndex)) { + SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationSpeedInfo, brotherAnimIndex, + &brother->animIndex); } this->unk_378 = 0; } @@ -1927,6 +2031,7 @@ void func_80A98F94(struct_80A98F94* yData, f32 frame, f32* yInterp) { yData++; nextFrame = yData[0].unk_0; } while (nextFrame < frame); + prevFrame = yData[-1].unk_0; weight = LERPWEIGHT(frame, prevFrame, nextFrame); *yInterp = LERPIMP(yData[-1].unk_4, yData[0].unk_4, weight) * 0.01f; diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.h b/src/overlays/actors/ovl_En_Az/z_en_az.h index a4c1785fe..486257286 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.h +++ b/src/overlays/actors/ovl_En_Az/z_en_az.h @@ -2,6 +2,7 @@ #define Z_EN_AZ_H #include "global.h" +#include "objects/object_az/object_az.h" struct EnAz; @@ -15,8 +16,8 @@ typedef struct EnAz { /* 0x144 */ EnAzActionFunc actionFunc; /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ ColliderCylinder collider; - /* 0x1D8 */ Vec3s jointTable[24]; - /* 0x268 */ Vec3s morphTable[24]; + /* 0x1D8 */ Vec3s jointTable[BEAVER_OLDER_BROTHER_LIMB_MAX]; // Also BEAVER_YOUNGER_BROTHER_LIMB_MAX + /* 0x268 */ Vec3s morphTable[BEAVER_OLDER_BROTHER_LIMB_MAX]; // Also BEAVER_YOUNGER_BROTHER_LIMB_MAX /* 0x2F8 */ s16 unk_2F8; /* 0x2FA */ s16 unk_2FA; // cutscene state? /* 0x2FC */ s32 animIndex; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9ef37a3e4..61418e656 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -15734,8 +15734,8 @@ 0x80BD2404:("EnZov_PostLimbDraw",), 0x80BD24B4:("EnZov_Draw",), 0x80BD2A30:("func_80BD2A30",), - 0x80BD2AE0:("func_80BD2AE0",), - 0x80BD2B0C:("func_80BD2B0C",), + 0x80BD2AE0:("EnAh_UpdateSkelAnime",), + 0x80BD2B0C:("EnAh_ChangeAnim",), 0x80BD2BA4:("func_80BD2BA4",), 0x80BD2BE8:("func_80BD2BE8",), 0x80BD2C6C:("func_80BD2C6C",), @@ -16000,8 +16000,8 @@ 0x80BDE090:("func_80BDE090",), 0x80BDE11C:("EnTalk_Update",), 0x80BDE1A0:("func_80BDE1A0",), - 0x80BDE250:("func_80BDE250",), - 0x80BDE27C:("func_80BDE27C",), + 0x80BDE250:("EnAl_UpdateSkelAnime",), + 0x80BDE27C:("EnAl_ChangeAnim",), 0x80BDE318:("func_80BDE318",), 0x80BDE384:("func_80BDE384",), 0x80BDE408:("func_80BDE408",), From 472725371831c5f798eafe448c0452e221f6668f Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 13 Jul 2023 18:15:10 -0700 Subject: [PATCH 035/121] Add original asset names to all `object_g*` files (#1323) --- assets/xml/objects/object_ge1.xml | 16 ++++++------- assets/xml/objects/object_geldb.xml | 20 ++++++++-------- assets/xml/objects/object_gg.xml | 26 ++++++++++----------- assets/xml/objects/object_ghaka.xml | 6 ++--- assets/xml/objects/object_gk.xml | 28 +++++++++++------------ assets/xml/objects/object_gla.xml | 20 ++++++++-------- assets/xml/objects/object_goroiwa.xml | 28 +++++++++++------------ assets/xml/objects/object_goronswitch.xml | 10 ++++---- 8 files changed, 77 insertions(+), 77 deletions(-) diff --git a/assets/xml/objects/object_ge1.xml b/assets/xml/objects/object_ge1.xml index a9c930215..db123e78c 100644 --- a/assets/xml/objects/object_ge1.xml +++ b/assets/xml/objects/object_ge1.xml @@ -3,16 +3,16 @@ - - - - - - - + + + + + + + - + diff --git a/assets/xml/objects/object_geldb.xml b/assets/xml/objects/object_geldb.xml index 5590677ea..3ed3ecd7f 100644 --- a/assets/xml/objects/object_geldb.xml +++ b/assets/xml/objects/object_geldb.xml @@ -1,13 +1,13 @@  - - - - - - - - + + + + + + + + @@ -72,7 +72,7 @@ - - + + diff --git a/assets/xml/objects/object_gg.xml b/assets/xml/objects/object_gg.xml index f7483e338..45fe1b172 100644 --- a/assets/xml/objects/object_gg.xml +++ b/assets/xml/objects/object_gg.xml @@ -39,19 +39,19 @@ - + - - - - - - - - - - - + + + + + + + + + + + @@ -72,6 +72,6 @@ - + diff --git a/assets/xml/objects/object_ghaka.xml b/assets/xml/objects/object_ghaka.xml index 6ca9a32b0..91ae8fa4f 100644 --- a/assets/xml/objects/object_ghaka.xml +++ b/assets/xml/objects/object_ghaka.xml @@ -1,12 +1,12 @@  - + - + - + diff --git a/assets/xml/objects/object_gk.xml b/assets/xml/objects/object_gk.xml index b36aef153..40abd45a2 100644 --- a/assets/xml/objects/object_gk.xml +++ b/assets/xml/objects/object_gk.xml @@ -19,10 +19,10 @@ - + - - + + @@ -43,17 +43,17 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/assets/xml/objects/object_gla.xml b/assets/xml/objects/object_gla.xml index 757e652c9..60880a7a7 100644 --- a/assets/xml/objects/object_gla.xml +++ b/assets/xml/objects/object_gla.xml @@ -1,15 +1,15 @@  - - + + - - - - - + + + + + @@ -71,8 +71,8 @@ - - - + + + diff --git a/assets/xml/objects/object_goroiwa.xml b/assets/xml/objects/object_goroiwa.xml index e6ddfe7c1..df6aa04bb 100644 --- a/assets/xml/objects/object_goroiwa.xml +++ b/assets/xml/objects/object_goroiwa.xml @@ -1,26 +1,26 @@  - + - - - - - - - - + + + + + + + + - - - - - + + + + + diff --git a/assets/xml/objects/object_goronswitch.xml b/assets/xml/objects/object_goronswitch.xml index a6a0f996f..2f7592664 100644 --- a/assets/xml/objects/object_goronswitch.xml +++ b/assets/xml/objects/object_goronswitch.xml @@ -1,10 +1,10 @@  - - - - - + + + + + From 2aa028c20f41184f44e1f3048c08571c0b676507 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 13 Jul 2023 18:59:13 -0700 Subject: [PATCH 036/121] schedule_static docs (#1324) * Finish off schedule_static * gBombersNotebookBarSmallTex --- assets/xml/interface/schedule_static.xml | 29 ++++++++++++++++++++---- src/code/z_play_hireso.c | 8 +++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/assets/xml/interface/schedule_static.xml b/assets/xml/interface/schedule_static.xml index 68b097d51..cf87038ce 100644 --- a/assets/xml/interface/schedule_static.xml +++ b/assets/xml/interface/schedule_static.xml @@ -12,6 +12,7 @@ + @@ -30,9 +31,29 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 2a182411b..18d483889 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -252,9 +252,9 @@ u16 sBombersNotebookEntries[BOMBERS_NOTEBOOK_PERSON_MAX][BOMBERS_NOTEBOOK_ENTRY_ s16 sBombersNotebookDayRectRectLeft[] = { 120, 120, 270, 420 }; TexturePtr sBombersNotebookDayTextures[] = { - gBombersNotebookDay1stTex, - gBombersNotebookDay2ndTex, - gBombersNotebookDayFinalTex, + gBombersNotebookDay1stENGTex, + gBombersNotebookDay2ndENGTex, + gBombersNotebookDayFinalENGTex, }; #define DEFINE_EVENT(_enum, icon, _colorFlag, _description, _completedMessage, _completedFlag) icon, @@ -721,7 +721,7 @@ void BombersNotebook_DrawTimeOfDay(Gfx** gfxP) { gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); gDPPipeSync(gfx++); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); - gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP, + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayENGTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); BombersNotebook_DrawScisTexRect(&gfx, (timeOfDayRectLeft + 16) * 4, 47 * 4, (timeOfDayRectLeft + 112) * 4, 67 * 4, From 6d94e0ce9ba1492295b5b0cece75834c67d1e056 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 15 Jul 2023 04:56:08 +1000 Subject: [PATCH 037/121] ClearTag Params Cleanup (#1308) * clearTag params * header ordering * brackets * cleanup * add note --- include/z64actor.h | 10 -------- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 5 ++-- src/overlays/actors/ovl_En_Am/z_en_am.c | 3 ++- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 3 ++- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 3 ++- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 3 ++- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +++- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 3 ++- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 3 ++- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 17 ++++++------- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 24 +++++++++++-------- .../actors/ovl_En_Bombal/z_en_bombal.c | 13 +++++----- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 23 +++++++++--------- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 2 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.h | 12 ++++++++++ .../actors/ovl_En_Col_Man/z_en_col_man.c | 3 ++- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 3 ++- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 3 ++- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 3 ++- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 4 +++- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 4 +++- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 7 +++--- .../actors/ovl_En_Encount2/z_en_encount2.c | 13 +++++----- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 3 ++- .../actors/ovl_En_Firefly/z_en_firefly.c | 3 ++- .../actors/ovl_En_Floormas/z_en_floormas.c | 5 ++-- .../ovl_En_Grasshopper/z_en_grasshopper.c | 3 ++- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 3 ++- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 3 ++- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 3 ++- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 3 ++- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 12 ++++++---- .../actors/ovl_En_Peehat/z_en_peehat.c | 3 ++- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 3 ++- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 3 ++- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 4 +++- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 3 ++- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 3 ++- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 3 ++- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 3 ++- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 3 ++- .../actors/ovl_En_Snowman/z_en_snowman.c | 3 ++- src/overlays/actors/ovl_En_St/z_en_st.c | 5 ++-- .../actors/ovl_En_Suttari/z_en_suttari.c | 5 ++-- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 3 ++- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 4 +++- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 3 ++- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 3 ++- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 3 ++- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 4 +++- 50 files changed, 163 insertions(+), 104 deletions(-) diff --git a/include/z64actor.h b/include/z64actor.h index 4dfc4ead0..d757117fb 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -538,16 +538,6 @@ typedef enum { #define COLORFILTER_BUFFLAG_XLU 0x2000 #define COLORFILTER_BUFFLAG_OPA 0x0000 -typedef enum { - /* 0x00 */ CLEAR_TAG_SMALL_EXPLOSION, - /* 0x01 */ CLEAR_TAG_LARGE_EXPLOSION, - /* 0x02 */ CLEAR_TAG_POP, - /* 0x03 */ CLEAR_TAG_SMALL_LIGHT_RAYS, - /* 0x04 */ CLEAR_TAG_LARGE_LIGHT_RAYS, - /* 0x23 */ CLEAR_TAG_SPLASH = 35, - /* 0xC8 */ CLEAR_TAG_SMOKE = 200 -} ClearTagType; - typedef enum { /* 0x00 */ TATL_HINT_ID_DEFAULT, /* 0x01 */ TATL_HINT_ID_SNAPPER, 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 43a910e19..4f4f907c5 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -6,6 +6,7 @@ #include "z_boss_04.h" #include "z64shrink_window.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -330,7 +331,7 @@ void func_809EC568(Boss04* this, PlayState* play) { this->unk_704 = 0; this->unk_2DA = 10; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SPLASH); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_SPLASH)); Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_JUMP_LEV_OLD - SFX_FLAG); this->subCamAtOscillator = 20; } @@ -550,7 +551,7 @@ void func_809ED2A0(Boss04* this, PlayState* play) { if ((this->unk_1F8 == 2) || (this->unk_1F8 == 5)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_EXPLOSION); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_EXPLOSION)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_IT_BIG_BOMB_EXPLOSION); } 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 c36b8a34a..e7e367c7c 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -7,6 +7,7 @@ #include "z_en_am.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_400 | ACTOR_FLAG_4 | ACTOR_FLAG_1) @@ -484,7 +485,7 @@ s32 EnAm_UpdateDamage(EnAm* this, PlayState* play) { this->drawDmgEffAlpha = 4.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->enemyCollider.info.bumper.hitPos.x, this->enemyCollider.info.bumper.hitPos.y, this->enemyCollider.info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } EnAm_TakeDamage(this, play); return true; 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 406270ff8..45639f46f 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -5,6 +5,7 @@ */ #include "z_en_baguo.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) @@ -347,7 +348,7 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) { } Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_POP); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_POP)); Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_DEAD); 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 e082c2b0e..fe223cc71 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -5,6 +5,7 @@ */ #include "z_en_bat.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bat/object_bat.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) @@ -332,7 +333,7 @@ void EnBat_SetupDie(EnBat* this, PlayState* play) { this->drawDmgEffScale = 0.45f; 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_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == BAD_BAT_DMGEFF_FIRE) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 4.0f; 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 d33a122f3..40e83dd4c 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -5,6 +5,7 @@ */ #include "z_en_bb.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) @@ -550,7 +551,7 @@ void EnBb_UpdateDamage(EnBb* this, PlayState* play) { 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_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } } } else { 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 8298703bc..9778bd785 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -5,6 +5,7 @@ */ #include "z_en_bbfall.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) @@ -571,7 +572,8 @@ void EnBbfall_UpdateDamage(EnBbfall* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.elements[0].info.bumper.hitPos.x, this->collider.elements[0].info.bumper.hitPos.y, - this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_SMALL_LIGHT_RAYS); + this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } } } else { diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 7be6316c7..6088b541e 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -5,6 +5,7 @@ */ #include "z_en_bigokuta.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) @@ -501,7 +502,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) { this->drawDmgEffAlpha = 4.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->bodyCollider.info.bumper.hitPos.x, this->bodyCollider.info.bumper.hitPos.y, this->bodyCollider.info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } 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 12bc8cf6c..b1e08cd7e 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -5,6 +5,7 @@ */ #include "z_en_bigpo.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bigpo/object_bigpo.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -1136,7 +1137,7 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, PlayState* play) { this->drawDmgEffScale = 1.0f; 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } EnBigpo_HitStun(this); return true; 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 5af8eeda7..1c68504dd 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -7,6 +7,7 @@ #include "z_en_bigslime.h" #include "z64quake.h" #include "z64rumble.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_bigslime/object_bigslime.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -2635,10 +2636,10 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, PlayState* play) { this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } else { this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, - this->gekkoCollider.info.bumper.hitPos.x, - this->gekkoCollider.info.bumper.hitPos.y, - this->gekkoCollider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->gekkoCollider.info.bumper.hitPos.x, + this->gekkoCollider.info.bumper.hitPos.y, this->gekkoCollider.info.bumper.hitPos.z, 0, + 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_ICE) { EnBigslime_GekkoFreeze(this); @@ -2670,10 +2671,10 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, PlayState* play) { this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } else { this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, - this->gekkoCollider.info.bumper.hitPos.x, - this->gekkoCollider.info.bumper.hitPos.y, - this->gekkoCollider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->gekkoCollider.info.bumper.hitPos.x, + this->gekkoCollider.info.bumper.hitPos.y, this->gekkoCollider.info.bumper.hitPos.z, 0, + 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } EnBigslime_SetupDamageGekko(this, 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 e6c6b0538..67dd857c0 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -6,6 +6,7 @@ #include "z_en_bom.h" #include "z64rumble.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -543,8 +544,10 @@ void EnBom_Update(Actor* thisx, PlayState* play) { if (Actor_HasParent(thisx, play)) { effPos.y += 30.0f; } + //! @note Assumes `isPowderKeg` values aligns with clearTag params. + //! Here, 0/1 are small/large explosions respectively. Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y - 10.0f, effPos.z, 0, 0, 0, - this->isPowderKeg); + CLEAR_TAG_PARAMS(this->isPowderKeg)); Actor_RequestQuakeAndRumble(thisx, play, sQuakeY[this->isPowderKeg], sQuakeDurations[this->isPowderKeg]); play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = @@ -579,16 +582,17 @@ void EnBom_Update(Actor* thisx, PlayState* play) { if ((enBomScales[this->isPowderKeg] <= thisx->scale.x) && (thisx->params != BOMB_TYPE_EXPLOSION)) { if (thisx->depthInWater >= 20.0f) { - Vec3f sp54; + Vec3f effPos; - sp54.x = thisx->world.pos.x; - sp54.y = thisx->world.pos.y + thisx->depthInWater; - sp54.z = thisx->world.pos.z; - EffectSsGRipple_Spawn(play, &sp54, 70, 500, 0); - EffectSsGRipple_Spawn(play, &sp54, 70, 500, 10); - sp54.y += 10.0f; - EffectSsGSplash_Spawn(play, &sp54, NULL, NULL, 1, 500); - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sp54.x, sp54.y, sp54.z, 0, 0, 1, 200); + effPos.x = thisx->world.pos.x; + effPos.y = thisx->world.pos.y + thisx->depthInWater; + effPos.z = thisx->world.pos.z; + EffectSsGRipple_Spawn(play, &effPos, 70, 500, 0); + EffectSsGRipple_Spawn(play, &effPos, 70, 500, 10); + effPos.y += 10.0f; + EffectSsGSplash_Spawn(play, &effPos, NULL, NULL, 1, 500); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y, effPos.z, 0, 0, 1, + CLEAR_TAG_PARAMS(CLEAR_TAG_SMOKE)); SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 30, NA_SE_IT_BOMB_UNEXPLOSION); this->unk_1F4 = 0.0f; thisx->velocity.y = (KREG(83) * 0.1f) + -2.0f; 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 ef30692e6..48a675820 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -5,6 +5,7 @@ */ #include "z_en_bombal.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "assets/objects/object_fusen/object_fusen.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -105,7 +106,7 @@ void func_80C05B3C(EnBombal* this, PlayState* play) { void func_80C05C44(EnBombal* this, PlayState* play) { s32 phi_s0 = false; s32 i; - Vec3f pos; + Vec3f effPos; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { @@ -126,13 +127,13 @@ void func_80C05C44(EnBombal* this, PlayState* play) { } if (phi_s0) { - Math_Vec3f_Copy(&pos, &this->actor.world.pos); - pos.y += 60.0f; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, pos.x, pos.y, pos.z, 255, 255, 200, - CLEAR_TAG_LARGE_EXPLOSION); + Math_Vec3f_Copy(&effPos, &this->actor.world.pos); + effPos.y += 60.0f; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y, effPos.z, 255, 255, 200, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_EXPLOSION)); for (i = 0; i < 100; i++) { - EnBombal_InitEffects(this, &pos, 10); + EnBombal_InitEffects(this, &effPos, 10); } SET_WEEKEVENTREG(WEEKEVENTREG_83_04); 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 b0b87afdc..92a3f71f1 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -6,6 +6,7 @@ #include "z_en_bombf.h" #include "z64rumble.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bombf/object_bombf.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10) @@ -313,7 +314,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { Vec3f sp8C = { 0.0f, 0.0f, 0.0f }; Vec3f sp80 = { 0.0f, 0.1f, 0.0f }; Vec3f sp74 = { 0.0f, 0.0f, 0.0f }; - Vec3f sp68; + Vec3f effPos; Vec3f sp5C = { 0.0f, 0.6f, 0.0f }; Color_RGBA8 sp58 = { 255, 255, 255, 255 }; EnBombf* this = THIS; @@ -375,16 +376,16 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { if (this->unk_1F8 != 0) { sp5C.y = 0.2f; - sp68 = this->actor.world.pos; - sp68.y += 25.0f; + effPos = this->actor.world.pos; + effPos.y += 25.0f; if (this->timer < 127) { if ((play->gameplayFrames % 2) == 0) { - EffectSsGSpk_SpawnFuse(play, &this->actor, &sp68, &sp8C, &sp74); + EffectSsGSpk_SpawnFuse(play, &this->actor, &effPos, &sp8C, &sp74); } Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_IGNIT - SFX_FLAG); - sp68.y += 3.0f; - func_800B0DE0(play, &sp68, &sp8C, &sp5C, &sp58, &sp58, 0x32, 5); + effPos.y += 3.0f; + func_800B0DE0(play, &effPos, &sp8C, &sp5C, &sp58, &sp58, 0x32, 5); } if ((this->timer == 3) || (this->timer == 30) || (this->timer == 50) || (this->timer == 70)) { @@ -402,15 +403,15 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { } if (this->timer == 0) { - sp68 = this->actor.world.pos; - sp68.y += 10.0f; + effPos = this->actor.world.pos; + effPos.y += 10.0f; if (Actor_HasParent(&this->actor, play)) { - sp68.y += 30.0f; + effPos.y += 30.0f; } - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sp68.x, sp68.y, sp68.z, 0, 0, 0, - CLEAR_TAG_SMALL_EXPLOSION); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y, effPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = 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 e23fba0d8..91822be01 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 @@ -435,7 +435,7 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { if (thisx->params != CLEAR_TAG_SPLASH) { // Initialize isolated light ray effect - if (thisx->params == CLEAR_TAG_SMALL_LIGHT_RAYS || thisx->params == CLEAR_TAG_LARGE_LIGHT_RAYS) { + if ((thisx->params == CLEAR_TAG_SMALL_LIGHT_RAYS) || (thisx->params == CLEAR_TAG_LARGE_LIGHT_RAYS)) { for (i = 0; i < 54; i++) { lightRayMaxScale = sLightRayMaxScale[thisx->params] + Rand_ZeroFloat(sLightRayMaxScale[thisx->params]); diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h index 677fcc698..9498e8e25 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h @@ -5,6 +5,18 @@ struct EnClearTag; +#define CLEAR_TAG_PARAMS(type) (type) + +typedef enum { + /* 0x00 */ CLEAR_TAG_SMALL_EXPLOSION, + /* 0x01 */ CLEAR_TAG_LARGE_EXPLOSION, + /* 0x02 */ CLEAR_TAG_POP, + /* 0x03 */ CLEAR_TAG_SMALL_LIGHT_RAYS, + /* 0x04 */ CLEAR_TAG_LARGE_LIGHT_RAYS, + /* 0x23 */ CLEAR_TAG_SPLASH = 35, + /* 0xC8 */ CLEAR_TAG_SMOKE = 200 +} ClearTagType; + typedef struct EnClearTagEffect { /* 0x00 */ u8 type; /* 0x01 */ u8 actionTimer; 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 fa6349871..1f096bdf5 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 @@ -6,6 +6,7 @@ #include "z_en_col_man.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_100000) @@ -200,7 +201,7 @@ void func_80AFE25C(EnColMan* this, PlayState* play) { if (this->actor.params == EN_COL_MAN_CUTSCENE_BOMB) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.parent->world.pos.x, this->actor.parent->world.pos.y, this->actor.parent->world.pos.z, 0, 0, 0, - CLEAR_TAG_SMALL_EXPLOSION); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); } else { EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 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 23d4f1018..eaede93b7 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -5,6 +5,7 @@ */ #include "z_en_crow.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) @@ -317,7 +318,7 @@ void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) { this->drawDmgEffFrozenSteamScale = 0.5f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.elements->info.bumper.hitPos.x, this->collider.elements->info.bumper.hitPos.y, this->collider.elements->info.bumper.hitPos.z, 0, 0, - 0, CLEAR_TAG_SMALL_LIGHT_RAYS); + 0, CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == GUAY_DMGEFF_FIRE) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 4.0f; 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 6bf3aabb3..19664a831 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -5,6 +5,7 @@ */ #include "z_en_dekubaba.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -280,7 +281,7 @@ void EnDekubaba_SetFireLightEffects(EnDekubaba* this, PlayState* play, s32 index sphElement = &this->collider.elements[index]; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sphElement->info.bumper.hitPos.x, sphElement->info.bumper.hitPos.y, sphElement->info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } } 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 73d03a7e9..6cbc3a49b 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -5,6 +5,7 @@ */ #include "z_en_dekunuts.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" @@ -610,7 +611,7 @@ void func_808BE73C(EnDekunuts* this, PlayState* play) { 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_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == 5) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE; this->drawDmgEffAlpha = 4.0f; 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 d7c66ea10..f30bd45cd 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -5,6 +5,7 @@ */ #include "z_en_dinofos.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_dinofos/object_dinofos.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) @@ -1332,7 +1333,8 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->colliderJntSph.elements[i].info.bumper.hitPos.x, this->colliderJntSph.elements[i].info.bumper.hitPos.y, - this->colliderJntSph.elements[i].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->colliderJntSph.elements[i].info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } func_8089C87C(this, i); 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 b3bd310b6..ae6d05c07 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -7,6 +7,7 @@ #include "z_en_dodongo.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_dodongo/object_dodongo.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -408,7 +409,8 @@ void func_80876BD0(EnDodongo* this, PlayState* play, s32 arg2) { this->drawDmgEffAlpha = 4.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider1.elements[arg2].info.bumper.hitPos.x, this->collider1.elements[arg2].info.bumper.hitPos.y, - this->collider1.elements[arg2].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->collider1.elements[arg2].info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } 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 1a54c8c33..3e728826f 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -7,8 +7,9 @@ #include "z_en_egol.h" #include "objects/object_eg/object_eg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "overlays/actors/ovl_En_Estone/z_en_estone.h" #include "overlays/actors/ovl_En_Arrow/z_en_arrow.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" +#include "overlays/actors/ovl_En_Estone/z_en_estone.h" #include "overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) @@ -1085,7 +1086,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { s32 i; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SMALL_EXPLOSION); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); this->waitTimer = 30; Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); this->action = EYEGORE_ACTION_DEAD; @@ -1128,7 +1129,7 @@ void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) { if ((this->action == EYEGORE_ACTION_STUNNED) || (this->action == EYEGORE_ACTION_SLAM_WAIT)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); this->dmgEffectTimer = 20; reaction = EYEGORE_HIT_DAMAGE; } else if ((this->action >= EYEGORE_ACTION_WALK) && (this->action <= EYEGORE_ACTION_STUN_END) && 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 ad2f48c7f..b94643338 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -5,6 +5,7 @@ */ #include "z_en_encount2.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_fusen/object_fusen.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -160,15 +161,15 @@ void EnEncount2_Idle(EnEncount2* this, PlayState* play) { void EnEncount2_Popped(EnEncount2* this, PlayState* play) { s32 i; - Vec3f curPos; + Vec3f effPos; - Math_Vec3f_Copy(&curPos, &this->dyna.actor.world.pos); - curPos.y += 60.0f; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, curPos.x, curPos.y, curPos.z, 255, 255, 200, - CLEAR_TAG_LARGE_EXPLOSION); + Math_Vec3f_Copy(&effPos, &this->dyna.actor.world.pos); + effPos.y += 60.0f; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y, effPos.z, 255, 255, 200, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_EXPLOSION)); for (i = 0; i < ARRAY_COUNT(this->effects) / 2; ++i) { - EnEncount2_InitEffects(this, &curPos, 10); + EnEncount2_InitEffects(this, &effPos, 10); } Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_MUJURA_BALLOON_BROKEN); diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 600793149..39cbee8dc 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -16,6 +16,7 @@ */ #include "z_en_fall.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_fall/object_fall.h" #include "objects/object_fall2/object_fall2.h" #include "objects/object_lodmoon/object_lodmoon.h" @@ -524,7 +525,7 @@ void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -2); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_EXPLOSION); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_EXPLOSION)); this->actor.draw = NULL; this->actionFunc = EnFall_MoonsTear_DoNothing; } else { 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 43d05c8aa..c5e4b5434 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -5,6 +5,7 @@ */ #include "z_en_firefly.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) @@ -360,7 +361,7 @@ void EnFirefly_SetupFall(EnFirefly* this, PlayState* play) { this->drawDmgEffScale = 0.55f; 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_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == KEESE_DMGEFF_FIRE) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 4.0f; 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 d3c5f17be..6ecc9f2aa 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -5,6 +5,7 @@ */ #include "z_en_floormas.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -1072,8 +1073,8 @@ void func_808D2E34(EnFloormas* this, PlayState* play) { 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, - (this->actor.scale.x > 0.009f) ? CLEAR_TAG_LARGE_LIGHT_RAYS - : CLEAR_TAG_SMALL_LIGHT_RAYS); + (this->actor.scale.x > 0.009f) ? CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS) + : CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } func_808D2B18(this); } 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 bfd2d19ab..d96fcf7fe 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -5,6 +5,7 @@ */ #include "z_en_grasshopper.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) @@ -879,7 +880,7 @@ void EnGrasshopper_UpdateDamage(EnGrasshopper* this, PlayState* play) { this->drawDmgEffTimer = 20; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y, - this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); attackDealsDamage = true; } } 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 c6aa79f55..a6565d01b 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -6,6 +6,7 @@ #include "z_en_ik.h" #include "z64rumble.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -317,7 +318,7 @@ void EnIk_HitArmor(EnIk* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->colliderCylinder.info.bumper.hitPos.x, this->colliderCylinder.info.bumper.hitPos.y, this->colliderCylinder.info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } s32 EnIk_IsChangingAction(EnIk* this, PlayState* 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 09116d628..30e75cca1 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -5,6 +5,7 @@ */ #include "z_en_kaizoku.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_100000) @@ -1908,7 +1909,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->picto.actor.focus.pos.x, this->picto.actor.focus.pos.y, this->picto.actor.focus.pos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); sp64 = 1; } break; 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 66209ae76..c46e97750 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -5,6 +5,7 @@ */ #include "z_en_kame.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_tl/object_tl.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -673,7 +674,7 @@ void func_80AD84C0(EnKame* this, PlayState* play) { 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } if (!Actor_ApplyDamage(&this->actor)) { 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 f51726e37..00c3291d7 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -5,6 +5,7 @@ */ #include "z_en_karebaba.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -203,7 +204,7 @@ void EnKarebaba_SetDamageEffects(EnKarebaba* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->hurtCollider.info.bumper.hitPos.x, this->hurtCollider.info.bumper.hitPos.y, this->hurtCollider.info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_SMALL_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == KAREBABA_DMGEFF_ICE) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.75f; 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 d1949b848..adee7503c 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -8,6 +8,7 @@ #include "z64quake.h" #include "z64rumble.h" #include "overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -394,7 +395,7 @@ void EnPametfrog_ApplyMagicArrowEffects(EnPametfrog* this, PlayState* play) { this->drawDmgEffAlpha = 3.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.elements[0].info.bumper.hitPos.x, this->collider.elements[0].info.bumper.hitPos.y, this->collider.elements[0].info.bumper.hitPos.z, 0, - 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ICE) { EnPametfrog_Freeze(this); } @@ -1299,10 +1300,11 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; this->drawDmgEffScale = 0.75f; this->drawDmgEffAlpha = 4.0f; - Actor_Spawn( - &play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.elements[0].info.bumper.hitPos.x, - this->collider.elements[0].info.bumper.hitPos.y, - this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, + this->collider.elements[0].info.bumper.hitPos.x, + this->collider.elements[0].info.bumper.hitPos.y, + this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } EnPametfrog_SetupDamage(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 c21972c7d..0c8944602 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -6,6 +6,7 @@ #include "z_en_peehat.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_ph/object_ph.h" @@ -727,7 +728,7 @@ void func_8089874C(EnPeehat* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->colliderSphere.info.bumper.hitPos.x, this->colliderSphere.info.bumper.hitPos.y, this->colliderSphere.info.bumper.hitPos.z, 0, - 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } func_800BE568(&this->actor, &this->colliderSphere); func_808984E0(this); 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 24517f8aa..b1f43e9cc 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 @@ -5,6 +5,7 @@ */ #include "z_en_po_fusen.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Ma4/z_en_ma4.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) @@ -239,7 +240,7 @@ void EnPoFusen_IncrementRomaniPop(EnPoFusen* this) { void EnPoFusen_Pop(EnPoFusen* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y + 20.0f, - this->actor.world.pos.z, 255, 255, 200, CLEAR_TAG_POP); + this->actor.world.pos.z, 255, 255, 200, CLEAR_TAG_PARAMS(CLEAR_TAG_POP)); Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); 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 11ab66ad8..43b61cfb4 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 @@ -5,6 +5,7 @@ */ #include "z_en_po_sisters.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) @@ -946,7 +947,7 @@ void EnPoSisters_CheckCollision(EnPoSisters* this, PlayState* play) { this->drawDmgEffScale = 0.5f; 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } EnPoSisters_SetupDamageFlinch(this); } 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 30d625351..5571fae2a 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "z_en_poh.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_po/object_po.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) @@ -711,7 +712,8 @@ void func_80B2E438(EnPoh* this, PlayState* play) { this->drawDmgEffScale = 0.45f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->colliderCylinder.info.bumper.hitPos.x, this->colliderCylinder.info.bumper.hitPos.y, - this->colliderCylinder.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->colliderCylinder.info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } func_80B2CFF8(this); } 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 2e0aaf0a2..6dc36e9eb 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -5,6 +5,7 @@ */ #include "z_en_pp.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) @@ -1320,7 +1321,7 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) { (this->drawDmgEffTimer == 0))) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, 255, COLORFILTER_BUFFLAG_OPA, 25); this->drawDmgEffTimer = 20; 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 3d7615b5e..1869dd9cf 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -5,6 +5,7 @@ */ #include "z_en_pr.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Prz/z_en_prz.h" #include "objects/object_pr/object_pr.h" @@ -466,7 +467,7 @@ void func_80A33098(EnPr* this, PlayState* play) { this->drawDmgEffAlpha = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y, - this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } if ((player->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.colChkInfo.damageEffect == 5)) { 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 1a4024f51..db0ee5e82 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -5,6 +5,7 @@ */ #include "z_en_raf.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_CANT_LOCK_ON) @@ -511,7 +512,7 @@ void EnRaf_Explode(EnRaf* this, PlayState* play) { Math_Vec3f_Copy(&explosionPos, &this->dyna.actor.world.pos); explosionPos.y += 10.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, explosionPos.x, explosionPos.y, explosionPos.z, 0, 0, 0, - CLEAR_TAG_SMALL_EXPLOSION); + CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); Actor_PlaySfx(&this->dyna.actor, NA_SE_IT_BOMB_EXPLOSION); Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_DEAD); if (this->switchFlag >= 0) { 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 2aa2bd21e..9bd181c0f 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -6,6 +6,7 @@ #include "z_en_rr.h" #include "z64rumble.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_rr/object_rr.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -180,7 +181,7 @@ void func_808FA01C(EnRr* this, PlayState* play, ColliderCylinder* collider) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, collider->info.bumper.hitPos.x, collider->info.bumper.hitPos.y, collider->info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } else if (this->actor.colChkInfo.damageEffect == 5) { this->drawDmgEffScale = 0.85f; this->drawDmgEffAlpha = 4.0f; 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 6b4ef0974..540cf9cb2 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -5,6 +5,7 @@ */ #include "z_en_slime.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) @@ -1090,7 +1091,7 @@ void EnSlime_UpdateDamage(EnSlime* this, PlayState* play) { 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); + CLEAR_TAG_PARAMS(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; 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 e86c8f7ad..d289cf89d 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -5,6 +5,7 @@ */ #include "z_en_snowman.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) @@ -1009,7 +1010,7 @@ void EnSnowman_UpdateDamage(EnSnowman* this, PlayState* play) { 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } } 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 f4cc458cb..566b074c7 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -5,6 +5,7 @@ */ #include "z_en_st.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_st/object_st.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -565,7 +566,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { if (this->actor.colChkInfo.damageEffect == 4) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } this->collider3.base.acFlags &= ~AC_HIT; } @@ -575,7 +576,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { this->collider4.base.acFlags &= ~AC_HIT; if (this->actor.colChkInfo.damageEffect == 4) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { 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 7904ff23a..23ba888a0 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -5,8 +5,9 @@ */ #include "z_en_suttari.h" -#include "overlays/actors/ovl_En_Elf/z_en_elf.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -1272,7 +1273,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { this->flags2 |= 4; this->actor.speed = 0.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SMALL_EXPLOSION); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_IT_BOMB_EXPLOSION); Actor_Kill(&this->actor); return; 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 383f1c165..016f74dd3 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -5,6 +5,7 @@ */ #include "z_en_sw.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_st/object_st.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) @@ -661,7 +662,7 @@ s32 func_808DA08C(EnSw* this, PlayState* play) { if (this->actor.colChkInfo.damageEffect == 4) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { 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 d6f4a1774..59cb9d6f0 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "z_en_thiefbird.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) @@ -949,7 +950,8 @@ void func_80C12B1C(EnThiefbird* this, PlayState* play) { if (i != ARRAY_COUNT(this->colliderElements)) { sph = &this->collider.elements[i]; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sph->info.bumper.hitPos.x, - sph->info.bumper.hitPos.y, sph->info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + sph->info.bumper.hitPos.y, sph->info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } } else if (this->actor.colChkInfo.damageEffect == 2) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; 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 08c64f591..b9d547fb0 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -5,6 +5,7 @@ */ #include "z_en_tite.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_tite/object_tite.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) @@ -999,7 +1000,7 @@ void func_80895FF8(EnTite* this, PlayState* play) { this->drawDmgEffScale = 0.5f; 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); 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 deb8cc426..2e7392cfc 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -5,6 +5,7 @@ */ #include "z_en_wallmas.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Encount1/z_en_encount1.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -611,7 +612,7 @@ void EnWallmas_UpdateDamage(EnWallmas* this, PlayState* play) { 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); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } EnWallmas_SetupDamage(this, true); 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 d42cb32b3..4dc8d75b5 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -6,6 +6,7 @@ #include "z_en_wf.h" #include "overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) @@ -1456,7 +1457,7 @@ void func_8099386C(EnWf* this, PlayState* play) { this->drawDmgEffAlpha = 4.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, collider->info.bumper.hitPos.x, collider->info.bumper.hitPos.y, collider->info.bumper.hitPos.z, 0, 0, 0, - CLEAR_TAG_LARGE_LIGHT_RAYS); + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); } Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); 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 208422b2f..a9d99412a 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -6,6 +6,7 @@ #include "z_en_wiz.h" #include "objects/gameplay_keep/gameplay_keep.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h" #define FLAGS \ @@ -1250,7 +1251,8 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) { (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || (this->drawDmgEffTimer == 0)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, - this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS); + this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; attackDealsDamage = true; From b3f4b8a9cb17229a64bfbca9b20aee3b8cbe2bc3 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 15 Jul 2023 06:33:58 +1000 Subject: [PATCH 038/121] Animation Cleanup: En_B* Actors (#1326) * En_B * more cleanup * another if (1) fixed * more cleanup * more cleanup * rot * PR Suggestions * fix vtx * rm more Draw * Update assets/xml/objects/object_yb.xml Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> * Update assets/xml/objects/object_bigpo.xml Co-authored-by: Tom Overton --------- Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> Co-authored-by: Tom Overton --- assets/xml/objects/object_ani.xml | 10 +- assets/xml/objects/object_bigpo.xml | 100 +++++---- assets/xml/objects/object_ds2n.xml | 8 +- assets/xml/objects/object_hs.xml | 6 +- assets/xml/objects/object_po_sisters.xml | 25 +-- assets/xml/objects/object_ru2.xml | 4 +- assets/xml/objects/object_yb.xml | 9 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 72 ++++--- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 30 +-- src/overlays/actors/ovl_En_Baguo/z_en_baguo.h | 2 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 47 ++-- .../actors/ovl_En_Baisen/z_en_baisen.h | 7 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 34 ++- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 3 + .../actors/ovl_En_Bbfall/z_en_bbfall.c | 2 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 8 +- src/overlays/actors/ovl_En_Bee/z_en_bee.h | 4 +- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 16 +- src/overlays/actors/ovl_En_Bh/z_en_bh.h | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 8 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 82 +++---- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 22 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 18 +- .../actors/ovl_En_Bigslime/z_en_bigslime.h | 2 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 48 +++-- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 23 +- .../actors/ovl_En_Boj_01/z_en_boj_01.c | 3 + .../actors/ovl_En_Boj_02/z_en_boj_02.c | 3 + .../actors/ovl_En_Boj_03/z_en_boj_03.c | 3 + .../actors/ovl_En_Boj_04/z_en_boj_04.c | 3 + .../actors/ovl_En_Boj_05/z_en_boj_05.c | 3 + .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 156 ++++++++++---- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h | 9 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 118 +++++++--- .../actors/ovl_En_Bombers/z_en_bombers.h | 9 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 92 +++++--- .../actors/ovl_En_Bombers2/z_en_bombers2.h | 5 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 203 ++++++++++++------ .../actors/ovl_En_Bomjima/z_en_bomjima.h | 7 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 173 ++++++++++----- .../actors/ovl_En_Bomjimb/z_en_bomjimb.h | 9 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 34 +-- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 2 +- src/overlays/actors/ovl_En_Butte/z_en_butte.h | 5 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 20 +- src/overlays/actors/ovl_En_Famos/z_en_famos.h | 4 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 68 +++--- .../actors/ovl_En_Kakasi/z_en_kakasi.h | 4 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 8 +- src/overlays/actors/ovl_En_Niw/z_en_niw.h | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 18 +- src/overlays/actors/ovl_En_Raf/z_en_raf.h | 2 +- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 8 +- 55 files changed, 967 insertions(+), 606 deletions(-) diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml index fb17e4e75..2900ff723 100644 --- a/assets/xml/objects/object_ani.xml +++ b/assets/xml/objects/object_ani.xml @@ -15,18 +15,18 @@ - + - + - + - + - + diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml index e10052e3c..858ad4a87 100644 --- a/assets/xml/objects/object_bigpo.xml +++ b/assets/xml/objects/object_bigpo.xml @@ -1,47 +1,63 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml index da6ce5e87..52284c224 100644 --- a/assets/xml/objects/object_ds2n.xml +++ b/assets/xml/objects/object_ds2n.xml @@ -7,10 +7,10 @@ - + - + @@ -80,10 +80,10 @@ - + - + diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml index 19ea49b6b..500ba389f 100644 --- a/assets/xml/objects/object_hs.xml +++ b/assets/xml/objects/object_hs.xml @@ -30,12 +30,12 @@ - + - + - + diff --git a/assets/xml/objects/object_po_sisters.xml b/assets/xml/objects/object_po_sisters.xml index cc00b50a1..6b0755905 100644 --- a/assets/xml/objects/object_po_sisters.xml +++ b/assets/xml/objects/object_po_sisters.xml @@ -15,14 +15,12 @@ - - - - - - - - + + + + + + @@ -51,14 +49,11 @@ - - + - - - - - + + + diff --git a/assets/xml/objects/object_ru2.xml b/assets/xml/objects/object_ru2.xml index 72510149c..89d00e9d7 100644 --- a/assets/xml/objects/object_ru2.xml +++ b/assets/xml/objects/object_ru2.xml @@ -74,12 +74,12 @@ - + - + diff --git a/assets/xml/objects/object_yb.xml b/assets/xml/objects/object_yb.xml index 3bbfc7cce..d00a61170 100644 --- a/assets/xml/objects/object_yb.xml +++ b/assets/xml/objects/object_yb.xml @@ -19,10 +19,10 @@ - + - + @@ -47,12 +47,13 @@ + - + - + 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 ee42446bd..11dcd5a55 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -35,15 +35,6 @@ void EnBaba_DoNothing(EnBaba* this, PlayState* play); void EnBaba_Walk(EnBaba* this, PlayState* play); void EnBaba_FaceForward(EnBaba* this, PlayState* play); -typedef enum { - /* 0 */ BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG, - /* 1 */ BOMB_SHOP_LADY_ANIM_IDLE, - /* 2 */ BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG, - /* 3 */ BOMB_SHOP_LADY_ANIM_KNOCKED_OVER, - /* 4 */ BOMB_SHOP_LADY_ANIM_LYING_DOWN, - /* 5 */ BOMB_SHOP_LADY_ANIM_SWAY -} BombShopLadyAnimation; - typedef enum { /* 0 */ BOMB_SHOP_LADY_SCH_NONE, /* 1 */ BOMB_SHOP_LADY_SCH_KNOCKED_OVER, @@ -62,13 +53,23 @@ ActorInit En_Baba_InitVars = { (ActorFunc)EnBaba_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gBbaIdleHoldingBagAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gBbaIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gBbaWalkingHoldingBagAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gBbaKnockedOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gBbaLyingDownAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gBbaSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG, + /* 1 */ BOMB_SHOP_LADY_ANIM_IDLE, + /* 2 */ BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG, + /* 3 */ BOMB_SHOP_LADY_ANIM_KNOCKED_OVER, + /* 4 */ BOMB_SHOP_LADY_ANIM_LYING_DOWN, + /* 5 */ BOMB_SHOP_LADY_ANIM_SWAY, + /* 6 */ BOMB_SHOP_LADY_ANIM_MAX +} BombShopLadyAnimation; + +static AnimationInfo sAnimationInfo[BOMB_SHOP_LADY_ANIM_MAX] = { + { &gBbaIdleHoldingBagAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG + { &gBbaIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // BOMB_SHOP_LADY_ANIM_IDLE + { &gBbaWalkingHoldingBagAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG + { &gBbaKnockedOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // BOMB_SHOP_LADY_ANIM_KNOCKED_OVER + { &gBbaLyingDownAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // BOMB_SHOP_LADY_ANIM_LYING_DOWN + { &gBbaSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // BOMB_SHOP_LADY_ANIM_SWAY }; static ColliderCylinderInit sCylinderInit = { @@ -184,7 +185,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { // Can't stock Bomb Bags tomorrow this->textId = 0x2A32; break; - } else if (player->transformation == PLAYER_FORM_DEKU) { + } + + if (player->transformation == PLAYER_FORM_DEKU) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_79_20)) { SET_WEEKEVENTREG(WEEKEVENTREG_79_20); this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; @@ -197,7 +200,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { this->textId = 0x2A38; } break; - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_01)) { // Thought could sell Big Bomb Bags this->textId = 0x660; @@ -206,16 +211,16 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { // Can't judge people this->textId = 0x662; break; - } else { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_02)) { - // Someone helped me out - this->textId = 0x65A; - break; - } - // Buy Big Bomb Bag - this->textId = 0x65E; + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_02)) { + // Someone helped me out + this->textId = 0x65A; break; } + + // Buy Big Bomb Bag + this->textId = 0x65E; break; case 0x660: @@ -287,6 +292,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { case 0x2A31: this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; break; + + default: + break; } Message_StartTextbox(play, this->textId, &this->actor); @@ -404,10 +412,6 @@ s32 EnBaba_ProcessScheduleOutput(EnBaba* this, PlayState* play, ScheduleOutput* s32 success; switch (scheduleOutput->result) { - default: - success = false; - break; - case BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH: success = EnBaba_InitTimePath(this, play, scheduleOutput); break; @@ -415,7 +419,12 @@ s32 EnBaba_ProcessScheduleOutput(EnBaba* this, PlayState* play, ScheduleOutput* case BOMB_SHOP_LADY_SCH_KNOCKED_OVER: success = true; break; + + default: + success = false; + break; } + return success; } @@ -491,6 +500,9 @@ void EnBaba_HandleSchedule(EnBaba* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_KnockedOver; break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 4, 0x1554); } 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 45639f46f..17eb5c9ef 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -159,7 +159,7 @@ void EnBaguo_Destroy(Actor* thisx, PlayState* play) { void EnBaguo_UndergroundIdle(EnBaguo* this, PlayState* play) { this->action = NEJIRON_ACTION_INACTIVE; - if (this->actor.xzDistToPlayer < 200.0f && Player_GetMask(play) != PLAYER_MASK_STONE) { + if ((this->actor.xzDistToPlayer < 200.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) { this->actor.draw = EnBaguo_DrawBody; Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_APPEAR); this->actor.world.rot.z = 0; @@ -247,7 +247,7 @@ void EnBaguo_Roll(EnBaguo* this, PlayState* play) { this->actionFunc = EnBaguo_Idle; this->actor.speed = 0.0f; } else { - if (!this->bouncedFlag && this->collider.base.atFlags & AT_BOUNCED) { + if (!this->bouncedFlag && (this->collider.base.atFlags & AT_BOUNCED)) { this->zRollDirection ^= 1; this->bouncedFlag = 1; this->actor.speed = -7.0f; @@ -318,7 +318,7 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) { i = false; if (this->action != NEJIRON_ACTION_EXPLODING && this->action != NEJIRON_ACTION_RETREATING) { if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && - this->actor.world.pos.y < (this->actor.home.pos.y - 100.0f)) { + (this->actor.world.pos.y < (this->actor.home.pos.y - 100.0f))) { // Force a detonation if we're off the ground and have fallen // below our home position (e.g., we rolled off a ledge). i = true; @@ -328,9 +328,9 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) { // Force a detonation if we're too far below the water's surface. i = true; } - if ((this->collider.base.acFlags & AC_HIT || i)) { + if ((this->collider.base.acFlags & AC_HIT) || i) { this->collider.base.acFlags &= ~AC_HIT; - if (i || this->actor.colChkInfo.damageEffect == NEJIRON_DMGEFF_KILL) { + if (i || (this->actor.colChkInfo.damageEffect == NEJIRON_DMGEFF_KILL)) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); this->action = NEJIRON_ACTION_EXPLODING; this->actor.speed = 0.0f; @@ -376,7 +376,7 @@ void EnBaguo_Update(Actor* thisx, PlayState* play) { DECR(this->blinkTimer); DECR(this->timer); - if (this->action != NEJIRON_ACTION_EXPLODING && this->action != NEJIRON_ACTION_INACTIVE) { + if ((this->action != NEJIRON_ACTION_EXPLODING) && (this->action != NEJIRON_ACTION_INACTIVE)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); } @@ -450,9 +450,9 @@ void EnBaguo_InitializeEffect(EnBaguo* this, Vec3f* pos, Vec3f* velocity, Vec3f* effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = (s16)(s32)Rand_CenteredFloat(0x7530); - effect->rotation.y = (s16)(s32)Rand_CenteredFloat(0x7530); - effect->rotation.z = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rot.x = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rot.y = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rot.z = (s16)(s32)Rand_CenteredFloat(0x7530); return; } } @@ -467,9 +467,9 @@ void EnBaguo_UpdateEffects(EnBaguo* this, PlayState* play) { effect->pos.x += effect->velocity.x; effect->pos.y += effect->velocity.y; effect->pos.z += effect->velocity.z; - effect->rotation.x += 0xBB8; - effect->rotation.y += 0xBB8; - effect->rotation.z += 0xBB8; + effect->rot.x += 0xBB8; + effect->rot.y += 0xBB8; + effect->rot.z += 0xBB8; effect->velocity.x += effect->accel.x; effect->velocity.y += effect->accel.y; effect->velocity.z += effect->accel.z; @@ -501,9 +501,9 @@ void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); - Matrix_RotateXS(effect->rotation.x, MTXMODE_APPLY); - Matrix_RotateYS(effect->rotation.y, MTXMODE_APPLY); - Matrix_RotateZS(effect->rotation.z, MTXMODE_APPLY); + Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY); + Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY); Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h index d6eb2173c..132095bd1 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h @@ -17,7 +17,7 @@ typedef struct NejironEffect { /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f velocity; /* 0x1C */ Vec3f accel; - /* 0x28 */ Vec3s rotation; + /* 0x28 */ Vec3s rot; /* 0x30 */ f32 scale; /* 0x34 */ s16 timer; } NejironEffect; // size = 0x38 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 7ff5da288..606c880d3 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -57,16 +57,31 @@ static ColliderCylinderInit sCylinderInit = { static u16 sTextIds[] = { 0x2ABD, 0x2ABB, 0x2AD5, 0x2AD6, 0x2AD7, 0x2AD8, 0x2AC6 }; -static AnimationHeader* sAnimations[] = { &object_bai_Anim_0011C0, &object_bai_Anim_0008B4, &object_bai_Anim_008198 }; +typedef enum { + /* 0 */ ENBAISEN_ANIM_0, + /* 1 */ ENBAISEN_ANIM_1, + /* 2 */ ENBAISEN_ANIM_2, + /* 3 */ ENBAISEN_ANIM_MAX +} EnBaisenAnimation; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP }; +static AnimationHeader* sAnimations[ENBAISEN_ANIM_MAX] = { + &object_bai_Anim_0011C0, // ENBAISEN_ANIM_0 + &object_bai_Anim_0008B4, // ENBAISEN_ANIM_1 + &object_bai_Anim_008198, // ENBAISEN_ANIM_2 +}; + +static u8 sAnimationModes[ENBAISEN_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBAISEN_ANIM_0 + ANIMMODE_LOOP, // ENBAISEN_ANIM_1 + ANIMMODE_LOOP, // ENBAISEN_ANIM_2 +}; void EnBaisen_Init(Actor* thisx, PlayState* play) { EnBaisen* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_bai_Skel_007908, &object_bai_Anim_0011C0, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_BAI_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->paramCopy = this->actor.params; if (this->actor.params == 0) { @@ -100,8 +115,8 @@ void EnBaisen_Destroy(Actor* thisx, PlayState* play) { void EnBaisen_ChangeAnim(EnBaisen* this, s32 animIndex) { this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -10.0f); } @@ -136,10 +151,10 @@ void func_80BE87B0(EnBaisen* this, PlayState* play) { void func_80BE87FC(EnBaisen* this) { if (this->paramCopy == 0) { this->textIdIndex = 2; - EnBaisen_ChangeAnim(this, 2); + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_2); this->unk29E = this->actor.world.rot.y; } else { - EnBaisen_ChangeAnim(this, 0); + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_0); } this->actor.textId = sTextIds[this->textIdIndex]; @@ -187,13 +202,13 @@ void func_80BE895C(EnBaisen* this, PlayState* play) { void func_80BE89D8(EnBaisen* this, PlayState* play) { if (&this->actor == this->unk2A4) { this->unk29E = this->actor.world.rot.y; - if (this->animIndex == 0) { - EnBaisen_ChangeAnim(this, 1); + if (this->animIndex == ENBAISEN_ANIM_0) { + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_1); } } else { this->unk29E = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk2A4->world.pos); - if (this->animIndex != 0) { - EnBaisen_ChangeAnim(this, 0); + if (this->animIndex != ENBAISEN_ANIM_0) { + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_0); } } if ((play->msgCtx.currentTextId == 0x2AC6) || (play->msgCtx.currentTextId == 0x2AC7) || @@ -209,15 +224,15 @@ void func_80BE89D8(EnBaisen* this, PlayState* play) { void func_80BE8AAC(EnBaisen* this, PlayState* play) { if ((this->textIdIndex % 2) != 0) { this->unk29E = this->actor.world.rot.y; - if (this->animIndex == 0) { - EnBaisen_ChangeAnim(this, 1); + if (this->animIndex == ENBAISEN_ANIM_0) { + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_1); } } else { if (this->unk2A4 != NULL) { this->unk29E = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk2A4->world.pos); } - if (this->animIndex != 0) { - EnBaisen_ChangeAnim(this, 0); + if (this->animIndex != ENBAISEN_ANIM_0) { + EnBaisen_ChangeAnim(this, ENBAISEN_ANIM_0); } } if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -269,7 +284,7 @@ void EnBaisen_Update(Actor* thisx, PlayState* play) { s32 EnBaisen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBaisen* this = THIS; - if (limbIndex == 9) { + if (limbIndex == OBJECT_BAI_LIMB_09) { rot->x += this->headRotX; rot->y += this->headRotY; rot->z += this->headRotZ; diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h index 4c0ced24f..25e747e38 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h @@ -2,6 +2,7 @@ #define Z_EN_BAISEN_H #include "global.h" +#include "objects/object_bai/object_bai.h" struct EnBaisen; @@ -10,8 +11,8 @@ typedef void (*EnBaisenActionFunc)(struct EnBaisen*, PlayState*); typedef struct EnBaisen { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[20]; - /* 0x200 */ Vec3s morphTable[20]; + /* 0x188 */ Vec3s jointTable[OBJECT_BAI_LIMB_MAX]; + /* 0x200 */ Vec3s morphTable[OBJECT_BAI_LIMB_MAX]; /* 0x278 */ EnBaisenActionFunc actionFunc; /* 0x27C */ s16 headRotY; /* 0x27E */ s16 headRotX; @@ -22,7 +23,7 @@ typedef struct EnBaisen { /* 0x28C */ s32 paramCopy; /* 0x290 */ s32 unk290; /* 0x294 */ s16 unusedCounter; - /* 0x298 */ f32 frameCount; + /* 0x298 */ f32 animEndFrame; /* 0x29C */ s16 unk29C; /* 0x29E */ s16 unk29E; /* 0x2A0 */ s16 textIdIndex; 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 40e83dd4c..f6e2eb5d5 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -124,7 +124,7 @@ static InitChainEntry sInitChain[] = { * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the * limb is not part of the bodyParts arrays. */ -static s8 sLimbIndexToBodyPartsIndex[] = { +static s8 sLimbIndexToBodyPartsIndex[BUBBLE_LIMB_MAX] = { -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, 2, -1, 3, }; @@ -554,27 +554,25 @@ void EnBb_UpdateDamage(EnBb* this, PlayState* play) { CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_LIGHT_RAYS)); } } - } else { - if (this->collider.base.atFlags & AT_BOUNCED) { - this->collider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); - if (this->actionFunc != EnBb_Down) { - this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000; - this->actor.shape.rot.y = this->actor.world.rot.y; - EnBb_SetupDown(this); - } - } else if (this->collider.base.atFlags & AT_HIT) { - this->collider.base.atFlags &= ~AT_HIT; + } else if (this->collider.base.atFlags & AT_BOUNCED) { + this->collider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); + if (this->actionFunc != EnBb_Down) { this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000; this->actor.shape.rot.y = this->actor.world.rot.y; - Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_BITE); + EnBb_SetupDown(this); + } + } else if (this->collider.base.atFlags & AT_HIT) { + this->collider.base.atFlags &= ~AT_HIT; + this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000; + this->actor.shape.rot.y = this->actor.world.rot.y; + Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_BITE); - if (this->flameScaleX > 0.0f) { - gSaveContext.jinxTimer = 1200; - } + if (this->flameScaleX > 0.0f) { + gSaveContext.jinxTimer = 1200; + } - if (this->actionFunc == EnBb_Attack) { - EnBb_SetupFlyIdle(this); - } + if (this->actionFunc == EnBb_Attack) { + EnBb_SetupFlyIdle(this); } } } 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 297445c66..b8e42ff66 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 @@ -205,6 +205,9 @@ void EnBba01_Talk(EnHy* this, PlayState* play) { this->actionFunc = this->prevActionFunc; this->prevActionFunc = NULL; break; + + default: + break; } } 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 9778bd785..d9fb276c5 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -153,7 +153,7 @@ static InitChainEntry sInitChain[] = { * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the * limb is not part of the bodyParts arrays. */ -static s8 sLimbIndexToBodyPartsIndex[] = { +static s8 sLimbIndexToBodyPartsIndex[BUBBLE_LIMB_MAX] = { -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, 2, -1, 3, }; 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 1c2d1ed0f..0e8727c45 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -94,7 +94,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = 10; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); - SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->morphTable, this->jointTable, + SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->jointTable, this->morphTable, OBJECT_BEE_LIMB_MAX); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -123,7 +123,8 @@ void EnBee_SetupFlyIdle(EnBee* this) { Vec3f tempPos; s16 yawOffset; - Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f); + Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), + ANIMMODE_LOOP, -10.0f); Math_Vec3f_Copy(&tempPos, &this->actor.home.pos); yawOffset = (this->instanceId * 0x700) + 0x2000; @@ -181,7 +182,8 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) { } void EnBee_SetupAttack(EnBee* this) { - Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f); + Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), + ANIMMODE_LOOP, -10.0f); this->isHostile = true; this->actionFunc = EnBee_Attack; } diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.h b/src/overlays/actors/ovl_En_Bee/z_en_bee.h index b1773a5ca..5266ca444 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h @@ -16,8 +16,8 @@ typedef enum { typedef struct EnBee { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s morphTable[OBJECT_BEE_LIMB_MAX]; - /* 0x1C4 */ Vec3s jointTable[OBJECT_BEE_LIMB_MAX]; + /* 0x188 */ Vec3s jointTable[OBJECT_BEE_LIMB_MAX]; + /* 0x1C4 */ Vec3s morphTable[OBJECT_BEE_LIMB_MAX]; /* 0x200 */ EnBeeActionFunc actionFunc; /* 0x204 */ s16 attackDelayTimer; /* 0x206 */ s16 sfxHitTimer; diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index f73657d4d..9e5641aad 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -34,9 +34,9 @@ void EnBh_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.01f); - SkelAnime_InitFlex(play, &this->skelanime, &gBhSkel, &gBhFlyingAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gBhSkel, &gBhFlyingAnim, this->jointTable, this->morphTable, OBJECT_BH_LIMB_MAX); - Animation_PlayLoop(&this->skelanime, &gBhFlyingAnim); + Animation_PlayLoop(&this->skelAnime, &gBhFlyingAnim); this->actionFunc = func_80C22DEC; } @@ -80,17 +80,17 @@ void func_80C22DEC(EnBh* this, PlayState* play) { Math_ApproachS(&this->actor.world.rot.z, -zRot, 0xA, this->step); Math_ApproachS(&this->step, 0x200, 1, 0x10); - if ((s32)this->skelanime.playSpeed == 0) { + if ((s32)this->skelAnime.playSpeed == 0) { if (this->timer == 0) { - this->skelanime.playSpeed = 1.0f; + this->skelAnime.playSpeed = 1.0f; this->timer = Rand_ZeroFloat(70.0f) + 50.0f; } else if (((this->timer & 7) == 7) && (Rand_ZeroOne() < 0.5f)) { this->unk1E4 = Rand_CenteredFloat(3000.0f); } } else { - SkelAnime_Update(&this->skelanime); - if ((this->timer == 0) && Animation_OnFrame(&this->skelanime, 6.0f)) { - this->skelanime.playSpeed = 0.0f; + SkelAnime_Update(&this->skelAnime); + if ((this->timer == 0) && Animation_OnFrame(&this->skelAnime, 6.0f)) { + this->skelAnime.playSpeed = 0.0f; this->timer = Rand_ZeroFloat(50.0f) + 50.0f; } } @@ -116,6 +116,6 @@ void EnBh_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateZS(this->unk1E2, MTXMODE_APPLY); - SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.h b/src/overlays/actors/ovl_En_Bh/z_en_bh.h index a3c88fb58..9876182f0 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.h +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.h @@ -10,7 +10,7 @@ typedef void (*EnBhActionFunc)(struct EnBh*, PlayState*); typedef struct EnBh { /* 0x000 */ Actor actor; - /* 0x144 */ SkelAnime skelanime; + /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[OBJECT_BH_LIMB_MAX]; /* 0x1AC */ Vec3s morphTable[OBJECT_BH_LIMB_MAX]; /* 0x1D0 */ Vec3f pos; diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 6088b541e..0323e29c7 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -564,11 +564,11 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec EnBigokuta* this = THIS; s32 envColor; s16 rotX; - f32 lastFrame; + f32 endFrame; if (this->actionFunc == EnBigokuta_PlayDeathEffects) { - lastFrame = Animation_GetLastFrame(&gBigOctoDeathAnim); - envColor = ((255.0f / lastFrame) * (lastFrame - this->skelAnime.curFrame)); + endFrame = Animation_GetLastFrame(&gBigOctoDeathAnim); + envColor = ((255.0f / endFrame) * (endFrame - this->skelAnime.curFrame)); } else { envColor = 255; } @@ -628,7 +628,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec } void EnBigokuta_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { - static s8 D_80AC45BC[] = { + static s8 D_80AC45BC[BIGOKUTA_LIMB_MAX] = { -1, -1, -1, 0, -1, 1, -1, 2, -1, 3, 8, 4, -1, 5, -1, -1, -1, -1, 6, 7, }; static Vec3f D_80AC45D0[] = { 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 b1e08cd7e..4752db039 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -161,7 +161,7 @@ static InitChainEntry sInitChain[] = { static Vec3f D_80B6506C = { 0.0f, 3.0f, 0.0f }; // bytes per limb, used in draw func? bit over my head -static u8 D_80B65078[] = { +static u8 D_80B65078[BIG_POE_LIMB_MAX] = { -1, 4, -1, 0, -1, 1, -1, 2, 5, 3, }; @@ -180,9 +180,9 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); - this->switchFlags = BIGPO_GET_SWITCHFLAGS(thisx); + this->switchFlags = BIG_POE_GET_SWITCHFLAGS(thisx); thisx->params &= 0xFF; - if (thisx->params == ENBIGPO_POSSIBLEFIRE) { + if (thisx->params == BIG_POE_TYPE_POSSIBLE_FIRE) { if (Flags_GetSwitch(play, this->switchFlags)) { Actor_Kill(&this->actor); return; @@ -193,8 +193,8 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { return; } - SkelAnime_Init(play, &this->skelAnime, &gBigpoSkeleton, &gBigpoFloatAnim, this->jointTable, this->morphTable, - ENBIGPO_LIMBCOUNT); + SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkeleton, &gBigPoeFloatAnim, this->jointTable, this->morphTable, + BIG_POE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&thisx->colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -218,11 +218,11 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { Actor_Kill(&this->actor); } - if (thisx->params == ENBIGPO_REGULAR) { // the well poe, starts immediately - thisx->flags &= ~ACTOR_FLAG_10; // always update OFF + if (thisx->params == BIG_POE_TYPE_REGULAR) { // the well poe, starts immediately + thisx->flags &= ~ACTOR_FLAG_10; // always update OFF this->storePrevBgm = true; EnBigpo_InitWellBigpo(this); - } else if (thisx->params == ENBIGPO_SUMMONED) { // dampe type + } else if (thisx->params == BIG_POE_TYPE_SUMMONED) { // dampe type EnBigpo_InitDampeMainPo(this); } } @@ -232,10 +232,9 @@ void EnBigpo_Destroy(Actor* thisx, PlayState* play2) { EnBigpo* this = THIS; s32 fireCount; - if ((this->actor.params != ENBIGPO_POSSIBLEFIRE) && (this->actor.params != ENBIGPO_CHOSENFIRE) && - (this->actor.params != ENBIGPO_REVEALEDFIRE) && (this->actor.params != ENBIGPO_UNK5)) { - // if NOT a fire type, *ENBIGPO_REGULAR and ENBIGPO_SUMMONED (combat types only) - if (1) {} + if ((thisx->params != BIG_POE_TYPE_POSSIBLE_FIRE) && (thisx->params != BIG_POE_TYPE_CHOSEN_FIRE) && + (thisx->params != BIG_POE_TYPE_REVEALED_FIRE) && (thisx->params != BIG_POE_TYPE_UNK5)) { + // if NOT a fire type, *BIG_POE_TYPE_REGULAR and BIG_POE_TYPE_SUMMONED (combat types only) for (fireCount = 0; fireCount < ARRAY_COUNT(this->fires); fireCount++) { LightContext_RemoveLight(play, &play->lightCtx, this->fires[fireCount].light); } @@ -303,9 +302,9 @@ void EnBigpo_WaitCutsceneQueue(EnBigpo* this, PlayState* play) { CutsceneManager_Start(this->actor.csId, &this->actor); func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); - if (this->actor.params == ENBIGPO_REGULAR) { // and SUMMONED, got switched earlier + if (this->actor.params == BIG_POE_TYPE_REGULAR) { // and SUMMONED, got switched earlier EnBigpo_SpawnCutsceneStage1(this, play); - } else { // ENBIGPO_REVEALEDFIRE + } else { // BIG_POE_TYPE_REVEALED_FIRE EnBigpo_SetupFlameCirclePositions(this, play); } } else { @@ -392,7 +391,7 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, PlayState* play) { * big poe starts to visibly appear */ void EnBigpo_SpawnCutsceneStage5(EnBigpo* this) { - Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim); + Animation_PlayLoop(&this->skelAnime, &gBigPoeAwakenStretchAnim); this->actor.draw = EnBigpo_DrawMainBigpo; Actor_SetScale(&this->actor, 0.014f); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR); @@ -460,7 +459,7 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) { subCam = Play_GetCamera(play, this->subCamId); Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; - if (this->actor.params == ENBIGPO_SUMMONED) { + if (this->actor.params == BIG_POE_TYPE_SUMMONED) { dampe = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_TK); if (dampe != NULL) { // if dampe exists, switch to viewing his running away cutscene @@ -468,7 +467,7 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) { } else { CutsceneManager_Stop(this->actor.csId); } - } else { // ENBIGPO_REGULAR + } else { // BIG_POE_TYPE_REGULAR CutsceneManager_Stop(this->actor.csId); } func_800B724C(play, &this->actor, PLAYER_CSMODE_END); @@ -506,7 +505,7 @@ void EnBigpo_SetupWarpIn(EnBigpo* this, PlayState* play) { s16 randomYaw = ((s32)Rand_Next() >> 0x14) + this->actor.yawTowardsPlayer; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR); - Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim); + Animation_PlayLoop(&this->skelAnime, &gBigPoeAwakenStretchAnim); this->rotVelocity = 0x2000; this->actor.world.pos.x = (Math_SinS(randomYaw) * distance) + player->actor.world.pos.x; this->actor.world.pos.z = (Math_CosS(randomYaw) * distance) + player->actor.world.pos.z; @@ -533,7 +532,7 @@ void EnBigpo_WarpingIn(EnBigpo* this, PlayState* play) { } void EnBigpo_SetupIdleFlying(EnBigpo* this) { - Animation_MorphToLoop(&this->skelAnime, &gBigpoFloatAnim, -5.0f); + Animation_MorphToLoop(&this->skelAnime, &gBigPoeFloatAnim, -5.0f); // if poe missed attack, idle 4 seconds, otherwise its reappearing: attack immediately this->idleTimer = (this->actionFunc == EnBigpo_SpinningDown) ? 80 : 0; this->hoverHeightCycleTimer = 40; @@ -644,7 +643,7 @@ void EnBigpo_SpinningDown(EnBigpo* this, PlayState* play) { * called by EnBigpo_ApplyDamage */ void EnBigpo_HitStun(EnBigpo* this) { - Animation_MorphToPlayOnce(&this->skelAnime, &gBigpoShockAnim, -6.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gBigPoeShockAnim, -6.0f); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 16); this->collider.base.acFlags &= ~AC_ON; func_800BE504(&this->actor, &this->collider); @@ -754,7 +753,7 @@ void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) { } EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10, - gBigpoDrawLanternFallingDL); + gBigPoeLanternFallingDL); EnBigpo_SpawnScoopSoul(this); } } @@ -860,7 +859,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { // count the number of possible fires we can find (4 in vanilla) for (enemyPtr = GET_FIRST_ENEMY(play); enemyPtr != NULL; enemyPtr = enemyPtr->next) { - if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == BIG_POE_TYPE_POSSIBLE_FIRE)) { fireCount++; } } @@ -881,10 +880,10 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { randomIndex = ((s32)Rand_ZeroFloat(fireCount)) % fireCount; while (enemyPtr != NULL) { - if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == BIG_POE_TYPE_POSSIBLE_FIRE)) { if (randomIndex == 0) { randomFirePo = (EnBigpo*)enemyPtr; - randomFirePo->actor.params = ENBIGPO_CHOSENFIRE; + randomFirePo->actor.params = BIG_POE_TYPE_CHOSEN_FIRE; Math_Vec3f_Copy(&this->fires[fireIndex].pos, &randomFirePo->actor.world.pos); randomFirePo->actor.parent = (Actor*)this; randomFirePo->actor.update = EnBigpo_UpdateFire; @@ -901,9 +900,9 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { this->actor.child = &randomFirePo->actor; } break; - } else { - randomIndex--; } + + randomIndex--; } enemyPtr = enemyPtr->next; } @@ -911,7 +910,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { // remove unused fires for (enemyPtr = GET_FIRST_ENEMY(play); enemyPtr != NULL; enemyPtr = enemyPtr->next) { - if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == BIG_POE_TYPE_POSSIBLE_FIRE)) { randomFirePo = (EnBigpo*)enemyPtr; randomFirePo->actionFunc = EnBigpo_Die; randomFirePo->actor.update = EnBigpo_UpdateFire; @@ -934,7 +933,7 @@ void EnBigpo_FireCounting(EnBigpo* this, PlayState* play) { s32 activatedFireCount = 0; for (firePo = (EnBigpo*)this->actor.child; firePo; firePo = (EnBigpo*)firePo->actor.child) { - if (firePo->actor.params == ENBIGPO_REVEALEDFIRE && firePo->actionFunc == EnBigpo_RevealedFireIdle) { + if ((firePo->actor.params == BIG_POE_TYPE_REVEALED_FIRE) && (firePo->actionFunc == EnBigpo_RevealedFireIdle)) { activatedFireCount++; } } @@ -973,10 +972,10 @@ void EnBigpo_InitHiddenFire(EnBigpo* this) { /* * idle until dampe finds this file by - * changing this file params from ENBIGPO_POSSIBLEFIRE into ENBIGPO_REVEALEDFIRE + * changing this file params from BIG_POE_TYPE_POSSIBLE_FIRE into BIG_POE_TYPE_REVEALED_FIRE */ void EnBigpo_WaitingForDampe(EnBigpo* this, PlayState* play) { - if (this->actor.params == ENBIGPO_REVEALEDFIRE) { + if (this->actor.params == BIG_POE_TYPE_REVEALED_FIRE) { EnBigpo_SetupFireRevealed(this); } } @@ -1011,11 +1010,11 @@ void EnBigpo_RevealedFireIdle(EnBigpo* this, PlayState* play) { if (this->idleTimer > 0) { if (this->idleTimer == 0) { //! @bug: unreachable code - this->actor.params = ENBIGPO_UNK5; + this->actor.params = BIG_POE_TYPE_UNK5; } } else { if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.001f)) { - this->actor.params = ENBIGPO_CHOSENFIRE; + this->actor.params = BIG_POE_TYPE_CHOSEN_FIRE; EnBigpo_InitHiddenFire(this); } this->actor.scale.z = this->actor.scale.x; @@ -1124,7 +1123,7 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD); Enemy_StartFinishingBlow(play, &this->actor); - if (this->actor.params == ENBIGPO_SUMMONED) { // dampe type + if (this->actor.params == BIG_POE_TYPE_SUMMONED) { // dampe type Audio_RestorePrevBgm(); } } else { @@ -1205,7 +1204,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) { this->drawDmgEffAlpha = this->mainColor.a * (1.0f / 255.0f); } } - this->drawDmgEffScale = ((this->drawDmgEffAlpha + 1.0f) * 0.5f); + this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.5f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.0f); } } @@ -1224,7 +1223,7 @@ s32 EnBigpo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* Gfx** gfx) { EnBigpo* this = THIS; // not fully invisible - if ((this->mainColor.a == 0) || (limbIndex == 7) || + if ((this->mainColor.a == 0) || (limbIndex == BIG_POE_LIMB_LANTERN) || ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2))) { *dList = NULL; } @@ -1241,12 +1240,13 @@ void EnBigpo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro OPEN_DISPS(play->state.gfxCtx); - if ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2) && (limbIndex == 8)) { + if ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2) && + (limbIndex == BIG_POE_LIMB_HAT_AND_CLOAK)) { gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList((*gfx)++, &gBigpoDrawCrispyBodyDL); + gSPDisplayList((*gfx)++, &gBigPoeCrispyBodyDL); } - if (limbIndex == 7) { + if (limbIndex == BIG_POE_LIMB_LANTERN) { // we scale the vec3f... then do nothing with it? Matrix_MultVecY(1400.0f, &unusedVec); if ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer > 18)) { @@ -1347,7 +1347,7 @@ void EnBigpo_DrawScoopSoul(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &gBigpoDrawSoulDL); + gSPDisplayList(POLY_XLU_DISP++, &gBigPoeSoulDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1393,9 +1393,9 @@ void EnBigpo_DrawLantern(Actor* thisx, PlayState* play) { gSPMatrix(&dispHead[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(&dispHead[4], &gBigpoDrawLanternMainDL); + gSPDisplayList(&dispHead[4], &gBigPoeLanternMainDL); - gSPDisplayList(&dispHead[5], &gBigpoDrawLanternPurpleTopDL); + gSPDisplayList(&dispHead[5], &gBigPoeLanternPurpleTopDL); // fully transparent OR fully invisible if ((this->mainColor.a == 255) || (this->mainColor.a == 0)) { diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index b532d6d08..d622abc0f 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -2,6 +2,7 @@ #define Z_EN_BIGPO_H #include "global.h" +#include "objects/object_bigpo/object_bigpo.h" struct EnBigpo; @@ -13,9 +14,6 @@ typedef struct EnBigpoFireEffect { /* 0x10 */ LightInfo info; // size 0xE } EnBigpoFireEffect; // size = 0x20 -#define ENBIGPO_LIMBCOUNT 10 - - // idleTimer gets reused: // * after dampe reveals a fire, 8 minutes of frames before it goes away again // * used by flames and regular bigpo to count frames during the appearance cutscene @@ -27,8 +25,8 @@ typedef struct EnBigpoFireEffect { typedef struct EnBigpo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[ENBIGPO_LIMBCOUNT]; - /* 0x1C4 */ Vec3s morphTable[ENBIGPO_LIMBCOUNT]; + /* 0x188 */ Vec3s jointTable[BIG_POE_LIMB_MAX]; + /* 0x1C4 */ Vec3s morphTable[BIG_POE_LIMB_MAX]; /* 0x200 */ EnBigPoActionFunc actionFunc; /* 0x204 */ u8 storePrevBgm; /* 0x206 */ s16 idleTimer; // frame counter @@ -56,14 +54,14 @@ typedef struct EnBigpo { // well version is "regular" (spawns automatically), dampe basement version is "summoned" // on room enter, 3 "possiblefire" are turned into "chosenfire" at random typedef enum EnBigpoType { - /* 0 */ ENBIGPO_REGULAR, - /* 1 */ ENBIGPO_SUMMONED, - /* 2 */ ENBIGPO_POSSIBLEFIRE, - /* 3 */ ENBIGPO_CHOSENFIRE, - /* 4 */ ENBIGPO_REVEALEDFIRE, - /* 5 */ ENBIGPO_UNK5 + /* 0 */ BIG_POE_TYPE_REGULAR, + /* 1 */ BIG_POE_TYPE_SUMMONED, + /* 2 */ BIG_POE_TYPE_POSSIBLE_FIRE, + /* 3 */ BIG_POE_TYPE_CHOSEN_FIRE, + /* 4 */ BIG_POE_TYPE_REVEALED_FIRE, + /* 5 */ BIG_POE_TYPE_UNK5 } EnBigpoType; -#define BIGPO_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) +#define BIG_POE_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) #endif // Z_EN_BIGPO_H 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 1c68504dd..43a48f2b2 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -953,7 +953,7 @@ void EnBigslime_SetupCutsceneStartBattle(EnBigslime* this, PlayState* play) { } void EnBigslime_CutsceneStartBattle(EnBigslime* this, PlayState* play) { - if (this->isAnimUpdate) { + if (this->isAnimFinished) { EnBigslime_SetupCutsceneNoticePlayer(this); } else if (!this->isInitJump && Math_ScaledStepToS(&this->gekkoRot.y, this->actor.yawTowardsPlayer, 0x200)) { Animation_PlayOnce(&this->skelAnime, &gGekkoSurpriseJumpAnim); @@ -1004,7 +1004,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; EnBigslime_SetupIdleNoticePlayer(this); } - } else if (this->isAnimUpdate) { + } else if (this->isAnimFinished) { Animation_PlayLoop(&this->skelAnime, &gGekkoNervousIdleAnim); EnBigslime_UpdateCameraIntroCs(this, play, 25); Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS); @@ -1610,7 +1610,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { EnBigslime_Scale(this, pitch, ((this->scaleFactor * 0.08f) + 0.2f) * 0.15f, ((this->scaleFactor * 0.08f) + 0.2f) * 0.05f); player->actor.world.pos.y = this->actor.world.pos.y + (this->actor.scale.y * -500.0f); - if (this->isAnimUpdate) { + if (this->isAnimFinished) { this->numGekkoMeleeAttacks--; if (this->numGekkoMeleeAttacks == 0) { this->numGekkoPosGrabPlayer--; @@ -2102,7 +2102,7 @@ void EnBigslime_IdleLookAround(EnBigslime* this, PlayState* play) { s16 yawDiff; this->idleTimer--; - if (this->isAnimUpdate) { + if (this->isAnimFinished) { if (Rand_ZeroOne() < 0.25f) { Animation_PlayOnce(&this->skelAnime, &gGekkoLookAroundAnim); } else { @@ -2138,7 +2138,7 @@ void EnBigslime_IdleNoticePlayer(EnBigslime* this, PlayState* play) { if (this->skelAnime.curFrame > 10.0f) { Math_ScaledStepToS(yaw, this->gekkoYaw, 0x800); } - if (this->isAnimUpdate) { + if (this->isAnimFinished) { EnBigslime_SetupJumpGekko(this); } } @@ -2159,7 +2159,7 @@ void EnBigslime_ThrowMinislime(EnBigslime* this, PlayState* play) { EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_THROW_SLIME); this->minislimeToThrow->actor.params = MINISLIME_GEKKO_THROW; } - if (this->isAnimUpdate) { + if (this->isAnimFinished) { jumpTimerStored = this->jumpTimer; // Stores jumpTimer so it doesn't get overwritten back to 100 EnBigslime_SetupJumpGekko(this); this->jumpTimer = jumpTimerStored; @@ -2287,7 +2287,7 @@ void EnBigslime_FormBigslime(EnBigslime* this, PlayState* play) { Animation_PlayLoop(&this->skelAnime, &gGekkoSwimForwardAnim); this->formBigslimeCutsceneTimer--; Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_COMBINE); - } else if (this->isAnimUpdate) { + } else if (this->isAnimFinished) { this->formBigslimeCutsceneTimer--; if (this->formBigslimeCutsceneTimer == 0) { Animation_PlayLoop(&this->skelAnime, &gGekkoSwimUpAnim); @@ -2783,7 +2783,7 @@ void EnBigslime_UpdateBigslime(Actor* thisx, PlayState* play) { Audio_SetSfxUnderwaterReverb(true); this->dynamicVtxState ^= 1; EnBigslime_DynamicVtxCopyState(this); - this->isAnimUpdate = SkelAnime_Update(&this->skelAnime); + this->isAnimFinished = SkelAnime_Update(&this->skelAnime); if (this->actionFunc != EnBigslime_PlayCutscene) { EnBigslime_ApplyDamageEffectBigslime(this, play); } else { @@ -2826,7 +2826,7 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) { } Audio_SetSfxUnderwaterReverb(false); - this->isAnimUpdate = SkelAnime_Update(&this->skelAnime); + this->isAnimFinished = SkelAnime_Update(&this->skelAnime); if (this->actionFunc != EnBigslime_PlayCutscene) { EnBigslime_ApplyDamageEffectGekko(this, play); } else { diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h index 8f2b5bee3..2f7183e45 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h @@ -57,7 +57,7 @@ typedef struct EnBigslime { /* 0x0220 */ Vec3s morphTable[GEKKO_LIMB_MAX]; /* 0x02B0 */ u8 minislimeState; /* 0x02B1 */ u8 dynamicVtxState; // Toggles between two states of dynamic Vtx - /* 0x02B2 */ u8 isAnimUpdate; + /* 0x02B2 */ u8 isAnimFinished; /* 0x02B3 */ union { u8 formBigslimeTimer; // Bigslime will start forming when timer reaches 0 u8 minislimeCounter; 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 01bf4a522..8eb598c04 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 @@ -15,20 +15,15 @@ void EnBji01_Destroy(Actor* thisx, PlayState* play); void EnBji01_Update(Actor* thisx, PlayState* play); void EnBji01_Draw(Actor* thisx, PlayState* play); -void func_809CCE98(EnBji01* this, PlayState* play); void func_809CCEE8(EnBji01* this, PlayState* play); void func_809CD028(EnBji01* this, PlayState* play); void EnBji01_DialogueHandler(EnBji01* this, PlayState* play); -void func_809CCDE0(EnBji01* this, PlayState* play); void func_809CD634(EnBji01* this, PlayState* play); void EnBji01_DoNothing(EnBji01* this, PlayState* play); void func_809CD6C0(EnBji01* this, PlayState* play); void func_809CD70C(EnBji01* this, PlayState* play); void func_809CD77C(EnBji01* this, PlayState* play); -s32 EnBji01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); -void EnBji01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx); - ActorInit En_Bji_01_InitVars = { ACTOR_EN_BJI_01, ACTORCAT_NPC, @@ -61,12 +56,20 @@ static ColliderCylinderInit sCylinderInit = { { 18, 64, 0, { 0, 0, 0 } }, }; -/* Animations struct */ -static AnimationSpeedInfo sAnimationInfo[] = { - { &object_bji_Anim_000FDC, 1.0f, ANIMMODE_LOOP, 0.0f }, /* Looking through telescope */ - { &object_bji_Anim_005B58, 1.0f, ANIMMODE_LOOP, 10.0f }, /* Breathing? Unused? */ - { &object_bji_Anim_000AB0, 1.0f, ANIMMODE_LOOP, 0.0f }, /* Talking */ - { &object_bji_Anim_00066C, 1.0f, ANIMMODE_ONCE, -5.0f }, /* Scratching chin? */ +typedef enum { + /* -1 */ SHIKASHI_ANIM_NONE = -1, + /* 0 */ SHIKASHI_ANIM_LOOK_THROUGH_TELESCOPE, + /* 1 */ SHIKASHI_ANIM_BREATHE, + /* 2 */ SHIKASHI_ANIM_TALK, + /* 3 */ SHIKASHI_ANIM_SCRATCH_CHIN, + /* 4 */ SHIKASHI_ANIM_MAX +} ShikashiAnimation; + +static AnimationSpeedInfo sAnimationSpeedInfo[SHIKASHI_ANIM_MAX] = { + { &object_bji_Anim_000FDC, 1.0f, ANIMMODE_LOOP, 0.0f }, // SHIKASHI_ANIM_LOOK_THROUGH_TELESCOPE + { &object_bji_Anim_005B58, 1.0f, ANIMMODE_LOOP, 10.0f }, // SHIKASHI_ANIM_BREATHE + { &object_bji_Anim_000AB0, 1.0f, ANIMMODE_LOOP, 0.0f }, // SHIKASHI_ANIM_TALK + { &object_bji_Anim_00066C, 1.0f, ANIMMODE_ONCE, -5.0f }, // SHIKASHI_ANIM_SCRATCH_CHIN }; void func_809CCDE0(EnBji01* this, PlayState* play) { @@ -82,7 +85,8 @@ void func_809CCDE0(EnBji01* this, PlayState* play) { } void func_809CCE98(EnBji01* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 0, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, SHIKASHI_ANIM_LOOK_THROUGH_TELESCOPE, + &this->animIndex); this->actor.textId = 0; this->actionFunc = func_809CCEE8; } @@ -208,7 +212,7 @@ void func_809CD028(EnBji01* this, PlayState* play) { default: break; } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 2, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, SHIKASHI_ANIM_TALK, &this->animIndex); this->actionFunc = EnBji01_DialogueHandler; } @@ -265,7 +269,8 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; switch (play->msgCtx.currentTextId) { case 0x5DE: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 3, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + SHIKASHI_ANIM_SCRATCH_CHIN, &this->animIndex); Message_ContinueTextbox(play, 0x5DF); break; @@ -328,8 +333,8 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) { default: break; } - if ((this->animIndex == 3) && (this->skelAnime.curFrame == this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 2, &this->animIndex); + if ((this->animIndex == SHIKASHI_ANIM_SCRATCH_CHIN) && (this->skelAnime.curFrame == this->skelAnime.endFrame)) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, SHIKASHI_ANIM_TALK, &this->animIndex); } } @@ -348,7 +353,7 @@ void EnBji01_DoNothing(EnBji01* this, PlayState* play) { } void func_809CD6C0(EnBji01* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 2, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, SHIKASHI_ANIM_TALK, &this->animIndex); this->actionFunc = func_809CD70C; } @@ -378,7 +383,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.targetMode = 0; this->actor.child = NULL; - this->animIndex = -1; + this->animIndex = SHIKASHI_ANIM_NONE; Actor_SetScale(&this->actor, 0.01f); SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList)); @@ -421,7 +426,8 @@ void EnBji01_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (this->blinkTimer-- <= 0) { - if (--this->blinkSeqIndex < 0) { + this->blinkSeqIndex--; + if (this->blinkSeqIndex < 0) { this->blinkSeqIndex = 4; this->blinkTimer = (Rand_ZeroOne() * 60.0f) + 20.0f; } else { @@ -450,10 +456,14 @@ s32 EnBji01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* rot->x += this->torsoXRotStep; rot->z += this->torsoZRotStep; break; + case SHIKASHI_LIMB_HEAD: rot->x += this->headXRotStep; rot->z += this->headZRotStep; break; + + default: + break; } return false; } diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index dbcd864b1..09f70d069 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -87,16 +87,17 @@ typedef enum { /* 2 */ TOILET_HAND_ANIM_WAGGING_FINGER, // Wrong /* 3 */ TOILET_HAND_ANIM_THUMBS_UP, // Right /* 4 */ TOILET_HAND_ANIM_OPEN_HAND, - /* 5 */ TOILET_HAND_ANIM_FIST // i.e. holding the reward + /* 5 */ TOILET_HAND_ANIM_FIST, // i.e. holding the reward + /* 6 */ TOILET_HAND_ANIM_MAX } ToiletHandAnimation; -static AnimationInfoS sAnimationInfo[] = { - /* 0 */ { &gToiletHandWaitingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - /* 1 */ { &gToiletHandWaitingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - /* 2 */ { &gToiletHandWaggingFingerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - /* 3 */ { &gToiletHandThumbsUpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - /* 4 */ { &gToiletHandOpenHandAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - /* 5 */ { &gToiletHandFistAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +static AnimationInfoS sAnimationInfo[TOILET_HAND_ANIM_MAX] = { + { &gToiletHandWaitingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // TOILET_HAND_ANIM_WAITING + { &gToiletHandWaitingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // TOILET_HAND_ANIM_WAITING_MORPH + { &gToiletHandWaggingFingerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // TOILET_HAND_ANIM_WAGGING_FINGER + { &gToiletHandThumbsUpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // TOILET_HAND_ANIM_THUMBS_UP + { &gToiletHandOpenHandAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // TOILET_HAND_ANIM_OPEN_HAND + { &gToiletHandFistAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // TOILET_HAND_ANIM_FIST }; void EnBjt_UpdateSkelAnime(EnBjt* this) { @@ -106,7 +107,7 @@ void EnBjt_UpdateSkelAnime(EnBjt* this) { s32 EnBjt_ChangeAnim(EnBjt* this, s32 animIndex) { s32 changeAnim = false; - s32 changed = false; + s32 didAnimChange = false; if ((animIndex == TOILET_HAND_ANIM_WAITING) || (animIndex == TOILET_HAND_ANIM_WAITING_MORPH)) { if ((this->animIndex != TOILET_HAND_ANIM_WAITING) && (this->animIndex != TOILET_HAND_ANIM_WAITING_MORPH)) { @@ -118,11 +119,11 @@ s32 EnBjt_ChangeAnim(EnBjt* this, s32 animIndex) { if (changeAnim) { this->animIndex = animIndex; - changed = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); this->animPlaySpeed = this->skelAnime.playSpeed; } - return changed; + return didAnimChange; } void EnBjt_UpdateCollision(EnBjt* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c index bd4b0e499..1dc827057 100644 --- a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c +++ b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c @@ -29,9 +29,12 @@ ActorInit En_Boj_01_InitVars = { void EnBoj01_Init(Actor* thisx, PlayState* play) { } + void EnBoj01_Destroy(Actor* thisx, PlayState* play) { } + void EnBoj01_Update(Actor* thisx, PlayState* play) { } + void EnBoj01_Draw(Actor* thisx, PlayState* play) { } diff --git a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c index 89f6ba0cb..c5cff183a 100644 --- a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c +++ b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c @@ -29,9 +29,12 @@ ActorInit En_Boj_02_InitVars = { void EnBoj02_Init(Actor* thisx, PlayState* play) { } + void EnBoj02_Destroy(Actor* thisx, PlayState* play) { } + void EnBoj02_Update(Actor* thisx, PlayState* play) { } + void EnBoj02_Draw(Actor* thisx, PlayState* play) { } diff --git a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c index 0c55b79a6..f72a5c081 100644 --- a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c +++ b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c @@ -29,9 +29,12 @@ ActorInit En_Boj_03_InitVars = { void EnBoj03_Init(Actor* thisx, PlayState* play) { } + void EnBoj03_Destroy(Actor* thisx, PlayState* play) { } + void EnBoj03_Update(Actor* thisx, PlayState* play) { } + void EnBoj03_Draw(Actor* thisx, PlayState* play) { } diff --git a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c index 7fe308520..efb7e96df 100644 --- a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c +++ b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c @@ -29,9 +29,12 @@ ActorInit En_Boj_04_InitVars = { void EnBoj04_Init(Actor* thisx, PlayState* play) { } + void EnBoj04_Destroy(Actor* thisx, PlayState* play) { } + void EnBoj04_Update(Actor* thisx, PlayState* play) { } + void EnBoj04_Draw(Actor* thisx, PlayState* play) { } diff --git a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c index da6816840..2a6991922 100644 --- a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c +++ b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c @@ -29,9 +29,12 @@ ActorInit En_Boj_05_InitVars = { void EnBoj05_Init(Actor* thisx, PlayState* play) { } + void EnBoj05_Destroy(Actor* thisx, PlayState* play) { } + void EnBoj05_Update(Actor* thisx, PlayState* play) { } + void EnBoj05_Draw(Actor* thisx, PlayState* play) { } 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 19f2e1d9b..5c98a2763 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 @@ -49,16 +49,75 @@ ActorInit En_Bom_Bowl_Man_InitVars = { (ActorFunc)EnBomBowlMan_Draw, }; -static AnimationHeader* sAnimations[] = { - &gBomberIdleAnim, &object_cs_Anim_00FAF4, &object_cs_Anim_0057C8, &object_cs_Anim_0053F4, - &object_cs_Anim_002044, &object_cs_Anim_01007C, &object_cs_Anim_00349C, &object_cs_Anim_004960, - &object_cs_Anim_005128, &object_cs_Anim_004C1C, &object_cs_Anim_001A1C, &object_cs_Anim_003EE4, - &object_cs_Anim_00478C, &object_cs_Anim_00433C, &object_cs_Anim_0060E8, &object_cs_Anim_001708, - &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, &object_cs_Anim_0036B0, &object_cs_Anim_0031C4, +typedef enum { + /* -1 */ ENBOMBOWLMAN_ANIM_NONE = -1, + /* 0x00 */ ENBOMBOWLMAN_ANIM_0, + /* 0x01 */ ENBOMBOWLMAN_ANIM_1, + /* 0x02 */ ENBOMBOWLMAN_ANIM_2, + /* 0x03 */ ENBOMBOWLMAN_ANIM_3, + /* 0x04 */ ENBOMBOWLMAN_ANIM_4, + /* 0x05 */ ENBOMBOWLMAN_ANIM_5, + /* 0x06 */ ENBOMBOWLMAN_ANIM_6, + /* 0x07 */ ENBOMBOWLMAN_ANIM_7, + /* 0x08 */ ENBOMBOWLMAN_ANIM_8, + /* 0x09 */ ENBOMBOWLMAN_ANIM_9, + /* 0x0A */ ENBOMBOWLMAN_ANIM_10, + /* 0x0B */ ENBOMBOWLMAN_ANIM_11, + /* 0x0C */ ENBOMBOWLMAN_ANIM_12, + /* 0x0D */ ENBOMBOWLMAN_ANIM_13, + /* 0x0E */ ENBOMBOWLMAN_ANIM_14, + /* 0x0F */ ENBOMBOWLMAN_ANIM_15, + /* 0x10 */ ENBOMBOWLMAN_ANIM_16, + /* 0x11 */ ENBOMBOWLMAN_ANIM_17, + /* 0x12 */ ENBOMBOWLMAN_ANIM_18, + /* 0x13 */ ENBOMBOWLMAN_ANIM_19, + /* 0x14 */ ENBOMBOWLMAN_ANIM_MAX +} EnBomBowlManAnimation; + +static AnimationHeader* sAnimations[ENBOMBOWLMAN_ANIM_MAX] = { + &gBomberIdleAnim, // ENBOMBOWLMAN_ANIM_0 + &object_cs_Anim_00FAF4, // ENBOMBOWLMAN_ANIM_1 + &object_cs_Anim_0057C8, // ENBOMBOWLMAN_ANIM_2 + &object_cs_Anim_0053F4, // ENBOMBOWLMAN_ANIM_3 + &object_cs_Anim_002044, // ENBOMBOWLMAN_ANIM_4 + &object_cs_Anim_01007C, // ENBOMBOWLMAN_ANIM_5 + &object_cs_Anim_00349C, // ENBOMBOWLMAN_ANIM_6 + &object_cs_Anim_004960, // ENBOMBOWLMAN_ANIM_7 + &object_cs_Anim_005128, // ENBOMBOWLMAN_ANIM_8 + &object_cs_Anim_004C1C, // ENBOMBOWLMAN_ANIM_9 + &object_cs_Anim_001A1C, // ENBOMBOWLMAN_ANIM_10 + &object_cs_Anim_003EE4, // ENBOMBOWLMAN_ANIM_11 + &object_cs_Anim_00478C, // ENBOMBOWLMAN_ANIM_12 + &object_cs_Anim_00433C, // ENBOMBOWLMAN_ANIM_13 + &object_cs_Anim_0060E8, // ENBOMBOWLMAN_ANIM_14 + &object_cs_Anim_001708, // ENBOMBOWLMAN_ANIM_15 + &object_cs_Anim_005DC4, // ENBOMBOWLMAN_ANIM_16 + &object_cs_Anim_0026B0, // ENBOMBOWLMAN_ANIM_17 + &object_cs_Anim_0036B0, // ENBOMBOWLMAN_ANIM_18 + &object_cs_Anim_0031C4, // ENBOMBOWLMAN_ANIM_19 }; -u8 D_809C6178[] = { - 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, +static u8 sAnimationModes[ENBOMBOWLMAN_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_0 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_1 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_2 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_3 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_4 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_5 + ANIMMODE_ONCE, // ENBOMBOWLMAN_ANIM_6 + ANIMMODE_ONCE, // ENBOMBOWLMAN_ANIM_7 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_8 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_9 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_10 + ANIMMODE_ONCE, // ENBOMBOWLMAN_ANIM_11 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_12 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_13 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_14 + ANIMMODE_ONCE, // ENBOMBOWLMAN_ANIM_15 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_16 + ANIMMODE_ONCE, // ENBOMBOWLMAN_ANIM_17 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_18 + ANIMMODE_LOOP, // ENBOMBOWLMAN_ANIM_19 }; u16 D_809C618C[] = { 0x710, 0x711, 0x715, 0x716, 0x717, 0x718 }; @@ -77,7 +136,7 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, - this->morphTable, 21); + this->morphTable, OBJECT_CS_LIMB_MAX); this->unk_2F6 = ENBOMBOWLMAN_GET_F0(&this->actor); this->unk_2F4 = ENBOMBOWLMAN_GET_F(&this->actor); this->actor.targetMode = 6; @@ -112,37 +171,37 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { void EnBomBowlMan_Destroy(Actor* thisx, PlayState* play) { } -void func_809C493C(EnBomBowlMan* this, s32 arg1, f32 arg2) { - this->unk_2F8 = arg1; - this->unk_2C4 = Animation_GetLastFrame(sAnimations[arg1]); - Animation_Change(&this->skelAnime, sAnimations[this->unk_2F8], arg2, 0.0f, this->unk_2C4, D_809C6178[this->unk_2F8], - -4.0f); +void EnBomBowlMan_ChangeAnim(EnBomBowlMan* this, s32 animIndex, f32 playSpeed) { + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], -4.0f); } void func_809C49CC(EnBomBowlMan* this) { - if ((this->unk_2F8 == 5) && + if ((this->animIndex == ENBOMBOWLMAN_ANIM_5) && (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2F8 == 0xB) && + if ((this->animIndex == ENBOMBOWLMAN_ANIM_11) && (Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 12.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2F8 == 0x12) && + if ((this->animIndex == ENBOMBOWLMAN_ANIM_18) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2F8 == 0xF) && Animation_OnFrame(&this->skelAnime, 15.0f)) { + if ((this->animIndex == ENBOMBOWLMAN_ANIM_15) && Animation_OnFrame(&this->skelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } - if ((this->unk_2F8 == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) { + if ((this->animIndex == ENBOMBOWLMAN_ANIM_6) && Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } } @@ -171,7 +230,7 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) { s8 code; func_809C4B50(this); - func_809C493C(this, 0, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_0, 1.0f); for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.bomberCode); i++) { Math_Vec3f_Copy(&sp7C, &this->actor.home.pos); @@ -199,7 +258,7 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) { CutsceneManager_Queue(this->csId1); } - func_809C493C(this, 3, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_3, 1.0f); this->unk_2D4 = this->actor.yawTowardsPlayer; this->unk_290 = this->actor.yawTowardsPlayer; CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10); @@ -252,12 +311,12 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { &this->unk_2D8[0]->actor); this->unk_2D4 = 0; this->unk_2BC = 10; - func_809C493C(this, 17, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_17, 1.0f); break; case 1: D_809C6104 = 0; - func_809C493C(this, 3, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_3, 1.0f); this->unk_2D4 = this->actor.yawTowardsPlayer; this->unk_2C0 = 2; if ((player->transformation == PLAYER_FORM_HUMAN) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { @@ -274,7 +333,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { } else { this->unk_2C0 = 3; play->msgCtx.msgLength = 0; - func_809C493C(this, 1, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_1, 1.0f); D_809C6100 = 1; if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -302,7 +361,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { CutsceneManager_Stop(this->csId1); } play->msgCtx.msgLength = 0; - func_809C493C(this, 1, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_1, 1.0f); D_809C6100 = 1; this->actionFunc = func_809C5B1C; sp28 = true; @@ -315,6 +374,9 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { this->actionFunc = func_809C51B4; sp28 = true; break; + + default: + break; } if (!sp28) { @@ -378,7 +440,7 @@ void func_809C53A4(EnBomBowlMan* this) { this->actor.draw = EnBomBowlMan_Draw; this->actor.world.pos.x = 1360.0f; this->actor.world.pos.z = -1870.0f; - func_809C493C(this, 18, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_18, 1.0f); this->unk_29C = 3; this->actionFunc = func_809C5408; } @@ -404,7 +466,7 @@ void func_809C5524(EnBomBowlMan* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { this->actor.textId = 0x72F; } - func_809C493C(this, 3, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_3, 1.0f); Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = func_809C5598; } @@ -424,14 +486,14 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { this->actor.textId = 0x715; } else if (this->actor.textId == 0x715) { func_800B7298(play, &this->actor, PLAYER_CSMODE_END); - func_809C493C(this, 17, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_17, 1.0f); func_809C59A4(this, play); return; } else if (this->actor.textId == 0x716) { this->actor.textId = 0x735; } else if (this->actor.textId == 0x735) { this->unk_2C2 = 0; - func_809C493C(this, 17, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_17, 1.0f); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS); @@ -460,7 +522,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { } else { CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor); this->unk_2C2 = 2; - func_809C493C(this, 18, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_18, 1.0f); } } } else if (this->unk_2C2 == 1) { @@ -472,7 +534,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { } else { CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor); this->unk_2C2 = 2; - func_809C493C(this, 18, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_18, 1.0f); } } else { Math_SmoothStepToS(&this->actor.world.rot.y, yaw, 1, 2000, 10); @@ -543,33 +605,33 @@ void func_809C5B1C(EnBomBowlMan* this, PlayState* play) { void func_809C5BA0(EnBomBowlMan* this) { if (this->unk_2F4 != 0) { - func_809C493C(this, 0, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_0, 1.0f); } else { - this->unk_2F8 = 0; + this->animIndex = ENBOMBOWLMAN_ANIM_0; } this->unk_29C = 2; this->actionFunc = func_809C5BF4; } void func_809C5BF4(EnBomBowlMan* this, PlayState* play) { - f32 sp2C = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Camera* subCam; - if ((D_809C6104 != 0) && (this->unk_2F8 != 15)) { - func_809C493C(this, 15, 1.0f); + if ((D_809C6104 != 0) && (this->animIndex != ENBOMBOWLMAN_ANIM_15)) { + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_15, 1.0f); } - if ((this->unk_2F8 == 15) && (this->unk_2C4 <= sp2C)) { - func_809C493C(this, 0, 1.0f); + if ((this->animIndex == ENBOMBOWLMAN_ANIM_15) && (curFrame >= this->animEndFrame)) { + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_0, 1.0f); } if (D_809C6100 != 0) { - if ((this->unk_2F8 == 0) && (D_809C6100 == (this->unk_2F4 + 1))) { - func_809C493C(this, 11, 1.0f); + if ((this->animIndex == ENBOMBOWLMAN_ANIM_0) && (D_809C6100 == (this->unk_2F4 + 1))) { + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_11, 1.0f); } - if ((this->unk_2F8 == 11) && (this->unk_2C4 <= sp2C)) { - func_809C493C(this, 12, 1.0f); + if ((this->animIndex == ENBOMBOWLMAN_ANIM_11) && (curFrame >= this->animEndFrame)) { + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_12, 1.0f); D_809C6100++; } @@ -581,7 +643,7 @@ void func_809C5BF4(EnBomBowlMan* this, PlayState* play) { Message_CloseTextbox(play); Camera_SetTargetActor(subCam, &this->unk_2D8[0]->actor); - func_809C493C(this, 13, 1.0f); + EnBomBowlMan_ChangeAnim(this, ENBOMBOWLMAN_ANIM_13, 1.0f); D_809C6100 = 0; if (player->transformation == PLAYER_FORM_HUMAN) { this->unk_2C0 = 5; @@ -638,19 +700,19 @@ void EnBomBowlMan_Update(Actor* thisx, PlayState* play) { s32 EnBomBowlMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBomBowlMan* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_CS_LIMB_0F) { *dList = NULL; } - if (limbIndex == 17) { + if (limbIndex == OBJECT_CS_LIMB_11) { rot->x += this->unk_28A; } - if ((limbIndex == 19) && (this->unk_2F6 == ENBOMBOWLMAN_F0_2)) { + if ((limbIndex == OBJECT_CS_LIMB_13) && (this->unk_2F6 == ENBOMBOWLMAN_F0_2)) { *dList = NULL; } - if ((limbIndex == 20) && (this->unk_2F6 == ENBOMBOWLMAN_F0_0)) { + if ((limbIndex == OBJECT_CS_LIMB_14) && (this->unk_2F6 == ENBOMBOWLMAN_F0_0)) { *dList = NULL; } return false; diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h index df515ef4f..b6b749076 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h @@ -2,6 +2,7 @@ #define Z_EN_BOM_BOWL_MAN_H #include "global.h" +#include "objects/object_cs/object_cs.h" struct EnBomBowlMan; @@ -19,8 +20,8 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*); typedef struct EnBomBowlMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[21]; - /* 0x206 */ Vec3s morphTable[21]; + /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBomBowlManActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; @@ -41,7 +42,7 @@ typedef struct EnBomBowlMan { /* 0x2BE */ UNK_TYPE1 unk2BE[2]; /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; - /* 0x2C4 */ f32 unk_2C4; + /* 0x2C4 */ f32 animEndFrame; /* 0x2C8 */ f32 unk_2C8; /* 0x2CC */ s16 csIdList[2]; /* 0x2D0 */ s16 csId1; @@ -54,7 +55,7 @@ typedef struct EnBomBowlMan { /* 0x2F2 */ s16 unk_2F2; /* 0x2F4 */ s16 unk_2F4; /* 0x2F6 */ s16 unk_2F6; - /* 0x2F8 */ s32 unk_2F8; + /* 0x2F8 */ s32 animIndex; } EnBomBowlMan; // size = 0x2FC #endif // Z_EN_BOM_BOWL_MAN_H 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 a1c0810ce..88ce2bf92 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -6,7 +6,6 @@ #include "z_en_bombers.h" #include "overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h" -#include "objects/object_cs/object_cs.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -57,18 +56,66 @@ static ColliderCylinderInit sCylinderInit = { { 10, 30, 0, { 0, 0, 0 } }, }; -AnimationHeader* D_80C0479C[] = { - &gBomberIdleAnim, &object_cs_Anim_0053F4, &object_cs_Anim_01007C, &object_cs_Anim_00349C, - &object_cs_Anim_004960, &object_cs_Anim_005128, &object_cs_Anim_004C1C, &object_cs_Anim_001A1C, - &object_cs_Anim_003EE4, &object_cs_Anim_00478C, &object_cs_Anim_00433C, &object_cs_Anim_0060E8, - &object_cs_Anim_001708, &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, &object_cs_Anim_0036B0, - &object_cs_Anim_0031C4, +typedef enum { + /* -1 */ ENBOMBERS_ANIM_NONE = -1, + /* 0x00 */ ENBOMBERS_ANIM_0, + /* 0x01 */ ENBOMBERS_ANIM_1, + /* 0x02 */ ENBOMBERS_ANIM_2, + /* 0x03 */ ENBOMBERS_ANIM_3, + /* 0x04 */ ENBOMBERS_ANIM_4, + /* 0x05 */ ENBOMBERS_ANIM_5, + /* 0x06 */ ENBOMBERS_ANIM_6, + /* 0x07 */ ENBOMBERS_ANIM_7, + /* 0x08 */ ENBOMBERS_ANIM_8, + /* 0x09 */ ENBOMBERS_ANIM_9, + /* 0x0A */ ENBOMBERS_ANIM_10, + /* 0x0B */ ENBOMBERS_ANIM_11, + /* 0x0C */ ENBOMBERS_ANIM_12, + /* 0x0D */ ENBOMBERS_ANIM_13, + /* 0x0E */ ENBOMBERS_ANIM_14, + /* 0x0F */ ENBOMBERS_ANIM_15, + /* 0x10 */ ENBOMBERS_ANIM_16, + /* 0x11 */ ENBOMBERS_ANIM_MAX +} EnBombersAnimation; + +static AnimationHeader* sAnimations[ENBOMBERS_ANIM_MAX] = { + &gBomberIdleAnim, // ENBOMBERS_ANIM_0 + &object_cs_Anim_0053F4, // ENBOMBERS_ANIM_1 + &object_cs_Anim_01007C, // ENBOMBERS_ANIM_2 + &object_cs_Anim_00349C, // ENBOMBERS_ANIM_3 + &object_cs_Anim_004960, // ENBOMBERS_ANIM_4 + &object_cs_Anim_005128, // ENBOMBERS_ANIM_5 + &object_cs_Anim_004C1C, // ENBOMBERS_ANIM_6 + &object_cs_Anim_001A1C, // ENBOMBERS_ANIM_7 + &object_cs_Anim_003EE4, // ENBOMBERS_ANIM_8 + &object_cs_Anim_00478C, // ENBOMBERS_ANIM_9 + &object_cs_Anim_00433C, // ENBOMBERS_ANIM_10 + &object_cs_Anim_0060E8, // ENBOMBERS_ANIM_11 + &object_cs_Anim_001708, // ENBOMBERS_ANIM_12 + &object_cs_Anim_005DC4, // ENBOMBERS_ANIM_13 + &object_cs_Anim_0026B0, // ENBOMBERS_ANIM_14 + &object_cs_Anim_0036B0, // ENBOMBERS_ANIM_15 + &object_cs_Anim_0031C4, // ENBOMBERS_ANIM_16 }; -u8 D_80C047E0[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, +static u8 sAnimationModes[ENBOMBERS_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBOMBERS_ANIM_0 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_1 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_2 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_3 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_4 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_5 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_6 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_7 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_8 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_9 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_10 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_11 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_12 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_13 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_14 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_15 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_16 }; #include "overlays/ovl_En_Bombers/ovl_En_Bombers.c" @@ -95,7 +142,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); this->actor.gravity = -1.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, - this->morphtable, 21); + this->morphtable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.01f); @@ -154,21 +201,21 @@ void EnBombers_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80C03824(EnBombers* this, s32 arg1, f32 arg2) { - this->unk_2C4 = arg1; - this->unk_2B0 = Animation_GetLastFrame(D_80C0479C[arg1]); - Animation_Change(&this->skelAnime, D_80C0479C[this->unk_2C4], arg2, 0.0f, this->unk_2B0, D_80C047E0[this->unk_2C4], - -10.0f); +void EnBombers_ChangeAnim(EnBombers* this, s32 animIndex, f32 playSpeed) { + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], -10.0f); } void func_80C038B4(EnBombers* this) { - if ((this->unk_2C4 == 2) && + if ((this->animIndex == ENBOMBERS_ANIM_2) && (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2C4 == 15) && + if ((this->animIndex == ENBOMBERS_ANIM_15) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); @@ -210,6 +257,9 @@ void func_80C039A8(EnBombers* this, PlayState* play) { this->actor.textId = 0x744; } break; + + default: + break; } } @@ -242,7 +292,7 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp60))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp60, &sp6C, &colPoly, true, false, false, true, &sp48)) { - func_80C03824(this, 2, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_2, 1.0f); Math_Vec3f_Copy(&this->unk_294, &sp60); this->unk_2AA = Rand_S16Offset(30, 50); this->unk_2A0++; @@ -265,9 +315,9 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { false, true, &sp48)) { this->unk_2A8 = 0; if (Rand_ZeroOne() < 0.5f) { - func_80C03824(this, 16, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_16, 1.0f); } else { - func_80C03824(this, 0, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_0, 1.0f); } this->unk_2A0 = 0; this->unk_2B4 = 0.0f; @@ -281,9 +331,9 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { if ((this->unk_2AA == 0) || (sqrtf(SQ(x) + SQ(z)) < 4.0f)) { this->unk_2A8 = Rand_S16Offset(20, 20); if (!(this->unk_2A8 & 1)) { - func_80C03824(this, 16, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_16, 1.0f); } else { - func_80C03824(this, 0, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_0, 1.0f); } this->unk_2A0 = 0; this->unk_2B4 = 0.0f; @@ -293,6 +343,9 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { Math_ApproachF(&this->unk_2B4, 1.0f, 0.3f, 0.5f); } break; + + default: + break; } if (Text_GetFaceReaction(play, FACE_REACTION_SET_BOMBERS) == 0) { @@ -314,7 +367,7 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { void func_80C03F64(EnBombers* this) { this->unk_2A4 = this->actor.yawTowardsPlayer; - func_80C03824(this, 1, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_1, 1.0f); this->unk_2C0 = 1; this->actionFunc = func_80C03FAC; } @@ -334,6 +387,9 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { case PLAYER_FORM_ZORA: this->unk_28E = -0x1770; break; + + default: + break; } if ((this->unk_2A6 == Message_GetState(&play->msgCtx)) && Message_ShouldAdvance(play)) { @@ -373,7 +429,7 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { } else { Audio_PlaySfx_MessageDecide(); this->actor.textId = 0x74D; - func_80C03824(this, 14, 1.0f); + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_14, 1.0f); sp2A = 1; } } else if (this->actor.textId == 0x744) { @@ -409,6 +465,9 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { case ENBOMBERS_F_4: SET_WEEKEVENTREG(WEEKEVENTREG_74_08); break; + + default: + break; } SET_WEEKEVENTREG(WEEKEVENTREG_73_40); } @@ -422,13 +481,16 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { case 1: Message_ContinueTextbox(play, this->actor.textId); break; + + default: + break; } } } void func_80C042F8(EnBombers* this) { - if (this->unk_2C4 != 6) { - func_80C03824(this, 6, 1.0f); + if (this->animIndex != ENBOMBERS_ANIM_6) { + EnBombers_ChangeAnim(this, ENBOMBERS_ANIM_6, 1.0f); } this->actor.textId = 0x72D; this->unk_28E = 0x1F40; diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h index 1585613ce..76013781b 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h @@ -2,6 +2,7 @@ #define Z_EN_BOMBERS_H #include "global.h" +#include "objects/object_cs/object_cs.h" struct EnBombers; @@ -23,8 +24,8 @@ typedef enum { typedef struct EnBombers { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[21]; - /* 0x206 */ Vec3s morphtable[21]; + /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphtable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBombersActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; @@ -39,14 +40,14 @@ typedef struct EnBombers { /* 0x2A8 */ s16 unk_2A8; /* 0x2AA */ s16 unk_2AA; /* 0x2AC */ s16 unk_2AC; - /* 0x2B0 */ f32 unk_2B0; + /* 0x2B0 */ f32 animEndFrame; /* 0x2B4 */ f32 unk_2B4; /* 0x2B8 */ s16 unk_2B8; /* 0x2BA */ s16 unk_2BA; /* 0x2BC */ s16 unk_2BC; /* 0x2BE */ s16 unk_2BE; /* 0x2C0 */ s16 unk_2C0; - /* 0x2C4 */ s32 unk_2C4; + /* 0x2C4 */ s32 animIndex; /* 0x2C8 */ ColliderCylinder collider; } EnBombers; // size = 0x314 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 c29916d3a..ae7cacff7 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -19,7 +19,6 @@ void func_80C04BA0(EnBombers2* this, PlayState* play); void func_80C04D8C(EnBombers2* this, PlayState* play); void func_80C0520C(EnBombers2* this, PlayState* play); void func_80C04B40(EnBombers2* this); -void EnBombers2_ChangeAnim(EnBombers2* this, s32 animIndex, f32 playSpeed); void func_80C04D00(EnBombers2* this); void func_80C050B8(EnBombers2* this, PlayState* play); @@ -59,14 +58,36 @@ static ColliderCylinderInit sCylinderInit = { { 35, 30, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { - &gBomberIdleAnim, &object_cs_Anim_0053F4, &object_cs_Anim_01007C, &object_cs_Anim_00349C, - &object_cs_Anim_0060E8, &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, +typedef enum { + /* -1 */ ENBOMBERS_ANIM_NONE = -1, + /* 0 */ ENBOMBERS_ANIM_0, + /* 1 */ ENBOMBERS_ANIM_1, + /* 2 */ ENBOMBERS_ANIM_2, + /* 3 */ ENBOMBERS_ANIM_3, + /* 4 */ ENBOMBERS_ANIM_4, + /* 5 */ ENBOMBERS_ANIM_5, + /* 6 */ ENBOMBERS_ANIM_6, + /* 7 */ ENBOMBERS_ANIM_MAX +} EnBombersAnimation; + +static AnimationHeader* sAnimations[ENBOMBERS_ANIM_MAX] = { + &gBomberIdleAnim, // ENBOMBERS_ANIM_0 + &object_cs_Anim_0053F4, // ENBOMBERS_ANIM_1 + &object_cs_Anim_01007C, // ENBOMBERS_ANIM_2 + &object_cs_Anim_00349C, // ENBOMBERS_ANIM_3 + &object_cs_Anim_0060E8, // ENBOMBERS_ANIM_4 + &object_cs_Anim_005DC4, // ENBOMBERS_ANIM_5 + &object_cs_Anim_0026B0, // ENBOMBERS_ANIM_6 }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, +static u8 sAnimationModes[ENBOMBERS_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBOMBERS_ANIM_0 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_1 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_2 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_3 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_4 + ANIMMODE_LOOP, // ENBOMBERS_ANIM_5 + ANIMMODE_ONCE, // ENBOMBERS_ANIM_6 }; static Gfx sSetPrimColorDL[] = { @@ -90,8 +111,8 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->morphTable, - this->jointTable, OBJECT_CS_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, + this->morphTable, OBJECT_CS_LIMB_MAX); this->actor.targetMode = 6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -115,20 +136,20 @@ void EnBombers2_Destroy(Actor* thisx, PlayState* play) { } void EnBombers2_ChangeAnim(EnBombers2* this, s32 animIndex, f32 playSpeed) { - f32 lastFrame; + f32 endFrame; this->animIndex = animIndex; - lastFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); - this->lastAnimFrame = lastFrame; - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, lastFrame, + endFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + this->lastAnimFrame = endFrame; + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, endFrame, sAnimationModes[this->animIndex], -10.0f); } void func_80C04B40(EnBombers2* this) { if (this->unk_2AC == 0) { - EnBombers2_ChangeAnim(this, 4, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_4, 1.0f); } else { - EnBombers2_ChangeAnim(this, 0, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_0, 1.0f); } this->unk_2C0 = 0; this->actionFunc = func_80C04BA0; @@ -149,11 +170,15 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { this->textIdIndex = 1; this->talkState = TEXT_STATE_5; break; + case PLAYER_FORM_DEKU: case PLAYER_FORM_HUMAN: this->textIdIndex = 2; this->talkState = TEXT_STATE_5; break; + + default: + break; } if (this->unk_2AC != 0) { this->textIdIndex = 7; @@ -177,14 +202,14 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { void func_80C04D00(EnBombers2* this) { if ((this->textIdIndex == 0) || (this->textIdIndex == 1)) { - EnBombers2_ChangeAnim(this, 5, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_5, 1.0f); } else { - EnBombers2_ChangeAnim(this, 1, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_1, 1.0f); } this->unk_2A8 = 0; if (this->unk_2AC != 0) { - EnBombers2_ChangeAnim(this, 6, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_6, 1.0f); } this->unk_2C0 = 1; this->actionFunc = func_80C04D8C; @@ -192,13 +217,13 @@ void func_80C04D00(EnBombers2* this) { void func_80C04D8C(EnBombers2* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 temp = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; - if ((this->unk_2AC == 0) && (this->lastAnimFrame <= temp)) { + if ((this->unk_2AC == 0) && (curFrame >= this->lastAnimFrame)) { if (!(this->unk_2A8 & 1)) { - EnBombers2_ChangeAnim(this, 1, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_1, 1.0f); } else { - EnBombers2_ChangeAnim(this, 5, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_5, 1.0f); } this->unk_2A8++; this->unk_2A8 &= 1; @@ -207,10 +232,12 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { case PLAYER_FORM_HUMAN: this->unk_28E = -0xFA0; break; + case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: this->unk_28E = -0x1770; break; + default: break; } @@ -256,12 +283,14 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { Message_CloseTextbox(play); func_80C04B40(this); break; + case 2: this->textIdIndex = 3; this->actor.textId = sTextIds[this->textIdIndex]; Message_ContinueTextbox(play, this->actor.textId); this->talkState = TEXT_STATE_15; break; + case 3: for (j = 0; j < ARRAY_COUNT(this->correctDigitSlots); j++) { this->correctDigitSlots[j] = false; @@ -272,16 +301,21 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { Message_ContinueTextbox(play, this->actor.textId); this->talkState = TEXT_STATE_5; break; + case 4: this->textIdIndex = 5; this->actor.textId = sTextIds[this->textIdIndex]; Message_ContinueTextbox(play, this->actor.textId); this->talkState = TEXT_STATE_5; break; + case 6: play->msgCtx.msgLength = 0; func_80C050B8(this, play); break; + + default: + break; } } } @@ -291,7 +325,7 @@ void func_80C050B8(EnBombers2* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 homeYawToPlayer; - EnBombers2_ChangeAnim(this, 2, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_2, 1.0f); this->unk_2A8 = 0; homeYawToPlayer = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos); Math_Vec3f_Copy(&this->unk_29C, &this->actor.world.pos); @@ -328,7 +362,7 @@ void func_80C0520C(EnBombers2* this, PlayState* play) { Message_CloseTextbox(play); this->talkState = TEXT_STATE_5; this->textIdIndex = 7; - EnBombers2_ChangeAnim(this, 6, 1.0f); + EnBombers2_ChangeAnim(this, ENBOMBERS_ANIM_6, 1.0f); this->unk_2A8 = 0; this->unk_2C0 = 1; SET_WEEKEVENTREG(WEEKEVENTREG_73_80); @@ -355,7 +389,7 @@ void EnBombers2_Update(Actor* thisx, PlayState* play) { if (this->unk_2B2 != 0) { this->unk_2B2--; } - if ((this->animIndex == 2) && + if ((this->animIndex == ENBOMBERS_ANIM_2) && (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); @@ -392,11 +426,11 @@ void EnBombers2_Update(Actor* thisx, PlayState* play) { this->actor.world.pos.x = (Math_SinS((this->actor.world.rot.y + 0x8000)) * 26.0f) + sp34.x; temp_f4 = Math_CosS(this->actor.world.rot.y + 0x8000) * 26.0f; this->actor.world.pos.z = temp_f4 + sp34.z; - this->collider.dim.radius = 0x23; - this->collider.dim.height = 0x1E; + this->collider.dim.radius = 35; + this->collider.dim.height = 30; } else { - this->collider.dim.radius = 0xA; - this->collider.dim.height = 0x19; + this->collider.dim.radius = 10; + this->collider.dim.height = 25; } 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.h b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h index 9e6f6b577..f02c5eccb 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h @@ -2,7 +2,6 @@ #define Z_EN_BOMBERS2_H #include "global.h" - #include "objects/object_cs/object_cs.h" struct EnBombers2; @@ -12,8 +11,8 @@ typedef void (*EnBombers2ActionFunc)(struct EnBombers2*, PlayState*); typedef struct EnBombers2 { /* 0x000 */ Actor actor; /* 0x14C */ SkelAnime skelAnime; - /* 0x188 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; - /* 0x206 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBombers2ActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; 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 548091daa..21103d464 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -6,7 +6,6 @@ #include "overlays/actors/ovl_En_Bombal/z_en_bombal.h" #include "z_en_bomjima.h" -#include "objects/object_cs/object_cs.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -99,18 +98,75 @@ u16 D_80C00A70[] = { u16 D_80C00A8C[] = { 0x736, 0x737, 0x738, 0x74E }; -static AnimationHeader* sAnimations[] = { - &gBomberIdleAnim, &object_cs_Anim_00FAF4, &object_cs_Anim_0057C8, &object_cs_Anim_0053F4, - &object_cs_Anim_002044, &object_cs_Anim_01007C, &object_cs_Anim_00349C, &object_cs_Anim_004960, - &object_cs_Anim_005128, &object_cs_Anim_004C1C, &object_cs_Anim_001A1C, &object_cs_Anim_003EE4, - &object_cs_Anim_00478C, &object_cs_Anim_00433C, &object_cs_Anim_0060E8, &object_cs_Anim_001708, - &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, &object_cs_Anim_0036B0, &object_cs_Anim_0031C4, +typedef enum { + /* -1 */ ENBOMJIMA_ANIM_NONE = -1, + /* 0x00 */ ENBOMJIMA_ANIM_0, + /* 0x01 */ ENBOMJIMA_ANIM_1, + /* 0x02 */ ENBOMJIMA_ANIM_2, + /* 0x03 */ ENBOMJIMA_ANIM_3, + /* 0x04 */ ENBOMJIMA_ANIM_4, + /* 0x05 */ ENBOMJIMA_ANIM_5, + /* 0x06 */ ENBOMJIMA_ANIM_6, + /* 0x07 */ ENBOMJIMA_ANIM_7, + /* 0x08 */ ENBOMJIMA_ANIM_8, + /* 0x09 */ ENBOMJIMA_ANIM_9, + /* 0x0A */ ENBOMJIMA_ANIM_10, + /* 0x0B */ ENBOMJIMA_ANIM_11, + /* 0x0C */ ENBOMJIMA_ANIM_12, + /* 0x0D */ ENBOMJIMA_ANIM_13, + /* 0x0E */ ENBOMJIMA_ANIM_14, + /* 0x0F */ ENBOMJIMA_ANIM_15, + /* 0x10 */ ENBOMJIMA_ANIM_16, + /* 0x11 */ ENBOMJIMA_ANIM_17, + /* 0x12 */ ENBOMJIMA_ANIM_18, + /* 0x13 */ ENBOMJIMA_ANIM_19, + /* 0x16 */ ENBOMJIMA_ANIM_MAX +} EnBomjimaAnimation; + +static AnimationHeader* sAnimations[ENBOMJIMA_ANIM_MAX] = { + &gBomberIdleAnim, // ENBOMJIMA_ANIM_0 + &object_cs_Anim_00FAF4, // ENBOMJIMA_ANIM_1 + &object_cs_Anim_0057C8, // ENBOMJIMA_ANIM_2 + &object_cs_Anim_0053F4, // ENBOMJIMA_ANIM_3 + &object_cs_Anim_002044, // ENBOMJIMA_ANIM_4 + &object_cs_Anim_01007C, // ENBOMJIMA_ANIM_5 + &object_cs_Anim_00349C, // ENBOMJIMA_ANIM_6 + &object_cs_Anim_004960, // ENBOMJIMA_ANIM_7 + &object_cs_Anim_005128, // ENBOMJIMA_ANIM_8 + &object_cs_Anim_004C1C, // ENBOMJIMA_ANIM_9 + &object_cs_Anim_001A1C, // ENBOMJIMA_ANIM_10 + &object_cs_Anim_003EE4, // ENBOMJIMA_ANIM_11 + &object_cs_Anim_00478C, // ENBOMJIMA_ANIM_12 + &object_cs_Anim_00433C, // ENBOMJIMA_ANIM_13 + &object_cs_Anim_0060E8, // ENBOMJIMA_ANIM_14 + &object_cs_Anim_001708, // ENBOMJIMA_ANIM_15 + &object_cs_Anim_005DC4, // ENBOMJIMA_ANIM_16 + &object_cs_Anim_0026B0, // ENBOMJIMA_ANIM_17 + &object_cs_Anim_0036B0, // ENBOMJIMA_ANIM_18 + &object_cs_Anim_0031C4, // ENBOMJIMA_ANIM_19 }; -u8 D_80C00AE4[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, +static u8 sAnimationModes[ENBOMJIMA_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_0 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_1 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_2 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_3 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_4 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_5 + ANIMMODE_ONCE, // ENBOMJIMA_ANIM_6 + ANIMMODE_ONCE, // ENBOMJIMA_ANIM_7 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_8 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_9 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_10 + ANIMMODE_ONCE, // ENBOMJIMA_ANIM_11 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_12 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_13 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_14 + ANIMMODE_ONCE, // ENBOMJIMA_ANIM_15 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_16 + ANIMMODE_ONCE, // ENBOMJIMA_ANIM_17 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_18 + ANIMMODE_LOOP, // ENBOMJIMA_ANIM_19 }; s16 D_80C00AF8[] = { @@ -205,34 +261,37 @@ void func_80BFE32C(EnBomjima* this, PlayState* play, s32 arg2) { case 3: this->actor.textId = D_80C00A8C[this->unk_2C8]; break; + + default: + break; } } -void func_80BFE494(EnBomjima* this, s32 animIndex, f32 playSpeed) { +void EnBomjima_ChangeAnim(EnBomjima* this, s32 animIndex, f32 playSpeed) { this->animIndex = animIndex; - this->animLastFrame = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animLastFrame, - D_80C00AE4[this->animIndex], -4.0f); + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], -4.0f); } void func_80BFE524(EnBomjima* this) { - if ((this->animIndex == 5) && + if ((this->animIndex == ENBOMJIMA_ANIM_5) && (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->animIndex == 18) && + if ((this->animIndex == ENBOMJIMA_ANIM_18) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->animIndex == 15) && Animation_OnFrame(&this->skelAnime, 15.0f)) { + if ((this->animIndex == ENBOMJIMA_ANIM_15) && Animation_OnFrame(&this->skelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } - if ((this->animIndex == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) { + if ((this->animIndex == ENBOMJIMA_ANIM_6) && Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } } @@ -247,7 +306,7 @@ void func_80BFE65C(EnBomjima* this) { } void func_80BFE67C(EnBomjima* this, PlayState* play) { - f32 sp84 = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; f32 x; f32 z; s16 abs; @@ -272,7 +331,7 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp54))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp54, &sp6C, &sp50, true, false, false, true, &sp4C)) { - func_80BFE494(this, 5, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_5, 1.0f); Math_Vec3f_Copy(&this->unk_2A4, &sp54); this->unk_2BE = Rand_S16Offset(30, 50); this->unk_2A2++; @@ -281,7 +340,7 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { break; case 1: - if (sp84 >= 0.0f) { + if (curFrame >= 0.0f) { this->unk_2DC = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2A4); Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2DC, 10, 2000, 20); } @@ -297,9 +356,9 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { false, true, &sp4C)) { this->unk_2C0 = 0; if (Rand_ZeroOne() < 0.5f) { - func_80BFE494(this, 19, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_19, 1.0f); } else { - func_80BFE494(this, 0, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_0, 1.0f); } this->unk_2A2 = 0; this->unk_2D0 = 0.0f; @@ -313,13 +372,13 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { if ((this->unk_2BE == 0) || (sqrtf(SQ(x) + SQ(z)) < 4.0f)) { this->unk_2C0 = Rand_S16Offset(20, 20); if (!(this->unk_2C0 & 1)) { - func_80BFE494(this, 19, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_19, 1.0f); } else { - func_80BFE494(this, 0, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_0, 1.0f); } this->unk_2A2 = 0; this->unk_2D0 = 0.0f; - } else if (sp84 >= 0.0f) { + } else if (curFrame >= 0.0f) { Math_ApproachF(&this->actor.world.pos.x, this->unk_2A4.x, 0.3f, this->unk_2D0); Math_ApproachF(&this->actor.world.pos.z, this->unk_2A4.z, 0.3f, this->unk_2D0); Math_ApproachF(&this->unk_2D0, 1.0f, 0.3f, 0.5f); @@ -349,7 +408,7 @@ void func_80BFEA94(EnBomjima* this, PlayState* play) { } void func_80BFEB1C(EnBomjima* this) { - func_80BFE494(this, 1, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_1, 1.0f); func_80BFE65C(this); this->action = EN_BOMJIMA_ACTION_0; this->actionFunc = func_80BFEB64; @@ -400,7 +459,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { switch (this->unk_2A2) { case 0: - func_80BFE494(this, 4, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_4, 1.0f); this->unk_29A = -7000; this->unk_2A2++; break; @@ -430,7 +489,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { this->unk_2BC++; if (((s16)Rand_ZeroFloat(2.0f) + 3) < this->unk_2BC) { - func_80BFE494(this, 5, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_5, 1.0f); this->unk_29A = 0; Math_Vec3f_Copy(&this->unk_2A4, &this->actor.home.pos); this->unk_2A4.x += Rand_CenteredFloat(150.0f); @@ -456,7 +515,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { void func_80BFEFF0(EnBomjima* this) { this->bombal = NULL; - func_80BFE494(this, 19, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_19, 1.0f); func_80BFE65C(this); this->action = EN_BOMJIMA_ACTION_1; this->actionFunc = func_80BFF03C; @@ -483,14 +542,14 @@ void func_80BFF03C(EnBomjima* this, PlayState* play) { void func_80BFF120(EnBomjima* this) { func_80BFE65C(this); this->cutsceneTimer = 30; - func_80BFE494(this, 6, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_6, 1.0f); this->cutsceneEnded = false; this->action = EN_BOMJIMA_ACTION_2; this->actionFunc = func_80BFF174; } void func_80BFF174(EnBomjima* this, PlayState* play) { - f32 sp2C = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Player* player = GET_PLAYER(play); if (this->cutsceneTimer == 1) { @@ -510,10 +569,10 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2DC, 1, 5000, 0); - if ((this->animLastFrame <= sp2C) && (this->unk_2BC < 5)) { + if ((curFrame >= this->animEndFrame) && (this->unk_2BC < 5)) { this->unk_2BC++; - if (this->animIndex != 19) { - func_80BFE494(this, 19, 1.0f); + if (this->animIndex != ENBOMJIMA_ANIM_19) { + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_19, 1.0f); } } @@ -562,7 +621,7 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { } void func_80BFF3F0(EnBomjima* this) { - func_80BFE494(this, 15, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_15, 1.0f); this->action = EN_BOMJIMA_ACTION_3; this->actionFunc = func_80BFF430; } @@ -570,7 +629,7 @@ void func_80BFF3F0(EnBomjima* this) { void func_80BFF430(EnBomjima* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (this->animLastFrame <= curFrame) { + if (curFrame >= this->animEndFrame) { EnBombal* bombal = (EnBombal*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBAL, this->unk_2B0.x, this->unk_2B0.y, this->unk_2B0.z, 0, 0, 0, 0); @@ -610,7 +669,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) { } Message_ContinueTextbox(play, this->actor.textId); Audio_PlaySfx(NA_SE_SY_FOUND); - func_80BFE494(this, 15, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_15, 1.0f); this->action = EN_BOMJIMA_ACTION_5; this->actionFunc = func_80BFF6CC; } else { @@ -635,10 +694,10 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) { void func_80BFF6CC(EnBomjima* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (this->animLastFrame <= curFrame) { + if (curFrame >= this->animEndFrame) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - func_80BFE494(this, 1, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_1, 1.0f); this->actionFunc = func_80BFF754; } } @@ -727,7 +786,7 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) { gSaveContext.save.saveInfo.bombersCaughtOrder[3] = 0; gSaveContext.save.saveInfo.bombersCaughtOrder[4] = 0; - func_80BFE494(this, 3, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_3, 1.0f); this->unk_2C8 = 9; if (player->transformation == PLAYER_FORM_DEKU) { @@ -743,7 +802,7 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) { void func_80BFFB40(EnBomjima* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - func_80BFE494(this, 15, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_15, 1.0f); D_80C009F0 = 100; this->unk_2DC = 0; this->actionFunc = func_80BFFBC4; @@ -753,8 +812,8 @@ void func_80BFFB40(EnBomjima* this, PlayState* play) { void func_80BFFBC4(EnBomjima* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if ((this->animIndex != 1) && (this->animLastFrame <= curFrame)) { - func_80BFE494(this, 1, 1.0f); + if ((this->animIndex != ENBOMJIMA_ANIM_1) && (curFrame >= this->animEndFrame)) { + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_1, 1.0f); } if ((D_80C009F4 != 0) && (this->unk_2C2 == 0)) { @@ -780,7 +839,7 @@ void func_80BFFBC4(EnBomjima* this, PlayState* play) { void func_80BFFCFC(EnBomjima* this) { func_80BFE65C(this); - func_80BFE494(this, 18, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_18, 1.0f); this->action = EN_BOMJIMA_ACTION_6; this->actionFunc = func_80BFFD48; } @@ -795,7 +854,7 @@ void func_80BFFD48(EnBomjima* this, PlayState* play) { if (sqrtf(SQ(this->actor.world.pos.x - this->unk_2A4.x) + SQ(this->actor.world.pos.z - this->unk_2A4.z)) < 4.0f) { D_80C009F0++; this->unk_2DC = this->actor.parent->world.rot.y; - func_80BFE494(this, 0, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_0, 1.0f); this->actionFunc = func_80BFFE48; } } @@ -807,7 +866,7 @@ void func_80BFFE48(EnBomjima* this, PlayState* play) { if (D_80C009F0 >= 100) { if (this->unk_2E4 != 4) { - func_80BFE494(this, 15, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_15, 1.0f); this->unk_2DC = 0; func_80BFE65C(this); this->actionFunc = func_80BFFF54; @@ -815,7 +874,7 @@ void func_80BFFE48(EnBomjima* this, PlayState* play) { Math_SmoothStepToS(&this->unk_290, 10000, 1, 5000, 0); if (D_80C009F0 >= 103) { this->unk_2DC = 0; - func_80BFE494(this, 15, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_15, 1.0f); func_80BFE65C(this); this->actionFunc = func_80BFFF54; } @@ -837,22 +896,22 @@ void func_80BFFF54(EnBomjima* this, PlayState* play) { } if (this->unk_2E4 != 4) { - if ((this->animIndex != 0) && (this->animLastFrame <= curFrame)) { + if ((this->animIndex != ENBOMJIMA_ANIM_0) && (curFrame >= this->animEndFrame)) { D_80C009F0++; - func_80BFE494(this, 0, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_0, 1.0f); } - } else if ((this->animIndex != 8) && (this->animLastFrame <= curFrame)) { - func_80BFE494(this, 8, 1.0f); + } else if ((this->animIndex != ENBOMJIMA_ANIM_8) && (curFrame >= this->animEndFrame)) { + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_8, 1.0f); D_80C009F4 = 1; } - if (this->animIndex == 8) { + if (this->animIndex == ENBOMJIMA_ANIM_8) { if ((D_80C009F4 == 1) && Animation_OnFrame(&this->skelAnime, 7.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND); D_80C009F4 = 2; } - if ((this->animLastFrame <= curFrame) && (this->unk_2C0 == 0)) { + if ((curFrame >= this->animEndFrame) && (this->unk_2C0 == 0)) { this->unk_2C0 = 10; } @@ -864,7 +923,7 @@ void func_80BFFF54(EnBomjima* this, PlayState* play) { void func_80C0011C(EnBomjima* this) { func_80BFE65C(this); - func_80BFE494(this, 0, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_0, 1.0f); this->action = EN_BOMJIMA_ACTION_7; this->actionFunc = func_80C00168; } @@ -894,7 +953,7 @@ void func_80C00168(EnBomjima* this, PlayState* play) { } void func_80C00234(EnBomjima* this) { - func_80BFE494(this, 3, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_3, 1.0f); this->collider.dim.radius = 15; this->collider.dim.height = 40; func_80BFE65C(this); @@ -903,16 +962,16 @@ void func_80C00234(EnBomjima* this) { void func_80C00284(EnBomjima* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 sp28 = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2DC, 1, 5000, 0); if (((this->action == EN_BOMJIMA_ACTION_0) || (this->unk_2C8 == 10) || (this->unk_2C8 == 11) || (this->unk_2CA == 1)) && - (this->animLastFrame <= sp28)) { + (curFrame >= this->animEndFrame)) { if (!(this->unk_2BC & 1)) { - func_80BFE494(this, 3, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_3, 1.0f); } else { - func_80BFE494(this, 16, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_16, 1.0f); } this->unk_2BC++; this->unk_2BC &= 1; @@ -927,6 +986,9 @@ void func_80C00284(EnBomjima* this, PlayState* play) { case PLAYER_FORM_ZORA: this->unk_28E = -0x1770; break; + + default: + break; } if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -966,10 +1028,10 @@ void func_80C00284(EnBomjima* this, PlayState* play) { if (this->unk_2C8 == 10) { func_80BFE65C(this); this->unk_28E = 0; - func_80BFE494(this, 1, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_1, 1.0f); this->action = EN_BOMJIMA_ACTION_2; this->actionFunc = func_80BFF174; - return; + break; } this->unk_2C8++; @@ -995,9 +1057,12 @@ void func_80C00284(EnBomjima* this, PlayState* play) { this->actor.textId = D_80C00A8C[this->unk_2C8]; Message_ContinueTextbox(play, this->actor.textId); if (this->unk_2C8 >= 2) { - func_80BFE494(this, 17, 1.0f); + EnBomjima_ChangeAnim(this, ENBOMJIMA_ANIM_17, 1.0f); } break; + + default: + break; } } } @@ -1055,24 +1120,24 @@ void EnBomjima_Update(Actor* thisx, PlayState* play) { s32 EnBomjima_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBomjima* this = THIS; - if (limbIndex == 8) { + if (limbIndex == OBJECT_CS_LIMB_08) { rot->z += this->unk_294; } - if ((limbIndex == 15) && (this->unk_2E6 == 2)) { + if ((limbIndex == OBJECT_CS_LIMB_0F) && (this->unk_2E6 == 2)) { *dList = NULL; } - if (limbIndex == 17) { + if (limbIndex == OBJECT_CS_LIMB_11) { rot->x += this->unk_28A; rot->z += this->unk_288; } - if ((limbIndex == 19) && (this->unk_2E6 == 2)) { + if ((limbIndex == OBJECT_CS_LIMB_13) && (this->unk_2E6 == 2)) { *dList = NULL; } - if ((limbIndex == 20) && (this->unk_2E6 == 0)) { + if ((limbIndex == OBJECT_CS_LIMB_14) && (this->unk_2E6 == 0)) { *dList = NULL; } diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h index b8196b344..15b4b10fb 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h @@ -2,6 +2,7 @@ #define Z_EN_BOMJIMA_H #include "global.h" +#include "objects/object_cs/object_cs.h" struct EnBomjima; @@ -13,8 +14,8 @@ typedef void (*EnBomjimaActionFunc)(struct EnBomjima*, PlayState*); typedef struct EnBomjima { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[21]; - /* 0x206 */ Vec3s morphTable[21]; + /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBomjimaActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; @@ -38,7 +39,7 @@ typedef struct EnBomjima { /* 0x2C6 */ s16 unk_2C6; /* 0x2C8 */ s16 unk_2C8; /* 0x2CA */ s16 unk_2CA; - /* 0x2CC */ f32 animLastFrame; + /* 0x2CC */ f32 animEndFrame; /* 0x2D0 */ f32 unk_2D0; /* 0x2D4 */ s16 csIdList[2]; /* 0x2D8 */ UNK_TYPE1 unk2D8[4]; // maybe a part of the above? 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 f82efe6d8..84b548f99 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -6,7 +6,6 @@ #include "z_en_bomjimb.h" #include "overlays/actors/ovl_En_Niw/z_en_niw.h" -#include "objects/object_cs/object_cs.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -72,20 +71,81 @@ static ColliderCylinderInit sCylinderInit = { { 20, 30, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { - &gBomberIdleAnim, &object_cs_Anim_00FAF4, &object_cs_Anim_0057C8, &object_cs_Anim_0053F4, - &object_cs_Anim_002044, &object_cs_Anim_01007C, &object_cs_Anim_00349C, &object_cs_Anim_004960, - &object_cs_Anim_005128, &object_cs_Anim_004C1C, &object_cs_Anim_002930, &object_cs_Anim_001A1C, - &object_cs_Anim_003EE4, &object_cs_Anim_00478C, &object_cs_Anim_00433C, &object_cs_Anim_0060E8, - &object_cs_Anim_001708, &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, &object_cs_Anim_0036B0, - &object_cs_Anim_0031C4, &object_cs_Anim_010B68, +typedef enum { + /* -1 */ ENBOMJIMB_ANIM_NONE = -1, + /* 0x00 */ ENBOMJIMB_ANIM_0, + /* 0x01 */ ENBOMJIMB_ANIM_1, + /* 0x02 */ ENBOMJIMB_ANIM_2, + /* 0x03 */ ENBOMJIMB_ANIM_3, + /* 0x04 */ ENBOMJIMB_ANIM_4, + /* 0x05 */ ENBOMJIMB_ANIM_5, + /* 0x06 */ ENBOMJIMB_ANIM_6, + /* 0x07 */ ENBOMJIMB_ANIM_7, + /* 0x08 */ ENBOMJIMB_ANIM_8, + /* 0x09 */ ENBOMJIMB_ANIM_9, + /* 0x0A */ ENBOMJIMB_ANIM_10, + /* 0x0B */ ENBOMJIMB_ANIM_11, + /* 0x0C */ ENBOMJIMB_ANIM_12, + /* 0x0D */ ENBOMJIMB_ANIM_13, + /* 0x0E */ ENBOMJIMB_ANIM_14, + /* 0x0F */ ENBOMJIMB_ANIM_15, + /* 0x10 */ ENBOMJIMB_ANIM_16, + /* 0x11 */ ENBOMJIMB_ANIM_17, + /* 0x12 */ ENBOMJIMB_ANIM_18, + /* 0x13 */ ENBOMJIMB_ANIM_19, + /* 0x14 */ ENBOMJIMB_ANIM_20, + /* 0x15 */ ENBOMJIMB_ANIM_21, + /* 0x16 */ ENBOMJIMB_ANIM_MAX +} EnBomjimbAnimation; + +static AnimationHeader* sAnimations[ENBOMJIMB_ANIM_MAX] = { + &gBomberIdleAnim, // ENBOMJIMB_ANIM_0 + &object_cs_Anim_00FAF4, // ENBOMJIMB_ANIM_1 + &object_cs_Anim_0057C8, // ENBOMJIMB_ANIM_2 + &object_cs_Anim_0053F4, // ENBOMJIMB_ANIM_3 + &object_cs_Anim_002044, // ENBOMJIMB_ANIM_4 + &object_cs_Anim_01007C, // ENBOMJIMB_ANIM_5 + &object_cs_Anim_00349C, // ENBOMJIMB_ANIM_6 + &object_cs_Anim_004960, // ENBOMJIMB_ANIM_7 + &object_cs_Anim_005128, // ENBOMJIMB_ANIM_8 + &object_cs_Anim_004C1C, // ENBOMJIMB_ANIM_9 + &object_cs_Anim_002930, // ENBOMJIMB_ANIM_10 + &object_cs_Anim_001A1C, // ENBOMJIMB_ANIM_11 + &object_cs_Anim_003EE4, // ENBOMJIMB_ANIM_12 + &object_cs_Anim_00478C, // ENBOMJIMB_ANIM_13 + &object_cs_Anim_00433C, // ENBOMJIMB_ANIM_14 + &object_cs_Anim_0060E8, // ENBOMJIMB_ANIM_15 + &object_cs_Anim_001708, // ENBOMJIMB_ANIM_16 + &object_cs_Anim_005DC4, // ENBOMJIMB_ANIM_17 + &object_cs_Anim_0026B0, // ENBOMJIMB_ANIM_18 + &object_cs_Anim_0036B0, // ENBOMJIMB_ANIM_19 + &object_cs_Anim_0031C4, // ENBOMJIMB_ANIM_20 + &object_cs_Anim_010B68, // ENBOMJIMB_ANIM_21 }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, +static u8 sAnimationModes[ENBOMJIMB_ANIM_MAX] = { + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_0 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_1 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_2 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_3 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_4 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_5 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_6 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_7 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_8 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_9 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_10 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_11 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_12 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_13 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_14 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_15 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_16 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_17 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_18 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_19 + ANIMMODE_LOOP, // ENBOMJIMB_ANIM_20 + ANIMMODE_ONCE, // ENBOMJIMB_ANIM_21 }; void EnBomjimb_Init(Actor* thisx, PlayState* play) { @@ -151,6 +211,9 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) { return; } break; + + default: + break; } } @@ -174,30 +237,30 @@ void EnBomjimb_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80C0113C(EnBomjimb* this, s32 arg1, f32 arg2) { - this->unk_2DC = arg1; - this->unk_2B8 = Animation_GetLastFrame(sAnimations[arg1]); - Animation_Change(&this->skelAnime, sAnimations[this->unk_2DC], arg2, 0.0f, this->unk_2B8, - sAnimationModes[this->unk_2DC], -4.0f); +void EnBomjimb_ChangeAnim(EnBomjimb* this, s32 animIndex, f32 playSpeed) { + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], -4.0f); } void func_80C011CC(EnBomjimb* this) { - if ((this->unk_2DC == 5) && + if ((this->animIndex == ENBOMJIMB_ANIM_5) && (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2DC == 19) && + if ((this->animIndex == ENBOMJIMB_ANIM_19) && (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK); } - if ((this->unk_2DC == 18) && Animation_OnFrame(&this->skelAnime, 15.0f)) { + if ((this->animIndex == ENBOMJIMB_ANIM_18) && Animation_OnFrame(&this->skelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } - if ((this->unk_2DC == 7) && Animation_OnFrame(&this->skelAnime, 8.0f)) { + if ((this->animIndex == ENBOMJIMB_ANIM_7) && Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND); } } @@ -281,7 +344,7 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp48))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp48, &sp60, &colPoly, true, false, false, true, &sp44)) { - func_80C0113C(this, 5, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_5, 1.0f); Math_Vec3f_Copy(&this->unk_294, &sp48); this->unk_2B0 = Rand_S16Offset(30, 50); this->unk_2CC++; @@ -303,9 +366,9 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { false, true, &sp44)) { this->unk_2AE = 0; if (Rand_ZeroOne() < 0.5f) { - func_80C0113C(this, 20, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_20, 1.0f); } else { - func_80C0113C(this, 0, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_0, 1.0f); } this->unk_2CC = 0; this->unk_2B4 = 0.0f; @@ -319,9 +382,9 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { if ((this->unk_2B0 == 0) || (sqrtf(SQ(x) + SQ(z)) < 4.0f)) { this->unk_2AE = Rand_S16Offset(20, 20); if (!(this->unk_2AE & 1)) { - func_80C0113C(this, 20, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_20, 1.0f); } else { - func_80C0113C(this, 0, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_0, 1.0f); } this->unk_2CC = 0; this->unk_2B4 = 0.0f; @@ -331,6 +394,9 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { Math_ApproachF(&this->unk_2B4, 1.0f, 0.3f, 0.5f); } break; + + default: + break; } if (player->stateFlags3 != PLAYER_STATE3_1000000) { @@ -353,7 +419,7 @@ void func_80C01984(EnBomjimb* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 2); if (this->unk_2E4 != NULL) { - func_80C0113C(this, 11, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_11, 1.0f); } this->unk_2CA = 0; this->actionFunc = func_80C01A24; @@ -425,7 +491,7 @@ void func_80C01C18(EnBomjimb* this, PlayState* play) { } void func_80C01CD0(EnBomjimb* this, PlayState* play) { - f32 sp3C = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 pad[2]; if ((this->unk_2E4 != NULL) && ((this->unk_2E4->update == NULL) || Actor_HasParent(this->unk_2E4, play))) { @@ -436,17 +502,17 @@ void func_80C01CD0(EnBomjimb* this, PlayState* play) { return; } - if (this->unk_2DC != 7) { + if (this->animIndex != ENBOMJIMB_ANIM_7) { Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_294), 1, 3000, 0); Math_ApproachF(&this->actor.world.pos.x, this->unk_294.x, 0.3f, 2.0f); Math_ApproachF(&this->actor.world.pos.z, this->unk_294.z, 0.3f, 2.0f); if (sqrtf(SQ(this->actor.world.pos.x - this->unk_294.x) + SQ(this->actor.world.pos.z - this->unk_294.z)) < 3.0f) { - func_80C0113C(this, 7, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_7, 1.0f); Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_294); } - } else if (this->unk_2B8 <= sp3C) { + } else if (curFrame >= this->animEndFrame) { this->actor.draw = NULL; } @@ -487,7 +553,7 @@ void func_80C01CD0(EnBomjimb* this, PlayState* play) { void func_80C01FD4(EnBomjimb* this) { this->actor.textId = 0x72D; - func_80C0113C(this, 9, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_9, 1.0f); this->unk_2CA = 4; this->actionFunc = func_80C0201C; } @@ -514,7 +580,7 @@ void func_80C0201C(EnBomjimb* this, PlayState* play) { } void func_80C02108(EnBomjimb* this) { - func_80C0113C(this, 6, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_6, 1.0f); this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer); this->actor.world.rot.y = this->actor.yawTowardsPlayer; func_80C012E0(this); @@ -544,11 +610,11 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) { return; } - if (this->unk_2DC == 6) { + if (this->animIndex == ENBOMJIMB_ANIM_6) { f32 curFrame = this->skelAnime.curFrame; - if (this->unk_2B8 <= curFrame) { - func_80C0113C(this, 19, 2.0f); + if (curFrame >= this->animEndFrame) { + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_19, 2.0f); } return; } @@ -609,7 +675,7 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) { } void func_80C0250C(EnBomjimb* this) { - func_80C0113C(this, 15, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_15, 1.0f); this->unk_2D4 = 0; this->actor.speed = 0.0f; this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer); @@ -629,7 +695,7 @@ void func_80C02570(EnBomjimb* this, PlayState* play) { if (this->actor.xzDistToPlayer < 200.0f) { this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer); - func_80C0113C(this, 19, 2.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_19, 2.0f); this->actionFunc = func_80C0217C; } else if ((player->stateFlags3 == PLAYER_STATE3_1000000) || (this->actor.xzDistToPlayer > 410.0f)) { Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 3000, 0); @@ -639,7 +705,7 @@ void func_80C02570(EnBomjimb* this, PlayState* play) { void func_80C0267C(EnBomjimb* this) { func_80C012E0(this); - func_80C0113C(this, 8, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_8, 1.0f); this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.yawTowardsPlayer; this->unk_2AE = 40; @@ -662,9 +728,9 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { Player* player = GET_PLAYER(play); func_80C012E0(this); - func_80C0113C(this, 21, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_21, 1.0f); if ((player->transformation != PLAYER_FORM_DEKU) && (player->transformation != PLAYER_FORM_HUMAN)) { - func_80C0113C(this, 17, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_17, 1.0f); Message_StartTextbox(play, 0x72E, &this->actor); player->stateFlags1 |= PLAYER_STATE1_10000000; player->actor.freezeTimer = 3; @@ -676,7 +742,7 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { if (((player->transformation == PLAYER_FORM_DEKU) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10)) || ((player->transformation == PLAYER_FORM_HUMAN) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02))) { - func_80C0113C(this, 17, 1.0f); + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_17, 1.0f); Message_StartTextbox(play, 0x72E, &this->actor); player->stateFlags1 |= PLAYER_STATE1_10000000; player->actor.freezeTimer = 3; @@ -722,6 +788,9 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_76_10); SET_WEEKEVENTREG(WEEKEVENTREG_11_10); break; + + default: + break; } if (!Play_InCsMode(play)) { @@ -738,15 +807,15 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 curFrame = this->skelAnime.curFrame; - if (this->unk_2DC == 21) { + if (this->animIndex == ENBOMJIMB_ANIM_21) { player->actor.freezeTimer = 3; - if (this->unk_2B8 <= curFrame) { - func_80C0113C(this, 9, 1.0f); + if (curFrame >= this->animEndFrame) { + EnBomjimb_ChangeAnim(this, ENBOMJIMB_ANIM_9, 1.0f); } return; } - if ((this->unk_2CA == 8) && (this->unk_2DC == 9)) { + if ((this->unk_2CA == 8) && (this->animIndex == ENBOMJIMB_ANIM_9)) { player->actor.freezeTimer = 3; if (this->unk_2E0 == 0) { if (Animation_OnFrame(&this->skelAnime, 7.0f)) { @@ -756,7 +825,7 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) { } } - if ((this->unk_2DC == 15) && (this->unk_2CA == 8)) { + if ((this->animIndex == ENBOMJIMB_ANIM_15) && (this->unk_2CA == 8)) { player->actor.freezeTimer = 3; } @@ -873,20 +942,20 @@ void EnBomjimb_Update(Actor* thisx, PlayState* play2) { s32 EnBomjimb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBomjimb* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_CS_LIMB_0F) { *dList = NULL; } - if (limbIndex == 17) { + if (limbIndex == OBJECT_CS_LIMB_11) { rot->x += this->unk_28A; rot->z += this->unk_288; } - if ((limbIndex == 19) && (this->unk_2C8 != ENBOMJIMB_F_0)) { + if ((limbIndex == OBJECT_CS_LIMB_13) && (this->unk_2C8 != ENBOMJIMB_F_0)) { *dList = NULL; } - if ((limbIndex == 20) && (this->unk_2C8 == ENBOMJIMB_F_0)) { + if ((limbIndex == OBJECT_CS_LIMB_14) && (this->unk_2C8 == ENBOMJIMB_F_0)) { *dList = NULL; } diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h index a784e335d..9e2bb9cc5 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h @@ -2,6 +2,7 @@ #define Z_EN_BOMJIMB_H #include "global.h" +#include "objects/object_cs/object_cs.h" struct EnBomjimb; @@ -28,8 +29,8 @@ typedef enum { typedef struct EnBomjimb { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[21]; - /* 0x206 */ Vec3s morphTable[21]; + /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBomjimbActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; @@ -42,7 +43,7 @@ typedef struct EnBomjimb { /* 0x2B0 */ s16 unk_2B0; /* 0x2B2 */ s16 unk_2B2; /* 0x2B4 */ f32 unk_2B4; - /* 0x2B8 */ f32 unk_2B8; + /* 0x2B8 */ f32 animEndFrame; /* 0x2BC */ UNK_TYPE1 unk2BC[4]; /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; @@ -55,7 +56,7 @@ typedef struct EnBomjimb { /* 0x2D4 */ s16 unk_2D4; /* 0x2D6 */ s16 unk_2D6; /* 0x2D8 */ UNK_TYPE1 unk2D8[4]; - /* 0x2DC */ s32 unk_2DC; + /* 0x2DC */ s32 animIndex; /* 0x2E0 */ u8 unk_2E0; /* 0x2E4 */ Actor* unk_2E4; /* 0x2E8 */ ColliderCylinder collider; 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 333ca4276..7e173bb56 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -180,12 +180,12 @@ void EnBox_Init(Actor* thisx, PlayState* play) { EnBox* this = THIS; s16 csId; CollisionHeader* colHeader; - f32 animFrame; - f32 animFrameEnd; + f32 startFrame; + f32 endFrame; colHeader = NULL; - animFrame = 0.0f; - animFrameEnd = Animation_GetLastFrame(&gBoxChestOpenAnim); + startFrame = 0.0f; + endFrame = Animation_GetLastFrame(&gBoxChestOpenAnim); Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&gBoxChestCol, &colHeader); @@ -216,7 +216,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { this->iceSmokeTimer = 100; EnBox_SetupAction(this, EnBox_Open); this->movementFlags |= ENBOX_MOVE_STICK_TO_GROUND; - animFrame = animFrameEnd; + startFrame = endFrame; } else if (((this->type == ENBOX_TYPE_BIG_SWITCH_FLAG_FALL) || (this->type == ENBOX_TYPE_SMALL_SWITCH_FLAG_FALL)) && !Flags_GetSwitch(play, this->switchFlag)) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); @@ -272,7 +272,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { SkelAnime_Init(play, &this->skelAnime, &gBoxChestSkel, &gBoxChestOpenAnim, this->jointTable, this->morphTable, OBJECT_BOX_CHEST_LIMB_MAX); - Animation_Change(&this->skelAnime, &gBoxChestOpenAnim, 1.5f, animFrame, animFrameEnd, ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gBoxChestOpenAnim, 1.5f, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); if (Actor_IsSmallChest(this)) { Actor_SetScale(&this->dyna.actor, 0.0075f); Actor_SetFocus(&this->dyna.actor, 20.0f); @@ -449,17 +449,17 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { &gBoxBigChestOpenChildAnim, // PLAYER_FORM_HUMAN }; s32 pad; - AnimationHeader* animHeader; - f32 frameCount; - f32 playbackSpeed; + AnimationHeader* anim; + f32 endFrame; + f32 playSpeed; this->alpha = 255; this->movementFlags |= ENBOX_MOVE_IMMOBILE; if ((this->unk_1EC != 0) && ((this->csId2 < 0) || (CutsceneManager_GetCurrentCsId() == this->csId2) || (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) { if (this->unk_1EC < 0) { - animHeader = &gBoxChestOpenAnim; - playbackSpeed = 1.5f; + anim = &gBoxChestOpenAnim; + playSpeed = 1.5f; } else { f32 sPlaybackSpeeds[PLAYER_FORM_MAX] = { 1.5f, // PLAYER_FORM_FIERCE_DEITY @@ -469,12 +469,12 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { 1.5f, // PLAYER_FORM_HUMAN }; - animHeader = sBigChestAnimations[GET_PLAYER_FORM]; - playbackSpeed = sPlaybackSpeeds[GET_PLAYER_FORM]; + anim = sBigChestAnimations[GET_PLAYER_FORM]; + playSpeed = sPlaybackSpeeds[GET_PLAYER_FORM]; } - frameCount = Animation_GetLastFrame(animHeader); - Animation_Change(&this->skelAnime, animHeader, playbackSpeed, 0.0f, frameCount, ANIMMODE_ONCE, 0.0f); + endFrame = Animation_GetLastFrame(anim); + Animation_Change(&this->skelAnime, anim, playSpeed, 0.0f, endFrame, ANIMMODE_ONCE, 0.0f); EnBox_SetupAction(this, EnBox_Open); if (this->unk_1EC > 0) { Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_DEMO_TRE_LGT, @@ -557,8 +557,8 @@ void EnBox_Open(EnBox* this, PlayState* play) { if (sfxId != NA_SE_NONE) { Audio_PlaySfx_AtPos(&this->dyna.actor.projectedPos, sfxId); } - if (this->skelAnime.jointTable[3].z > 0) { - this->unk_1A8 = (0x7D00 - this->skelAnime.jointTable[3].z) * 0.00006f; + if (this->skelAnime.jointTable[OBJECT_BOX_CHEST_LIMB_03].z > 0) { + this->unk_1A8 = (0x7D00 - this->skelAnime.jointTable[OBJECT_BOX_CHEST_LIMB_03].z) * 0.00006f; if (this->unk_1A8 < 0.0f) { this->unk_1A8 = 0.0f; } else if (this->unk_1A8 > 1.0f) { diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index e65e48929..0d7b60823 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -178,7 +178,7 @@ void EnButte_Init(Actor* thisx, PlayState* play) { } SkelAnime_Init(play, &this->skelAnime, &gameplay_field_keep_Skel_002FA0, &gameplay_field_keep_Anim_001D20, - this->jointTable, this->morphTable, 8); + this->jointTable, this->morphTable, BUTTERFLY_LIMB_MAX); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colldierElements); diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.h b/src/overlays/actors/ovl_En_Butte/z_en_butte.h index 4bcaf440c..b035d2845 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.h +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.h @@ -2,6 +2,7 @@ #define Z_EN_BUTTE_H #include "global.h" +#include "objects/gameplay_field_keep/gameplay_field_keep.h" struct EnButte; @@ -19,8 +20,8 @@ typedef struct EnButte { /* 0x144 */ ColliderJntSph collider; /* 0x164 */ ColliderJntSphElement colldierElements[1]; /* 0x1A4 */ SkelAnime skelAnime; - /* 0x1E8 */ Vec3s jointTable[8]; - /* 0x218 */ Vec3s morphTable[8]; + /* 0x1E8 */ Vec3s jointTable[BUTTERFLY_LIMB_MAX]; + /* 0x218 */ Vec3s morphTable[BUTTERFLY_LIMB_MAX]; /* 0x248 */ EnButteActionFunc actionFunc; /* 0x24C */ s16 unk_24C; /* 0x24E */ u8 unk_24E; 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 eb73aecfb..2fe21ebc7 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -232,9 +232,9 @@ void EnFamos_SetupAttackDebris(EnFamos* this) { rock->velocity.x = randFloat * Math_CosS(randOffset) * Math_SinS(randVelDirection); rock->velocity.y = Math_SinS(randOffset) * randFloat + 3.0f; rock->velocity.z = randFloat * Math_CosS(randOffset) * Math_CosS(randVelDirection); - rock->rotation.x = (s32)Rand_Next() >> 0x10; - rock->rotation.y = (s32)Rand_Next() >> 0x10; - rock->rotation.z = (s32)Rand_Next() >> 0x10; + rock->rot.x = (s32)Rand_Next() >> 0x10; + rock->rot.y = (s32)Rand_Next() >> 0x10; + rock->rot.z = (s32)Rand_Next() >> 0x10; rock->pos.x = (Math_SinS(randVelDirection) * 20.0f) + this->actor.world.pos.x; rock->pos.y = this->actor.floorHeight; rock->pos.z = (Math_CosS(randVelDirection) * 20.0f) + this->actor.world.pos.z; @@ -261,9 +261,9 @@ void EnFamos_SetupDeathDebris(EnFamos* this) { rock->velocity.x = randFloat * Math_CosS(randSmaller) * Math_SinS(randVelDirection); rock->velocity.y = Math_SinS(randSmaller) * randFloat + 4.5f; rock->velocity.z = randFloat * Math_CosS(randSmaller) * Math_CosS(randVelDirection); - rock->rotation.x = (s32)Rand_Next() >> 0x10; - rock->rotation.y = (s32)Rand_Next() >> 0x10; - rock->rotation.z = (s32)Rand_Next() >> 0x10; + rock->rot.x = (s32)Rand_Next() >> 0x10; + rock->rot.y = (s32)Rand_Next() >> 0x10; + rock->rot.z = (s32)Rand_Next() >> 0x10; rock->pos.x = Math_SinS(randVelDirection) * 20.0f + this->actor.world.pos.x; rock->pos.y = Rand_CenteredFloat(60.0f) + (this->actor.world.pos.y + 40.0f); rock->pos.z = Math_CosS(randVelDirection) * 20.0f + this->actor.world.pos.z; @@ -736,9 +736,9 @@ void EnFamos_UpdateDebrisPosRot(EnFamos* this) { for (i = 0; i < ARRAY_COUNT(this->rocks); i++, rock++) { rock->velocity.y -= 1.0f; Math_Vec3f_Sum(&rock->pos, &rock->velocity, &rock->pos); - rock->rotation.x += (s16)((Rand_Next() >> 0x17) + 0x700); - rock->rotation.y += (s16)((Rand_Next() >> 0x17) + 0x900); - rock->rotation.z += (s16)((Rand_Next() >> 0x17) + 0xB00); + rock->rot.x += (s16)((Rand_Next() >> 0x17) + 0x700); + rock->rot.y += (s16)((Rand_Next() >> 0x17) + 0x900); + rock->rot.z += (s16)((Rand_Next() >> 0x17) + 0xB00); } } @@ -842,7 +842,7 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) { rock = &this->rocks[0]; for (i = 0; i < ARRAY_COUNT(this->rocks); i++, rock++) { - Matrix_SetTranslateRotateYXZ(rock->pos.x, rock->pos.y, rock->pos.z, &rock->rotation); + Matrix_SetTranslateRotateYXZ(rock->pos.x, rock->pos.y, rock->pos.z, &rock->rot); Matrix_Scale(rock->scale, rock->scale, rock->scale, MTXMODE_APPLY); gSPMatrix(&dispOpa[3 + i * 2], Matrix_NewMtx(play->state.gfxCtx), diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.h b/src/overlays/actors/ovl_En_Famos/z_en_famos.h index 468356376..955b4b31f 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.h +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.h @@ -11,8 +11,8 @@ typedef void (*EnFamosActionFunc)(struct EnFamos*, PlayState*); typedef struct EnFamosRock { /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3f velocity; - /* 0x18 */ Vec3s rotation; - /* 0x20 */ f32 scale; + /* 0x18 */ Vec3s rot; + /* 0x20 */ f32 scale; } EnFamosRock; // size = 0x24 #define FAMOS_GET_PATH_INDEX(thisx) ((thisx)->params) 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 93bf9a81b..99a255ec2 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -147,7 +147,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { s32 i; Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80); - SkelAnime_InitFlex(play, &this->skelanime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0); this->songSummonDist = KAKASI_GET_SUMMON_DISTANCE(&this->picto.actor) * 20.0f; if (this->songSummonDist < 40.0f) { @@ -197,9 +197,9 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { void EnKakasi_ChangeAnim(EnKakasi* this, s32 animIndex) { this->animIndex = animIndex; - this->animeFrameCount = Animation_GetLastFrame(&sAnimations[this->animIndex]->common); + this->animEndFrame = Animation_GetLastFrame(&sAnimations[this->animIndex]->common); // 1: regular playback speed, 0: starting frame - Animation_Change(&this->skelanime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animeFrameCount, + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -4.0f); } @@ -209,24 +209,24 @@ s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx) { void EnKakasi_CheckAnimationSfx(EnKakasi* this) { if ((this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING) || (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL)) { - if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { + if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } } if ((this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) || (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { - if (Animation_OnFrame(&this->skelanime, 4.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { + if (Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } - if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 9.0f) || - Animation_OnFrame(&this->skelanime, 16.0f)) { + if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 9.0f) || + Animation_OnFrame(&this->skelAnime, 16.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_IT_KAKASHI_JUMP); } - if (Animation_OnFrame(&this->skelanime, 18.0f)) { + if (Animation_OnFrame(&this->skelAnime, 18.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL); } } if ((this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER) || (this->animIndex == ENKAKASI_ANIM_TWIRL)) { - if (Animation_OnFrame(&this->skelanime, 1.0f)) { + if (Animation_OnFrame(&this->skelAnime, 1.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL); } } @@ -286,7 +286,7 @@ void func_8096FBB8(EnKakasi* this, PlayState* play) { this->unk190 = 8; } if (this->unk190 != 0) { - Math_ApproachF(&this->skelanime.playSpeed, 1.0f, 0.1f, 0.2f); + Math_ApproachF(&this->skelAnime.playSpeed, 1.0f, 0.1f, 0.2f); this->picto.actor.shape.rot.y += 0x800; } } @@ -330,19 +330,19 @@ void EnKakasi_SetupIdleStanding(EnKakasi* this) { } void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { - u32 saveContextDay = gSaveContext.save.day; + u32 day = gSaveContext.save.day; s16 x; s16 y; // first talk to scarecrow dialogue this->picto.actor.textId = 0x1644; if (func_800B8718(&this->picto.actor, &play->state)) { - this->skelanime.playSpeed = 1.0f; + this->skelAnime.playSpeed = 1.0f; EnKakasi_SetupSongTeach(this, play); return; } if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { - this->skelanime.playSpeed = 1.0f; + this->skelAnime.playSpeed = 1.0f; EnKakasi_SetupDialogue(this); return; } @@ -352,15 +352,15 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { (y < SCREEN_HEIGHT) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { // faster shaking EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); - this->skelanime.playSpeed = 2.0f; + this->skelAnime.playSpeed = 2.0f; } } else if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); - this->skelanime.playSpeed = 2.0f; + this->skelAnime.playSpeed = 2.0f; } - } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { - this->skelanime.playSpeed = 1.0f; + } else if ((day == 3) && gSaveContext.save.isNight) { + this->skelAnime.playSpeed = 1.0f; if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, 1); } @@ -386,12 +386,12 @@ void EnKakasi_SetupDialogue(EnKakasi* this) { } void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { - u32 saveContextDay = gSaveContext.save.day; - f32 currentAnimeFrame = this->skelanime.curFrame; + u32 day = gSaveContext.save.day; + f32 curFrame = this->skelAnime.curFrame; Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 2000, 0); // if first dialogue - if ((this->picto.actor.textId != 0x1644) && (this->animeFrameCount <= currentAnimeFrame) && + if ((this->picto.actor.textId != 0x1644) && (curFrame >= this->animEndFrame) && (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -400,7 +400,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { // if dialogue: oh sorry come back again if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) { - if ((this->animeFrameCount <= currentAnimeFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { + if ((curFrame >= this->animEndFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { if (++this->unkCounter1A4 >= 2) { this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -517,7 +517,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { this->picto.actor.textId = 0x1658; } else if (this->picto.actor.textId == 0x165C) { this->picto.actor.textId = 0x165E; - } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { + } else if ((day == 3) && gSaveContext.save.isNight) { this->picto.actor.textId = 0x164F; } else { this->picto.actor.textId = 0x1652; @@ -631,7 +631,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { } else if (play->msgCtx.ocarinaMode == 3) { // song success this->postTeachTimer = 30; - this->skelanime.playSpeed = 2.0f; + this->skelAnime.playSpeed = 2.0f; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); this->actionFunc = EnKakasi_PostSongLearnTwirl; } @@ -639,14 +639,13 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { } void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { - f32 animeFrame = this->skelanime.curFrame; + f32 curFrame = this->skelAnime.curFrame; if ((this->postTeachTimer == 0) && (this->animIndex != ENKAKASI_ANIM_TWIRL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); - this->skelanime.playSpeed = 2.0f; + this->skelAnime.playSpeed = 2.0f; } - if ((this->postTeachTimer == 0) && (this->animIndex == ENKAKASI_ANIM_TWIRL) && - (this->animeFrameCount <= animeFrame)) { + if ((this->postTeachTimer == 0) && (this->animIndex == ENKAKASI_ANIM_TWIRL) && (curFrame >= this->animEndFrame)) { EnKakasi_SetupPostSongLearnDialogue(this, play); } } @@ -667,7 +666,7 @@ void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) { void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 tempAnimFrame = this->skelanime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Vec3f vec3fCopy; Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0); @@ -683,7 +682,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } if ((this->picto.actor.textId == 0x1648) && (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) && - (this->animeFrameCount <= tempAnimFrame)) { + (curFrame >= this->animEndFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); @@ -691,7 +690,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } if ((this->picto.actor.textId == 0x164B) && (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) && - (this->animeFrameCount <= tempAnimFrame)) { + (curFrame >= this->animEndFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -818,11 +817,10 @@ void EnKakasi_SetupDanceNightAway(EnKakasi* this) { } void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { - f32 currentFrame; + f32 curFrame = this->skelAnime.curFrame; Vec3f localVec3f; Player* player; - currentFrame = this->skelanime.curFrame; EnKakasi_CheckPlayerPosition(this, play); Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0); this->unk22C.y = this->picto.actor.home.pos.y + 50.0f; @@ -856,7 +854,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { case 1: // end of twirl, start shaking back and forth - if ((this->unk204 == 0) && (this->animeFrameCount <= currentFrame)) { + if ((this->unk204 == 0) && (curFrame >= this->animEndFrame)) { this->unk204 = 0x14; this->unk190++; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); @@ -1117,7 +1115,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { EnKakasi* this = THIS; s32 pad; - SkelAnime_Update(&this->skelanime); + SkelAnime_Update(&this->skelAnime); if (this->picto.actor.draw != NULL) { EnKakasi_CheckAnimationSfx(this); } @@ -1162,6 +1160,6 @@ void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r void EnKakasi_Draw(Actor* thisx, PlayState* play) { EnKakasi* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); - SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnKakasi_PostLimbDraw, &this->picto.actor); } diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h index cff35d183..689e475b2 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h @@ -11,7 +11,7 @@ typedef void (*EnKakasiActionFunc)(struct EnKakasi*, PlayState*); typedef struct EnKakasi { /* 0x000 */ PictoActor picto; /* 0x148 */ EnKakasiActionFunc actionFunc; - /* 0x14C */ SkelAnime skelanime; + /* 0x14C */ SkelAnime skelAnime; /* 0x190 */ s16 unk190; // camera index for song teaching angles? /* 0x192 */ s16 postTeachTimer; /* 0x194 */ s16 aboveGroundStatus; // from params, changed to 2 in init @@ -22,7 +22,7 @@ typedef struct EnKakasi { /* 0x1A8 */ s32 unkState1A8; /* 0x1AC */ s16 talkState; /* 0x1AE */ s16 csIdList[3]; - /* 0x1B4 */ f32 animeFrameCount; + /* 0x1B4 */ f32 animEndFrame; /* 0x1B8 */ f32 unkHeight; /* 0x1BC */ Vec3f unk1BC; // set by post limbdraw func for one limb /* 0x1C8 */ UNK_TYPE1 pad1C8[0x3C]; 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 0e96590d5..d3edbce76 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -108,7 +108,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelanime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Math_Vec3f_Copy(&this->unk2A4, &this->actor.world.pos); Math_Vec3f_Copy(&this->unk2B0, &this->actor.world.pos); @@ -331,7 +331,7 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) { } void EnNiw_SetupIdle(EnNiw* this) { - Animation_Change(&this->skelanime, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, + Animation_Change(&this->skelAnime, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, -10.0f); this->niwState = NIW_STATE_IDLE; this->actionFunc = EnNiw_Idle; @@ -636,7 +636,7 @@ void EnNiw_CuccoStorm(EnNiw* this, PlayState* play) { } void EnNiw_SetupRunAway(EnNiw* this) { - Animation_Change(&this->skelanime, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, + Animation_Change(&this->skelAnime, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, -10.0f); this->isRunningRight = Rand_ZeroFloat(1.99f); this->niwState = NIW_STATE_RUNNING; @@ -943,7 +943,7 @@ void EnNiw_Draw(Actor* thisx, PlayState* play) { EnNiw* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); - SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnNiw_OverrideLimbDraw, NULL, &this->actor); EnNiw_DrawFeathers(this, play); } diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.h b/src/overlays/actors/ovl_En_Niw/z_en_niw.h index 06f487800..769a67c17 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.h +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.h @@ -24,7 +24,7 @@ typedef struct { typedef struct EnNiw { /* 0x000 */ Actor actor; - /* 0x144 */ SkelAnime skelanime; + /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[NIW_LIMB_MAX]; /* 0x1E8 */ Vec3s morphTable[NIW_LIMB_MAX]; /* 0x248 */ EnNiwActionFunc actionFunc; 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 43b61cfb4..f4e938d44 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 @@ -1228,7 +1228,7 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) { Matrix_Put(&this->mtxf); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gPoeSistersDrawTorchDL); + gSPDisplayList(POLY_OPA_DISP++, gPoeSistersTorchDL); } gSPSegment( 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 db0ee5e82..ebede99a3 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -896,9 +896,9 @@ void EnRaf_InitializeEffect(EnRaf* this, Vec3f* pos, Vec3f* velocity, Vec3f* acc effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = Rand_CenteredFloat(30000.0f); - effect->rotation.y = Rand_CenteredFloat(30000.0f); - effect->rotation.z = Rand_CenteredFloat(30000.0f); + effect->rot.x = Rand_CenteredFloat(30000.0f); + effect->rot.y = Rand_CenteredFloat(30000.0f); + effect->rot.z = Rand_CenteredFloat(30000.0f); return; } } @@ -913,9 +913,9 @@ void EnRaf_UpdateEffects(EnRaf* this, PlayState* play) { effect->pos.x += effect->velocity.x; effect->pos.y += effect->velocity.y; effect->pos.z += effect->velocity.z; - effect->rotation.x += 0xBB8; - effect->rotation.y += 0xBB8; - effect->rotation.z += 0xBB8; + effect->rot.x += 0xBB8; + effect->rot.y += 0xBB8; + effect->rot.z += 0xBB8; effect->velocity.x += effect->accel.x; effect->velocity.y += effect->accel.y; effect->velocity.z += effect->accel.z; @@ -954,9 +954,9 @@ void EnRaf_DrawEffects(EnRaf* this, PlayState* play) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); - Matrix_RotateXS(effect->rotation.x, MTXMODE_APPLY); - Matrix_RotateYS(effect->rotation.y, MTXMODE_APPLY); - Matrix_RotateZS(effect->rotation.z, MTXMODE_APPLY); + Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY); + Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCarnivorousLilyPadParticleDL); diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.h b/src/overlays/actors/ovl_En_Raf/z_en_raf.h index f4659f48b..a025046ab 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.h +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.h @@ -23,7 +23,7 @@ typedef struct { /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f velocity; /* 0x1C */ Vec3f accel; - /* 0x28 */ Vec3s rotation; + /* 0x28 */ Vec3s rot; /* 0x30 */ f32 scale; /* 0x34 */ s16 timer; } EnRafEffect; // size = 0x38 diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 61418e656..39c385914 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -9057,7 +9057,7 @@ 0x809C467C:("EnEncount4_Update",), 0x809C4790:("EnBomBowlMan_Init",), 0x809C492C:("EnBomBowlMan_Destroy",), - 0x809C493C:("func_809C493C",), + 0x809C493C:("EnBomBowlMan_ChangeAnim",), 0x809C49CC:("func_809C49CC",), 0x809C4B50:("func_809C4B50",), 0x809C4B6C:("func_809C4B6C",), @@ -16454,7 +16454,7 @@ 0x80BFE170:("EnBomjima_Init",), 0x80BFE300:("EnBomjima_Destroy",), 0x80BFE32C:("func_80BFE32C",), - 0x80BFE494:("func_80BFE494",), + 0x80BFE494:("EnBomjima_ChangeAnim",), 0x80BFE524:("func_80BFE524",), 0x80BFE65C:("func_80BFE65C",), 0x80BFE67C:("func_80BFE67C",), @@ -16487,7 +16487,7 @@ 0x80C008B4:("EnBomjima_Draw",), 0x80C00EA0:("EnBomjimb_Init",), 0x80C01110:("EnBomjimb_Destroy",), - 0x80C0113C:("func_80C0113C",), + 0x80C0113C:("EnBomjimb_ChangeAnim",), 0x80C011CC:("func_80C011CC",), 0x80C012E0:("func_80C012E0",), 0x80C012FC:("func_80C012FC",), @@ -16519,7 +16519,7 @@ 0x80C03034:("EnBomjimb_Draw",), 0x80C03530:("EnBombers_Init",), 0x80C037F8:("EnBombers_Destroy",), - 0x80C03824:("func_80C03824",), + 0x80C03824:("EnBombers_ChangeAnim",), 0x80C038B4:("func_80C038B4",), 0x80C039A8:("func_80C039A8",), 0x80C03ACC:("func_80C03ACC",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6c743d181..6d6a74981 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9784,7 +9784,7 @@ 0x809C6104:("D_809C6104","UNK_TYPE4","",0x4), 0x809C6108:("En_Bom_Bowl_Man_InitVars","UNK_TYPE1","",0x1), 0x809C6128:("D_809C6128","UNK_TYPE1","",0x1), - 0x809C6178:("D_809C6178","UNK_TYPE1","",0x1), + 0x809C6178:("sAnimationModes","UNK_TYPE1","",0x1), 0x809C618C:("D_809C618C","UNK_TYPE2","",0x2), 0x809C6198:("D_809C6198","UNK_TYPE2","",0x2), 0x809C61A0:("D_809C61A0","UNK_TYPE1","",0x1), @@ -16174,7 +16174,7 @@ 0x80C00A70:("D_80C00A70","UNK_TYPE1","",0x1), 0x80C00A8C:("D_80C00A8C","UNK_TYPE1","",0x1), 0x80C00A94:("D_80C00A94","UNK_TYPE1","",0x1), - 0x80C00AE4:("D_80C00AE4","UNK_TYPE1","",0x1), + 0x80C00AE4:("sAnimationModes","UNK_TYPE1","",0x1), 0x80C00AF8:("D_80C00AF8","UNK_TYPE2","",0x2), 0x80C00B08:("D_80C00B08","UNK_TYPE1","",0x1), 0x80C00B18:("D_80C00B18","UNK_TYPE1","",0x1), @@ -16202,8 +16202,8 @@ 0x80C032C8:("jtbl_80C032C8","UNK_PTR","",0x4), 0x80C04750:("En_Bombers_InitVars","UNK_TYPE1","",0x1), 0x80C04770:("D_80C04770","UNK_TYPE1","",0x1), - 0x80C0479C:("D_80C0479C","UNK_TYPE1","",0x1), - 0x80C047E0:("D_80C047E0","UNK_TYPE1","",0x1), + 0x80C0479C:("sAnimations","UNK_TYPE1","",0x1), + 0x80C047E0:("sAnimationModes","UNK_TYPE1","",0x1), 0x80C047F8:("D_80C047F8","UNK_TYPE1","",0x1), 0x80C04808:("D_80C04808","UNK_TYPE1","",0x1), 0x80C04818:("D_80C04818","UNK_PTR","",0x4), From 76e02120a0a5da832379e9079c963c63a03f7dd6 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Tue, 18 Jul 2023 11:25:25 -0700 Subject: [PATCH 039/121] Add original asset names to all `object_h*` files (#1330) * Add original asset names to all `object_h*` files * Soften language used in `object_hunsui`, because we can't say for sure that we know the names of the collision files, even if it feels pretty clear * Switch from "is" to "might be" on the DLs too --- assets/xml/objects/object_ha.xml | 20 +++++------ assets/xml/objects/object_haka_obj.xml | 18 +++++----- assets/xml/objects/object_hakaisi.xml | 12 +++---- assets/xml/objects/object_hakugin_demo.xml | 8 ++--- assets/xml/objects/object_hakugin_obj.xml | 36 +++++++++---------- assets/xml/objects/object_hana.xml | 2 +- assets/xml/objects/object_harfgibud.xml | 30 ++++++++-------- assets/xml/objects/object_hariko.xml | 4 +-- assets/xml/objects/object_hata.xml | 4 +-- assets/xml/objects/object_hgdoor.xml | 12 +++---- assets/xml/objects/object_hintnuts.xml | 20 +++++------ .../xml/objects/object_horse_game_check.xml | 4 +-- .../xml/objects/object_horse_link_child.xml | 30 ++++++++-------- assets/xml/objects/object_hs.xml | 6 ++-- assets/xml/objects/object_hsstump.xml | 4 +-- assets/xml/objects/object_hunsui.xml | 8 ++--- 16 files changed, 109 insertions(+), 109 deletions(-) diff --git a/assets/xml/objects/object_ha.xml b/assets/xml/objects/object_ha.xml index 94973c809..1ef654330 100644 --- a/assets/xml/objects/object_ha.xml +++ b/assets/xml/objects/object_ha.xml @@ -1,6 +1,6 @@  - + @@ -64,15 +64,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_haka_obj.xml b/assets/xml/objects/object_haka_obj.xml index 57f34f0d1..2746eb690 100644 --- a/assets/xml/objects/object_haka_obj.xml +++ b/assets/xml/objects/object_haka_obj.xml @@ -1,14 +1,14 @@  - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_hakaisi.xml b/assets/xml/objects/object_hakaisi.xml index 227fc4cf8..c0e200ea7 100644 --- a/assets/xml/objects/object_hakaisi.xml +++ b/assets/xml/objects/object_hakaisi.xml @@ -5,11 +5,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_hakugin_demo.xml b/assets/xml/objects/object_hakugin_demo.xml index 8c8b5837c..1de3cd695 100644 --- a/assets/xml/objects/object_hakugin_demo.xml +++ b/assets/xml/objects/object_hakugin_demo.xml @@ -1,9 +1,9 @@  - - - - + + + + diff --git a/assets/xml/objects/object_hakugin_obj.xml b/assets/xml/objects/object_hakugin_obj.xml index b4badbd1d..883a954a6 100644 --- a/assets/xml/objects/object_hakugin_obj.xml +++ b/assets/xml/objects/object_hakugin_obj.xml @@ -1,7 +1,7 @@  - + @@ -10,27 +10,27 @@ - + - + - + - + - + @@ -40,7 +40,7 @@ - + @@ -50,11 +50,11 @@ - + - - - + + + @@ -63,22 +63,22 @@ - + - + - + - + - + - + - + diff --git a/assets/xml/objects/object_hana.xml b/assets/xml/objects/object_hana.xml index 3812a4ff5..21981bc02 100644 --- a/assets/xml/objects/object_hana.xml +++ b/assets/xml/objects/object_hana.xml @@ -8,6 +8,6 @@ - + diff --git a/assets/xml/objects/object_harfgibud.xml b/assets/xml/objects/object_harfgibud.xml index 99578e996..437e3b70d 100644 --- a/assets/xml/objects/object_harfgibud.xml +++ b/assets/xml/objects/object_harfgibud.xml @@ -3,11 +3,11 @@ - - - - - + + + + + @@ -61,11 +61,11 @@ - - - + + + - + @@ -121,11 +121,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_hariko.xml b/assets/xml/objects/object_hariko.xml index 5cb2d8328..9af628304 100644 --- a/assets/xml/objects/object_hariko.xml +++ b/assets/xml/objects/object_hariko.xml @@ -1,8 +1,8 @@  - - + + diff --git a/assets/xml/objects/object_hata.xml b/assets/xml/objects/object_hata.xml index 3b82840d3..cbee285e3 100644 --- a/assets/xml/objects/object_hata.xml +++ b/assets/xml/objects/object_hata.xml @@ -1,10 +1,10 @@  - + - + diff --git a/assets/xml/objects/object_hgdoor.xml b/assets/xml/objects/object_hgdoor.xml index e897103bf..8a0bb4c70 100644 --- a/assets/xml/objects/object_hgdoor.xml +++ b/assets/xml/objects/object_hgdoor.xml @@ -3,11 +3,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_hintnuts.xml b/assets/xml/objects/object_hintnuts.xml index 483623988..99ea55d87 100644 --- a/assets/xml/objects/object_hintnuts.xml +++ b/assets/xml/objects/object_hintnuts.xml @@ -1,6 +1,6 @@  - + @@ -10,7 +10,7 @@ - + @@ -28,13 +28,13 @@ - - - - - - - - + + + + + + + + diff --git a/assets/xml/objects/object_horse_game_check.xml b/assets/xml/objects/object_horse_game_check.xml index 1ea72ac57..fd5e2f398 100644 --- a/assets/xml/objects/object_horse_game_check.xml +++ b/assets/xml/objects/object_horse_game_check.xml @@ -8,9 +8,9 @@ - + - + diff --git a/assets/xml/objects/object_horse_link_child.xml b/assets/xml/objects/object_horse_link_child.xml index 60178badb..6af29e1e5 100644 --- a/assets/xml/objects/object_horse_link_child.xml +++ b/assets/xml/objects/object_horse_link_child.xml @@ -20,15 +20,15 @@ - - - - - - - - - + + + + + + + + + @@ -77,12 +77,12 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml index 500ba389f..d4bf08223 100644 --- a/assets/xml/objects/object_hs.xml +++ b/assets/xml/objects/object_hs.xml @@ -1,9 +1,9 @@  - - - + + + diff --git a/assets/xml/objects/object_hsstump.xml b/assets/xml/objects/object_hsstump.xml index f94f0ed4e..f8e466603 100644 --- a/assets/xml/objects/object_hsstump.xml +++ b/assets/xml/objects/object_hsstump.xml @@ -1,10 +1,10 @@  - + - + diff --git a/assets/xml/objects/object_hunsui.xml b/assets/xml/objects/object_hunsui.xml index 878bf704d..a97f8f094 100644 --- a/assets/xml/objects/object_hunsui.xml +++ b/assets/xml/objects/object_hunsui.xml @@ -1,12 +1,12 @@  - + - - + + - + From 9e85f5545a290c0bc113ba9b8a12bb7c56130e59 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 18 Jul 2023 11:51:56 -0700 Subject: [PATCH 040/121] Shopkeeper weekeventregs (#1325) * Ossan * sob1 talked * fsn weekeventregs * Curiosity shop 3rd day item to special item * Kotake * Format * Kotake bottle * PR suggestions * Koume Kiosk -> Kiosk Koume * Update include/z64save.h Co-authored-by: Tom Overton --------- Co-authored-by: Tom Overton --- assets/xml/objects/object_tro.xml | 28 ++++----- include/z64save.h | 57 +++++++++-------- src/code/z_sram_NES.c | 2 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 10 +-- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 18 +++--- src/overlays/actors/ovl_En_Dnh/z_en_dnh.h | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 25 ++++---- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 4 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 32 +++++----- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 36 +++++------ .../actors/ovl_En_Suttari/z_en_suttari.c | 17 ++--- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 7 ++- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 63 ++++++++++--------- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 27 ++++---- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 22 +++---- tools/disasm/functions.txt | 4 +- tools/weekeventregconvert.py | 52 +++++++-------- 17 files changed, 211 insertions(+), 197 deletions(-) diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml index a5f2fb5c8..a794217b4 100644 --- a/assets/xml/objects/object_tro.xml +++ b/assets/xml/objects/object_tro.xml @@ -1,18 +1,18 @@  - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index fa44ebfe1..d969ff7bf 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -644,8 +644,8 @@ typedef enum { #define WEEKEVENTREG_12_02 PACK_WEEKEVENTREG_FLAG(12, 0x02) #define WEEKEVENTREG_12_04 PACK_WEEKEVENTREG_FLAG(12, 0x04) -#define WEEKEVENTREG_12_08 PACK_WEEKEVENTREG_FLAG(12, 0x08) -#define WEEKEVENTREG_12_10 PACK_WEEKEVENTREG_FLAG(12, 0x10) +#define WEEKEVENTREG_SAVED_KOUME PACK_WEEKEVENTREG_FLAG(12, 0x08) +#define WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE PACK_WEEKEVENTREG_FLAG(12, 0x10) #define WEEKEVENTREG_12_20 PACK_WEEKEVENTREG_FLAG(12, 0x20) #define WEEKEVENTREG_12_40 PACK_WEEKEVENTREG_FLAG(12, 0x40) #define WEEKEVENTREG_12_80 PACK_WEEKEVENTREG_FLAG(12, 0x80) @@ -690,11 +690,11 @@ typedef enum { #define WEEKEVENTREG_16_02 PACK_WEEKEVENTREG_FLAG(16, 0x02) #define WEEKEVENTREG_16_04 PACK_WEEKEVENTREG_FLAG(16, 0x04) #define WEEKEVENTREG_16_08 PACK_WEEKEVENTREG_FLAG(16, 0x08) -#define WEEKEVENTREG_16_10 PACK_WEEKEVENTREG_FLAG(16, 0x10) +#define WEEKEVENTREG_TALKED_KOUME_INJURED PACK_WEEKEVENTREG_FLAG(16, 0x10) #define WEEKEVENTREG_16_20 PACK_WEEKEVENTREG_FLAG(16, 0x20) #define WEEKEVENTREG_16_40 PACK_WEEKEVENTREG_FLAG(16, 0x40) #define WEEKEVENTREG_16_80 PACK_WEEKEVENTREG_FLAG(16, 0x80) -#define WEEKEVENTREG_17_01 PACK_WEEKEVENTREG_FLAG(17, 0x01) +#define WEEKEVENTREG_TALKED_KOUME_KIOSK_EMPTY PACK_WEEKEVENTREG_FLAG(17, 0x01) #define WEEKEVENTREG_17_02 PACK_WEEKEVENTREG_FLAG(17, 0x02) #define WEEKEVENTREG_17_04 PACK_WEEKEVENTREG_FLAG(17, 0x04) #define WEEKEVENTREG_17_08 PACK_WEEKEVENTREG_FLAG(17, 0x08) @@ -704,9 +704,9 @@ typedef enum { #define WEEKEVENTREG_17_80 PACK_WEEKEVENTREG_FLAG(17, 0x80) #define WEEKEVENTREG_18_01 PACK_WEEKEVENTREG_FLAG(18, 0x01) #define WEEKEVENTREG_18_02 PACK_WEEKEVENTREG_FLAG(18, 0x02) -#define WEEKEVENTREG_18_04 PACK_WEEKEVENTREG_FLAG(18, 0x04) -#define WEEKEVENTREG_18_08 PACK_WEEKEVENTREG_FLAG(18, 0x08) -#define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10) +#define WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_GORON PACK_WEEKEVENTREG_FLAG(18, 0x04) +#define WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_ZORA PACK_WEEKEVENTREG_FLAG(18, 0x08) +#define WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_DEKU PACK_WEEKEVENTREG_FLAG(18, 0x10) #define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20) #define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40) @@ -867,8 +867,8 @@ typedef enum { // Laundry Pool Frog Returned #define WEEKEVENTREG_33_02 PACK_WEEKEVENTREG_FLAG(33, 0x02) -#define WEEKEVENTREG_33_04 PACK_WEEKEVENTREG_FLAG(33, 0x04) -#define WEEKEVENTREG_33_08 PACK_WEEKEVENTREG_FLAG(33, 0x08) +#define WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM PACK_WEEKEVENTREG_FLAG(33, 0x04) +#define WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG PACK_WEEKEVENTREG_FLAG(33, 0x08) #define WEEKEVENTREG_33_10 PACK_WEEKEVENTREG_FLAG(33, 0x10) #define WEEKEVENTREG_33_20 PACK_WEEKEVENTREG_FLAG(33, 0x20) #define WEEKEVENTREG_33_40 PACK_WEEKEVENTREG_FLAG(33, 0x40) @@ -991,8 +991,8 @@ typedef enum { #define WEEKEVENTREG_53_01 PACK_WEEKEVENTREG_FLAG(53, 0x01) #define WEEKEVENTREG_53_02 PACK_WEEKEVENTREG_FLAG(53, 0x02) #define WEEKEVENTREG_53_04 PACK_WEEKEVENTREG_FLAG(53, 0x04) -#define WEEKEVENTREG_53_08 PACK_WEEKEVENTREG_FLAG(53, 0x08) -#define WEEKEVENTREG_53_10 PACK_WEEKEVENTREG_FLAG(53, 0x10) +#define WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM PACK_WEEKEVENTREG_FLAG(53, 0x08) +#define WEEKEVENTREG_RECEIVED_FREE_BLUE_POTION PACK_WEEKEVENTREG_FLAG(53, 0x10) #define WEEKEVENTREG_53_20 PACK_WEEKEVENTREG_FLAG(53, 0x20) #define WEEKEVENTREG_53_40 PACK_WEEKEVENTREG_FLAG(53, 0x40) #define WEEKEVENTREG_53_80 PACK_WEEKEVENTREG_FLAG(53, 0x80) @@ -1009,9 +1009,9 @@ typedef enum { // Unconfirmed: "Link the Goron Claims His Reservation: 4:30 PM" #define WEEKEVENTREG_55_02 PACK_WEEKEVENTREG_FLAG(55, 0x02) -#define WEEKEVENTREG_55_04 PACK_WEEKEVENTREG_FLAG(55, 0x04) -#define WEEKEVENTREG_55_08 PACK_WEEKEVENTREG_FLAG(55, 0x08) -#define WEEKEVENTREG_55_10 PACK_WEEKEVENTREG_FLAG(55, 0x10) +#define WEEKEVENTREG_TALKED_PART_TIMER_AS_GORON PACK_WEEKEVENTREG_FLAG(55, 0x04) +#define WEEKEVENTREG_TALKED_PART_TIMER_AS_ZORA PACK_WEEKEVENTREG_FLAG(55, 0x08) +#define WEEKEVENTREG_TALKED_PART_TIMER_AS_DEKU PACK_WEEKEVENTREG_FLAG(55, 0x10) #define WEEKEVENTREG_55_20 PACK_WEEKEVENTREG_FLAG(55, 0x20) #define WEEKEVENTREG_55_40 PACK_WEEKEVENTREG_FLAG(55, 0x40) @@ -1030,16 +1030,16 @@ typedef enum { #define WEEKEVENTREG_57_02 PACK_WEEKEVENTREG_FLAG(57, 0x02) #define WEEKEVENTREG_57_04 PACK_WEEKEVENTREG_FLAG(57, 0x04) #define WEEKEVENTREG_57_08 PACK_WEEKEVENTREG_FLAG(57, 0x08) -#define WEEKEVENTREG_57_10 PACK_WEEKEVENTREG_FLAG(57, 0x10) -#define WEEKEVENTREG_57_20 PACK_WEEKEVENTREG_FLAG(57, 0x20) -#define WEEKEVENTREG_57_40 PACK_WEEKEVENTREG_FLAG(57, 0x40) -#define WEEKEVENTREG_57_80 PACK_WEEKEVENTREG_FLAG(57, 0x80) +#define WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_HUMAN PACK_WEEKEVENTREG_FLAG(57, 0x10) +#define WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_DEKU PACK_WEEKEVENTREG_FLAG(57, 0x20) +#define WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_GORON PACK_WEEKEVENTREG_FLAG(57, 0x40) +#define WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_ZORA PACK_WEEKEVENTREG_FLAG(57, 0x80) #define WEEKEVENTREG_58_01 PACK_WEEKEVENTREG_FLAG(58, 0x01) #define WEEKEVENTREG_58_02 PACK_WEEKEVENTREG_FLAG(58, 0x02) -#define WEEKEVENTREG_58_04 PACK_WEEKEVENTREG_FLAG(58, 0x04) -#define WEEKEVENTREG_58_08 PACK_WEEKEVENTREG_FLAG(58, 0x08) -#define WEEKEVENTREG_58_10 PACK_WEEKEVENTREG_FLAG(58, 0x10) -#define WEEKEVENTREG_58_20 PACK_WEEKEVENTREG_FLAG(58, 0x20) +#define WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_NON_GORON PACK_WEEKEVENTREG_FLAG(58, 0x04) +#define WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_GORON PACK_WEEKEVENTREG_FLAG(58, 0x08) +#define WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_NON_GORON PACK_WEEKEVENTREG_FLAG(58, 0x10) +#define WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_GORON PACK_WEEKEVENTREG_FLAG(58, 0x20) #define WEEKEVENTREG_58_40 PACK_WEEKEVENTREG_FLAG(58, 0x40) #define WEEKEVENTREG_58_80 PACK_WEEKEVENTREG_FLAG(58, 0x80) #define WEEKEVENTREG_59_01 PACK_WEEKEVENTREG_FLAG(59, 0x01) @@ -1228,7 +1228,7 @@ typedef enum { #define WEEKEVENTREG_79_08 PACK_WEEKEVENTREG_FLAG(79, 0x08) #define WEEKEVENTREG_79_10 PACK_WEEKEVENTREG_FLAG(79, 0x10) #define WEEKEVENTREG_79_20 PACK_WEEKEVENTREG_FLAG(79, 0x20) -#define WEEKEVENTREG_79_40 PACK_WEEKEVENTREG_FLAG(79, 0x40) +#define WEEKEVENTREG_SAKON_DEAD PACK_WEEKEVENTREG_FLAG(79, 0x40) #define WEEKEVENTREG_79_80 PACK_WEEKEVENTREG_FLAG(79, 0x80) #define WEEKEVENTREG_80_01 PACK_WEEKEVENTREG_FLAG(80, 0x01) #define WEEKEVENTREG_80_02 PACK_WEEKEVENTREG_FLAG(80, 0x02) @@ -1282,7 +1282,7 @@ typedef enum { // Also related to moon child #define WEEKEVENTREG_84_20 PACK_WEEKEVENTREG_FLAG(84, 0x20) -#define WEEKEVENTREG_84_40 PACK_WEEKEVENTREG_FLAG(84, 0x40) +#define WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME PACK_WEEKEVENTREG_FLAG(84, 0x40) #define WEEKEVENTREG_84_80 PACK_WEEKEVENTREG_FLAG(84, 0x80) #define WEEKEVENTREG_85_01 PACK_WEEKEVENTREG_FLAG(85, 0x01) @@ -1290,8 +1290,13 @@ typedef enum { #define WEEKEVENTREG_85_02 PACK_WEEKEVENTREG_FLAG(85, 0x02) #define WEEKEVENTREG_85_04 PACK_WEEKEVENTREG_FLAG(85, 0x04) -#define WEEKEVENTREG_85_08 PACK_WEEKEVENTREG_FLAG(85, 0x08) -#define WEEKEVENTREG_85_10 PACK_WEEKEVENTREG_FLAG(85, 0x10) + +// These get set per location, if Kotake tries to give the player a Red Potion to save Koume, +// but is unable to do so since all bottles are full. +#define WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP PACK_WEEKEVENTREG_FLAG(85, 0x08) +#define WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_WOODS PACK_WEEKEVENTREG_FLAG(85, 0x10) + + #define WEEKEVENTREG_85_20 PACK_WEEKEVENTREG_FLAG(85, 0x20) #define WEEKEVENTREG_85_40 PACK_WEEKEVENTREG_FLAG(85, 0x40) diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 41c9fa9da..247e19d33 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -86,7 +86,7 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 9 */ 0, /* 10 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_10_08), /* 11 */ 0, - /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10), + /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE), /* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE), /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE), /* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20), 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 11dcd5a55..671a444c0 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -168,13 +168,13 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { switch (this->textId) { case 0: if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { // Thanks. Can stock Bomb Bags tomorrow this->textId = 0x2A34; break; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; // Oh my, learned my lesson. Can't stock Bomb Bags tomorrow this->textId = 0x2A33; @@ -202,7 +202,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { break; } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_01)) { // Thought could sell Big Bomb Bags this->textId = 0x660; @@ -542,7 +542,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { } this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG; } else { this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE; @@ -710,7 +710,7 @@ void EnBaba_KnockedOver(EnBaba* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40) && (DECR(this->sakonDeadTimer) == 0)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD) && (DECR(this->sakonDeadTimer) == 0)) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } else { diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 8f67395b3..5b7ba1725 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -55,14 +55,14 @@ ActorInit En_Dnh_InitVars = { }; static AnimationInfoS sAnimationInfo[] = { - { &gKioskKoumeHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, }; static TexturePtr sEyeTextures[] = { - gKioskKoumeEyeOpenTex, - gKioskKoumeEyeHalfTex, - gKioskKoumeEyeClosedTex, - gKioskKoumeEyeHalfTex, + gKoumeKioskEyeOpenTex, + gKoumeKioskEyeHalfTex, + gKoumeKioskEyeClosedTex, + gKoumeKioskEyeHalfTex, }; s32 func_80A50D40(Actor* actor, PlayState* play) { @@ -130,8 +130,8 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { EnDnh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - SkelAnime_Init(play, &this->skelAnime, &gKioskKoumeSkeleton, NULL, this->jointTable, this->morphTable, - KIOSK_KOUME_LIMB_MAX); + SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable, + KOUME_KIOSK_LIMB_MAX); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); this->actor.shape.yOffset = 1100.0f; if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 1)) { @@ -141,7 +141,7 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { SubS_UpdateFlags(&this->unk18C, 4, 7); this->unk198 = CHECK_EVENTINF(EVENTINF_35) ? 2 : 1; } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { this->actor.draw = NULL; } this->msgEventCallback = func_80A50D40; @@ -166,7 +166,7 @@ void EnDnh_Update(Actor* thisx, PlayState* play) { s32 EnDnh_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDnh* this = THIS; - if (limbIndex == KIOSK_KOUME_LIMB_HEAD) { + if (limbIndex == KOUME_KIOSK_LIMB_HEAD) { Matrix_Translate(0.0f, this->actor.shape.yOffset, 0.0f, MTXMODE_APPLY); } return false; diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h index b7acca739..3aa83d154 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h @@ -21,8 +21,8 @@ typedef struct EnDnh { /* 0x19C */ s16 blinkTimer; /* 0x19E */ s16 eyeTexIndex; /* 0x1A0 */ MsgEventFunc msgEventCallback; - /* 0x1A4 */ Vec3s jointTable[KIOSK_KOUME_LIMB_MAX]; - /* 0x1B0 */ Vec3s morphTable[KIOSK_KOUME_LIMB_MAX]; + /* 0x1A4 */ Vec3s jointTable[KOUME_KIOSK_LIMB_MAX]; + /* 0x1B0 */ Vec3s morphTable[KOUME_KIOSK_LIMB_MAX]; } EnDnh; // size = 0x1BC #endif // Z_EN_DNH_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 bb329fb72..ae04bb332 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -312,9 +312,10 @@ void EnFsn_CursorLeftRight(EnFsn* this) { } } -s16 EnFsn_GetThirdDayItemId(void) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && (CURRENT_DAY == 3)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { +s16 EnFsn_GetSpecialItemId(void) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM) && (CURRENT_DAY == 3)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { return SI_BOMB_BAG_30_1; } return SI_MASK_ALL_NIGHT; @@ -353,7 +354,7 @@ s32 EnFsn_HasItemsToSell(void) { } if ((STOLEN_ITEM_1 != STOLEN_ITEM_NONE) || (STOLEN_ITEM_2 != STOLEN_ITEM_NONE) || - !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM)) { return true; } @@ -368,7 +369,7 @@ void EnFsn_GetShopItemIds(EnFsn* this) { this->stolenItem1 = this->stolenItem2 = 0; this->itemIds[0] = this->itemIds[1] = this->itemIds[2] = 0; - itemId = EnFsn_GetThirdDayItemId(); + itemId = EnFsn_GetSpecialItemId(); this->itemIds[this->totalSellingItems] = itemId; if (itemId != SI_NONE) { this->totalSellingItems++; @@ -459,9 +460,10 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); if (CURRENT_DAY != 3) { this->actor.textId = 0x29FB; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM)) { this->actor.textId = 0x29FF; - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { this->actor.textId = 0x29D7; } else { this->actor.textId = 0x29D8; @@ -889,9 +891,10 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { break; case 0x29D2: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM)) { this->actor.textId = 0x2A01; - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { this->actor.textId = 0x29D3; } else { this->actor.textId = 0x29D4; @@ -1189,7 +1192,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_2: Audio_PlaySfx_MessageDecide(); - SET_WEEKEVENTREG(WEEKEVENTREG_33_04); + SET_WEEKEVENTREG(WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM); // fallthrough case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { @@ -1479,7 +1482,7 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { EnFsn_GetCutscenes(this); EnFsn_InitShop(this, play); } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) || CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { Actor_Kill(&this->actor); return; } 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 b99f23c7d..bc2042f9e 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -205,13 +205,13 @@ s32 EnGirlA_CanBuyPotionGreen(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyPotionBlue(PlayState* play, EnGirlA* this) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM)) { return CANBUY_RESULT_CANNOT_GET_NOW; } if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_EMPTY_BOTTLE; } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_FREE_BLUE_POTION)) { return CANBUY_RESULT_SUCCESS_2; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 2b4a147ca..0b6c36d4b 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -31,7 +31,7 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play); void EnOssan_Idle(EnOssan* this, PlayState* play); void EnOssan_BeginInteraction(EnOssan* this, PlayState* play); void EnOssan_Hello(EnOssan* this, PlayState* play); -void EnOssan_SetHaveMet(EnOssan* this); +void EnOssan_SetTalked(EnOssan* this); void EnOssan_StartShopping(PlayState* play, EnOssan* this); void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play); void EnOssan_LookToShopkeeperFromShelf(EnOssan* this, PlayState* play); @@ -417,7 +417,7 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { break; case FSN_ANIM_TURN_AROUND_FORWARD: - EnOssan_SetHaveMet(this); + EnOssan_SetTalked(this); this->textId = EnOssan_CuriosityShopMan_GetWelcome(this, play); SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, this->animIndex); break; @@ -454,7 +454,7 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { } } } else { - EnOssan_SetHaveMet(this); + EnOssan_SetTalked(this); this->textId = EnOssan_PartTimer_GetWelcome(this, play); Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, false); @@ -1413,21 +1413,21 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: this->animIndex = FSN_ANIM_SLAM_COUNTER_START; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_DEKU)) { return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; case PLAYER_FORM_ZORA: this->animIndex = FSN_ANIM_LEAN_FORWARD_START; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_ZORA)) { return sWelcomeZoraTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; case PLAYER_FORM_GORON: this->animIndex = FSN_ANIM_HAND_ON_FACE_START; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_GORON)) { return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; @@ -1449,19 +1449,19 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_DEKU)) { return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; case PLAYER_FORM_ZORA: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_ZORA)) { return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; case PLAYER_FORM_GORON: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_GORON)) { return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; @@ -1471,30 +1471,30 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { } } -void EnOssan_SetHaveMet(EnOssan* this) { +void EnOssan_SetTalked(EnOssan* this) { switch (this->textId) { case 0x06A9: - SET_WEEKEVENTREG(WEEKEVENTREG_18_10); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_DEKU); break; case 0x06C6: - SET_WEEKEVENTREG(WEEKEVENTREG_55_10); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_DEKU); break; case 0x06A7: - SET_WEEKEVENTREG(WEEKEVENTREG_18_08); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_ZORA); break; case 0x06C4: - SET_WEEKEVENTREG(WEEKEVENTREG_55_08); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_ZORA); break; case 0x06A5: - SET_WEEKEVENTREG(WEEKEVENTREG_18_04); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_GORON); break; case 0x06C2: - SET_WEEKEVENTREG(WEEKEVENTREG_55_04); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_PART_TIMER_AS_GORON); break; default: 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 b7aa74f90..cf51ba7d6 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -190,7 +190,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { if (this->shopType == BOMB_SHOP) { if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 00))) { return 0x648; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { return 0x649; } else { return 0x64A; @@ -270,34 +270,34 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) { } else if (this->shopType == ZORA_SHOP) { switch (player->transformation) { case PLAYER_FORM_HUMAN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_HUMAN)) { return 0x12CF; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_57_10); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_HUMAN); return 0x12CE; } case PLAYER_FORM_DEKU: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_DEKU)) { return 0x12D1; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_57_20); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_DEKU); return 0x12D0; } case PLAYER_FORM_GORON: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_GORON)) { return 0x12D3; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_57_40); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_GORON); return 0x12D2; } case PLAYER_FORM_ZORA: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_ZORA)) { return 0x12D5; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_57_80); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_ZORA); return 0x12D4; } @@ -306,33 +306,33 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) { } } else if (this->shopType == GORON_SHOP) { if (player->transformation != PLAYER_FORM_GORON) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_NON_GORON)) { return 0xBB9; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_58_04); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_NON_GORON); return 0xBB8; } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_GORON)) { return 0xBBB; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_58_08); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_GORON); return 0xBBA; } } } else if (this->shopType == GORON_SHOP_SPRING) { if (player->transformation != PLAYER_FORM_GORON) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_NON_GORON)) { return 0xBBD; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_58_10); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_NON_GORON); return 0xBBC; } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_GORON)) { return 0xBBF; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_58_20); + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_GORON); return 0xBBE; } } @@ -1401,7 +1401,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->actor.world.pos.y += posOffset->y; this->actor.world.pos.z += posOffset->z; shopItems = sShops[this->shopType]; - if ((this->shopType == BOMB_SHOP) && CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if ((this->shopType == BOMB_SHOP) && CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { sShops[this->shopType][0].shopItemId = SI_BOMB_BAG_30_2; } 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 23ba888a0..c1d833c71 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -130,7 +130,7 @@ static TrackOptionsSet sTrackOptions = { static u8 D_80BAE820[] = { /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x80 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_33_08, 0x7F - 0x08), + /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG, 0x7F - 0x08), /* 0x08 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x3D - 0x0C), /* 0x0C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 25, 0x37 - 0x12), /* 0x12 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 25, 0, 30, 0x31 - 0x18), @@ -963,7 +963,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { break; case 4: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { if ((this->animIndex == 2) || (this->animIndex == 1)) { this->animIndex = 5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); @@ -1003,7 +1003,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BACA14; return; } else if ((gSaveContext.save.day == 3) && (gSaveContext.save.time <= CLOCK_TIME(19, 0)) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_08) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); @@ -1027,7 +1028,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD004; return; } else if (play->sceneId == SCENE_ICHIBA) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { Actor_Kill(&this->actor); return; } @@ -1037,7 +1038,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD5F8; return; } else if (play->sceneId == SCENE_AYASHIISHOP) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { Actor_Kill(&this->actor); return; } @@ -1269,7 +1270,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { this->flags2 |= 8; func_80BAAF1C(this); } else if (this->flags1 & 0x200) { - SET_WEEKEVENTREG(WEEKEVENTREG_79_40); + SET_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD); this->flags2 |= 4; this->actor.speed = 0.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, @@ -1280,7 +1281,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { } if (this->unk1F4[1] == -0x63) { if (this->flags2 & 8) { - SET_WEEKEVENTREG(WEEKEVENTREG_33_08); + SET_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG); } this->actor.speed = 0.0f; SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20); @@ -1500,7 +1501,7 @@ void EnSuttari_Init(Actor* thisx, PlayState* play) { EnSuttari* this = THIS; s32 pad; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAKON_DEAD)) { Actor_Kill(&this->actor); return; } 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 e28cc8d5a..65f006401 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -122,8 +122,8 @@ static u8 sScheduleScript[] = { /* 0x094 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 10, 12), /* 0x09A */ SCHEDULE_CMD_RET_NONE(), /* 0x09B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x138 - 0x0A0), - /* 0x0A0 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_33_08, 0x12C - 0x0A5), - /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_79_40, 0x12C - 0x0AA), + /* 0x0A0 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG, 0x12C - 0x0A5), + /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_SAKON_DEAD, 0x12C - 0x0AA), /* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE), /* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7), /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x0DD - 0x0B4), @@ -471,7 +471,8 @@ void EnTest3_Init(Actor* thisx, PlayState* play2) { this->unk_D90 = GET_PLAYER(play); this->player.giObjectSegment = this->unk_D90->giObjectSegment; this->player.tatlActor = this->unk_D90->tatlActor; - if ((CURRENT_DAY != 3) || CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { + if ((CURRENT_DAY != 3) || CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) || + !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { this->player.currentMask = PLAYER_MASK_KEATON; } this->player.prevMask = this->player.currentMask; 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 e4df6cf20..7984b26fa 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -14,7 +14,7 @@ #define ENTRT_FULLY_AWAKE (1 << 0) #define ENTRT_GIVEN_MUSHROOM (1 << 1) -#define ENTRT_MET (1 << 2) +#define ENTRT_TALKED (1 << 2) void EnTrt_Init(Actor* thisx, PlayState* play); void EnTrt_Destroy(Actor* thisx, PlayState* play); @@ -202,7 +202,7 @@ u16 EnTrt_GetItemTextId(EnTrt* this) { u16 EnTrt_GetItemChoiceTextId(EnTrt* this) { EnGirlA* item = this->items[this->cursorIndex]; - if ((item->actor.params == SI_POTION_BLUE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) { + if ((item->actor.params == SI_POTION_BLUE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_FREE_BLUE_POTION)) { this->textId = 0x881; return 0x881; } @@ -348,7 +348,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { case 0x883: this->textId = 0x884; Message_StartTextbox(play, this->textId, &this->actor); - SET_WEEKEVENTREG(WEEKEVENTREG_53_08); + SET_WEEKEVENTREG(WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM); Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); break; @@ -407,7 +407,7 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) { void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->textId == 0x88F) { - if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; @@ -418,28 +418,28 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - SET_WEEKEVENTREG(WEEKEVENTREG_85_08); + SET_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { this->textId = 0x83D; EnTrt_SetupStartShopping(play, this, 0); - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME)) { this->textId = 0x83B; if (Inventory_HasItemInBottle(ITEM_POTION_RED)) { EnTrt_SetupStartShopping(play, this, false); } else { this->actionFunc = EnTrt_TryToGiveRedPotion; } - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { this->timer = 30; this->textId = 0x838; this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL; this->actionFunc = EnTrt_Surprised; return; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_KIOSK_EMPTY)) { this->textId = 0x835; EnTrt_SetupStartShopping(play, this, false); } @@ -453,13 +453,13 @@ void EnTrt_GiveRedPotionForKoume(EnTrt* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { - SET_WEEKEVENTREG(WEEKEVENTREG_12_10); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE); } - SET_WEEKEVENTREG(WEEKEVENTREG_84_40); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME); player->stateFlags2 &= ~PLAYER_STATE2_20000000; this->actionFunc = EnTrt_GivenRedPotionForKoume; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { Actor_OfferGetItem(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f); @@ -767,7 +767,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { this->drawCursor = 0; this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); - SET_WEEKEVENTREG(WEEKEVENTREG_53_10); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_FREE_BLUE_POTION); } } } @@ -776,14 +776,15 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME)) { this->textId = 0x88F; - } else if (!(this->flags & ENTRT_MET)) { + } else if (!(this->flags & ENTRT_TALKED)) { this->textId = 0x834; } else { this->textId = 0x83E; } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM)) { this->talkOptionTextId = 0x845; } else if (this->flags & ENTRT_GIVEN_MUSHROOM) { this->talkOptionTextId = 0x882; @@ -801,7 +802,7 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (player->transformation == PLAYER_FORM_HUMAN) { - this->flags |= ENTRT_MET; + this->flags |= ENTRT_TALKED; } if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) { if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { @@ -854,7 +855,7 @@ void EnTrt_IdleAwake(EnTrt* this, PlayState* play) { } player->stateFlags2 |= PLAYER_STATE2_20000000; if (player->transformation == PLAYER_FORM_HUMAN) { - this->flags |= ENTRT_MET; + this->flags |= ENTRT_TALKED; } EnTrt_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT_ANIM_SLEEPING); this->blinkFunc = EnTrt_EyesClosed; @@ -908,8 +909,10 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { this->animIndex = TRT_ANIM_HANDS_ON_COUNTER; switch (this->textId) { case 0x834: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_KIOSK_EMPTY)) { func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; @@ -972,7 +975,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) { this->blinkFunc = EnTrt_Blink; if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; @@ -981,7 +984,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - SET_WEEKEVENTREG(WEEKEVENTREG_85_08); + SET_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } @@ -1002,7 +1005,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - SET_WEEKEVENTREG(WEEKEVENTREG_85_08); + SET_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } @@ -1419,7 +1422,7 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { itemAction = func_80123810(play); if (itemAction > PLAYER_IA_NONE) { if (itemAction == PLAYER_IA_BOTTLE_MUSHROOM) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM)) { player->actor.textId = 0x888; } else { player->actor.textId = 0x883; @@ -1488,8 +1491,8 @@ void EnTrt_LookToShopkeeperFromShelf(EnTrt* this, PlayState* play) { void EnTrt_InitShopkeeper(EnTrt* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gKotakeSkel, &gKotakeSleepingAnim, NULL, NULL, 0); - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && - (gSaveContext.save.day >= 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME) && (gSaveContext.save.day >= 2)) { this->actor.draw = NULL; } else { this->actor.draw = EnTrt_Draw; @@ -1504,8 +1507,8 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.colChkInfo.cylRadius = 50; this->timer = Rand_S16Offset(40, 20); - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && - gSaveContext.save.day >= 2) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME) && gSaveContext.save.day >= 2) { this->textId = 0x84A; this->actionFunc = EnTrt_ShopkeeperGone; } else { @@ -1570,7 +1573,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnTrt_EyesClosed; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM)) { this->flags |= ENTRT_GIVEN_MUSHROOM; } 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 5570e4130..9c24088db 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -144,13 +144,14 @@ void func_80AD341C(EnTrt2* this, PlayState* play) { } void func_80AD349C(EnTrt2* this) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_WOODS) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME)) { this->unk_3A8 = 0x88F; } else if (this->unk_3A8 == 0) { this->unk_3A8 = 0x84B; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { this->unk_3A8 = 0x838; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_KIOSK_EMPTY)) { this->unk_3A8 = 0x84D; } else { this->unk_3A8 = 0x849; @@ -378,7 +379,7 @@ void func_80AD3E34(EnTrt2* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_85_10); + SET_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_WOODS); this->unk_3A8 = 0x88E; Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3B2 = 10; @@ -391,11 +392,11 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { if (talkState == TEXT_STATE_DONE) { if (Message_ShouldAdvance(play)) { - if ((Inventory_HasEmptyBottle() && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) || - !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + if ((Inventory_HasEmptyBottle() && !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME)) || + !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { this->unk_3B2 = 12; } else { - SET_WEEKEVENTREG(WEEKEVENTREG_85_10); + SET_WEEKEVENTREG(WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_WOODS); this->unk_3A8 = 0x88E; Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3B2 = 10; @@ -410,13 +411,13 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { void func_80AD3FF4(EnTrt2* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { - SET_WEEKEVENTREG(WEEKEVENTREG_12_10); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE); } - SET_WEEKEVENTREG(WEEKEVENTREG_84_40); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME); this->actor.parent = NULL; this->unk_3B2 = 14; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE)) { Actor_OfferGetItem(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f); } else { Actor_OfferGetItem(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f); @@ -743,12 +744,12 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { this->unk_3B8 = 0; this->unk_3BC = func_80AD4608; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { Actor_Kill(&this->actor); return; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME)) { Actor_Kill(&this->actor); return; } 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 895d1d406..fd627b9a6 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -670,11 +670,11 @@ UNK_TYPE* func_80A871E0(EnTru* this, PlayState* play) { return D_80A88924; } - if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { return D_80A88918; } - if ((this->unk_34E & 0x1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if ((this->unk_34E & 0x1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { return D_80A88910; } @@ -770,7 +770,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) { switch (this->unk_364) { case 0: - if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { this->csId = this->actor.csId; this->unk_364++; } else { @@ -1041,7 +1041,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { case 4: if (func_80A87400(this, play) || (DECR(this->unk_362) == 0)) { ret = true; - SET_WEEKEVENTREG(WEEKEVENTREG_12_08); + SET_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME); } break; } @@ -1058,7 +1058,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { void func_80A87FD0(EnTru* this, PlayState* play) { if (this->actor.draw != NULL) { - if ((this->unk_34E & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if ((this->unk_34E & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { if (func_80A873B8(this)) { SubS_UpdateFlags(&this->unk_34E, 3, 7); } else { @@ -1081,8 +1081,8 @@ void func_80A87FD0(EnTru* this, PlayState* play) { EnTru_ChangeAnim(this, KOUME_ANIM_TRY_GET_UP); } } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && (fabsf(this->actor.playerHeightRel) < 10.0f) && - (this->actor.xzDistToPlayer < 140.0f)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED) && + (fabsf(this->actor.playerHeightRel) < 10.0f) && (this->actor.xzDistToPlayer < 140.0f)) { SubS_UpdateFlags(&this->unk_34E, 4, 7); this->unk_34E |= 0x1040; this->unk_362 = Rand_S16Offset(40, 20); @@ -1106,12 +1106,12 @@ void func_80A881E0(EnTru* this, PlayState* play) { CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } - if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); } else if (this->unk_34E & 0x80) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); func_80A86460(this); - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP_MORPH); } @@ -1128,7 +1128,7 @@ void func_80A881E0(EnTru* this, PlayState* play) { void EnTru_Init(Actor* thisx, PlayState* play) { EnTru* this = THIS; - if ((gSaveContext.save.entrance != ENTRANCE(WOODS_OF_MYSTERY, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { + if ((gSaveContext.save.entrance != ENTRANCE(WOODS_OF_MYSTERY, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { Actor_Kill(&this->actor); return; } @@ -1149,7 +1149,7 @@ void EnTru_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.008f); this->unk_34E = 0; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP); } else { this->unk_388 = PLAYER_IA_NONE; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 39c385914..c3ce2833f 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -5806,7 +5806,7 @@ 0x808AAE1C:("EnOssan_PartTimer_Init",), 0x808AAE84:("EnOssan_CuriosityShopMan_GetWelcome",), 0x808AAFB0:("EnOssan_PartTimer_GetWelcome",), - 0x808AB0B0:("EnOssan_SetHaveMet",), + 0x808AB0B0:("EnOssan_SetTalked",), 0x808AB16C:("EnOssan_InitShop",), 0x808AB404:("EnOssan_GetCutscenes",), 0x808AB458:("EnOssan_Update",), @@ -12404,7 +12404,7 @@ 0x80AE1F5C:("EnFsn_HandleLookToShopkeeperBuyingCutscene",), 0x80AE2028:("EnFsn_SetCursorIndexFromNeutral",), 0x80AE2074:("EnFsn_CursorLeftRight",), - 0x80AE21C8:("EnFsn_GetThirdDayItemId",), + 0x80AE21C8:("EnFsn_GetSpecialItemId",), 0x80AE2234:("EnFsn_GetStolenItemId",), 0x80AE2298:("EnFsn_HasItemsToSell",), 0x80AE2340:("EnFsn_GetShopItemIds",), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index b724b1f21..7e8c183a1 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -103,8 +103,8 @@ weekEventReg = { (12 << 8) | 0x01: "WEEKEVENTREG_12_01", (12 << 8) | 0x02: "WEEKEVENTREG_12_02", (12 << 8) | 0x04: "WEEKEVENTREG_12_04", - (12 << 8) | 0x08: "WEEKEVENTREG_12_08", - (12 << 8) | 0x10: "WEEKEVENTREG_12_10", + (12 << 8) | 0x08: "WEEKEVENTREG_SAVED_KOUME", + (12 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE", (12 << 8) | 0x20: "WEEKEVENTREG_12_20", (12 << 8) | 0x40: "WEEKEVENTREG_12_40", (12 << 8) | 0x80: "WEEKEVENTREG_12_80", @@ -136,11 +136,11 @@ weekEventReg = { (16 << 8) | 0x02: "WEEKEVENTREG_16_02", (16 << 8) | 0x04: "WEEKEVENTREG_16_04", (16 << 8) | 0x08: "WEEKEVENTREG_16_08", - (16 << 8) | 0x10: "WEEKEVENTREG_16_10", + (16 << 8) | 0x10: "WEEKEVENTREG_TALKED_KOUME_INJURED", (16 << 8) | 0x20: "WEEKEVENTREG_16_20", (16 << 8) | 0x40: "WEEKEVENTREG_16_40", (16 << 8) | 0x80: "WEEKEVENTREG_16_80", - (17 << 8) | 0x01: "WEEKEVENTREG_17_01", + (17 << 8) | 0x01: "WEEKEVENTREG_TALKED_EMPTY_BOAT_CRUISE", (17 << 8) | 0x02: "WEEKEVENTREG_17_02", (17 << 8) | 0x04: "WEEKEVENTREG_17_04", (17 << 8) | 0x08: "WEEKEVENTREG_17_08", @@ -150,9 +150,9 @@ weekEventReg = { (17 << 8) | 0x80: "WEEKEVENTREG_17_80", (18 << 8) | 0x01: "WEEKEVENTREG_18_01", (18 << 8) | 0x02: "WEEKEVENTREG_18_02", - (18 << 8) | 0x04: "WEEKEVENTREG_18_04", - (18 << 8) | 0x08: "WEEKEVENTREG_18_08", - (18 << 8) | 0x10: "WEEKEVENTREG_18_10", + (18 << 8) | 0x04: "WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_GORON", + (18 << 8) | 0x08: "WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_ZORA", + (18 << 8) | 0x10: "WEEKEVENTREG_TALKED_CURIOSITY_SHOP_MAN_AS_DEKU", (18 << 8) | 0x20: "WEEKEVENTREG_18_20", (18 << 8) | 0x40: "WEEKEVENTREG_18_40", (18 << 8) | 0x80: "WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES", @@ -270,8 +270,8 @@ weekEventReg = { (32 << 8) | 0x80: "WEEKEVENTREG_32_80", (33 << 8) | 0x01: "WEEKEVENTREG_33_01", (33 << 8) | 0x02: "WEEKEVENTREG_33_02", - (33 << 8) | 0x04: "WEEKEVENTREG_33_04", - (33 << 8) | 0x08: "WEEKEVENTREG_33_08", + (33 << 8) | 0x04: "WEEKEVENTREG_BOUGHT_CURIOSITY_SHOP_SPECIAL_ITEM", + (33 << 8) | 0x08: "WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG", (33 << 8) | 0x10: "WEEKEVENTREG_33_10", (33 << 8) | 0x20: "WEEKEVENTREG_33_20", (33 << 8) | 0x40: "WEEKEVENTREG_33_40", @@ -431,8 +431,8 @@ weekEventReg = { (53 << 8) | 0x01: "WEEKEVENTREG_53_01", (53 << 8) | 0x02: "WEEKEVENTREG_53_02", (53 << 8) | 0x04: "WEEKEVENTREG_53_04", - (53 << 8) | 0x08: "WEEKEVENTREG_53_08", - (53 << 8) | 0x10: "WEEKEVENTREG_53_10", + (53 << 8) | 0x08: "WEEKEVENTREG_GAVE_KOTAKE_MUSHROOM", + (53 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_FREE_BLUE_POTION", (53 << 8) | 0x20: "WEEKEVENTREG_53_20", (53 << 8) | 0x40: "WEEKEVENTREG_53_40", (53 << 8) | 0x80: "WEEKEVENTREG_53_80", @@ -446,9 +446,9 @@ weekEventReg = { (54 << 8) | 0x80: "WEEKEVENTREG_54_80", (55 << 8) | 0x01: "WEEKEVENTREG_55_01", (55 << 8) | 0x02: "WEEKEVENTREG_55_02", - (55 << 8) | 0x04: "WEEKEVENTREG_55_04", - (55 << 8) | 0x08: "WEEKEVENTREG_55_08", - (55 << 8) | 0x10: "WEEKEVENTREG_55_10", + (55 << 8) | 0x04: "WEEKEVENTREG_TALKED_PART_TIMER_AS_GORON", + (55 << 8) | 0x08: "WEEKEVENTREG_TALKED_PART_TIMER_AS_ZORA", + (55 << 8) | 0x10: "WEEKEVENTREG_TALKED_PART_TIMER_AS_DEKU", (55 << 8) | 0x20: "WEEKEVENTREG_55_20", (55 << 8) | 0x40: "WEEKEVENTREG_55_40", (55 << 8) | 0x80: "WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE", @@ -464,16 +464,16 @@ weekEventReg = { (57 << 8) | 0x02: "WEEKEVENTREG_57_02", (57 << 8) | 0x04: "WEEKEVENTREG_57_04", (57 << 8) | 0x08: "WEEKEVENTREG_57_08", - (57 << 8) | 0x10: "WEEKEVENTREG_57_10", - (57 << 8) | 0x20: "WEEKEVENTREG_57_20", - (57 << 8) | 0x40: "WEEKEVENTREG_57_40", - (57 << 8) | 0x80: "WEEKEVENTREG_57_80", + (57 << 8) | 0x10: "WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_HUMAN", + (57 << 8) | 0x20: "WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_DEKU", + (57 << 8) | 0x40: "WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_GORON", + (57 << 8) | 0x80: "WEEKEVENTREG_TALKED_ZORA_SHOPKEEPER_AS_ZORA", (58 << 8) | 0x01: "WEEKEVENTREG_58_01", (58 << 8) | 0x02: "WEEKEVENTREG_58_02", - (58 << 8) | 0x04: "WEEKEVENTREG_58_04", - (58 << 8) | 0x08: "WEEKEVENTREG_58_08", - (58 << 8) | 0x10: "WEEKEVENTREG_58_10", - (58 << 8) | 0x20: "WEEKEVENTREG_58_20", + (58 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_NON_GORON", + (58 << 8) | 0x08: "WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_AS_GORON", + (58 << 8) | 0x10: "WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_NON_GORON", + (58 << 8) | 0x20: "WEEKEVENTREG_TALKED_GORON_SHOPKEEPER_SPRING_AS_GORON", (58 << 8) | 0x40: "WEEKEVENTREG_58_40", (58 << 8) | 0x80: "WEEKEVENTREG_58_80", (59 << 8) | 0x01: "WEEKEVENTREG_59_01", @@ -642,7 +642,7 @@ weekEventReg = { (79 << 8) | 0x08: "WEEKEVENTREG_79_08", (79 << 8) | 0x10: "WEEKEVENTREG_79_10", (79 << 8) | 0x20: "WEEKEVENTREG_79_20", - (79 << 8) | 0x40: "WEEKEVENTREG_79_40", + (79 << 8) | 0x40: "WEEKEVENTREG_SAKON_DEAD", (79 << 8) | 0x80: "WEEKEVENTREG_79_80", (80 << 8) | 0x01: "WEEKEVENTREG_80_01", (80 << 8) | 0x02: "WEEKEVENTREG_80_02", @@ -682,13 +682,13 @@ weekEventReg = { (84 << 8) | 0x08: "WEEKEVENTREG_84_08", (84 << 8) | 0x10: "WEEKEVENTREG_84_10", (84 << 8) | 0x20: "WEEKEVENTREG_84_20", - (84 << 8) | 0x40: "WEEKEVENTREG_84_40", + (84 << 8) | 0x40: "WEEKEVENTREG_RECEIVED_RED_POTION_FOR_KOUME", (84 << 8) | 0x80: "WEEKEVENTREG_84_80", (85 << 8) | 0x01: "WEEKEVENTREG_85_01", (85 << 8) | 0x02: "WEEKEVENTREG_85_02", (85 << 8) | 0x04: "WEEKEVENTREG_85_04", - (85 << 8) | 0x08: "WEEKEVENTREG_85_08", - (85 << 8) | 0x10: "WEEKEVENTREG_85_10", + (85 << 8) | 0x08: "WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_SHOP", + (85 << 8) | 0x10: "WEEKEVENTREG_FAILED_RECEIVED_RED_POTION_FOR_KOUME_WOODS", (85 << 8) | 0x20: "WEEKEVENTREG_85_20", (85 << 8) | 0x40: "WEEKEVENTREG_85_40", (85 << 8) | 0x80: "WEEKEVENTREG_85_80", From eb6b837d65ba1c7ca949c19a199c4c83e296ca5f Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 27 Jul 2023 09:15:40 -0700 Subject: [PATCH 041/121] Clang-Format 14 (#1321) * format * Update dockerfile and other documentation * Update mac instructions --- Dockerfile | 4 +- docs/BUILDING_MACOS.md | 7 +- docs/CONTRIBUTING.md | 2 +- docs/REVIEWING.md | 2 +- docs/tools.md | 18 ++-- docs/tutorial/merging.md | 2 +- format.py | 17 ++- src/code/z_DLF.c | 100 +++++++++--------- src/code/z_actor.c | 10 +- src/code/z_effect_soft_sprite.c | 10 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 8 +- 11 files changed, 97 insertions(+), 83 deletions(-) diff --git a/Dockerfile b/Dockerfile index 94b8cdfa2..ac824113f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,8 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone & unzip \ vbindiff \ vim \ - clang-tidy-11 \ - clang-format-11 \ + clang-tidy-14 \ + clang-format-14 \ libpng-dev && \ apt clean && \ rm -rf /var/lib/apt/lists/* diff --git a/docs/BUILDING_MACOS.md b/docs/BUILDING_MACOS.md index 8a5aa20a3..cf93acbf2 100644 --- a/docs/BUILDING_MACOS.md +++ b/docs/BUILDING_MACOS.md @@ -11,17 +11,20 @@ For macOS, use Homebrew to install the following dependencies: * python3 * libpng * bash -* clang-format 11 You can install them with the following commands: ```bash brew update -brew install coreutils make python3 libpng bash clang-format@11 +brew install coreutils make python3 libpng bash ``` (The repository expects Homebrew-installed programs to be either linked correctly in `$PATH` etc. or in their default locations.) +Homebrew does not have clang-format-14 but MacPorts does + +(Have been unable to confirm actual commands with somone that has a Mac) + ## Building mips-linux-binutils The following instructions are written for MacOS users but should apply to any Unix-like system, with maybe some modifications at the end regarding the bash_profile. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 2f4c9854a..2a5578e4e 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -110,7 +110,7 @@ See the [Style Guide](STYLE.md) for more details on documentation style. Before opening a PR, walk through the following steps to ensure that your code conforms to the style guide and conventions. - `make` successfully builds a matching ROM. -- `./format.sh` was run to apply standard formatting. +- `./format.py` was run to apply standard formatting. - No new compiler warnings were introduced during the build process. - Can be verified locally by running `tools/warnings_count/check_new_warnings.sh` - New variables & functions should follow standard naming conventions. diff --git a/docs/REVIEWING.md b/docs/REVIEWING.md index 8b70f2711..b7f97bdea 100644 --- a/docs/REVIEWING.md +++ b/docs/REVIEWING.md @@ -30,7 +30,7 @@ You should first famiiarise yourself with our [Contributing guide](CONTRIBUTING. - [ ] Jenkins build is successful. - [ ] `make` builds a matching ROM. - - [ ] `format.sh` was run. + - [ ] `format.py` was run. - [ ] `spec` contains correct relocation files. - [ ] Any new compiler warnings that were added are required for matching. Ensure there is good reason if the warnings files have changed. - [ ] Files with `NON_MATCHING` functions have equivalent behaviour. diff --git a/docs/tools.md b/docs/tools.md index e190fe0a3..c307382f9 100644 --- a/docs/tools.md +++ b/docs/tools.md @@ -198,29 +198,27 @@ Fixes line endings in the repo to Linux style (LF), which is required for the bu ### `format.py` -Formats all C files in the repo using `clang-format-11`, `clang-tidy`, and `clang-apply-replacements` (when multiprocessing). This will touch all files in the repo, so the next `make` will take longer. +Formats all C files in the repo using `clang-format-14`, `clang-tidy`, and `clang-apply-replacements` (when multiprocessing). This will touch all files in the repo, so the next `make` will take longer. You can specify how many threads you would like this to run with by adding the `-jN` flag. Where N is the number of threads. By default this will run using 1 thread (i.e. `-j1`). -`clang-11` is available in many native package managers, but if not try: +`clang-14` is available in many native package managers, but if not try: Linux: Download llvm's setup script, run it, than install normally ```bash wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh -sudo ./llvm.sh 11 +sudo ./llvm.sh 14 rm llvm.sh -sudo apt install clang-format-11 clang-tidy-11 clang-apply-replacements-11 +sudo apt install clang-format-14 clang-tidy-14 clang-apply-replacements-14 ``` Mac: -Install with brew, than create symlinks for `clang-tidy` and `clang-apply-replacements` to use properly -```bash -brew install llvm clang-format-11 -ln -s "$(brew --prefix llvm)/bin/clang-tidy" "/usr/local/bin/clang-tidy" -ln -s "$(brew --prefix llvm)/bin/clang-apply-replacements" "/usr/local/bin/clang-apply-replacements" -``` +Brew does not have clang-format-14, but MacPorts does. + +(Have been unable to confirm actual commands with somone that has a Mac) + ## External tools diff --git a/docs/tutorial/merging.md b/docs/tutorial/merging.md index b7745b509..ba0d043f9 100644 --- a/docs/tutorial/merging.md +++ b/docs/tutorial/merging.md @@ -64,7 +64,7 @@ Ideally you should at least be able to get a function to have equivalent behavio ### Format -Run the formatting script `format.sh`, to format the C files in the standard way we use. If you have some arrays or struct definitions in your file, check that they have not been obnoxiously padded out: you can usually get a better format without a final comma for short things. +Run the formatting script `format.py`, to format the C files in the standard way we use. If you have some arrays or struct definitions in your file, check that they have not been obnoxiously padded out: you can usually get a better format without a final comma for short things. **N.B.** this is now essential: the CI will fail immediately if it detects files that change when formatted. diff --git a/format.py b/format.py index 5e2c29feb..a9983cf5d 100755 --- a/format.py +++ b/format.py @@ -14,8 +14,8 @@ from typing import List # clang-format, clang-tidy and clang-apply-replacements default version -# Version 11 is used when available for more consistency between contributors -CLANG_VER = 11 +# This specific version is used when available, for more consistency between contributors +CLANG_VER = 14 # Clang-Format options (see .clang-format for rules applied) FORMAT_OPTS = "-i -style=file" @@ -145,6 +145,12 @@ def format_files(src_files: List[str], extra_files: List[str], nb_jobs: int): def main(): parser = argparse.ArgumentParser(description="Format files in the codebase to enforce most style rules") parser.add_argument("files", metavar="file", nargs="*") + parser.add_argument( + "--show-paths", + dest="show_paths", + action="store_true", + help="Print the paths to the clang-* binaries used", + ) parser.add_argument( "-j", dest="jobs", @@ -155,6 +161,13 @@ def main(): ) args = parser.parse_args() + if args.show_paths: + import shutil + + print("CLANG_FORMAT ->", shutil.which(CLANG_FORMAT)) + print("CLANG_TIDY ->", shutil.which(CLANG_TIDY)) + print("CLANG_APPLY_REPLACEMENTS ->", shutil.which(CLANG_APPLY_REPLACEMENTS)) + nb_jobs = args.jobs or multiprocessing.cpu_count() if nb_jobs > 1: if CLANG_APPLY_REPLACEMENTS is None: diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c index 036777d49..cb226b30c 100644 --- a/src/code/z_DLF.c +++ b/src/code/z_DLF.c @@ -17,35 +17,35 @@ void Overlay_LoadGameState(GameStateOverlay* overlayEntry) { (uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd); if (overlayEntry->loadedRamAddr != NULL) { - overlayEntry->unk_14 = (uintptr_t)( - (overlayEntry->unk_14 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_14 - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_14 = (void*)(uintptr_t)((overlayEntry->unk_14 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_14 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->init = (uintptr_t)( - (overlayEntry->init != NULL) - ? (void*)((uintptr_t)overlayEntry->init - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->init = (void*)(uintptr_t)((overlayEntry->init != NULL) + ? (void*)((uintptr_t)overlayEntry->init - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->destroy = (uintptr_t)( - (overlayEntry->destroy != NULL) - ? (void*)((uintptr_t)overlayEntry->destroy - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->destroy = (void*)(uintptr_t)((overlayEntry->destroy != NULL) + ? (void*)((uintptr_t)overlayEntry->destroy - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->unk_20 = (uintptr_t)( - (overlayEntry->unk_20 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_20 - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_20 = (void*)(uintptr_t)((overlayEntry->unk_20 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_20 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->unk_24 = (uintptr_t)( - (overlayEntry->unk_24 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_24 - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_24 = (void*)(uintptr_t)((overlayEntry->unk_24 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_24 - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); overlayEntry->unk_28 = 0; } @@ -57,35 +57,35 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) { if (overlayEntry->loadedRamAddr != NULL) { var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0; if (var_v0 == 0) { - overlayEntry->unk_14 = (uintptr_t)( - (overlayEntry->unk_14 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_14 + - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_14 = (void*)(uintptr_t)((overlayEntry->unk_14 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_14 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->init = (uintptr_t)( - (overlayEntry->init != NULL) - ? (void*)((uintptr_t)overlayEntry->init + - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->init = (void*)(uintptr_t)((overlayEntry->init != NULL) + ? (void*)((uintptr_t)overlayEntry->init + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->destroy = (uintptr_t)( - (overlayEntry->destroy != NULL) - ? (void*)((uintptr_t)overlayEntry->destroy + - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->destroy = (uintptr_t)((overlayEntry->destroy != NULL) + ? (void*)((uintptr_t)overlayEntry->destroy + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->unk_20 = (uintptr_t)( - (overlayEntry->unk_20 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_20 + - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_20 = (void*)(uintptr_t)((overlayEntry->unk_20 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_20 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); - overlayEntry->unk_24 = (uintptr_t)( - (overlayEntry->unk_24 != NULL) - ? (void*)((uintptr_t)overlayEntry->unk_24 + - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + overlayEntry->unk_24 = (void*)(uintptr_t)((overlayEntry->unk_24 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_24 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); SystemArena_Free(overlayEntry->loadedRamAddr); overlayEntry->loadedRamAddr = NULL; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 0d72410ad..a85c2f31b 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3190,11 +3190,11 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) { overlayEntry->numLoaded = 0; } - actorInit = (uintptr_t)( - (overlayEntry->initInfo != NULL) - ? (void*)((uintptr_t)overlayEntry->initInfo - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + actorInit = (void*)(uintptr_t)((overlayEntry->initInfo != NULL) + ? (void*)((uintptr_t)overlayEntry->initInfo - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); } return actorInit; diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 0c247998e..870132a07 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -189,11 +189,11 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) { overlayEntry->loadedRamAddr); } - initInfo = (uintptr_t)( - (overlayEntry->initInfo != NULL) - ? (void*)((uintptr_t)overlayEntry->initInfo - - (intptr_t)((uintptr_t)overlayEntry->vramStart - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + initInfo = (void*)(uintptr_t)((overlayEntry->initInfo != NULL) + ? (void*)((uintptr_t)overlayEntry->initInfo - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); } if (initInfo->init != NULL) { 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 43a48f2b2..59e3a09e9 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -1741,10 +1741,10 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { // loop over x, y, z for (j = 0; j < 3; j++) { // Linearly interpolate dynamicVtx --> staticVtx * (1 - scale * vtxSurfacePerturbation) - dynamicVtx->n.ob[j] += (s16)( - ((staticVtx->n.ob[j] - (s32)(scale * staticVtx->n.ob[j] * this->vtxSurfacePerturbation[i])) - - dynamicVtx->n.ob[j]) * - invWindupPunchTimer); + dynamicVtx->n.ob[j] += (s16)(((staticVtx->n.ob[j] - (s32)(scale * staticVtx->n.ob[j] * + this->vtxSurfacePerturbation[i])) - + dynamicVtx->n.ob[j]) * + invWindupPunchTimer); } } else { // loop over x, y, z From 6f7d6cc47eeaa4c892abca0d80143c142c7b8e18 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:16:46 -0300 Subject: [PATCH 042/121] initial commit of rock object_ishi documentation (#1340) Co-authored-by: MegaIDK --- assets/xml/objects/object_ishi.xml | 5 +++-- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/assets/xml/objects/object_ishi.xml b/assets/xml/objects/object_ishi.xml index 6e48cf5f4..5f53b90ac 100644 --- a/assets/xml/objects/object_ishi.xml +++ b/assets/xml/objects/object_ishi.xml @@ -1,6 +1,7 @@  + - - + + 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 da813182e..cb7972f04 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -180,7 +180,7 @@ void func_8095D804(Actor* thisx, PlayState* play) { if (!ENISHI_GET_8(&this->actor)) { phi_s4 = gameplay_field_keep_DL_0066B0; } else { - phi_s4 = object_ishi_DL_0009B0; + phi_s4 = gSmallRockDL; } temp = D_8095F6E8[ENISHI_GET_8(&this->actor)]; @@ -761,5 +761,5 @@ void func_8095F61C(Actor* thisx, PlayState* play) { } void func_8095F654(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_ishi_DL_0009B0); + Gfx_DrawDListOpa(play, gSmallRockDL); } From bbfbc4073e99ddd92167731de93e723d23a8996a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 28 Jul 2023 15:20:12 -0700 Subject: [PATCH 043/121] Update ZAPD subrepo (#1338) * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "cb0342425" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "cb0342425" git-subrepo: version: "0.4.6" origin: "https://github.com/ingydotnet/git-subrepo" commit: "110b9eb" * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "505024b33" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "505024b33" git-subrepo: version: "0.4.6" origin: "https://github.com/ingydotnet/git-subrepo" commit: "110b9eb" * Disable Wno-hardcoded-pointer for `make assets` --- Makefile | 2 +- tools/ZAPD/.clang-format | 2 +- tools/ZAPD/.gitrepo | 6 +- tools/ZAPD/ExporterTest/CollisionExporter.cpp | 6 +- tools/ZAPD/ExporterTest/Makefile | 2 +- tools/ZAPD/Makefile | 2 +- tools/ZAPD/README.md | 33 +- tools/ZAPD/ZAPD/CRC32.h | 2 +- tools/ZAPD/ZAPD/CrashHandler.cpp | 1 + tools/ZAPD/ZAPD/Declaration.cpp | 188 +++++---- tools/ZAPD/ZAPD/Declaration.h | 156 +++++-- tools/ZAPD/ZAPD/ExporterSet.h | 24 ++ tools/ZAPD/ZAPD/GameConfig.cpp | 1 + tools/ZAPD/ZAPD/GameConfig.h | 2 + tools/ZAPD/ZAPD/Globals.cpp | 40 +- tools/ZAPD/ZAPD/Globals.h | 34 +- tools/ZAPD/ZAPD/Main.cpp | 388 +++++++++++------- .../ZAPD/OtherStructs/SkinLimbStructs.cpp | 6 +- tools/ZAPD/ZAPD/OutputFormatter.h | 1 + tools/ZAPD/ZAPD/WarningHandler.cpp | 34 +- tools/ZAPD/ZAPD/WarningHandler.h | 1 + tools/ZAPD/ZAPD/ZAPD.vcxproj | 3 + tools/ZAPD/ZAPD/ZAPD.vcxproj.filters | 17 +- tools/ZAPD/ZAPD/ZAnimation.cpp | 6 +- tools/ZAPD/ZAPD/ZArray.cpp | 7 +- tools/ZAPD/ZAPD/ZBackground.cpp | 9 +- tools/ZAPD/ZAPD/ZCollision.cpp | 153 ++++--- tools/ZAPD/ZAPD/ZCollision.h | 26 +- tools/ZAPD/ZAPD/ZCutscene.cpp | 2 +- tools/ZAPD/ZAPD/ZDisplayList.cpp | 122 ++++-- tools/ZAPD/ZAPD/ZDisplayList.h | 5 +- tools/ZAPD/ZAPD/ZFile.cpp | 279 ++++++++----- tools/ZAPD/ZAPD/ZFile.h | 9 +- tools/ZAPD/ZAPD/ZLimb.cpp | 2 +- tools/ZAPD/ZAPD/ZPath.cpp | 17 +- tools/ZAPD/ZAPD/ZPlayerAnimationData.cpp | 13 +- tools/ZAPD/ZAPD/ZPlayerAnimationData.h | 2 +- tools/ZAPD/ZAPD/ZResource.cpp | 4 +- tools/ZAPD/ZAPD/ZResource.h | 15 +- .../ZRoom/Commands/SetAlternateHeaders.cpp | 2 +- .../ZAPD/ZRoom/Commands/SetEntranceList.cpp | 2 +- .../ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp | 2 +- tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp | 4 +- .../ZAPD/ZAPD/ZRoom/Commands/SetPathways.cpp | 2 +- tools/ZAPD/ZAPD/ZRoom/ZNames.h | 12 +- tools/ZAPD/ZAPD/ZRoom/ZRoom.cpp | 26 +- tools/ZAPD/ZAPD/ZRoom/ZRoom.h | 5 +- tools/ZAPD/ZAPD/ZTexture.cpp | 171 ++++---- tools/ZAPD/ZAPD/ZTexture.h | 62 ++- tools/ZAPD/ZAPD/ZWaterbox.cpp | 74 ++++ tools/ZAPD/ZAPD/ZWaterbox.h | 30 ++ tools/ZAPD/ZAPD/genbuildinfo.py | 8 +- tools/ZAPD/ZAPDUtils/Makefile | 2 +- tools/ZAPD/ZAPDUtils/Utils/BitConverter.h | 20 +- tools/ZAPD/ZAPDUtils/Utils/File.h | 8 +- tools/ZAPD/ZAPDUtils/Utils/StringHelper.h | 92 ++++- tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj | 1 + 57 files changed, 1426 insertions(+), 719 deletions(-) create mode 100644 tools/ZAPD/ZAPD/ExporterSet.h create mode 100644 tools/ZAPD/ZAPD/ZWaterbox.cpp create mode 100644 tools/ZAPD/ZAPD/ZWaterbox.h diff --git a/Makefile b/Makefile index 6394f8daa..252413511 100644 --- a/Makefile +++ b/Makefile @@ -309,7 +309,7 @@ setup: python3 tools/decompress_yars.py assets: - python3 extract_assets.py -j $(N_THREADS) + python3 extract_assets.py -j $(N_THREADS) -Z Wno-hardcoded-pointer ## Assembly generation disasm: diff --git a/tools/ZAPD/.clang-format b/tools/ZAPD/.clang-format index 784e734e9..5ba1c4a95 100644 --- a/tools/ZAPD/.clang-format +++ b/tools/ZAPD/.clang-format @@ -66,7 +66,7 @@ PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Left ReflowComments: true -SortIncludes: true +SortIncludes: false SpaceAfterCStyleCast: false SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo index 131ccdc88..d021bc57e 100644 --- a/tools/ZAPD/.gitrepo +++ b/tools/ZAPD/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/zeldaret/ZAPD.git branch = master - commit = 23929ec9373d28cb298daad4ad7cb468e09c0a46 - parent = 2e487b5008c129031ab311a3a7bfd42adeb4916b + commit = 505024b33eb1fcd00e3e9bb71f1355fa2ae6e9cf + parent = 387d3597142ebdbebe1fbb99858ea831aa2752b4 method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/ZAPD/ExporterTest/CollisionExporter.cpp b/tools/ZAPD/ExporterTest/CollisionExporter.cpp index db5ad1a79..6431a4593 100644 --- a/tools/ZAPD/ExporterTest/CollisionExporter.cpp +++ b/tools/ZAPD/ExporterTest/CollisionExporter.cpp @@ -67,9 +67,9 @@ void ExporterExample_Collision::Save(ZResource* res, [[maybe_unused]] fs::path o for (auto entry : col->camData->entries) { - writer->Write(entry->cameraSType); - writer->Write(entry->numData); - writer->Write(entry->cameraPosDataSeg); + writer->Write(entry.cameraSType); + writer->Write(entry.numData); + writer->Write(entry.cameraPosDataSeg); } writer->Seek(oldOffset, SeekOffsetType::Start); diff --git a/tools/ZAPD/ExporterTest/Makefile b/tools/ZAPD/ExporterTest/Makefile index 42033b7c0..98e047525 100644 --- a/tools/ZAPD/ExporterTest/Makefile +++ b/tools/ZAPD/ExporterTest/Makefile @@ -17,7 +17,7 @@ clean: rm -rf build $(LIB) format: - clang-format-11 -i $(CPP_FILES) $(H_FILES) + clang-format-14 -i $(CPP_FILES) $(H_FILES) .PHONY: all clean format diff --git a/tools/ZAPD/Makefile b/tools/ZAPD/Makefile index e725f94f8..c97b7ce23 100644 --- a/tools/ZAPD/Makefile +++ b/tools/ZAPD/Makefile @@ -106,7 +106,7 @@ clean: rebuild: clean all format: - clang-format-11 -i $(ZAPD_CPP_FILES) $(ZAPD_H_FILES) + clang-format-14 -i $(ZAPD_CPP_FILES) $(ZAPD_H_FILES) $(MAKE) -C ZAPDUtils format $(MAKE) -C ExporterTest format diff --git a/tools/ZAPD/README.md b/tools/ZAPD/README.md index bb96bab1b..e2d1f64e0 100644 --- a/tools/ZAPD/README.md +++ b/tools/ZAPD/README.md @@ -139,22 +139,23 @@ Each warning type uses one of these by default, but can be modified with flags, All warning types currently implemented, with their default levels: -| Warning type | Default level | Description | -| --------------------------- | ------------- | ------------------------------------------------------------------------ | -| `-Wdeprecated` | Warn | Deprecated features | -| `-Whardcoded-pointer` | Warn | ZAPD lacks the info to make a symbol, so must output a hardcoded pointer | -| `-Wintersection` | Warn | Two assets intersect | -| `-Winvalid-attribute-value` | Err | Attribute declared in XML is wrong | -| `-Winvalid-extracted-data` | Err | Extracted data does not have correct form | -| `-Winvalid-jpeg` | Err | JPEG file does not conform to the game's format requirements | -| `-Winvalid-png` | Err | Issues arising when processing PNG data | -| `-Winvalid-xml` | Err | XML has syntax errors | -| `-Wmissing-attribute` | Warn | Required attribute missing in XML tag | -| `-Wmissing-offsets` | Warn | Offset attribute missing in XML tag | -| `-Wmissing-segment` | Warn | Segment not given in File tag in XML | -| `-Wnot-implemented` | Warn | ZAPD does not currently support this feature | -| `-Wunaccounted` | Off | Large blocks of unaccounted | -| `-Wunknown-attribute` | Warn | Unknown attribute in XML entry tag | +| Warning type | Default level | Description | +| ----------------------------- | ------------- | ------------------------------------------------------------------------ | +| `-Wdeprecated` | Warn | Deprecated features | +| `-Whardcoded-generic-pointer` | Off | A generic segmented pointer must be produced | +| `-Whardcoded-pointer` | Warn | ZAPD lacks the info to make a symbol, so must output a hardcoded pointer | +| `-Wintersection` | Warn | Two assets intersect | +| `-Winvalid-attribute-value` | Err | Attribute declared in XML is wrong | +| `-Winvalid-extracted-data` | Err | Extracted data does not have correct form | +| `-Winvalid-jpeg` | Err | JPEG file does not conform to the game's format requirements | +| `-Winvalid-png` | Err | Issues arising when processing PNG data | +| `-Winvalid-xml` | Err | XML has syntax errors | +| `-Wmissing-attribute` | Warn | Required attribute missing in XML tag | +| `-Wmissing-offsets` | Warn | Offset attribute missing in XML tag | +| `-Wmissing-segment` | Warn | Segment not given in File tag in XML | +| `-Wnot-implemented` | Warn | ZAPD does not currently support this feature | +| `-Wunaccounted` | Off | Large blocks of unaccounted | +| `-Wunknown-attribute` | Warn | Unknown attribute in XML entry tag | There are also errors that do not have a type, and cannot be disabled. diff --git a/tools/ZAPD/ZAPD/CRC32.h b/tools/ZAPD/ZAPD/CRC32.h index 4158a5528..1f82c75c5 100644 --- a/tools/ZAPD/ZAPD/CRC32.h +++ b/tools/ZAPD/ZAPD/CRC32.h @@ -1,6 +1,6 @@ #pragma once -static uint32_t CRC32B(unsigned char* message, int32_t size) +static uint32_t CRC32B(const unsigned char* message, int32_t size) { int32_t byte, crc; int32_t mask; diff --git a/tools/ZAPD/ZAPD/CrashHandler.cpp b/tools/ZAPD/ZAPD/CrashHandler.cpp index 356866536..7ddec5a7e 100644 --- a/tools/ZAPD/ZAPD/CrashHandler.cpp +++ b/tools/ZAPD/ZAPD/CrashHandler.cpp @@ -8,6 +8,7 @@ #endif #include +#include #include #include #include diff --git a/tools/ZAPD/ZAPD/Declaration.cpp b/tools/ZAPD/ZAPD/Declaration.cpp index 34ab95351..30863803a 100644 --- a/tools/ZAPD/ZAPD/Declaration.cpp +++ b/tools/ZAPD/ZAPD/Declaration.cpp @@ -4,61 +4,79 @@ #include "Utils/StringHelper.h" Declaration::Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nText) + const std::string& nBody) { address = nAddress; alignment = nAlignment; size = nSize; - text = nText; + declBody = nBody; } -Declaration::Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - const std::string& nText) - : Declaration(nAddress, nAlignment, nSize, nText) +Declaration* Declaration::Create(offset_t declAddr, DeclarationAlignment declAlign, size_t declSize, + const std::string& declType, const std::string& declName, + const std::string& declBody) { - varType = nVarType; - varName = nVarName; - isArray = nIsArray; + Declaration* decl = new Declaration(declAddr, declAlign, declSize, declBody); + + decl->declType = declType; + decl->declName = declName; + decl->declBody = declBody; + + return decl; } -Declaration::Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - size_t nArrayItemCnt, const std::string& nText) - : Declaration(nAddress, nAlignment, nSize, nText) +Declaration* Declaration::CreateArray(offset_t declAddr, DeclarationAlignment declAlign, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& declBody, + size_t declArrayItemCnt, bool isDeclExternal) { - varType = nVarType; - varName = nVarName; - isArray = nIsArray; - arrayItemCnt = nArrayItemCnt; + Declaration* decl = new Declaration(declAddr, declAlign, declSize, declBody); + + decl->declName = declName; + decl->declType = declType; + decl->arrayItemCnt = declArrayItemCnt; + decl->isExternal = isDeclExternal; + decl->isArray = true; + + return decl; } -Declaration::Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - const std::string& nArrayItemCntStr, const std::string& nText) - : Declaration(nAddress, nAlignment, nSize, nText) +Declaration* Declaration::CreateArray(offset_t declAddr, DeclarationAlignment declAlign, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& declBody, + const std::string& declArrayItemCntStr, bool isDeclExternal) { - varType = nVarType; - varName = nVarName; - isArray = nIsArray; - arrayItemCntStr = nArrayItemCntStr; + Declaration* decl = new Declaration(declAddr, declAlign, declSize, declBody); + + decl->declName = declName; + decl->declType = declType; + decl->arrayItemCntStr = declArrayItemCntStr; + decl->isExternal = isDeclExternal; + decl->isArray = true; + + return decl; } -Declaration::Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - size_t nArrayItemCnt, const std::string& nText, bool nIsExternal) - : Declaration(nAddress, nAlignment, nSize, nVarType, nVarName, nIsArray, nArrayItemCnt, nText) +Declaration* Declaration::CreateInclude(offset_t declAddr, const std::string& includePath, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& defines) { - isExternal = nIsExternal; + Declaration* decl = new Declaration(declAddr, DeclarationAlignment::Align4, declSize, ""); + decl->includePath = includePath; + decl->declType = declType; + decl->declName = declName; + decl->defines = defines; + + return decl; } -Declaration::Declaration(offset_t nAddress, const std::string& nIncludePath, size_t nSize, - const std::string& nVarType, const std::string& nVarName) - : Declaration(nAddress, DeclarationAlignment::Align4, nSize, "") +Declaration* Declaration::CreatePlaceholder(offset_t declAddr, const std::string& declName) { - includePath = nIncludePath; - varType = nVarType; - varName = nVarName; + Declaration* decl = new Declaration(declAddr, DeclarationAlignment::Align4, 0, ""); + decl->declName = declName; + decl->isPlaceholder = true; + + return decl; } bool Declaration::IsStatic() const @@ -82,9 +100,6 @@ std::string Declaration::GetNormalDeclarationStr() const { std::string output; - if (preText != "") - output += preText + "\n"; - if (IsStatic()) { output += "static "; @@ -92,27 +107,28 @@ std::string Declaration::GetNormalDeclarationStr() const if (isArray) { - if (arrayItemCntStr != "" && (IsStatic() || forceArrayCnt)) + bool includeArraySize = (IsStatic() || forceArrayCnt); + + if (includeArraySize) { - output += StringHelper::Sprintf("%s %s[%s];\n", varType.c_str(), varName.c_str(), - arrayItemCntStr.c_str()); - } - else if (arrayItemCnt != 0 && (IsStatic() || forceArrayCnt)) - { - output += StringHelper::Sprintf("%s %s[%i] = {\n", varType.c_str(), varName.c_str(), - arrayItemCnt); + if (arrayItemCntStr != "") + output += StringHelper::Sprintf("%s %s[%s];\n", declType.c_str(), declName.c_str(), + arrayItemCntStr.c_str()); + else + output += StringHelper::Sprintf("%s %s[%i] = {\n", declType.c_str(), + declName.c_str(), arrayItemCnt); } else { - output += StringHelper::Sprintf("%s %s[] = {\n", varType.c_str(), varName.c_str()); + output += StringHelper::Sprintf("%s %s[] = {\n", declType.c_str(), declName.c_str()); } - output += text + "\n"; + output += declBody + "\n"; } else { - output += StringHelper::Sprintf("%s %s = { ", varType.c_str(), varName.c_str()); - output += text; + output += StringHelper::Sprintf("%s %s = { ", declType.c_str(), declName.c_str()); + output += declBody; } if (output.back() == '\n') @@ -120,14 +136,8 @@ std::string Declaration::GetNormalDeclarationStr() const else output += " };"; - if (rightText != "") - output += " " + rightText + ""; - output += "\n"; - if (postText != "") - output += postText + "\n"; - output += "\n"; return output; @@ -137,41 +147,34 @@ std::string Declaration::GetExternalDeclarationStr() const { std::string output; - if (preText != "") - output += preText + "\n"; - if (IsStatic()) - { output += "static "; + + bool includeArraySize = (IsStatic() || forceArrayCnt); + + if (includeArraySize) + { + if (arrayItemCntStr != "") + output += StringHelper::Sprintf("%s %s[%s] = ", declType.c_str(), declName.c_str(), + arrayItemCntStr.c_str()); + else + output += StringHelper::Sprintf("%s %s[%i] = ", declType.c_str(), declName.c_str(), + arrayItemCnt); + } + else + { + output += StringHelper::Sprintf("%s %s[] = ", declType.c_str(), declName.c_str()); } - if (arrayItemCntStr != "" && (IsStatic() || forceArrayCnt)) - output += StringHelper::Sprintf("%s %s[%s] = ", varType.c_str(), varName.c_str(), - arrayItemCntStr.c_str()); - else if (arrayItemCnt != 0 && (IsStatic() || forceArrayCnt)) - output += - StringHelper::Sprintf("%s %s[%i] = ", varType.c_str(), varName.c_str(), arrayItemCnt); - else - output += StringHelper::Sprintf("%s %s[] = ", varType.c_str(), varName.c_str()); - output += StringHelper::Sprintf("{\n#include \"%s\"\n};", includePath.c_str()); - - if (rightText != "") - output += " " + rightText + ""; - - output += "\n"; - - if (postText != "") - output += postText + "\n"; - - output += "\n"; + output += "\n\n"; return output; } std::string Declaration::GetExternStr() const { - if (IsStatic() || varType == "" || isUnaccounted) + if (IsStatic() || declType == "" || isUnaccounted) { return ""; } @@ -180,19 +183,28 @@ std::string Declaration::GetExternStr() const { if (arrayItemCntStr != "" && (IsStatic() || forceArrayCnt)) { - return StringHelper::Sprintf("extern %s %s[%s];\n", varType.c_str(), varName.c_str(), + return StringHelper::Sprintf("extern %s %s[%s];\n", declType.c_str(), declName.c_str(), arrayItemCntStr.c_str()); } else if (arrayItemCnt != 0 && (IsStatic() || forceArrayCnt)) { - return StringHelper::Sprintf("extern %s %s[%i];\n", varType.c_str(), varName.c_str(), + return StringHelper::Sprintf("extern %s %s[%i];\n", declType.c_str(), declName.c_str(), arrayItemCnt); } else - return StringHelper::Sprintf("extern %s %s[];\n", varType.c_str(), varName.c_str()); + return StringHelper::Sprintf("extern %s %s[];\n", declType.c_str(), declName.c_str()); } - return StringHelper::Sprintf("extern %s %s;\n", varType.c_str(), varName.c_str()); + return StringHelper::Sprintf("extern %s %s;\n", declType.c_str(), declName.c_str()); +} + +std::string Declaration::GetDefinesStr() const +{ + if (IsStatic() || (declType == "")) + { + return ""; + } + return StringHelper::Sprintf("%s", defines.c_str()); } std::string Declaration::GetStaticForwardDeclarationStr() const @@ -210,15 +222,15 @@ std::string Declaration::GetStaticForwardDeclarationStr() const if (arrayItemCntStr != "") { - return StringHelper::Sprintf("static %s %s[%s];\n", varType.c_str(), varName.c_str(), + return StringHelper::Sprintf("static %s %s[%s];\n", declType.c_str(), declName.c_str(), arrayItemCntStr.c_str()); } else { - return StringHelper::Sprintf("static %s %s[%i];\n", varType.c_str(), varName.c_str(), + return StringHelper::Sprintf("static %s %s[%i];\n", declType.c_str(), declName.c_str(), arrayItemCnt); } } - return StringHelper::Sprintf("static %s %s;\n", varType.c_str(), varName.c_str()); + return StringHelper::Sprintf("static %s %s;\n", declType.c_str(), declName.c_str()); } diff --git a/tools/ZAPD/ZAPD/Declaration.h b/tools/ZAPD/ZAPD/Declaration.h index 4a743b50f..d079cb8dc 100644 --- a/tools/ZAPD/ZAPD/Declaration.h +++ b/tools/ZAPD/ZAPD/Declaration.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -22,59 +23,160 @@ enum class StaticConfig On }; +/// +/// A declaration is contains the C contents of a symbol for a file. +/// It contains at a minimum the address where the symbol would be in the binary file, alignment +/// settings, the size of the binary data, and the C code that makes it up. Optionally it can also +/// contain comments. +/// class Declaration { public: - offset_t address; - DeclarationAlignment alignment; - size_t size; - std::string preText; - std::string text; - std::string rightText; - std::string postText; - std::string preComment; - std::string postComment; - std::string varType; - std::string varName; - std::string includePath; + // Where in the binary file (segment) will this C code end up being? + offset_t address = 0; + // How is this C code aligned? + DeclarationAlignment alignment = DeclarationAlignment::Align4; + + // How many bytes will this C code take up in the resulting binary when compiled? + size_t size = 0; + + // The C type of this declaration + std::string declType = ""; + + // The C variable name of this declaration + std::string declName = ""; + + // The body of the declaration containing the data. + // In "int j = 7;", "7" would be text. + std::string declBody = ""; + + // #define's to be included in the header + std::string defines = ""; + + std::string includePath = ""; + + // Is this declaration in an external file? (ie. a gameplay_keep reference being found in + // another file that wishes to use its data) bool isExternal = false; + bool isArray = false; + + // If true, will ensure that the arrays size is included in the declaration bool forceArrayCnt = false; + + // If this declaration is an array, how many items make it up? size_t arrayItemCnt = 0; + + // Overrides the brackets for the arrays size with a custom string std::string arrayItemCntStr = ""; + std::vector references; + + // If true, this declaration represents data inside the file which we do not understand it's + // purpose for. It will be outputted as just a byte array. bool isUnaccounted = false; + + // Is this declaration a placeholder that will be replaced later? bool isPlaceholder = false; + + // Does this declaration come straight from the XML? + // If false, this means that the declaration was created by ZAPD when it was parsing the + // resources. bool declaredInXml = false; + StaticConfig staticConf = StaticConfig::Global; - Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - const std::string& nText); - Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - size_t nArrayItemCnt, const std::string& nText); - Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - const std::string& nArrayItemCntStr, const std::string& nText); - Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nVarType, const std::string& nVarName, bool nIsArray, - size_t nArrayItemCnt, const std::string& nText, bool nIsExternal); + /// + /// Creates a regular declaration. + /// + /// The address inside a binary file this declaration will be in when + /// compiled. The alignment of this declaration in the compiled + /// binary file. The size of this declaration when it is compiled + /// to binary data. The C variable type this declaration will be + /// declared as. The C variable name this declaration will be + /// declared as. The contents of the C variable + /// declaration. + static Declaration* Create(offset_t declAddr, DeclarationAlignment declAlign, size_t declSize, + const std::string& declType, const std::string& declName, + const std::string& declBody); - Declaration(offset_t nAddress, const std::string& nIncludePath, size_t nSize, - const std::string& nVarType, const std::string& nVarName); + /// + /// Creates an array declaration. + /// + /// The address inside a binary file this declaration will be in when + /// compiled. The alignment of this declaration in the compiled + /// binary file. The size of this declaration when it is compiled + /// to binary data. The C variable type this declaration will be + /// declared as. The C variable name this declaration will be + /// declared as. The contents of the C variable + /// declaration. The number of items in the + /// array. (Optional) Is this declaration from another + /// segment? + static Declaration* CreateArray(offset_t declAddr, DeclarationAlignment declAlign, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& declBody, + size_t declArrayItemCnt = 0, bool isDeclExternal = false); + + /// + /// Creates an array declaration who's size in the C code uses a custom string. + /// + /// The address inside a binary file this declaration will be in when + /// compiled. The alignment of this declaration in the compiled + /// binary file. The size of this declaration when it is compiled + /// to binary data. The C variable type this declaration will be + /// declared as. The C variable name this declaration will be + /// declared as. The contents of the C variable + /// declaration. The string to be put in the C array's + /// size inbetween the brackets. (Optional) Is this + /// declaration from another segment? + static Declaration* CreateArray(offset_t declAddr, DeclarationAlignment declAlign, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& declBody, + const std::string& declArrayItemCntStr, + bool isDeclExternal = false); + + /// + /// Creates a declaration who's body uses a #include to include another file + /// + /// The address inside a binary file this declaration will be in when + /// compiled. The path to the file this declaration will be + /// #including. The size of this declaration when it is compiled + /// to binary data. The C variable type this declaration will be + /// declared as. The C variable name this declaration will be + /// declared as. (Optional) Any #define's we want to have + /// outputted by this declaration. + static Declaration* CreateInclude(offset_t declAddr, const std::string& includePath, + size_t declSize, const std::string& declType, + const std::string& declName, const std::string& defines = ""); + + /// + /// Creates a placeholder declaration to be replaced later. + /// + /// The address inside a binary file this declaration will be in when + /// compiled. The C variable name this declaration will be + /// declared as. + static Declaration* CreatePlaceholder(offset_t declAddr, const std::string& declName); bool IsStatic() const; + // Returns the declaration as C code as it would be in the code file when the body contains the + // needed data std::string GetNormalDeclarationStr() const; + + // Returns the declaration as C code as it would be in the code file when the body #include's + // another file std::string GetExternalDeclarationStr() const; + // Generates the extern for this item to be placed in header files. std::string GetExternStr() const; + // Generates any #define's needed + std::string GetDefinesStr() const; + std::string GetStaticForwardDeclarationStr() const; protected: Declaration(offset_t nAddress, DeclarationAlignment nAlignment, size_t nSize, - const std::string& nText); + const std::string& nBody); }; diff --git a/tools/ZAPD/ZAPD/ExporterSet.h b/tools/ZAPD/ZAPD/ExporterSet.h new file mode 100644 index 000000000..c4dd93445 --- /dev/null +++ b/tools/ZAPD/ZAPD/ExporterSet.h @@ -0,0 +1,24 @@ +#pragma once + +typedef void (*ExporterSetFunc)(ZFile*); +typedef bool (*ExporterSetFuncBool)(ZFileMode fileMode); +typedef void (*ExporterSetFuncVoid)(int argc, char* argv[], int& i); +typedef void (*ExporterSetFuncVoid2)(const std::string& buildMode, ZFileMode& fileMode); +typedef void (*ExporterSetFuncVoid3)(); +typedef void (*ExporterSetResSave)(ZResource* res, BinaryWriter& writer); + +class ExporterSet +{ +public: + ~ExporterSet(); + + std::map exporters; + ExporterSetFuncVoid parseArgsFunc = nullptr; + ExporterSetFuncVoid2 parseFileModeFunc = nullptr; + ExporterSetFuncBool processFileModeFunc = nullptr; + ExporterSetFunc beginFileFunc = nullptr; + ExporterSetFunc endFileFunc = nullptr; + ExporterSetFuncVoid3 beginXMLFunc = nullptr; + ExporterSetFuncVoid3 endXMLFunc = nullptr; + ExporterSetResSave resSaveFunc = nullptr; +}; \ No newline at end of file diff --git a/tools/ZAPD/ZAPD/GameConfig.cpp b/tools/ZAPD/ZAPD/GameConfig.cpp index 777cf9d49..b27e81600 100644 --- a/tools/ZAPD/ZAPD/GameConfig.cpp +++ b/tools/ZAPD/ZAPD/GameConfig.cpp @@ -124,6 +124,7 @@ void GameConfig::ConfigFunc_BGConfig(const tinyxml2::XMLElement& element) { bgScreenWidth = element.IntAttribute("ScreenWidth", 320); bgScreenHeight = element.IntAttribute("ScreenHeight", 240); + useScreenWidthHeightConstants = element.BoolAttribute("UseScreenWidthHeightConstants", true); } void GameConfig::ConfigFunc_ExternalXMLFolder(const tinyxml2::XMLElement& element) diff --git a/tools/ZAPD/ZAPD/GameConfig.h b/tools/ZAPD/ZAPD/GameConfig.h index 2a783d10a..d650c6d70 100644 --- a/tools/ZAPD/ZAPD/GameConfig.h +++ b/tools/ZAPD/ZAPD/GameConfig.h @@ -37,6 +37,8 @@ public: // ZBackground uint32_t bgScreenWidth = 320, bgScreenHeight = 240; + bool useScreenWidthHeightConstants = true; // If true, ZBackground's will be declared with + // SCREEN_WIDTH * SCREEN_HEIGHT in the C file // ExternalFile fs::path externalXmlFolder; diff --git a/tools/ZAPD/ZAPD/Globals.cpp b/tools/ZAPD/ZAPD/Globals.cpp index a10705e9a..02380f690 100644 --- a/tools/ZAPD/ZAPD/Globals.cpp +++ b/tools/ZAPD/ZAPD/Globals.cpp @@ -83,9 +83,10 @@ ExporterSet* Globals::GetExporterSet() } bool Globals::GetSegmentedPtrName(segptr_t segAddress, ZFile* currentFile, - const std::string& expectedType, std::string& declName) + const std::string& expectedType, std::string& declName, + bool warnIfNotFound) { - if (segAddress == 0) + if (segAddress == SEGMENTED_NULL) { declName = "NULL"; return true; @@ -160,14 +161,18 @@ bool Globals::GetSegmentedPtrName(segptr_t segAddress, ZFile* currentFile, } declName = StringHelper::Sprintf("0x%08X", segAddress); + if (warnIfNotFound) + { + WarnHardcodedPointer(segAddress, currentFile, nullptr, -1); + } return false; } bool Globals::GetSegmentedArrayIndexedName(segptr_t segAddress, size_t elementSize, ZFile* currentFile, const std::string& expectedType, - std::string& declName) + std::string& declName, bool warnIfNotFound) { - if (segAddress == 0) + if (segAddress == SEGMENTED_NULL) { declName = "NULL"; return true; @@ -197,9 +202,36 @@ bool Globals::GetSegmentedArrayIndexedName(segptr_t segAddress, size_t elementSi } declName = StringHelper::Sprintf("0x%08X", segAddress); + if (warnIfNotFound) + { + WarnHardcodedPointer(segAddress, currentFile, nullptr, -1); + } return false; } +void Globals::WarnHardcodedPointer(segptr_t segAddress, ZFile* currentFile, ZResource* res, + offset_t currentOffset) +{ + uint8_t segment = GETSEGNUM(segAddress); + + if ((segment >= 2 && segment <= 6) || segment == 0x80) + { + std::string errorHeader = "A hardcoded pointer was found"; + std::string errorBody = StringHelper::Sprintf("Pointer: 0x%08X", segAddress); + + HANDLE_WARNING_RESOURCE(WarningType::HardcodedPointer, currentFile, res, currentOffset, + errorHeader, errorBody); + } + else + { + std::string errorHeader = "A general purpose hardcoded pointer was found"; + std::string errorBody = StringHelper::Sprintf("Pointer: 0x%08X", segAddress); + + HANDLE_WARNING_RESOURCE(WarningType::HardcodedGenericPointer, currentFile, res, + currentOffset, errorHeader, errorBody); + } +} + ExternalFile::ExternalFile(fs::path nXmlPath, fs::path nOutPath) : xmlPath{nXmlPath}, outPath{nOutPath} { diff --git a/tools/ZAPD/ZAPD/Globals.h b/tools/ZAPD/ZAPD/Globals.h index 1ae753e20..0bfcaeec7 100644 --- a/tools/ZAPD/ZAPD/Globals.h +++ b/tools/ZAPD/ZAPD/Globals.h @@ -5,6 +5,7 @@ #include #include "GameConfig.h" #include "ZFile.h" +#include "ExporterSet.h" class ZRoom; @@ -15,29 +16,6 @@ enum class VerbosityLevel VERBOSITY_DEBUG }; -typedef void (*ExporterSetFunc)(ZFile*); -typedef bool (*ExporterSetFuncBool)(ZFileMode fileMode); -typedef void (*ExporterSetFuncVoid)(int argc, char* argv[], int& i); -typedef void (*ExporterSetFuncVoid2)(const std::string& buildMode, ZFileMode& fileMode); -typedef void (*ExporterSetFuncVoid3)(); -typedef void (*ExporterSetResSave)(ZResource* res, BinaryWriter& writer); - -class ExporterSet -{ -public: - ~ExporterSet(); - - std::map exporters; - ExporterSetFuncVoid parseArgsFunc = nullptr; - ExporterSetFuncVoid2 parseFileModeFunc = nullptr; - ExporterSetFuncBool processFileModeFunc = nullptr; - ExporterSetFunc beginFileFunc = nullptr; - ExporterSetFunc endFileFunc = nullptr; - ExporterSetFuncVoid3 beginXMLFunc = nullptr; - ExporterSetFuncVoid3 endXMLFunc = nullptr; - ExporterSetResSave resSaveFunc = nullptr; -}; - class Globals { public: @@ -86,8 +64,14 @@ public: * in which case `declName` will be set to the address formatted as a pointer. */ bool GetSegmentedPtrName(segptr_t segAddress, ZFile* currentFile, - const std::string& expectedType, std::string& declName); + const std::string& expectedType, std::string& declName, + bool warnIfNotFound = true); bool GetSegmentedArrayIndexedName(segptr_t segAddress, size_t elementSize, ZFile* currentFile, - const std::string& expectedType, std::string& declName); + const std::string& expectedType, std::string& declName, + bool warnIfNotFound = true); + + // TODO: consider moving to another place + void WarnHardcodedPointer(segptr_t segAddress, ZFile* currentFile, ZResource* res, + offset_t currentOffset); }; diff --git a/tools/ZAPD/ZAPD/Main.cpp b/tools/ZAPD/ZAPD/Main.cpp index 2563154e5..40a38bc60 100644 --- a/tools/ZAPD/ZAPD/Main.cpp +++ b/tools/ZAPD/ZAPD/Main.cpp @@ -9,24 +9,52 @@ #include "ZFile.h" #include "ZTexture.h" +#include #include "CrashHandler.h" #include #include #include "tinyxml2.h" +using ArgFunc = void (*)(int&, char**); + +void Arg_SetOutputPath(int& i, char* argv[]); +void Arg_SetInputPath(int& i, char* argv[]); +void Arg_SetBaseromPath(int& i, char* argv[]); +void Arg_SetSourceOutputPath(int& i, char* argv[]); +void Arg_GenerateSourceFile(int& i, char* argv[]); +void Arg_TestMode(int& i, char* argv[]); +void Arg_LegacyDList(int& i, char* argv[]); +void Arg_EnableProfiling(int& i, char* argv[]); +void Arg_UseExternalResources(int& i, char* argv[]); +void Arg_SetTextureType(int& i, char* argv[]); +void Arg_ReadConfigFile(int& i, char* argv[]); +void Arg_EnableErrorHandler(int& i, char* argv[]); +void Arg_SetVerbosity(int& i, char* argv[]); +void Arg_VerboseUnaccounted(int& i, char* argv[]); +void Arg_SetExporter(int& i, char* argv[]); +void Arg_EnableGCCCompat(int& i, char* argv[]); +void Arg_ForceStatic(int& i, char* argv[]); +void Arg_ForceUnaccountedStatic(int& i, char* argv[]); + +int main(int argc, char* argv[]); + bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath, ZFileMode fileMode); +void ParseArgs(int& argc, char* argv[]); + void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const fs::path& outPath); void BuildAssetBackground(const fs::path& imageFilePath, const fs::path& outPath); void BuildAssetBlob(const fs::path& blobFilePath, const fs::path& outPath); +ZFileMode ParseFileMode(const std::string& buildMode, ExporterSet* exporterSet); +int HandleExtract(ZFileMode fileMode, ExporterSet* exporterSet); extern const char gBuildHash[]; int main(int argc, char* argv[]) { - // Syntax: ZAPD.out [mode (btex/bovl/e)] (Arbritrary Number of Arguments) + int returnCode = 0; if (argc < 2) { @@ -55,112 +83,12 @@ int main(int argc, char* argv[]) } } - // Parse other "commands" - for (int32_t i = 2; i < argc; i++) - { - std::string arg = argv[i]; - - if (arg == "-o" || arg == "--outputpath") // Set output path - { - Globals::Instance->outputPath = argv[++i]; - - if (Globals::Instance->sourceOutputPath == "") - Globals::Instance->sourceOutputPath = Globals::Instance->outputPath; - } - else if (arg == "-i" || arg == "--inputpath") // Set input path - { - Globals::Instance->inputPath = argv[++i]; - } - else if (arg == "-b" || arg == "--baserompath") // Set baserom path - { - Globals::Instance->baseRomPath = argv[++i]; - } - else if (arg == "-osf") // Set source output path - { - Globals::Instance->sourceOutputPath = argv[++i]; - } - else if (arg == "-gsf") // Generate source file during extraction - { - Globals::Instance->genSourceFile = std::string_view(argv[++i]) == "1"; - } - else if (arg == "-tm") // Test Mode (enables certain experimental features) - { - Globals::Instance->testMode = std::string_view(argv[++i]) == "1"; - } - else if (arg == "-crc" || - arg == "--output-crc") // Outputs a CRC file for each extracted texture. - { - Globals::Instance->testMode = std::string_view(argv[++i]) == "1"; - } - else if (arg == "-ulzdl") // Use Legacy ZDisplay List - { - Globals::Instance->useLegacyZDList = std::string_view(argv[++i]) == "1"; - } - else if (arg == "-profile") // Enable profiling - { - Globals::Instance->profile = std::string_view(argv[++i]) == "1"; - } - else if (arg == - "-uer") // Split resources into their individual components (enabled by default) - // TODO: We may wish to make this a part of the config file... - { - Globals::Instance->useExternalResources = std::string_view(argv[++i]) == "1"; - } - else if (arg == "-tt") // Set texture type - { - Globals::Instance->texType = ZTexture::GetTextureTypeFromString(argv[++i]); - } - else if (arg == "-rconf") // Read Config File - { - Globals::Instance->cfg.ReadConfigFile(argv[++i]); - } - else if (arg == "-eh") // Enable Error Handler - { - CrashHandler_Init(); - } - else if (arg == "-v") // Verbose - { - Globals::Instance->verbosity = static_cast(strtol(argv[++i], NULL, 16)); - } - else if (arg == "-vu" || arg == "--verbose-unaccounted") // Verbose unaccounted - { - Globals::Instance->verboseUnaccounted = true; - } - else if (arg == "-se" || arg == "--set-exporter") // Set Current Exporter - { - Globals::Instance->currentExporter = argv[++i]; - } - else if (arg == "--gcc-compat") // GCC compatibility - { - Globals::Instance->gccCompat = true; - } - else if (arg == "-s" || arg == "--static") - { - Globals::Instance->forceStatic = true; - } - else if (arg == "-us" || arg == "--unaccounted-static") - { - Globals::Instance->forceUnaccountedStatic = true; - } - } + ParseArgs(argc, argv); // Parse File Mode ExporterSet* exporterSet = Globals::Instance->GetExporterSet(); std::string buildMode = argv[1]; - ZFileMode fileMode = ZFileMode::Invalid; - - if (buildMode == "btex") - fileMode = ZFileMode::BuildTexture; - else if (buildMode == "bren") - fileMode = ZFileMode::BuildBackground; - else if (buildMode == "bsf") - fileMode = ZFileMode::BuildSourceFile; - else if (buildMode == "bblb") - fileMode = ZFileMode::BuildBlob; - else if (buildMode == "e") - fileMode = ZFileMode::Extract; - else if (exporterSet != nullptr && exporterSet->parseFileModeFunc != nullptr) - exporterSet->parseFileModeFunc(buildMode, fileMode); + ZFileMode fileMode = ParseFileMode(buildMode, exporterSet); if (fileMode == ZFileMode::Invalid) { @@ -170,7 +98,6 @@ int main(int argc, char* argv[]) // We've parsed through our commands once. If an exporter exists, it's been set by now. // Now we'll parse through them again but pass them on to our exporter if one is available. - if (exporterSet != nullptr && exporterSet->parseArgsFunc != nullptr) { for (int32_t i = 2; i < argc; i++) @@ -181,62 +108,20 @@ int main(int argc, char* argv[]) printf("ZAPD: Zelda Asset Processor For Decomp: %s\n", gBuildHash); if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) - { WarningHandler::PrintWarningsDebugInfo(); - } - // TODO: switch if (fileMode == ZFileMode::Extract || fileMode == ZFileMode::BuildSourceFile) - { - bool procFileModeSuccess = false; - - if (exporterSet != nullptr && exporterSet->processFileModeFunc != nullptr) - procFileModeSuccess = exporterSet->processFileModeFunc(fileMode); - - if (!procFileModeSuccess) - { - bool parseSuccessful; - - for (auto& extFile : Globals::Instance->cfg.externalFiles) - { - fs::path externalXmlFilePath = - Globals::Instance->cfg.externalXmlFolder / extFile.xmlPath; - - if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_INFO) - { - printf("Parsing external file from config: '%s'\n", - externalXmlFilePath.c_str()); - } - - parseSuccessful = Parse(externalXmlFilePath, Globals::Instance->baseRomPath, - extFile.outPath, ZFileMode::ExternalFile); - - if (!parseSuccessful) - return 1; - } - - parseSuccessful = Parse(Globals::Instance->inputPath, Globals::Instance->baseRomPath, - Globals::Instance->outputPath, fileMode); - if (!parseSuccessful) - return 1; - } - } + returnCode = HandleExtract(fileMode, exporterSet); else if (fileMode == ZFileMode::BuildTexture) - { - TextureType texType = Globals::Instance->texType; - BuildAssetTexture(Globals::Instance->inputPath, texType, Globals::Instance->outputPath); - } + BuildAssetTexture(Globals::Instance->inputPath, Globals::Instance->texType, + Globals::Instance->outputPath); else if (fileMode == ZFileMode::BuildBackground) - { BuildAssetBackground(Globals::Instance->inputPath, Globals::Instance->outputPath); - } else if (fileMode == ZFileMode::BuildBlob) - { BuildAssetBlob(Globals::Instance->inputPath, Globals::Instance->outputPath); - } delete g; - return 0; + return returnCode; } bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath, @@ -339,6 +224,209 @@ bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path return true; } +void ParseArgs(int& argc, char* argv[]) +{ + static const std::unordered_map ArgFuncDictionary = { + {"-o", &Arg_SetOutputPath}, + {"--outputpath", &Arg_SetOutputPath}, + {"-i", &Arg_SetInputPath}, + {"--inputpath", &Arg_SetInputPath}, + {"-b", &Arg_SetBaseromPath}, + {"--baserompath", &Arg_SetBaseromPath}, + {"-osf", &Arg_SetSourceOutputPath}, + {"-gsf", &Arg_GenerateSourceFile}, + {"-tm", &Arg_TestMode}, + {"-ulzdl", &Arg_LegacyDList}, + {"-profile", &Arg_EnableProfiling}, + {"-uer", &Arg_UseExternalResources}, + {"-tt", &Arg_SetTextureType}, + {"-rconf", &Arg_ReadConfigFile}, + {"-eh", &Arg_EnableErrorHandler}, + {"-v", &Arg_SetVerbosity}, + {"-vu", &Arg_VerboseUnaccounted}, + {"--verbose-unaccounted", &Arg_VerboseUnaccounted}, + {"-se", &Arg_SetExporter}, + {"--set-exporter", &Arg_SetExporter}, + {"--gcc-compat", &Arg_EnableGCCCompat}, + {"-s", &Arg_ForceStatic}, + {"--static", &Arg_ForceStatic}, + {"-us", &Arg_ForceUnaccountedStatic}, + {"--unaccounted-static", &Arg_ForceUnaccountedStatic}, + }; + + for (int32_t i = 2; i < argc; i++) + { + std::string arg = argv[i]; + + // Ignore warning args as they have already been parsed + if (arg.length() > 2 && arg[0] == '-' && arg[1] == 'W' && arg[2] != '\0') + { + continue; + } + + auto it = ArgFuncDictionary.find(arg); + if (it == ArgFuncDictionary.end()) + { + fprintf(stderr, "Unsupported argument: %s\n", arg.c_str()); + continue; + } + + std::invoke(it->second, i, argv); + } +} + +ZFileMode ParseFileMode(const std::string& buildMode, ExporterSet* exporterSet) +{ + ZFileMode fileMode = ZFileMode::Invalid; + + if (buildMode == "btex") + fileMode = ZFileMode::BuildTexture; + else if (buildMode == "bren") + fileMode = ZFileMode::BuildBackground; + else if (buildMode == "bsf") + fileMode = ZFileMode::BuildSourceFile; + else if (buildMode == "bblb") + fileMode = ZFileMode::BuildBlob; + else if (buildMode == "e") + fileMode = ZFileMode::Extract; + else if (exporterSet != nullptr && exporterSet->parseFileModeFunc != nullptr) + exporterSet->parseFileModeFunc(buildMode, fileMode); + + return fileMode; +} + +void Arg_SetOutputPath(int& i, [[maybe_unused]] char* argv[]) +{ + Globals::Instance->outputPath = argv[++i]; + + if (Globals::Instance->sourceOutputPath == "") + Globals::Instance->sourceOutputPath = Globals::Instance->outputPath; +} + +void Arg_SetInputPath(int& i, char* argv[]) +{ + Globals::Instance->inputPath = argv[++i]; +} + +void Arg_SetBaseromPath(int& i, char* argv[]) +{ + Globals::Instance->baseRomPath = argv[++i]; +} + +void Arg_SetSourceOutputPath(int& i, char* argv[]) +{ + Globals::Instance->sourceOutputPath = argv[++i]; +} + +void Arg_GenerateSourceFile(int& i, char* argv[]) +{ + // Generate source file during extraction + Globals::Instance->genSourceFile = std::string_view(argv[++i]) == "1"; +} + +void Arg_TestMode(int& i, char* argv[]) +{ + // Test Mode (enables certain experimental features) + Globals::Instance->testMode = std::string_view(argv[++i]) == "1"; +} + +void Arg_LegacyDList(int& i, char* argv[]) +{ + Globals::Instance->useLegacyZDList = std::string_view(argv[++i]) == "1"; +} + +void Arg_EnableProfiling(int& i, char* argv[]) +{ + Globals::Instance->profile = std::string_view(argv[++i]) == "1"; +} + +void Arg_UseExternalResources(int& i, char* argv[]) +{ + // Split resources into their individual components(enabled by default) + // TODO: We may wish to make this a part of the config file... + Globals::Instance->useExternalResources = std::string_view(argv[++i]) == "1"; +} + +void Arg_SetTextureType(int& i, char* argv[]) +{ + Globals::Instance->texType = ZTexture::GetTextureTypeFromString(argv[++i]); +} + +void Arg_ReadConfigFile(int& i, char* argv[]) +{ + Globals::Instance->cfg.ReadConfigFile(argv[++i]); +} + +void Arg_EnableErrorHandler([[maybe_unused]] int& i, [[maybe_unused]] char* argv[]) +{ + CrashHandler_Init(); +} + +void Arg_SetVerbosity(int& i, char* argv[]) +{ + Globals::Instance->verbosity = static_cast(strtol(argv[++i], NULL, 16)); +} + +void Arg_VerboseUnaccounted([[maybe_unused]] int& i, [[maybe_unused]] char* argv[]) +{ + Globals::Instance->verboseUnaccounted = true; +} + +void Arg_SetExporter(int& i, char* argv[]) +{ + Globals::Instance->currentExporter = argv[++i]; +} + +void Arg_EnableGCCCompat([[maybe_unused]] int& i, [[maybe_unused]] char* argv[]) +{ + Globals::Instance->gccCompat = true; +} + +void Arg_ForceStatic([[maybe_unused]] int& i, [[maybe_unused]] char* argv[]) +{ + Globals::Instance->forceStatic = true; +} + +void Arg_ForceUnaccountedStatic([[maybe_unused]] int& i, [[maybe_unused]] char* argv[]) +{ + Globals::Instance->forceUnaccountedStatic = true; +} + +int HandleExtract(ZFileMode fileMode, ExporterSet* exporterSet) +{ + bool procFileModeSuccess = false; + + if (exporterSet != nullptr && exporterSet->processFileModeFunc != nullptr) + procFileModeSuccess = exporterSet->processFileModeFunc(fileMode); + + if (!procFileModeSuccess) + { + bool parseSuccessful; + + for (auto& extFile : Globals::Instance->cfg.externalFiles) + { + fs::path externalXmlFilePath = + Globals::Instance->cfg.externalXmlFolder / extFile.xmlPath; + + if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_INFO) + printf("Parsing external file from config: '%s'\n", externalXmlFilePath.c_str()); + + parseSuccessful = Parse(externalXmlFilePath, Globals::Instance->baseRomPath, + extFile.outPath, ZFileMode::ExternalFile); + + if (!parseSuccessful) + return 1; + } + + parseSuccessful = Parse(Globals::Instance->inputPath, Globals::Instance->baseRomPath, + Globals::Instance->outputPath, fileMode); + if (!parseSuccessful) + return 1; + } + + return 0; +} + void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const fs::path& outPath) { std::string name = outPath.stem().string(); diff --git a/tools/ZAPD/ZAPD/OtherStructs/SkinLimbStructs.cpp b/tools/ZAPD/ZAPD/OtherStructs/SkinLimbStructs.cpp index df8bd6d98..4c12062b2 100644 --- a/tools/ZAPD/ZAPD/OtherStructs/SkinLimbStructs.cpp +++ b/tools/ZAPD/ZAPD/OtherStructs/SkinLimbStructs.cpp @@ -165,7 +165,7 @@ void Struct_800A598C::DeclareReferences(const std::string& prefix) res.GetSourceTypeName(), unk_8_Str, arrayItemCnt, entryStr); } else - decl->text = entryStr; + decl->declBody = entryStr; } if (unk_C != 0 && GETSEGNUM(unk_C) == parent->segment) @@ -195,7 +195,7 @@ void Struct_800A598C::DeclareReferences(const std::string& prefix) res.GetSourceTypeName(), unk_C_Str, arrayItemCnt, entryStr); } else - decl->text = entryStr; + decl->declBody = entryStr; } } @@ -296,7 +296,7 @@ void Struct_800A5E28::DeclareReferences(const std::string& prefix) res.GetSourceTypeName(), unk_4_Str, arrayItemCnt, entryStr); } else - decl->text = entryStr; + decl->declBody = entryStr; } if (unk_8 != SEGMENTED_NULL && GETSEGNUM(unk_8) == parent->segment) diff --git a/tools/ZAPD/ZAPD/OutputFormatter.h b/tools/ZAPD/ZAPD/OutputFormatter.h index 28955b1cd..ec56b654d 100644 --- a/tools/ZAPD/ZAPD/OutputFormatter.h +++ b/tools/ZAPD/ZAPD/OutputFormatter.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include diff --git a/tools/ZAPD/ZAPD/WarningHandler.cpp b/tools/ZAPD/ZAPD/WarningHandler.cpp index 163b028b5..f416a5b80 100644 --- a/tools/ZAPD/ZAPD/WarningHandler.cpp +++ b/tools/ZAPD/ZAPD/WarningHandler.cpp @@ -84,26 +84,27 @@ typedef struct */ // clang-format off static const std::unordered_map warningStringToInitMap = { - {"deprecated", {WarningType::Deprecated, + {"deprecated", {WarningType::Deprecated, #ifdef DEPRECATION_ON WarningLevel::Warn, #else WarningLevel::Off, #endif "Deprecated features"}}, - {"unaccounted", {WarningType::Unaccounted, WarningLevel::Off, "Large blocks of unaccounted"}}, - {"missing-offsets", {WarningType::MissingOffsets, WarningLevel::Warn, "Offset attribute missing in XML tag"}}, - {"intersection", {WarningType::Intersection, WarningLevel::Warn, "Two assets intersect"}}, - {"missing-attribute", {WarningType::MissingAttribute, WarningLevel::Warn, "Required attribute missing in XML tag"}}, - {"invalid-attribute-value", {WarningType::InvalidAttributeValue, WarningLevel::Err, "Attribute declared in XML is wrong"}}, - {"unknown-attribute", {WarningType::UnknownAttribute, WarningLevel::Warn, "Unknown attribute in XML entry tag"}}, - {"invalid-xml", {WarningType::InvalidXML, WarningLevel::Err, "XML has syntax errors"}}, - {"invalid-jpeg", {WarningType::InvalidJPEG, WarningLevel::Err, "JPEG file does not conform to the game's format requirements"}}, - {"invalid-png", {WarningType::InvalidPNG, WarningLevel::Err, "Issues arising when processing PNG data"}}, - {"invalid-extracted-data", {WarningType::InvalidExtractedData, WarningLevel::Err, "Extracted data does not have correct form"}}, - {"missing-segment", {WarningType::MissingSegment, WarningLevel::Warn, "Segment not given in File tag in XML"}}, - {"hardcoded-pointer", {WarningType::HardcodedPointer, WarningLevel::Warn, "ZAPD lacks the info to make a symbol, so must output a hardcoded pointer"}}, - {"not-implemented", {WarningType::NotImplemented, WarningLevel::Warn, "ZAPD does not currently support this feature"}}, + {"unaccounted", {WarningType::Unaccounted, WarningLevel::Off, "Large blocks of unaccounted"}}, + {"missing-offsets", {WarningType::MissingOffsets, WarningLevel::Warn, "Offset attribute missing in XML tag"}}, + {"intersection", {WarningType::Intersection, WarningLevel::Warn, "Two assets intersect"}}, + {"missing-attribute", {WarningType::MissingAttribute, WarningLevel::Warn, "Required attribute missing in XML tag"}}, + {"invalid-attribute-value", {WarningType::InvalidAttributeValue, WarningLevel::Err, "Attribute declared in XML is wrong"}}, + {"unknown-attribute", {WarningType::UnknownAttribute, WarningLevel::Warn, "Unknown attribute in XML entry tag"}}, + {"invalid-xml", {WarningType::InvalidXML, WarningLevel::Err, "XML has syntax errors"}}, + {"invalid-jpeg", {WarningType::InvalidJPEG, WarningLevel::Err, "JPEG file does not conform to the game's format requirements"}}, + {"invalid-png", {WarningType::InvalidPNG, WarningLevel::Err, "Issues arising when processing PNG data"}}, + {"invalid-extracted-data", {WarningType::InvalidExtractedData, WarningLevel::Err, "Extracted data does not have correct form"}}, + {"missing-segment", {WarningType::MissingSegment, WarningLevel::Warn, "Segment not given in File tag in XML"}}, + {"hardcoded-generic-pointer", {WarningType::HardcodedGenericPointer, WarningLevel::Off, "A generic segmented pointer must be produced"}}, + {"hardcoded-pointer", {WarningType::HardcodedPointer, WarningLevel::Warn, "ZAPD lacks the info to make a symbol, so must output a hardcoded pointer"}}, + {"not-implemented", {WarningType::NotImplemented, WarningLevel::Warn, "ZAPD does not currently support this feature"}}, }; /** @@ -229,7 +230,10 @@ void WarningHandler::ExtractedFilePreamble(const ZFile *parent, const ZResource* if (res != nullptr) { fprintf(stderr, "resource '%s' at ", res->GetName().c_str()); } - fprintf(stderr, "offset 0x%06X: \n\t", offset); + if (offset != static_cast(-1)) { + fprintf(stderr, "offset 0x%06X:", offset); + } + fprintf(stderr, "\n\t"); } /** diff --git a/tools/ZAPD/ZAPD/WarningHandler.h b/tools/ZAPD/ZAPD/WarningHandler.h index bb0360a81..f99330042 100644 --- a/tools/ZAPD/ZAPD/WarningHandler.h +++ b/tools/ZAPD/ZAPD/WarningHandler.h @@ -81,6 +81,7 @@ enum class WarningType InvalidExtractedData, MissingSegment, HardcodedPointer, + HardcodedGenericPointer, NotImplemented, Max, }; diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj b/tools/ZAPD/ZAPD/ZAPD.vcxproj index 505e41100..77d0bd16e 100644 --- a/tools/ZAPD/ZAPD/ZAPD.vcxproj +++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj @@ -249,6 +249,7 @@ mkdir build\ZAPD + @@ -272,6 +273,7 @@ mkdir build\ZAPD + @@ -339,6 +341,7 @@ mkdir build\ZAPD + diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters index ce89882fe..eac471961 100644 --- a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters +++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters @@ -1,4 +1,4 @@ - + @@ -291,6 +291,12 @@ Source Files\Z64 + + Source Files\Z64 + + + Source Files\Z64 + @@ -554,6 +560,15 @@ Header Files\Z64 + + Header Files + + + Header Files + + + Header Files + diff --git a/tools/ZAPD/ZAPD/ZAnimation.cpp b/tools/ZAPD/ZAPD/ZAnimation.cpp index 74b520b50..0d7234407 100644 --- a/tools/ZAPD/ZAPD/ZAnimation.cpp +++ b/tools/ZAPD/ZAPD/ZAnimation.cpp @@ -300,7 +300,7 @@ void ZCurveAnimation::DeclareReferences(const std::string& prefix) } else { - decl->text = entryStr; + decl->declBody = entryStr; } } @@ -331,7 +331,7 @@ void ZCurveAnimation::DeclareReferences(const std::string& prefix) } else { - decl->text = entryStr; + decl->declBody = entryStr; } } @@ -359,7 +359,7 @@ void ZCurveAnimation::DeclareReferences(const std::string& prefix) } else { - decl->text = entryStr; + decl->declBody = entryStr; } } } diff --git a/tools/ZAPD/ZAPD/ZArray.cpp b/tools/ZAPD/ZAPD/ZArray.cpp index 0a9797ba0..62720bc61 100644 --- a/tools/ZAPD/ZAPD/ZArray.cpp +++ b/tools/ZAPD/ZAPD/ZArray.cpp @@ -56,7 +56,7 @@ void ZArray::ParseXML(tinyxml2::XMLElement* reader) } res->parent = parent; res->SetInnerNode(true); - res->ExtractFromXML(child, childIndex); + res->ExtractWithXML(child, childIndex); childIndex += res->GetRawDataSize(); resList.push_back(res); @@ -75,11 +75,11 @@ Declaration* ZArray::DeclareVar(const std::string& prefix, const std::string& bo if (res->IsExternalResource()) { auto filepath = Globals::Instance->outputPath / name; - std::string includePath = StringHelper::Sprintf("%s.%s.inc", filepath.c_str(), + std::string includePath = StringHelper::Sprintf("%s.%s.inc", filepath.string().c_str(), res->GetExternalExtension().c_str()); decl = parent->AddDeclarationIncludeArray(rawDataIndex, includePath, GetRawDataSize(), GetSourceTypeName(), name, arrayCnt); - decl->text = bodyStr; + decl->declBody = bodyStr; decl->isExternal = true; } else @@ -109,6 +109,7 @@ std::string ZArray::GetBodySourceCode() const case ZResourceType::Vertex: case ZResourceType::CollisionPoly: case ZResourceType::SurfaceType: + case ZResourceType::Waterbox: output += resList.at(i)->GetBodySourceCode(); break; diff --git a/tools/ZAPD/ZAPD/ZBackground.cpp b/tools/ZAPD/ZAPD/ZBackground.cpp index 0ed1eb747..fc725637e 100644 --- a/tools/ZAPD/ZAPD/ZBackground.cpp +++ b/tools/ZAPD/ZAPD/ZBackground.cpp @@ -132,8 +132,13 @@ Declaration* ZBackground::DeclareVar(const std::string& prefix, Declaration* decl = parent->AddDeclarationIncludeArray(rawDataIndex, incStr, GetRawDataSize(), GetSourceTypeName(), auxName, 0); - decl->arrayItemCntStr = "SCREEN_WIDTH * SCREEN_HEIGHT / 4"; - decl->forceArrayCnt = true; + + if (Globals::Instance->cfg.useScreenWidthHeightConstants) + { + decl->arrayItemCntStr = "SCREEN_WIDTH * SCREEN_HEIGHT / 4"; + decl->forceArrayCnt = true; + } + decl->staticConf = staticConf; return decl; } diff --git a/tools/ZAPD/ZAPD/ZCollision.cpp b/tools/ZAPD/ZAPD/ZCollision.cpp index 5bd3d93a6..8c193167b 100644 --- a/tools/ZAPD/ZAPD/ZCollision.cpp +++ b/tools/ZAPD/ZAPD/ZCollision.cpp @@ -1,4 +1,5 @@ #include "ZCollision.h" +#include "ZWaterbox.h" #include #include @@ -50,6 +51,7 @@ void ZCollisionHeader::ParseRawData() vertices.reserve(numVerts); polygons.reserve(numPolygons); + waterBoxes.reserve(numWaterBoxes); offset_t currentPtr = vtxSegmentOffset; @@ -104,31 +106,48 @@ void ZCollisionHeader::ParseRawData() // - WaterBoxes // - CollisionHeader offset_t upperCameraBoundary = polyTypeDefSegmentOffset; - if (upperCameraBoundary == 0) + if (upperCameraBoundary == SEGMENTED_NULL) { upperCameraBoundary = polySegmentOffset; } - if (upperCameraBoundary == 0) + if (upperCameraBoundary == SEGMENTED_NULL) { upperCameraBoundary = vtxSegmentOffset; } - if (upperCameraBoundary == 0) + if (upperCameraBoundary == SEGMENTED_NULL) { upperCameraBoundary = waterBoxSegmentOffset; } - if (upperCameraBoundary == 0) + if (upperCameraBoundary == SEGMENTED_NULL) { upperCameraBoundary = rawDataIndex; } + // Sharp Ocarina places the CamDataEntries above the list so we need to calculate the number + // of cameras differently. + if (upperCameraBoundary < camDataSegmentOffset) + { + offset_t offset = camDataSegmentOffset; + while (rawData[offset] == 0x00 && rawData[offset + 0x4] == 0x02) + { + offset += 0x08; + } + upperCameraBoundary = offset; + } + camData = new CameraDataList(parent, name, rawData, camDataSegmentOffset, upperCameraBoundary); } - for (uint16_t i = 0; i < numWaterBoxes; i++) - waterBoxes.push_back(WaterBoxHeader( - rawData, - waterBoxSegmentOffset + (i * (Globals::Instance->game == ZGame::OOT_SW97 ? 12 : 16)))); + for (int32_t i = 0; i < numWaterBoxes; i++) + { + ZWaterbox waterbox(parent); + + waterbox.SetRawDataIndex(waterBoxSegmentOffset + + (i * (Globals::Instance->game == ZGame::OOT_SW97 ? 12 : 16))); + waterbox.ParseRawData(); + waterBoxes.emplace_back(waterbox); + } } void ZCollisionHeader::DeclareReferences(const std::string& prefix) @@ -149,9 +168,11 @@ void ZCollisionHeader::DeclareReferences(const std::string& prefix) declaration += "\n"; } - parent->AddDeclarationArray( - waterBoxSegmentOffset, DeclarationAlignment::Align4, 16 * waterBoxes.size(), "WaterBox", - StringHelper::Sprintf("%sWaterBoxes", auxName.c_str()), waterBoxes.size(), declaration); + parent->AddDeclarationArray(waterBoxSegmentOffset, DeclarationAlignment::Align4, + waterBoxes[0].GetRawDataSize() * waterBoxes.size(), + waterBoxes[0].GetSourceTypeName().c_str(), + StringHelper::Sprintf("%sWaterBoxes", auxName.c_str()), + waterBoxes.size(), declaration); } if (polygons.size() > 0) @@ -219,11 +240,21 @@ std::string ZCollisionHeader::GetBodySourceCode() const std::string vtxName; Globals::Instance->GetSegmentedPtrName(vtxAddress, parent, "Vec3s", vtxName); - declaration += StringHelper::Sprintf("\t%i, %s,\n", numVerts, vtxName.c_str()); + + if (numVerts > 0) + declaration += + StringHelper::Sprintf("\tARRAY_COUNT(%s), %s,\n", vtxName.c_str(), vtxName.c_str()); + else + declaration += StringHelper::Sprintf("\t%i, %s,\n", numVerts, vtxName.c_str()); std::string polyName; Globals::Instance->GetSegmentedPtrName(polyAddress, parent, "CollisionPoly", polyName); - declaration += StringHelper::Sprintf("\t%i, %s,\n", numPolygons, polyName.c_str()); + + if (numPolygons > 0) + declaration += + StringHelper::Sprintf("\tARRAY_COUNT(%s), %s,\n", polyName.c_str(), polyName.c_str()); + else + declaration += StringHelper::Sprintf("\t%i, %s,\n", numPolygons, polyName.c_str()); std::string surfaceName; Globals::Instance->GetSegmentedPtrName(polyTypeDefAddress, parent, "SurfaceType", surfaceName); @@ -235,7 +266,12 @@ std::string ZCollisionHeader::GetBodySourceCode() const std::string waterBoxName; Globals::Instance->GetSegmentedPtrName(waterBoxAddress, parent, "WaterBox", waterBoxName); - declaration += StringHelper::Sprintf("\t%i, %s\n", numWaterBoxes, waterBoxName.c_str()); + + if (numWaterBoxes > 0) + declaration += StringHelper::Sprintf("\tARRAY_COUNT(%s), %s\n", waterBoxName.c_str(), + waterBoxName.c_str()); + else + declaration += StringHelper::Sprintf("\t%i, %s\n", numWaterBoxes, waterBoxName.c_str()); return declaration; } @@ -260,26 +296,6 @@ size_t ZCollisionHeader::GetRawDataSize() const return 44; } -WaterBoxHeader::WaterBoxHeader(const std::vector& rawData, uint32_t rawDataIndex) -{ - xMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 0); - ySurface = BitConverter::ToInt16BE(rawData, rawDataIndex + 2); - zMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); - xLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 6); - zLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 8); - - if (Globals::Instance->game == ZGame::OOT_SW97) - properties = BitConverter::ToInt16BE(rawData, rawDataIndex + 10); - else - properties = BitConverter::ToInt32BE(rawData, rawDataIndex + 12); -} - -std::string WaterBoxHeader::GetBodySourceCode() const -{ - return StringHelper::Sprintf("%i, %i, %i, %i, %i, 0x%08X", xMin, ySurface, zMin, xLength, - zLength, properties); -} - CameraDataList::CameraDataList(ZFile* parent, const std::string& prefix, const std::vector& rawData, offset_t rawDataIndex, offset_t upperCameraBoundary) @@ -291,46 +307,63 @@ CameraDataList::CameraDataList(ZFile* parent, const std::string& prefix, assert(numElements < 10000); offset_t cameraPosDataSeg = rawDataIndex; + uint32_t numDataTotal; + uint32_t cameraPosDataSegEnd = rawDataIndex; + bool isSharpOcarina = false; + for (size_t i = 0; i < numElements; i++) { - CameraDataEntry* entry = new CameraDataEntry(); + CameraDataEntry entry; - entry->cameraSType = + entry.cameraSType = BitConverter::ToInt16BE(rawData, rawDataIndex + (entries.size() * 8) + 0); - entry->numData = BitConverter::ToInt16BE(rawData, rawDataIndex + (entries.size() * 8) + 2); - entry->cameraPosDataSeg = + entry.numData = BitConverter::ToInt16BE(rawData, rawDataIndex + (entries.size() * 8) + 2); + entry.cameraPosDataSeg = BitConverter::ToInt32BE(rawData, rawDataIndex + (entries.size() * 8) + 4); - if (entry->cameraPosDataSeg != 0 && GETSEGNUM(entry->cameraPosDataSeg) != SEGMENT_SCENE) + if (entry.cameraPosDataSeg != 0 && GETSEGNUM(entry.cameraPosDataSeg) != SEGMENT_SCENE) { cameraPosDataSeg = rawDataIndex + (entries.size() * 8); break; } - if (entry->cameraPosDataSeg != 0 && cameraPosDataSeg > (entry->cameraPosDataSeg & 0xFFFFFF)) - cameraPosDataSeg = (entry->cameraPosDataSeg & 0xFFFFFF); + if (rawDataIndex > GETSEGOFFSET(entry.cameraPosDataSeg)) + { + if (entry.cameraPosDataSeg != 0 && + cameraPosDataSeg > GETSEGOFFSET(entry.cameraPosDataSeg)) + cameraPosDataSeg = GETSEGOFFSET(entry.cameraPosDataSeg); + } + else + { + // Sharp Ocarina will place the cam data after the list as opposed to the original maps + // which have it before. + isSharpOcarina = true; + cameraPosDataSeg = rawDataIndex + (numElements * 0x8); + if (cameraPosDataSegEnd < GETSEGOFFSET(entry.cameraPosDataSeg)) + cameraPosDataSegEnd = GETSEGOFFSET(entry.cameraPosDataSeg); + } - entries.push_back(entry); + entries.emplace_back(entry); } // Setting cameraPosDataAddr to rawDataIndex give a pos list length of 0 - uint32_t cameraPosDataOffset = cameraPosDataSeg & 0xFFFFFF; + uint32_t cameraPosDataOffset = GETSEGOFFSET(cameraPosDataSeg); for (size_t i = 0; i < entries.size(); i++) { char camSegLine[2048]; - if (entries[i]->cameraPosDataSeg != 0) + if (entries[i].cameraPosDataSeg != 0) { - int32_t index = - ((entries[i]->cameraPosDataSeg & 0x00FFFFFF) - cameraPosDataOffset) / 0x6; - sprintf(camSegLine, "&%sCamPosData[%i]", prefix.c_str(), index); + uint32_t index = + (GETSEGOFFSET(entries[i].cameraPosDataSeg) - cameraPosDataOffset) / 0x6; + snprintf(camSegLine, 2048, "&%sCamPosData[%i]", prefix.c_str(), index); } else - sprintf(camSegLine, "NULL"); + snprintf(camSegLine, 2048, "NULL"); declaration += - StringHelper::Sprintf(" { 0x%04X, %i, %s },", entries[i]->cameraSType, - entries[i]->numData, camSegLine, rawDataIndex + (i * 8)); + StringHelper::Sprintf(" { 0x%04X, %i, %s },", entries[i].cameraSType, + entries[i].numData, camSegLine, rawDataIndex + (i * 8)); if (i < entries.size() - 1) declaration += "\n"; @@ -341,23 +374,26 @@ CameraDataList::CameraDataList(ZFile* parent, const std::string& prefix, StringHelper::Sprintf("%sCamDataList", prefix.c_str(), rawDataIndex), entries.size(), declaration); - uint32_t numDataTotal = (rawDataIndex - cameraPosDataOffset) / 0x6; + if (!isSharpOcarina) + numDataTotal = (rawDataIndex - cameraPosDataOffset) / 0x6; + else + numDataTotal = ((cameraPosDataSegEnd - cameraPosDataSeg) + 18) / 0x6; if (numDataTotal > 0) { declaration.clear(); + cameraPositionData.reserve(numDataTotal); for (uint32_t i = 0; i < numDataTotal; i++) { - CameraPositionData* data = - new CameraPositionData(rawData, cameraPosDataOffset + (i * 6)); - cameraPositionData.push_back(data); + CameraPositionData data = CameraPositionData(rawData, cameraPosDataOffset + (i * 6)); - declaration += StringHelper::Sprintf("\t{ %6i, %6i, %6i },", data->x, data->y, data->z); + declaration += StringHelper::Sprintf("\t{ %6i, %6i, %6i },", data.x, data.y, data.z); + cameraPositionData.emplace_back(data); if (i + 1 < numDataTotal) declaration += "\n"; } - int32_t cameraPosDataIndex = GETSEGOFFSET(cameraPosDataSeg); + uint32_t cameraPosDataIndex = GETSEGOFFSET(cameraPosDataSeg); uint32_t entrySize = numDataTotal * 0x6; parent->AddDeclarationArray(cameraPosDataIndex, DeclarationAlignment::Align4, entrySize, "Vec3s", StringHelper::Sprintf("%sCamPosData", prefix.c_str()), @@ -367,11 +403,6 @@ CameraDataList::CameraDataList(ZFile* parent, const std::string& prefix, CameraDataList::~CameraDataList() { - for (auto entry : entries) - delete entry; - - for (auto camPosData : cameraPositionData) - delete camPosData; } CameraPositionData::CameraPositionData(const std::vector& rawData, uint32_t rawDataIndex) diff --git a/tools/ZAPD/ZAPD/ZCollision.h b/tools/ZAPD/ZAPD/ZCollision.h index 35c632144..8c73d2eaa 100644 --- a/tools/ZAPD/ZAPD/ZCollision.h +++ b/tools/ZAPD/ZAPD/ZCollision.h @@ -6,23 +6,7 @@ #include "ZRoom/ZRoom.h" #include "ZSurfaceType.h" #include "ZVector.h" - -class WaterBoxHeader -{ -public: - WaterBoxHeader(const std::vector& rawData, uint32_t rawDataIndex); - - std::string GetBodySourceCode() const; - -protected: - int16_t xMin; - int16_t ySurface; - int16_t zMin; - int16_t xLength; - int16_t zLength; - int16_t pad; - int32_t properties; -}; +#include "ZWaterbox.h" class CameraPositionData { @@ -37,14 +21,14 @@ class CameraDataEntry public: int16_t cameraSType; int16_t numData; - int32_t cameraPosDataSeg; + offset_t cameraPosDataSeg; }; class CameraDataList { public: - std::vector entries; - std::vector cameraPositionData; + std::vector entries; + std::vector cameraPositionData; CameraDataList(ZFile* parent, const std::string& prefix, const std::vector& rawData, offset_t rawDataIndex, offset_t upperCameraBoundary); @@ -72,7 +56,7 @@ public: std::vector vertices; std::vector polygons; std::vector polygonTypes; - std::vector waterBoxes; + std::vector waterBoxes; CameraDataList* camData = nullptr; ZCollisionHeader(ZFile* nParent); diff --git a/tools/ZAPD/ZAPD/ZCutscene.cpp b/tools/ZAPD/ZAPD/ZCutscene.cpp index a3bfe0e07..c2e6c2b8f 100644 --- a/tools/ZAPD/ZAPD/ZCutscene.cpp +++ b/tools/ZAPD/ZAPD/ZCutscene.cpp @@ -231,6 +231,7 @@ CutsceneCommand* ZCutscene::GetCommandOoT(uint32_t id, offset_t currentPtr) cons case 142: case 62: // CutsceneCommands::SetActorAction9 case 143: // CutsceneCommands::SetActorAction10 + case 74: return new CutsceneCommand_ActorAction(rawData, currentPtr); case 0x0B: @@ -249,7 +250,6 @@ CutsceneCommand* ZCutscene::GetCommandOoT(uint32_t id, offset_t currentPtr) cons case 0x16: case 0x70: case 0x71: - case 0x4A: return new CutsceneCommand_GenericCmd(rawData, currentPtr, cmdID); } diff --git a/tools/ZAPD/ZAPD/ZDisplayList.cpp b/tools/ZAPD/ZAPD/ZDisplayList.cpp index 3b50c1fd3..98c4d0e4a 100644 --- a/tools/ZAPD/ZAPD/ZDisplayList.cpp +++ b/tools/ZAPD/ZAPD/ZDisplayList.cpp @@ -40,7 +40,7 @@ ZDisplayList::~ZDisplayList() } // EXTRACT MODE -void ZDisplayList::ExtractFromXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) +void ZDisplayList::ExtractWithXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) { rawDataIndex = nRawDataIndex; ParseXML(reader); @@ -708,7 +708,7 @@ void ZDisplayList::Opcode_G_DL(uint64_t data, const std::string& prefix, char* l if (!Globals::Instance->HasSegment(segNum)) sprintf(line, "gsSPBranchList(0x%08" PRIX64 "),", data & 0xFFFFFFFF); else if (dListDecl != nullptr) - sprintf(line, "gsSPBranchList(%s),", dListDecl->varName.c_str()); + sprintf(line, "gsSPBranchList(%s),", dListDecl->declName.c_str()); else sprintf(line, "gsSPBranchList(%sDlist0x%06" PRIX64 "),", prefix.c_str(), GETSEGOFFSET(data)); @@ -718,7 +718,7 @@ void ZDisplayList::Opcode_G_DL(uint64_t data, const std::string& prefix, char* l if (!Globals::Instance->HasSegment(segNum)) sprintf(line, "gsSPDisplayList(0x%08" PRIX64 "),", data & 0xFFFFFFFF); else if (dListDecl != nullptr) - sprintf(line, "gsSPDisplayList(%s),", dListDecl->varName.c_str()); + sprintf(line, "gsSPDisplayList(%s),", dListDecl->declName.c_str()); else sprintf(line, "gsSPDisplayList(%sDlist0x%06" PRIX64 "),", prefix.c_str(), GETSEGOFFSET(data)); @@ -958,7 +958,7 @@ void ZDisplayList::Opcode_G_SETTIMG(uint64_t data, const std::string& prefix, ch } if (texDecl != nullptr) - sprintf(texStr, "%s", texDecl->varName.c_str()); + sprintf(texStr, "%s", texDecl->declName.c_str()); else if (data != 0 && Globals::Instance->HasSegment(segmentNumber)) sprintf(texStr, "%sTex_%06X", prefix.c_str(), texAddress); else @@ -1642,7 +1642,14 @@ static int32_t GfxdCallback_Vtx(uint32_t seg, int32_t count) vtxList.push_back(vtx); currentPtr += 16; } - self->vertices[vtxOffset] = vtxList; + + bool keyAlreadyOccupied = self->vertices.find(vtxOffset) != self->vertices.end(); + + // In some cases a vtxList already exists at vtxOffset. Only override the existing list + // if the new one is bigger. + if (!keyAlreadyOccupied || + (keyAlreadyOccupied && vtxList.size() > self->vertices[vtxOffset].size())) + self->vertices[vtxOffset] = vtxList; } } @@ -1708,17 +1715,26 @@ static int32_t GfxdCallback_DisplayList(uint32_t seg) uint32_t dListSegNum = GETSEGNUM(seg); std::string dListName = ""; - bool addressFound = Globals::Instance->GetSegmentedPtrName(seg, self->parent, "Gfx", dListName); + bool addressFound = + Globals::Instance->GetSegmentedPtrName(seg, self->parent, "Gfx", dListName, false); - if (!addressFound && self->parent->segment == dListSegNum) + if (!addressFound) { - ZDisplayList* newDList = new ZDisplayList(self->parent); - newDList->ExtractFromBinary( - dListOffset, - self->GetDListLength(self->parent->GetRawData(), dListOffset, self->dListType)); - newDList->SetName(newDList->GetDefaultName(self->parent->GetName())); - self->otherDLists.push_back(newDList); - dListName = newDList->GetName(); + if (self->parent->segment == dListSegNum) + { + ZDisplayList* newDList = new ZDisplayList(self->parent); + newDList->ExtractFromBinary( + dListOffset, + self->GetDListLength(self->parent->GetRawData(), dListOffset, self->dListType)); + newDList->SetName(newDList->GetDefaultName(self->parent->GetName())); + self->otherDLists.push_back(newDList); + dListName = newDList->GetName(); + } + else + { + Globals::Instance->WarnHardcodedPointer(seg, self->parent, self, + self->GetRawDataIndex()); + } } gfxd_puts(dListName.c_str()); @@ -1731,21 +1747,31 @@ static int32_t GfxdCallback_Matrix(uint32_t seg) std::string mtxName; ZDisplayList* self = static_cast(gfxd_udata_get()); - bool addressFound = Globals::Instance->GetSegmentedPtrName(seg, self->parent, "Mtx", mtxName); - if (!addressFound && GETSEGNUM(seg) == self->parent->segment) - { - Declaration* decl = - self->parent->GetDeclaration(Seg2Filespace(seg, self->parent->baseAddress)); - if (decl == nullptr) - { - ZMtx mtx(self->parent); - mtx.SetName(mtx.GetDefaultName(self->GetName())); - mtx.ExtractFromFile(Seg2Filespace(seg, self->parent->baseAddress)); - mtx.DeclareVar(self->GetName(), ""); + bool addressFound = + Globals::Instance->GetSegmentedPtrName(seg, self->parent, "Mtx", mtxName, false); - mtx.GetSourceOutputCode(self->GetName()); - self->mtxList.push_back(mtx); - mtxName = "&" + mtx.GetName(); + if (!addressFound) + { + if (GETSEGNUM(seg) == self->parent->segment) + { + Declaration* decl = + self->parent->GetDeclaration(Seg2Filespace(seg, self->parent->baseAddress)); + if (decl == nullptr) + { + ZMtx mtx(self->parent); + mtx.SetName(mtx.GetDefaultName(self->GetName())); + mtx.ExtractFromFile(Seg2Filespace(seg, self->parent->baseAddress)); + mtx.DeclareVar(self->GetName(), ""); + + mtx.GetSourceOutputCode(self->GetName()); + self->mtxList.push_back(mtx); + mtxName = "&" + mtx.GetName(); + } + } + else + { + Globals::Instance->WarnHardcodedPointer(seg, self->parent, self, + self->GetRawDataIndex()); } } @@ -1870,7 +1896,8 @@ void ZDisplayList::DeclareReferences(const std::string& prefix) vtxName = StringHelper::Sprintf("%sVtx_%06X", prefix.c_str(), vtxKeys[i]); auto filepath = Globals::Instance->outputPath / vtxName; - std::string incStr = StringHelper::Sprintf("%s.%s.inc", filepath.c_str(), "vtx"); + std::string incStr = + StringHelper::Sprintf("%s.%s.inc", filepath.string().c_str(), "vtx"); Declaration* vtxDecl = parent->AddDeclarationIncludeArray( vtxKeys[i], incStr, item.size() * 16, "Vtx", vtxName, item.size()); @@ -1954,9 +1981,46 @@ std::string ZDisplayList::ProcessGfxDis([[maybe_unused]] const std::string& pref gfxd_execute(); // generate display list sourceOutput += outputformatter.GetOutput(); // write formatted display list + MergeConnectingVertexLists(); + return sourceOutput; } +void ZDisplayList::MergeConnectingVertexLists() +{ + if (vertices.size() > 0) + { + std::vector>> vertexKeys(vertices.begin(), + vertices.end()); + std::pair> lastItem = vertexKeys.at(0); + + for (size_t i = 1; i < vertexKeys.size(); i++) + { + std::pair> curItem = vertexKeys[i]; + + size_t lastItemEnd = lastItem.first + (lastItem.second.size() * 16); + bool lastItemIntersects = lastItemEnd >= curItem.first; + + if (lastItemIntersects) + { + int intersectedVtxStart = (lastItemEnd - curItem.first) / 16; + + for (size_t j = intersectedVtxStart; j < curItem.second.size(); j++) + vertices[lastItem.first].push_back(curItem.second[j]); + + vertices.erase(curItem.first); + vertexKeys.erase(vertexKeys.begin() + i); + + lastItem.second = vertices[lastItem.first]; + + i--; + } + else + lastItem = curItem; + } + } +} + void ZDisplayList::TextureGenCheck() { if (TextureGenCheck(lastTexWidth, lastTexHeight, lastTexAddr, lastTexSeg, lastTexFmt, diff --git a/tools/ZAPD/ZAPD/ZDisplayList.h b/tools/ZAPD/ZAPD/ZDisplayList.h index 96808315d..356e89a2b 100644 --- a/tools/ZAPD/ZAPD/ZDisplayList.h +++ b/tools/ZAPD/ZAPD/ZDisplayList.h @@ -346,7 +346,7 @@ public: ZDisplayList(ZFile* nParent); ~ZDisplayList(); - void ExtractFromXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) override; + void ExtractWithXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) override; void ExtractFromBinary(uint32_t nRawDataIndex, int32_t rawDataSize); void ParseRawData() override; @@ -367,6 +367,9 @@ public: std::string ProcessLegacy(const std::string& prefix); std::string ProcessGfxDis(const std::string& prefix); + // Combines vertex lists from the vertices map which touch or intersect + void MergeConnectingVertexLists(); + bool IsExternalResource() const override; std::string GetExternalExtension() const override; std::string GetSourceTypeName() const override; diff --git a/tools/ZAPD/ZAPD/ZFile.cpp b/tools/ZAPD/ZAPD/ZFile.cpp index 09776505d..0b2a4d631 100644 --- a/tools/ZAPD/ZAPD/ZFile.cpp +++ b/tools/ZAPD/ZAPD/ZFile.cpp @@ -181,6 +181,12 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename) } } + const char* segmentDefines = reader->Attribute("Defines"); + if (segmentDefines != NULL) + { + makeDefines = true; + } + if (mode == ZFileMode::Extract || mode == ZFileMode::ExternalFile) { if (!File::Exists((basePath / name).string())) @@ -213,14 +219,12 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename) // Check for repeated attributes. if (offsetXml != nullptr) { - std::string offsetStr = StringHelper::Split(offsetXml, "0x")[1]; - if (!StringHelper::HasOnlyHexDigits(offsetStr)) + if (!StringHelper::IsValidOffset(std::string_view(offsetXml))) { HANDLE_ERROR(WarningType::InvalidXML, - StringHelper::Sprintf("Invalid offset %s entered", offsetStr.c_str()), - ""); + StringHelper::Sprintf("Invalid offset %s entered", offsetXml), ""); } - rawDataIndex = strtol(offsetStr.c_str(), NULL, 16); + rawDataIndex = strtol(offsetXml, NULL, 16); if (offsetSet.find(offsetXml) != offsetSet.end()) { @@ -268,7 +272,7 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename) ZResource* nRes = nodeMap[nodeName](this); if (mode == ZFileMode::Extract || mode == ZFileMode::ExternalFile) - nRes->ExtractFromXML(child, rawDataIndex); + nRes->ExtractWithXML(child, rawDataIndex); switch (nRes->GetResourceType()) { @@ -442,24 +446,25 @@ Declaration* ZFile::AddDeclaration(offset_t address, DeclarationAlignment alignm const std::string& varType, const std::string& varName, const std::string& body) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; Declaration* decl = GetDeclaration(address); if (decl == nullptr) { - decl = new Declaration(address, alignment, size, varType, varName, false, body); + decl = Declaration::Create(address, alignment, size, varType, varName, body); declarations[address] = decl; } else { decl->alignment = alignment; decl->size = size; - decl->varType = varType; - decl->varName = varName; - decl->text = body; + decl->declType = varType; + decl->declName = varName; + decl->declBody = body; } + return decl; } @@ -468,27 +473,29 @@ Declaration* ZFile::AddDeclarationArray(offset_t address, DeclarationAlignment a const std::string& varName, size_t arrayItemCnt, const std::string& body) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; Declaration* decl = GetDeclaration(address); if (decl == nullptr) { - decl = - new Declaration(address, alignment, size, varType, varName, true, arrayItemCnt, body); + decl = Declaration::CreateArray(address, alignment, size, varType, varName, body, + arrayItemCnt); + declarations[address] = decl; } else { if (decl->isPlaceholder) - decl->varName = varName; + decl->declName = varName; + decl->alignment = alignment; decl->size = size; - decl->varType = varType; + decl->declType = varType; decl->isArray = true; decl->arrayItemCnt = arrayItemCnt; - decl->text = body; + decl->declBody = body; } return decl; @@ -499,41 +506,41 @@ Declaration* ZFile::AddDeclarationArray(offset_t address, DeclarationAlignment a const std::string& varName, const std::string& arrayItemCntStr, const std::string& body) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; Declaration* decl = GetDeclaration(address); if (decl == nullptr) { - decl = new Declaration(address, alignment, size, varType, varName, true, arrayItemCntStr, - body); + decl = Declaration::CreateArray(address, alignment, size, varType, varName, body, + arrayItemCntStr); + declarations[address] = decl; } else { decl->alignment = alignment; decl->size = size; - decl->varType = varType; - decl->varName = varName; + decl->declType = varType; + decl->declName = varName; decl->isArray = true; decl->arrayItemCntStr = arrayItemCntStr; - decl->text = body; + decl->declBody = body; } return decl; } Declaration* ZFile::AddDeclarationPlaceholder(offset_t address, const std::string& varName) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; Declaration* decl; if (declarations.find(address) == declarations.end()) { - decl = new Declaration(address, DeclarationAlignment::Align4, 0, "", varName, false, ""); - decl->isPlaceholder = true; + decl = Declaration::CreatePlaceholder(address, varName); declarations[address] = decl; } else @@ -546,22 +553,22 @@ Declaration* ZFile::AddDeclarationInclude(offset_t address, const std::string& i size_t size, const std::string& varType, const std::string& varName) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; Declaration* decl = GetDeclaration(address); if (decl == nullptr) { - decl = new Declaration(address, includePath, size, varType, varName); + decl = Declaration::CreateInclude(address, includePath, size, varType, varName); declarations[address] = decl; } else { decl->includePath = includePath; decl->size = size; - decl->varType = varType; - decl->varName = varName; + decl->declType = varType; + decl->declName = varName; } return decl; } @@ -570,7 +577,7 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in size_t size, const std::string& varType, const std::string& varName, size_t arrayItemCnt) { - bool validOffset = AddDeclarationChecks(address, varName); + bool validOffset = DeclarationSanityChecks(address, varName); if (!validOffset) return nullptr; @@ -582,7 +589,7 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in Declaration* decl = GetDeclaration(address); if (decl == nullptr) { - decl = new Declaration(address, includePath, size, varType, varName); + decl = Declaration::CreateInclude(address, includePath, size, varType, varName); decl->isArray = true; decl->arrayItemCnt = arrayItemCnt; @@ -592,8 +599,8 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in else { decl->includePath = includePath; - decl->varType = varType; - decl->varName = varName; + decl->declType = varType; + decl->declName = varName; decl->size = size; decl->isArray = true; decl->arrayItemCnt = arrayItemCnt; @@ -601,7 +608,44 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in return decl; } -bool ZFile::AddDeclarationChecks(uint32_t address, const std::string& varName) +Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& includePath, + size_t size, const std::string& varType, + const std::string& varName, + const std::string& defines, size_t arrayItemCnt) +{ + bool validOffset = DeclarationSanityChecks(address, varName); + if (!validOffset) + return nullptr; + + if (StringHelper::StartsWith(includePath, "assets/extracted/")) + includePath = "assets/" + StringHelper::Split(includePath, "assets/extracted/")[1]; + if (StringHelper::StartsWith(includePath, "assets/custom/")) + includePath = "assets/" + StringHelper::Split(includePath, "assets/custom/")[1]; + + Declaration* decl = GetDeclaration(address); + if (decl == nullptr) + { + decl = Declaration::CreateInclude(address, includePath, size, varType, varName, defines); + + decl->isArray = true; + decl->arrayItemCnt = arrayItemCnt; + + declarations[address] = decl; + } + else + { + decl->includePath = includePath; + decl->declType = varType; + decl->declName = varName; + decl->defines = defines; + decl->size = size; + decl->isArray = true; + decl->arrayItemCnt = arrayItemCnt; + } + return decl; +} + +bool ZFile::DeclarationSanityChecks(uint32_t address, const std::string& varName) { assert(GETSEGNUM(address) == 0); assert(varName != ""); @@ -645,7 +689,7 @@ bool ZFile::GetDeclarationPtrName(segptr_t segAddress, const std::string& expect if (expectedType != "" && expectedType != "void*") { - if (expectedType != decl->varType && "static " + expectedType != decl->varType) + if (expectedType != decl->declType && "static " + expectedType != decl->declType) { declName = StringHelper::Sprintf("0x%08X", segAddress); return false; @@ -653,9 +697,9 @@ bool ZFile::GetDeclarationPtrName(segptr_t segAddress, const std::string& expect } if (!decl->isArray) - declName = "&" + decl->varName; + declName = "&" + decl->declName; else - declName = decl->varName; + declName = decl->declName; return true; } @@ -679,7 +723,7 @@ bool ZFile::GetDeclarationArrayIndexedName(segptr_t segAddress, size_t elementSi if (expectedType != "" && expectedType != "void*") { - if (expectedType != decl->varType && "static " + expectedType != decl->varType) + if (expectedType != decl->declType && "static " + expectedType != decl->declType) { declName = StringHelper::Sprintf("0x%08X", segAddress); return false; @@ -688,7 +732,7 @@ bool ZFile::GetDeclarationArrayIndexedName(segptr_t segAddress, size_t elementSi if (decl->address == address) { - declName = decl->varName; + declName = decl->declName; return true; } @@ -699,7 +743,7 @@ bool ZFile::GetDeclarationArrayIndexedName(segptr_t segAddress, size_t elementSi } uint32_t index = (address - decl->address) / elementSize; - declName = StringHelper::Sprintf("&%s[%u]", decl->varName.c_str(), index); + declName = StringHelper::Sprintf("&%s[%u]", decl->declName.c_str(), index); return true; } @@ -728,6 +772,20 @@ bool ZFile::HasDeclaration(offset_t address) return declarations.find(address) != declarations.end(); } +size_t ZFile::GetDeclarationSizeFromNeighbor(uint32_t declarationAddress) +{ + auto currentDecl = declarations.find(declarationAddress); + if (currentDecl == declarations.end()) + return 0; + + auto nextDecl = currentDecl; + std::advance(nextDecl, 1); + if (nextDecl == declarations.end()) + return GetRawData().size() - currentDecl->first; + + return nextDecl->first - currentDecl->first; +} + void ZFile::GenerateSourceFiles() { std::string sourceOutput; @@ -817,8 +875,8 @@ void ZFile::GenerateSourceHeaderFiles() std::string ZFile::GetHeaderInclude() const { - std::string headers = StringHelper::Sprintf("#include \"%s.h\"\n", - (outName.parent_path() / outName.stem()).c_str()); + std::string headers = StringHelper::Sprintf( + "#include \"%s.h\"\n", (outName.parent_path() / outName.stem()).string().c_str()); return headers; } @@ -843,16 +901,12 @@ std::string ZFile::GetExternalFileHeaderInclude() const { fs::path outputFolderPath = externalFile->GetSourceOutputFolderPath(); if (outputFolderPath == this->GetSourceOutputFolderPath()) - { outputFolderPath = externalFile->outName.stem(); - } else - { outputFolderPath /= externalFile->outName.stem(); - } externalFilesIncludes += - StringHelper::Sprintf("#include \"%s.h\"\n", outputFolderPath.c_str()); + StringHelper::Sprintf("#include \"%s.h\"\n", outputFolderPath.string().c_str()); } } @@ -967,46 +1021,7 @@ std::string ZFile::ProcessDeclarations() // printf("RANGE START: 0x%06X - RANGE END: 0x%06X\n", rangeStart, rangeEnd); - // Optimization: See if there are any arrays side by side that can be merged... - std::vector> declarationKeys(declarations.begin(), - declarations.end()); - - std::pair lastItem = declarationKeys.at(0); - - for (size_t i = 1; i < declarationKeys.size(); i++) - { - std::pair curItem = declarationKeys[i]; - - if (curItem.second->isArray && lastItem.second->isArray) - { - if (curItem.second->varType == lastItem.second->varType) - { - if (!curItem.second->declaredInXml && !lastItem.second->declaredInXml) - { - // TEST: For now just do Vtx declarations... - if (lastItem.second->varType == "Vtx") - { - int32_t sizeDiff = curItem.first - (lastItem.first + lastItem.second->size); - - // Make sure there isn't an unaccounted inbetween these two - if (sizeDiff == 0) - { - lastItem.second->size += curItem.second->size; - lastItem.second->arrayItemCnt += curItem.second->arrayItemCnt; - lastItem.second->text += "\n" + curItem.second->text; - declarations.erase(curItem.first); - declarationKeys.erase(declarationKeys.begin() + i); - delete curItem.second; - i--; - continue; - } - } - } - } - } - - lastItem = curItem; - } + MergeNeighboringDeclarations(); for (std::pair item : declarations) ProcessDeclarationText(item.second); @@ -1041,20 +1056,20 @@ std::string ZFile::ProcessDeclarations() // HACK std::string extType; - if (item.second->varType == "Gfx") + if (item.second->declType == "Gfx") extType = "dlist"; - else if (item.second->varType == "Vtx") + else if (item.second->declType == "Vtx") extType = "vtx"; - auto filepath = outputPath / item.second->varName; + auto filepath = outputPath / item.second->declName; File::WriteAllText( - StringHelper::Sprintf("%s.%s.inc", filepath.c_str(), extType.c_str()), - item.second->text); + StringHelper::Sprintf("%s.%s.inc", filepath.string().c_str(), extType.c_str()), + item.second->declBody); } output += item.second->GetExternalDeclarationStr(); } - else if (item.second->varType != "") + else if (item.second->declType != "") { output += item.second->GetNormalDeclarationStr(); } @@ -1063,6 +1078,50 @@ std::string ZFile::ProcessDeclarations() return output; } +void ZFile::MergeNeighboringDeclarations() +{ + // Optimization: See if there are any arrays side by side that can be merged... + std::vector> declarationKeys(declarations.begin(), + declarations.end()); + + std::pair lastItem = declarationKeys.at(0); + + for (size_t i = 1; i < declarationKeys.size(); i++) + { + std::pair curItem = declarationKeys[i]; + + if (curItem.second->isArray && lastItem.second->isArray) + { + if (curItem.second->declType == lastItem.second->declType) + { + if (!curItem.second->declaredInXml && !lastItem.second->declaredInXml) + { + // TEST: For now just do Vtx declarations... + if (lastItem.second->declType == "Vtx") + { + int32_t sizeDiff = curItem.first - (lastItem.first + lastItem.second->size); + + // Make sure there isn't an unaccounted inbetween these two + if (sizeDiff == 0) + { + lastItem.second->size += curItem.second->size; + lastItem.second->arrayItemCnt += curItem.second->arrayItemCnt; + lastItem.second->declBody += "\n" + curItem.second->declBody; + declarations.erase(curItem.first); + declarationKeys.erase(declarationKeys.begin() + i); + delete curItem.second; + i--; + continue; + } + } + } + } + } + + lastItem = curItem; + } +} + void ZFile::ProcessDeclarationText(Declaration* decl) { size_t refIndex = 0; @@ -1070,17 +1129,17 @@ void ZFile::ProcessDeclarationText(Declaration* decl) if (!(decl->references.size() > 0)) return; - for (size_t i = 0; i < decl->text.size() - 1; i++) + for (size_t i = 0; i < decl->declBody.size() - 1; i++) { - char c = decl->text[i]; - char c2 = decl->text[i + 1]; + char c = decl->declBody[i]; + char c2 = decl->declBody[i + 1]; if (c == '@' && c2 == 'r') { std::string vtxName; Globals::Instance->GetSegmentedArrayIndexedName(decl->references[refIndex], 0x10, this, "Vtx", vtxName); - decl->text.replace(i, 2, vtxName); + decl->declBody.replace(i, 2, vtxName); refIndex++; @@ -1092,7 +1151,8 @@ void ZFile::ProcessDeclarationText(Declaration* decl) std::string ZFile::ProcessExterns() { - std::string output; + std::string output = ""; + bool hadDefines = true; // Previous declaration included defines. for (const auto& item : declarations) { @@ -1101,10 +1161,21 @@ std::string ZFile::ProcessExterns() continue; } + std::string itemDefines = item.second->GetDefinesStr(); + // Add a newline above if previous has no defines and this one does. + if (!hadDefines && (itemDefines.length() > 0)) + { + output.push_back('\n'); + } output += item.second->GetExternStr(); - } + output += itemDefines; - output += "\n"; + // Newline below if this one has defines. + if ((hadDefines = (itemDefines.length() > 0))) + { + output.push_back('\n'); + } + } output += defines; @@ -1153,7 +1224,7 @@ std::string ZFile::ProcessTextureIntersections([[maybe_unused]] const std::strin if (nextDecl == nullptr) texNextName = texturesResources.at(nextOffset)->GetName(); else - texNextName = nextDecl->varName; + texNextName = nextDecl->declName; defines += StringHelper::Sprintf("#define %s ((u32)%s + 0x%06X)\n", texNextName.c_str(), texName.c_str(), offsetDiff); @@ -1226,8 +1297,8 @@ bool ZFile::HandleUnaccountedAddress(offset_t currentAddress, offset_t lastAddr, std::string intersectionInfo = StringHelper::Sprintf( "Resource from 0x%06X:0x%06X (%s) conflicts with 0x%06X (%s).", lastAddr, - lastAddr + lastSize, lastDecl->varName.c_str(), currentAddress, - currentDecl->varName.c_str()); + lastAddr + lastSize, lastDecl->declName.c_str(), currentAddress, + currentDecl->declName.c_str()); HANDLE_WARNING_RESOURCE(WarningType::Intersection, this, nullptr, currentAddress, "intersection detected", intersectionInfo); } diff --git a/tools/ZAPD/ZAPD/ZFile.h b/tools/ZAPD/ZAPD/ZFile.h index e4980eb68..65b1cc4aa 100644 --- a/tools/ZAPD/ZAPD/ZFile.h +++ b/tools/ZAPD/ZAPD/ZFile.h @@ -38,6 +38,8 @@ public: uint32_t segment = 0x80; uint32_t baseAddress, rangeStart, rangeEnd; bool isExternalFile = false; + // Whether to make defines for texture dimensions, and possibly more in future + bool makeDefines = false; ZFile(const fs::path& nOutPath, const std::string& nName); ZFile(ZFileMode nMode, tinyxml2::XMLElement* reader, const fs::path& nBasePath, @@ -74,6 +76,9 @@ public: Declaration* AddDeclarationIncludeArray(offset_t address, std::string& includePath, size_t size, const std::string& varType, const std::string& varName, size_t arrayItemCnt); + Declaration* AddDeclarationIncludeArray(offset_t address, std::string& includePath, size_t size, + const std::string& varType, const std::string& varName, + const std::string& defines, size_t arrayItemCnt); bool GetDeclarationPtrName(segptr_t segAddress, const std::string& expectedType, std::string& declName) const; @@ -84,6 +89,7 @@ public: Declaration* GetDeclaration(offset_t address) const; Declaration* GetDeclarationRanged(offset_t address) const; bool HasDeclaration(offset_t address); + size_t GetDeclarationSizeFromNeighbor(uint32_t declarationAddress); std::string GetHeaderInclude() const; std::string GetZRoomHeaderInclude() const; @@ -126,8 +132,9 @@ protected: void DeclareResourceSubReferences(); void GenerateSourceFiles(); void GenerateSourceHeaderFiles(); - bool AddDeclarationChecks(uint32_t address, const std::string& varName); + bool DeclarationSanityChecks(uint32_t address, const std::string& varName); std::string ProcessDeclarations(); + void MergeNeighboringDeclarations(); void ProcessDeclarationText(Declaration* decl); std::string ProcessExterns(); diff --git a/tools/ZAPD/ZAPD/ZLimb.cpp b/tools/ZAPD/ZAPD/ZLimb.cpp index 034d0850b..fd824d010 100644 --- a/tools/ZAPD/ZAPD/ZLimb.cpp +++ b/tools/ZAPD/ZAPD/ZLimb.cpp @@ -394,7 +394,7 @@ void ZLimb::DeclareDList(segptr_t dListSegmentedPtr, const std::string& prefix, std::string dlistName; bool declFound = Globals::Instance->GetSegmentedArrayIndexedName(dListSegmentedPtr, 8, parent, - "Gfx", dlistName); + "Gfx", dlistName, false); if (declFound) return; diff --git a/tools/ZAPD/ZAPD/ZPath.cpp b/tools/ZAPD/ZAPD/ZPath.cpp index 0dac87a1b..cb8295679 100644 --- a/tools/ZAPD/ZAPD/ZPath.cpp +++ b/tools/ZAPD/ZAPD/ZPath.cpp @@ -6,7 +6,8 @@ #include "WarningHandler.h" #include "ZFile.h" -REGISTER_ZFILENODE(Path, ZPath); +REGISTER_ZFILENODE(Path, ZPath); // Old name that is being kept for backwards compatability +REGISTER_ZFILENODE(PathList, ZPath); // New name that may be used in future XMLs ZPath::ZPath(ZFile* nParent) : ZResource(nParent) { @@ -144,8 +145,8 @@ void PathwayEntry::DeclareReferences(const std::string& prefix) return; std::string pointsName; - bool addressFound = - Globals::Instance->GetSegmentedPtrName(listSegmentAddress, parent, "Vec3s", pointsName); + bool addressFound = Globals::Instance->GetSegmentedPtrName(listSegmentAddress, parent, "Vec3s", + pointsName, false); if (addressFound) return; @@ -172,7 +173,7 @@ void PathwayEntry::DeclareReferences(const std::string& prefix) points.size(), declaration); } else - decl->text = declaration; + decl->declBody = declaration; } std::string PathwayEntry::GetBodySourceCode() const @@ -185,7 +186,13 @@ std::string PathwayEntry::GetBodySourceCode() const declaration += StringHelper::Sprintf("%i, %i, %i, %s", numPoints, unk1, unk2, listName.c_str()); else - declaration += StringHelper::Sprintf("%i, %s", numPoints, listName.c_str()); + { + if (numPoints > 0) + declaration += + StringHelper::Sprintf("ARRAY_COUNT(%s), %s", listName.c_str(), listName.c_str()); + else + declaration += StringHelper::Sprintf("%i, %s", numPoints, listName.c_str()); + } return declaration; } diff --git a/tools/ZAPD/ZAPD/ZPlayerAnimationData.cpp b/tools/ZAPD/ZAPD/ZPlayerAnimationData.cpp index a96604fda..ce5425d7e 100644 --- a/tools/ZAPD/ZAPD/ZPlayerAnimationData.cpp +++ b/tools/ZAPD/ZAPD/ZPlayerAnimationData.cpp @@ -32,7 +32,7 @@ void ZPlayerAnimationData::ParseRawData() for (size_t i = 0; i < totalSize; i += 2) { - limbRotData.push_back(BitConverter::ToUInt16BE(rawData, rawDataIndex + i)); + limbRotData.push_back(BitConverter::ToInt16BE(rawData, rawDataIndex + i)); } } @@ -55,14 +55,21 @@ std::string ZPlayerAnimationData::GetBodySourceCode() const std::string declaration = ""; size_t index = 0; - for (const auto& entry : limbRotData) + for (const auto entry : limbRotData) { if (index % 8 == 0) { declaration += "\t"; } - declaration += StringHelper::Sprintf("0x%04X, ", entry); + if (entry < 0) + { + declaration += StringHelper::Sprintf("-0x%04X, ", -entry); + } + else + { + declaration += StringHelper::Sprintf("0x%04X, ", entry); + } if ((index + 1) % 8 == 0) { diff --git a/tools/ZAPD/ZAPD/ZPlayerAnimationData.h b/tools/ZAPD/ZAPD/ZPlayerAnimationData.h index 20835f236..2923117ef 100644 --- a/tools/ZAPD/ZAPD/ZPlayerAnimationData.h +++ b/tools/ZAPD/ZAPD/ZPlayerAnimationData.h @@ -9,7 +9,7 @@ class ZPlayerAnimationData : public ZResource { public: int16_t frameCount = 0; - std::vector limbRotData; + std::vector limbRotData; ZPlayerAnimationData(ZFile* nParent); diff --git a/tools/ZAPD/ZAPD/ZResource.cpp b/tools/ZAPD/ZAPD/ZResource.cpp index 8825cc97b..d991c4653 100644 --- a/tools/ZAPD/ZAPD/ZResource.cpp +++ b/tools/ZAPD/ZAPD/ZResource.cpp @@ -24,7 +24,7 @@ ZResource::ZResource(ZFile* nParent) RegisterOptionalAttribute("Static", "Global"); } -void ZResource::ExtractFromXML(tinyxml2::XMLElement* reader, offset_t nRawDataIndex) +void ZResource::ExtractWithXML(tinyxml2::XMLElement* reader, offset_t nRawDataIndex) { rawDataIndex = nRawDataIndex; declaredInXml = true; @@ -274,7 +274,7 @@ void ZResource::GetSourceOutputCode([[maybe_unused]] const std::string& prefix) if (decl == nullptr || decl->isPlaceholder) decl = DeclareVar(prefix, bodyStr); else - decl->text = bodyStr; + decl->declBody = bodyStr; decl->staticConf = staticConf; } diff --git a/tools/ZAPD/ZAPD/ZResource.h b/tools/ZAPD/ZAPD/ZResource.h index f97b259c6..975401398 100644 --- a/tools/ZAPD/ZAPD/ZResource.h +++ b/tools/ZAPD/ZAPD/ZResource.h @@ -54,6 +54,7 @@ enum class ZResourceType TextureAnimationParams, Vector, Vertex, + Waterbox, }; class ResourceAttribute @@ -79,8 +80,18 @@ public: ZResource(ZFile* nParent); virtual ~ZResource() = default; - // Parsing from File - virtual void ExtractFromXML(tinyxml2::XMLElement* reader, offset_t nRawDataIndex); + /// + /// Extracts/Parsees data from binary file using an XML to provide the needed metadata. + /// + /// XML Node we wish to parse from. + /// The offset within the binary file we are going to parse from as + /// indicated by the "Offset" parameter in the XML. + virtual void ExtractWithXML(tinyxml2::XMLElement* reader, offset_t nRawDataIndex); + + /// + /// Extracts/Parses the needed data straight from a binary without the use of an XML. + /// + /// The offset within the binary file we wish to parse from. virtual void ExtractFromFile(offset_t nRawDataIndex); // Misc diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp index 1687b5462..e64b85537 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp @@ -21,7 +21,7 @@ void SetAlternateHeaders::DeclareReferences([[maybe_unused]] const std::string& void SetAlternateHeaders::ParseRawDataLate() { - size_t numHeaders = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 4; + size_t numHeaders = zRoom->parent->GetDeclarationSizeFromNeighbor(segmentOffset) / 4; headers.reserve(numHeaders); for (uint32_t i = 0; i < numHeaders; i++) diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp index c92f56c4e..79c87babf 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp @@ -24,7 +24,7 @@ void SetEntranceList::DeclareReferences([[maybe_unused]] const std::string& pref void SetEntranceList::ParseRawDataLate() { // Parse Entrances and Generate Declaration - uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; + uint32_t numEntrances = zRoom->parent->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; uint32_t currentPtr = segmentOffset; entrances.reserve(numEntrances); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp index 80ccc6b05..78bbaa87e 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp @@ -24,7 +24,7 @@ void SetExitList::DeclareReferences([[maybe_unused]] const std::string& prefix) void SetExitList::ParseRawDataLate() { // Parse Entrances and Generate Declaration - uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; + uint32_t numEntrances = zRoom->parent->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; uint32_t currentPtr = segmentOffset; exits.reserve(numEntrances); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp index 89c8c8c88..40e0bddf2 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp @@ -151,7 +151,7 @@ void PolygonDlist::GetSourceOutputCode(const std::string& prefix) if (decl == nullptr) DeclareVar(prefix, bodyStr); else - decl->text = bodyStr; + decl->declBody = bodyStr; } std::string PolygonDlist::GetSourceTypeName() const @@ -371,7 +371,7 @@ void PolygonTypeBase::DeclareAndGenerateOutputCode(const std::string& prefix) } else { - decl->text = bodyStr; + decl->declBody = bodyStr; } } diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetPathways.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetPathways.cpp index 52d400a84..967d10b8d 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetPathways.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetPathways.cpp @@ -24,7 +24,7 @@ void SetPathways::ParseRawDataLate() { if (Globals::Instance->game == ZGame::MM_RETAIL) { - auto numPaths = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 8; + auto numPaths = zRoom->parent->GetDeclarationSizeFromNeighbor(segmentOffset) / 8; pathwayList.SetNumPaths(numPaths); } diff --git a/tools/ZAPD/ZAPD/ZRoom/ZNames.h b/tools/ZAPD/ZAPD/ZRoom/ZNames.h index 667407c36..83c217e99 100644 --- a/tools/ZAPD/ZAPD/ZRoom/ZNames.h +++ b/tools/ZAPD/ZAPD/ZRoom/ZNames.h @@ -48,11 +48,12 @@ public: static std::string GetEntranceName(uint16_t id) { if (ZNames::GetNumEntrances() == 0 || ZNames::GetNumSpecialEntrances() == 0) - return StringHelper::Sprintf("0x%04X", id); - + return StringHelper::Sprintf("0x%04X", id); + if (id < ZNames::GetNumEntrances()) return Globals::Instance->cfg.entranceList[id]; - else if ((id >= 0x7FF9 && id <= 0x7FFF) && !((id - 0x7FF9U) > GetNumSpecialEntrances())) // Special entrances + else if ((id >= 0x7FF9 && id <= 0x7FFF) && + !((id - 0x7FF9U) > GetNumSpecialEntrances())) // Special entrances return Globals::Instance->cfg.specialEntranceList[id - 0x7FF9]; else return StringHelper::Sprintf("0x%04X", id); @@ -60,5 +61,8 @@ public: static size_t GetNumActors() { return Globals::Instance->cfg.actorList.size(); } static size_t GetNumEntrances() { return Globals::Instance->cfg.entranceList.size(); } - static size_t GetNumSpecialEntrances() { return Globals::Instance->cfg.specialEntranceList.size(); } + static size_t GetNumSpecialEntrances() + { + return Globals::Instance->cfg.specialEntranceList.size(); + } }; diff --git a/tools/ZAPD/ZAPD/ZRoom/ZRoom.cpp b/tools/ZAPD/ZAPD/ZRoom/ZRoom.cpp index 5831eaa56..a28ea7b90 100644 --- a/tools/ZAPD/ZAPD/ZRoom/ZRoom.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/ZRoom.cpp @@ -64,18 +64,14 @@ ZRoom::~ZRoom() delete cmd; } -void ZRoom::ExtractFromXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) +void ZRoom::ExtractWithXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) { - ZResource::ExtractFromXML(reader, nRawDataIndex); + ZResource::ExtractWithXML(reader, nRawDataIndex); if (hackMode == "syotes_room") - { - SyotesRoomHack(); - } + SyotesRoomFix(); else - { DeclareVar(name, ""); - } } void ZRoom::ExtractFromBinary(uint32_t nRawDataIndex, ZResourceType parentType) @@ -338,7 +334,7 @@ std::string ZRoom::GetDefaultName(const std::string& prefix) const * back to very early in the game's development. Since this room is a special case, * declare automatically the data its contains whitout the need of a header. */ -void ZRoom::SyotesRoomHack() +void ZRoom::SyotesRoomFix() { PolygonType2 poly(parent, 0, this); @@ -360,20 +356,6 @@ ZRoomCommand* ZRoom::FindCommandOfType(RoomCommand cmdType) return nullptr; } -size_t ZRoom::GetDeclarationSizeFromNeighbor(uint32_t declarationAddress) -{ - auto currentDecl = parent->declarations.find(declarationAddress); - if (currentDecl == parent->declarations.end()) - return 0; - - auto nextDecl = currentDecl; - std::advance(nextDecl, 1); - if (nextDecl == parent->declarations.end()) - return parent->GetRawData().size() - currentDecl->first; - - return nextDecl->first - currentDecl->first; -} - size_t ZRoom::GetCommandSizeFromNeighbor(ZRoomCommand* cmd) { int32_t cmdIndex = -1; diff --git a/tools/ZAPD/ZAPD/ZRoom/ZRoom.h b/tools/ZAPD/ZAPD/ZRoom/ZRoom.h index e837ec70a..950dbbb18 100644 --- a/tools/ZAPD/ZAPD/ZRoom/ZRoom.h +++ b/tools/ZAPD/ZAPD/ZRoom/ZRoom.h @@ -22,7 +22,7 @@ public: ZRoom(ZFile* nParent); virtual ~ZRoom(); - void ExtractFromXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) override; + void ExtractWithXML(tinyxml2::XMLElement* reader, uint32_t nRawDataIndex) override; void ExtractFromBinary(uint32_t nRawDataIndex, ZResourceType parentType); void ParseXML(tinyxml2::XMLElement* reader) override; @@ -37,7 +37,6 @@ public: void GetSourceOutputCode(const std::string& prefix) override; std::string GetDefaultName(const std::string& prefix) const override; - size_t GetDeclarationSizeFromNeighbor(uint32_t declarationAddress); size_t GetCommandSizeFromNeighbor(ZRoomCommand* cmd); ZRoomCommand* FindCommandOfType(RoomCommand cmdType); @@ -46,5 +45,5 @@ public: ZResourceType GetResourceType() const override; protected: - void SyotesRoomHack(); + void SyotesRoomFix(); }; diff --git a/tools/ZAPD/ZAPD/ZTexture.cpp b/tools/ZAPD/ZAPD/ZTexture.cpp index 74b7c7d10..0ecda1a8c 100644 --- a/tools/ZAPD/ZAPD/ZTexture.cpp +++ b/tools/ZAPD/ZAPD/ZTexture.cpp @@ -137,31 +137,31 @@ void ZTexture::ParseRawData() switch (format) { case TextureType::RGBA16bpp: - PrepareBitmapRGBA16(); + ConvertN64ToBitmap_RGBA16(); break; case TextureType::RGBA32bpp: - PrepareBitmapRGBA32(); + ConvertN64ToBitmap_RGBA32(); break; case TextureType::Grayscale4bpp: - PrepareBitmapGrayscale4(); + ConvertN64ToBitmap_Grayscale4(); break; case TextureType::Grayscale8bpp: - PrepareBitmapGrayscale8(); + ConvertN64ToBitmap_Grayscale8(); break; case TextureType::GrayscaleAlpha4bpp: - PrepareBitmapGrayscaleAlpha4(); + ConvertN64ToBitmap_GrayscaleAlpha4(); break; case TextureType::GrayscaleAlpha8bpp: - PrepareBitmapGrayscaleAlpha8(); + ConvertN64ToBitmap_GrayscaleAlpha8(); break; case TextureType::GrayscaleAlpha16bpp: - PrepareBitmapGrayscaleAlpha16(); + ConvertN64ToBitmap_GrayscaleAlpha16(); break; case TextureType::Palette4bpp: - PrepareBitmapPalette4(); + ConvertN64ToBitmap_Palette4(); break; case TextureType::Palette8bpp: - PrepareBitmapPalette8(); + ConvertN64ToBitmap_Palette8(); break; case TextureType::Error: HANDLE_ERROR_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex, @@ -212,10 +212,10 @@ void ZTexture::ParseRawDataLate() } } -void ZTexture::PrepareBitmapRGBA16() +void ZTexture::ConvertN64ToBitmap_RGBA16() { textureData.InitEmptyRGBImage(width, height, true); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) @@ -227,15 +227,16 @@ void ZTexture::PrepareBitmapRGBA16() uint8_t b = (data & 0x003E) >> 1; uint8_t alpha = data & 0x01; - textureData.SetRGBPixel(y, x, r * 8, g * 8, b * 8, alpha * 255); + textureData.SetRGBPixel(y, x, (r << 3) | (r >> 2), (g << 3) | (g >> 2), + (b << 3) | (b >> 2), alpha * 255); } } } -void ZTexture::PrepareBitmapRGBA32() +void ZTexture::ConvertN64ToBitmap_RGBA32() { textureData.InitEmptyRGBImage(width, height, true); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) @@ -251,10 +252,10 @@ void ZTexture::PrepareBitmapRGBA32() } } -void ZTexture::PrepareBitmapGrayscale4() +void ZTexture::ConvertN64ToBitmap_Grayscale4() { textureData.InitEmptyRGBImage(width, height, false); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x += 2) @@ -269,16 +270,16 @@ void ZTexture::PrepareBitmapGrayscale4() else grayscale = (parentRawData.at(pos) & 0x0F) << 4; - textureData.SetGrayscalePixel(y, x + i, grayscale); + textureData.SetGrayscalePixel(y, x + i, (grayscale << 4) | grayscale); } } } } -void ZTexture::PrepareBitmapGrayscale8() +void ZTexture::ConvertN64ToBitmap_Grayscale8() { textureData.InitEmptyRGBImage(width, height, false); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) @@ -290,10 +291,10 @@ void ZTexture::PrepareBitmapGrayscale8() } } -void ZTexture::PrepareBitmapGrayscaleAlpha4() +void ZTexture::ConvertN64ToBitmap_GrayscaleAlpha4() { textureData.InitEmptyRGBImage(width, height, true); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x += 2) @@ -308,8 +309,9 @@ void ZTexture::PrepareBitmapGrayscaleAlpha4() else data = parentRawData.at(pos) & 0x0F; - uint8_t grayscale = ((data & 0x0E) >> 1) * 32; - uint8_t alpha = (data & 0x01) * 255; + uint8_t grayscale = data & 0b1110; + grayscale = (grayscale << 4) | (grayscale << 1) | (grayscale >> 2); + uint8_t alpha = (data & 0x01) ? 255 : 0; textureData.SetGrayscalePixel(y, x + i, grayscale, alpha); } @@ -317,27 +319,32 @@ void ZTexture::PrepareBitmapGrayscaleAlpha4() } } -void ZTexture::PrepareBitmapGrayscaleAlpha8() +void ZTexture::ConvertN64ToBitmap_GrayscaleAlpha8() { textureData.InitEmptyRGBImage(width, height, true); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { size_t pos = rawDataIndex + ((y * width) + x) * 1; - uint8_t grayscale = parentRawData.at(pos) & 0xF0; - uint8_t alpha = (parentRawData.at(pos) & 0x0F) << 4; + uint8_t pixel = parentRawData.at(pos); + uint8_t data = (pixel >> 4) & 0xF; + + data = (data << 4) | data; + uint8_t grayscale = data; + uint8_t alpha = (pixel & 0xF); + alpha = (alpha << 4) | alpha; textureData.SetGrayscalePixel(y, x, grayscale, alpha); } } } -void ZTexture::PrepareBitmapGrayscaleAlpha16() +void ZTexture::ConvertN64ToBitmap_GrayscaleAlpha16() { textureData.InitEmptyRGBImage(width, height, true); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) @@ -351,10 +358,10 @@ void ZTexture::PrepareBitmapGrayscaleAlpha16() } } -void ZTexture::PrepareBitmapPalette4() +void ZTexture::ConvertN64ToBitmap_Palette4() { textureData.InitEmptyPaletteImage(width, height); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x += 2) @@ -375,10 +382,10 @@ void ZTexture::PrepareBitmapPalette4() } } -void ZTexture::PrepareBitmapPalette8() +void ZTexture::ConvertN64ToBitmap_Palette8() { textureData.InitEmptyPaletteImage(width, height); - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) @@ -428,31 +435,31 @@ void ZTexture::PrepareRawDataFromFile(const fs::path& pngFilePath) switch (format) { case TextureType::RGBA16bpp: - PrepareRawDataRGBA16(); + ConvertBitmapToN64_RGBA16(); break; case TextureType::RGBA32bpp: - PrepareRawDataRGBA32(); + ConvertBitmapToN64_RGBA32(); break; case TextureType::Grayscale4bpp: - PrepareRawDataGrayscale4(); + ConvertBitmapToN64_Grayscale4(); break; case TextureType::Grayscale8bpp: - PrepareRawDataGrayscale8(); + ConvertBitmapToN64_Grayscale8(); break; case TextureType::GrayscaleAlpha4bpp: - PrepareRawDataGrayscaleAlpha4(); + ConvertBitmapToN64_GrayscaleAlpha4(); break; case TextureType::GrayscaleAlpha8bpp: - PrepareRawDataGrayscaleAlpha8(); + ConvertBitmapToN64_GrayscaleAlpha8(); break; case TextureType::GrayscaleAlpha16bpp: - PrepareRawDataGrayscaleAlpha16(); + ConvertBitmapToN64_GrayscaleAlpha16(); break; case TextureType::Palette4bpp: - PrepareRawDataPalette4(); + ConvertBitmapToN64_Palette4(); break; case TextureType::Palette8bpp: - PrepareRawDataPalette8(); + ConvertBitmapToN64_Palette8(); break; case TextureType::Error: HANDLE_ERROR_PROCESS(WarningType::InvalidPNG, "Input PNG file has invalid format type", ""); @@ -460,7 +467,7 @@ void ZTexture::PrepareRawDataFromFile(const fs::path& pngFilePath) } } -void ZTexture::PrepareRawDataRGBA16() +void ZTexture::ConvertBitmapToN64_RGBA16() { for (uint16_t y = 0; y < height; y++) { @@ -469,13 +476,13 @@ void ZTexture::PrepareRawDataRGBA16() size_t pos = ((y * width) + x) * 2; RGBAPixel pixel = textureData.GetPixel(y, x); - uint8_t r = pixel.r / 8; - uint8_t g = pixel.g / 8; - uint8_t b = pixel.b / 8; + uint8_t r = pixel.r >> 3; + uint8_t g = pixel.g >> 3; + uint8_t b = pixel.b >> 3; uint8_t alphaBit = pixel.a != 0; - uint16_t data = (r << 11) + (g << 6) + (b << 1) + alphaBit; + uint16_t data = (r << 11) | (g << 6) | (b << 1) | alphaBit; textureDataRaw[pos + 0] = (data & 0xFF00) >> 8; textureDataRaw[pos + 1] = (data & 0x00FF); @@ -483,7 +490,7 @@ void ZTexture::PrepareRawDataRGBA16() } } -void ZTexture::PrepareRawDataRGBA32() +void ZTexture::ConvertBitmapToN64_RGBA32() { for (uint16_t y = 0; y < height; y++) { @@ -500,7 +507,7 @@ void ZTexture::PrepareRawDataRGBA32() } } -void ZTexture::PrepareRawDataGrayscale4() +void ZTexture::ConvertBitmapToN64_Grayscale4() { for (uint16_t y = 0; y < height; y++) { @@ -515,7 +522,7 @@ void ZTexture::PrepareRawDataGrayscale4() } } -void ZTexture::PrepareRawDataGrayscale8() +void ZTexture::ConvertBitmapToN64_Grayscale8() { for (uint16_t y = 0; y < height; y++) { @@ -528,7 +535,7 @@ void ZTexture::PrepareRawDataGrayscale8() } } -void ZTexture::PrepareRawDataGrayscaleAlpha4() +void ZTexture::ConvertBitmapToN64_GrayscaleAlpha4() { for (uint16_t y = 0; y < height; y++) { @@ -544,9 +551,9 @@ void ZTexture::PrepareRawDataGrayscaleAlpha4() uint8_t alphaBit = pixel.a != 0; if (i == 0) - data |= (((cR / 32) << 1) + alphaBit) << 4; + data = (((cR >> 5) << 1) | alphaBit) << 4; else - data |= ((cR / 32) << 1) + alphaBit; + data |= ((cR >> 5) << 1) | alphaBit; } textureDataRaw[pos] = data; @@ -554,7 +561,7 @@ void ZTexture::PrepareRawDataGrayscaleAlpha4() } } -void ZTexture::PrepareRawDataGrayscaleAlpha8() +void ZTexture::ConvertBitmapToN64_GrayscaleAlpha8() { for (uint16_t y = 0; y < height; y++) { @@ -563,15 +570,15 @@ void ZTexture::PrepareRawDataGrayscaleAlpha8() size_t pos = ((y * width) + x) * 1; RGBAPixel pixel = textureData.GetPixel(y, x); - uint8_t r = pixel.r; - uint8_t a = pixel.a; + uint8_t r = (pixel.r >> 4) & 0xF; + uint8_t a = (pixel.a >> 4) & 0xF; - textureDataRaw[pos] = ((r / 16) << 4) + (a / 16); + textureDataRaw[pos] = (r << 4) | a; } } } -void ZTexture::PrepareRawDataGrayscaleAlpha16() +void ZTexture::ConvertBitmapToN64_GrayscaleAlpha16() { for (uint16_t y = 0; y < height; y++) { @@ -589,7 +596,7 @@ void ZTexture::PrepareRawDataGrayscaleAlpha16() } } -void ZTexture::PrepareRawDataPalette4() +void ZTexture::ConvertBitmapToN64_Palette4() { for (uint16_t y = 0; y < height; y++) { @@ -605,7 +612,7 @@ void ZTexture::PrepareRawDataPalette4() } } -void ZTexture::PrepareRawDataPalette8() +void ZTexture::ConvertBitmapToN64_Palette8() { for (uint16_t y = 0; y < height; y++) { @@ -770,10 +777,10 @@ Declaration* ZTexture::DeclareVar(const std::string& prefix, auto filepath = Globals::Instance->outputPath / fs::path(auxOutName).stem(); if (dWordAligned) - incStr = - StringHelper::Sprintf("%s.%s.inc.c", filepath.c_str(), GetExternalExtension().c_str()); + incStr = StringHelper::Sprintf("%s.%s.inc.c", filepath.string().c_str(), + GetExternalExtension().c_str()); else - incStr = StringHelper::Sprintf("%s.u32.%s.inc.c", filepath.c_str(), + incStr = StringHelper::Sprintf("%s.u32.%s.inc.c", filepath.string().c_str(), GetExternalExtension().c_str()); if (!Globals::Instance->cfg.texturePool.empty()) @@ -785,18 +792,31 @@ Declaration* ZTexture::DeclareVar(const std::string& prefix, if (poolEntry != Globals::Instance->cfg.texturePool.end()) { if (dWordAligned) - incStr = StringHelper::Sprintf("%s.%s.inc.c", poolEntry->second.path.c_str(), - GetExternalExtension().c_str()); + incStr = + StringHelper::Sprintf("%s.%s.inc.c", poolEntry->second.path.string().c_str(), + GetExternalExtension().c_str()); else - incStr = StringHelper::Sprintf("%s.u32.%s.inc.c", poolEntry->second.path.c_str(), + incStr = StringHelper::Sprintf("%s.u32.%s.inc.c", + poolEntry->second.path.string().c_str(), GetExternalExtension().c_str()); } } size_t texSizeDivisor = (dWordAligned) ? 8 : 4; - Declaration* decl = parent->AddDeclarationIncludeArray(rawDataIndex, incStr, GetRawDataSize(), - GetSourceTypeName(), auxName, - GetRawDataSize() / texSizeDivisor); + Declaration* decl; + + if (parent->makeDefines) + { + decl = parent->AddDeclarationIncludeArray(rawDataIndex, incStr, GetRawDataSize(), + GetSourceTypeName(), auxName, GetHeaderDefines(), + GetRawDataSize() / texSizeDivisor); + } + else + { + decl = parent->AddDeclarationIncludeArray(rawDataIndex, incStr, GetRawDataSize(), + GetSourceTypeName(), auxName, + GetRawDataSize() / texSizeDivisor); + } decl->staticConf = staticConf; return decl; } @@ -827,6 +847,17 @@ std::string ZTexture::GetBodySourceCode() const return sourceOutput; } +std::string ZTexture::GetHeaderDefines() const +{ + std::string definePrefix = StringHelper::camelCaseTo_SCREAMING_SNAKE_CASE(name.c_str(), true); + std::string ret = StringHelper::Sprintf("#define %s_WIDTH %d\n", definePrefix.c_str(), width); + + ret += StringHelper::Sprintf("#define %s_HEIGHT %d\n", definePrefix.c_str(), height); + ret += StringHelper::Sprintf("#define %s_SIZE 0x%zX\n", definePrefix.c_str(), GetRawDataSize()); + + return ret; +} + bool ZTexture::IsExternalResource() const { return true; @@ -844,7 +875,7 @@ std::string ZTexture::GetSourceTypeName() const void ZTexture::CalcHash() { - auto parentRawData = parent->GetRawData(); + const auto& parentRawData = parent->GetRawData(); hash = CRC32B(parentRawData.data() + rawDataIndex, GetRawDataSize()); } diff --git a/tools/ZAPD/ZAPD/ZTexture.h b/tools/ZAPD/ZAPD/ZTexture.h index 8cece3ff2..1461ff95a 100644 --- a/tools/ZAPD/ZAPD/ZTexture.h +++ b/tools/ZAPD/ZAPD/ZTexture.h @@ -30,26 +30,28 @@ protected: ZTexture* tlut = nullptr; bool splitTlut; - void PrepareBitmapRGBA16(); - void PrepareBitmapRGBA32(); - void PrepareBitmapGrayscale8(); - void PrepareBitmapGrayscaleAlpha8(); - void PrepareBitmapGrayscale4(); - void PrepareBitmapGrayscaleAlpha4(); - void PrepareBitmapGrayscaleAlpha16(); - void PrepareBitmapPalette4(); - void PrepareBitmapPalette8(); + // The following functions convert from N64 binary data to a bitmap to be saved to a PNG. + void ConvertN64ToBitmap_RGBA16(); + void ConvertN64ToBitmap_RGBA32(); + void ConvertN64ToBitmap_Grayscale8(); + void ConvertN64ToBitmap_GrayscaleAlpha8(); + void ConvertN64ToBitmap_Grayscale4(); + void ConvertN64ToBitmap_GrayscaleAlpha4(); + void ConvertN64ToBitmap_GrayscaleAlpha16(); + void ConvertN64ToBitmap_Palette4(); + void ConvertN64ToBitmap_Palette8(); + // The following functions convert from a bitmap to N64 binary data. void PrepareRawDataFromFile(const fs::path& inFolder); - void PrepareRawDataRGBA16(); - void PrepareRawDataRGBA32(); - void PrepareRawDataGrayscale4(); - void PrepareRawDataGrayscale8(); - void PrepareRawDataGrayscaleAlpha4(); - void PrepareRawDataGrayscaleAlpha8(); - void PrepareRawDataGrayscaleAlpha16(); - void PrepareRawDataPalette4(); - void PrepareRawDataPalette8(); + void ConvertBitmapToN64_RGBA16(); + void ConvertBitmapToN64_RGBA32(); + void ConvertBitmapToN64_Grayscale4(); + void ConvertBitmapToN64_Grayscale8(); + void ConvertBitmapToN64_GrayscaleAlpha4(); + void ConvertBitmapToN64_GrayscaleAlpha8(); + void ConvertBitmapToN64_GrayscaleAlpha16(); + void ConvertBitmapToN64_Palette4(); + void ConvertBitmapToN64_Palette8(); public: ZTexture(ZFile* nParent); @@ -68,9 +70,15 @@ public: Declaration* DeclareVar(const std::string& prefix, const std::string& bodyStr) override; std::string GetBodySourceCode() const override; + + /// + /// Calculates the hash of this texture, for use with the texture pool. + /// void CalcHash() override; + void Save(const fs::path& outFolder) override; + std::string GetHeaderDefines() const; bool IsExternalResource() const override; std::string GetSourceTypeName() const override; ZResourceType GetResourceType() const override; @@ -83,10 +91,28 @@ public: uint32_t GetWidth() const; uint32_t GetHeight() const; void SetDimensions(uint32_t nWidth, uint32_t nHeight); + + /// + /// Returns how many bytes each pixel takes up. + /// + /// float GetPixelMultiplyer() const; + TextureType GetTextureType() const; + + /// + /// Returns the path to the texture pool, taken from the config file. + /// + /// + /// fs::path GetPoolOutPath(const fs::path& defaultValue); + + /// + /// Returns if this texture uses a palette. + /// + /// bool IsColorIndexed() const; + void SetTlut(ZTexture* nTlut); bool HasTlut() const; void ParseRawDataLate() override; diff --git a/tools/ZAPD/ZAPD/ZWaterbox.cpp b/tools/ZAPD/ZAPD/ZWaterbox.cpp new file mode 100644 index 000000000..9a289db52 --- /dev/null +++ b/tools/ZAPD/ZAPD/ZWaterbox.cpp @@ -0,0 +1,74 @@ +#include "ZWaterbox.h" + +#include "Globals.h" +#include "Utils/BitConverter.h" +#include "Utils/StringHelper.h" + +REGISTER_ZFILENODE(Waterbox, ZWaterbox); + +ZWaterbox::ZWaterbox(ZFile* nParent) : ZResource(nParent) +{ +} + +ZWaterbox::~ZWaterbox() +{ +} + +void ZWaterbox::ParseRawData() +{ + const auto& rawData = parent->GetRawData(); + + xMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 0); + ySurface = BitConverter::ToInt16BE(rawData, rawDataIndex + 2); + zMin = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); + xLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 6); + zLength = BitConverter::ToInt16BE(rawData, rawDataIndex + 8); + + if (Globals::Instance->game == ZGame::OOT_SW97) + properties = BitConverter::ToInt16BE(rawData, rawDataIndex + 10); + else + properties = BitConverter::ToInt32BE(rawData, rawDataIndex + 12); +} + +void ZWaterbox::DeclareReferences(const std::string& prefix) +{ + std::string declaration; + std::string auxName = name; + + if (name == "") + auxName = GetDefaultName(prefix); + + parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(), + GetSourceTypeName(), name.c_str(), GetBodySourceCode()); +} + +std::string ZWaterbox::GetBodySourceCode() const +{ + return StringHelper::Sprintf("%i, %i, %i, %i, %i, 0x%08X", xMin, ySurface, zMin, xLength, + zLength, properties); +} + +std::string ZWaterbox::GetDefaultName(const std::string& prefix) const +{ + return StringHelper::Sprintf("%sWaterBoxes_%06X", prefix.c_str(), rawDataIndex); +} + +ZResourceType ZWaterbox::GetResourceType() const +{ + return ZResourceType::Waterbox; +} + +size_t ZWaterbox::GetRawDataSize() const +{ + return 16; +} + +std::string ZWaterbox::GetSourceTypeName() const +{ + return "WaterBox"; +} + +bool ZWaterbox::DoesSupportArray() const +{ + return true; +} diff --git a/tools/ZAPD/ZAPD/ZWaterbox.h b/tools/ZAPD/ZAPD/ZWaterbox.h new file mode 100644 index 000000000..e190b26a0 --- /dev/null +++ b/tools/ZAPD/ZAPD/ZWaterbox.h @@ -0,0 +1,30 @@ +#pragma once + +#include "ZFile.h" +#include "ZResource.h" + +class ZWaterbox : public ZResource +{ +public: + int16_t xMin; + int16_t ySurface; + int16_t zMin; + int16_t xLength; + int16_t zLength; + int32_t properties; + + ZWaterbox(ZFile* nParent); + ~ZWaterbox(); + + void ParseRawData() override; + void DeclareReferences(const std::string& prefix) override; + std::string GetBodySourceCode() const override; + std::string GetDefaultName(const std::string& prefix) const override; + + std::string GetSourceTypeName() const override; + ZResourceType GetResourceType() const override; + + bool DoesSupportArray() const override; + + size_t GetRawDataSize() const override; +}; diff --git a/tools/ZAPD/ZAPD/genbuildinfo.py b/tools/ZAPD/ZAPD/genbuildinfo.py index 91a567d31..3317c4276 100644 --- a/tools/ZAPD/ZAPD/genbuildinfo.py +++ b/tools/ZAPD/ZAPD/genbuildinfo.py @@ -10,7 +10,13 @@ parser.add_argument("--devel", action="store_true") args = parser.parse_args() with open("build/ZAPD/BuildInfo.cpp", "w+") as buildFile: - label = subprocess.check_output(["git", "describe", "--always"]).strip().decode("utf-8") + # Get commit hash from git + # If git fails due to a missing .git directory, a default label will be used instead. + try: + label = subprocess.check_output(["git", "describe", "--always"]).strip().decode("utf-8") + except: + label = "GIT_NOT_FOUND" + now = datetime.now() if args.devel: label += " ~ Development version" diff --git a/tools/ZAPD/ZAPDUtils/Makefile b/tools/ZAPD/ZAPDUtils/Makefile index e8941ed77..c0f818bdf 100644 --- a/tools/ZAPD/ZAPDUtils/Makefile +++ b/tools/ZAPD/ZAPDUtils/Makefile @@ -17,7 +17,7 @@ clean: rm -rf build $(LIB) format: - clang-format-11 -i $(CPP_FILES) $(H_FILES) + clang-format-14 -i $(CPP_FILES) $(H_FILES) .PHONY: all clean format diff --git a/tools/ZAPD/ZAPDUtils/Utils/BitConverter.h b/tools/ZAPD/ZAPDUtils/Utils/BitConverter.h index 646fa1274..aa41b5b21 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/BitConverter.h +++ b/tools/ZAPD/ZAPDUtils/Utils/BitConverter.h @@ -76,7 +76,7 @@ public: fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset); } return ((uint32_t)data.at(offset + 0) << 24) + ((uint32_t)data.at(offset + 1) << 16) + - ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); + ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); } static inline uint32_t ToUInt32BE(const std::vector& data, size_t offset) @@ -89,7 +89,7 @@ public: fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset); } return ((uint32_t)data.at(offset + 0) << 24) + ((uint32_t)data.at(offset + 1) << 16) + - ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); + ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); } static inline int64_t ToInt64BE(const std::vector& data, size_t offset) @@ -102,9 +102,9 @@ public: fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset); } return ((uint64_t)data.at(offset + 0) << 56) + ((uint64_t)data.at(offset + 1) << 48) + - ((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) + - ((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) + - ((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7)); + ((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) + + ((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) + + ((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7)); } static inline uint64_t ToUInt64BE(const std::vector& data, size_t offset) @@ -117,9 +117,9 @@ public: fprintf(stderr, "\t Trying to read at offset: 0x%zX\n", offset); } return ((uint64_t)data.at(offset + 0) << 56) + ((uint64_t)data.at(offset + 1) << 48) + - ((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) + - ((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) + - ((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7)); + ((uint64_t)data.at(offset + 2) << 40) + ((uint64_t)data.at(offset + 3) << 32) + + ((uint64_t)data.at(offset + 4) << 24) + ((uint64_t)data.at(offset + 5) << 16) + + ((uint64_t)data.at(offset + 6) << 8) + ((uint64_t)data.at(offset + 7)); } static inline float ToFloatBE(const std::vector& data, size_t offset) @@ -133,8 +133,8 @@ public: } float value; uint32_t floatData = ((uint32_t)data.at(offset + 0) << 24) + - ((uint32_t)data.at(offset + 1) << 16) + - ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); + ((uint32_t)data.at(offset + 1) << 16) + + ((uint32_t)data.at(offset + 2) << 8) + (uint32_t)data.at(offset + 3); static_assert(sizeof(uint32_t) == sizeof(float), "expected 32-bit float"); std::memcpy(&value, &floatData, sizeof(value)); return value; diff --git a/tools/ZAPD/ZAPDUtils/Utils/File.h b/tools/ZAPD/ZAPDUtils/Utils/File.h index 7bc5d2950..bf2bb694e 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/File.h +++ b/tools/ZAPD/ZAPDUtils/Utils/File.h @@ -1,8 +1,6 @@ #pragma once -#include #include -#include #include #include #include "Directory.h" @@ -26,6 +24,7 @@ public: file.read(data, fileSize); std::vector result = std::vector(data, data + fileSize); delete[] data; + file.close(); return result; }; @@ -42,6 +41,7 @@ public: file.read(data, fileSize); std::string str = std::string((const char*)data); delete[] data; + file.close(); return str; }; @@ -58,23 +58,27 @@ public: { std::ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); + file.close(); }; static void WriteAllBytes(const std::string& filePath, const std::vector& data) { std::ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); + file.close(); }; static void WriteAllBytes(const std::string& filePath, const char* data, int dataSize) { std::ofstream file(filePath, std::ios::binary); file.write((char*)data, dataSize); + file.close(); }; static void WriteAllText(const fs::path& filePath, const std::string& text) { std::ofstream file(filePath, std::ios::out); file.write(text.c_str(), text.size()); + file.close(); } }; diff --git a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h index 8560d6b09..c4e012eb0 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h +++ b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h @@ -106,9 +106,35 @@ public: return std::all_of(str.begin(), str.end(), ::isdigit); } - static bool HasOnlyHexDigits(const std::string& str) + static bool IsValidHex(std::string_view str) { - return std::all_of(str.begin(), str.end(), ::isxdigit); + if (str.length() < 3) + { + return false; + } + + if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) + { + return std::all_of(str.begin() + 2, str.end(), ::isxdigit); + } + + return false; + } + + static bool IsValidOffset(std::string_view str) + { + if (str.length() == 1) + { + // 0 is a valid offset + return isdigit(str[0]); + } + + return IsValidHex(str); + } + + static bool IsValidHex(const std::string& str) + { + return IsValidHex(std::string_view(str.c_str())); } static std::string ToUpper(const std::string& str) @@ -123,4 +149,66 @@ public: return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](char a, char b) { return tolower(a) == tolower(b); }); } + + /** + * Converts a std::string formatted in camelCase into one in SCREAMING_SNAKE_CASE. Since this + * will mostly be used on symbols that start with either 'g' or 's', an option is included to + * skip these. + */ + static std::string camelCaseTo_SCREAMING_SNAKE_CASE(const std::string& in, bool skipSP) + { + std::string out = ""; + const char* ptr = in.c_str(); + char ch = *ptr; + + // Switch checks for 'g'/'s'/'\0', looks at next character if skipSP enabled and string is + // nonempty. + switch (ch) + { + case 'g': + case 's': + if (skipSP) + { + // Print it anyway if the next character is lowercase, e.g. "gameplay_keep_...". + if (!isupper(ptr[1])) + { + out.push_back(toupper(ch)); + } + if ((ch = *++ptr) == '\0') + { + case '\0': + // This is reached either by the if or the case label, avoiding duplication. + return out; + } + } + [[fallthrough]]; + default: + if (islower(ch)) + { + out.push_back(toupper(ch)); + } + else + { + out.push_back(ch); + } + break; + } + + while ((ch = *++ptr) != '\0') + { + if (islower(ch)) + { + out.push_back(toupper(ch)); + } + else + { + if (isupper(ch) && !(isupper(ptr[1]) && isupper(ptr[-1]))) + { + out.push_back('_'); + } + out.push_back(ch); + } + } + return out; + } }; diff --git a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj index 4b91c2aeb..2abbdc966 100644 --- a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj +++ b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj @@ -118,6 +118,7 @@ true MultiThreadedDebug Default + stdcpp17 Console From 70a54256b78babf66b534981c5d53cdc0b9d8110 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 29 Jul 2023 06:44:02 -0700 Subject: [PATCH 044/121] Remove plural "Limbs" from object decomp example (#1344) * Remove plural "Limbs" from object decomp example * Missed one --- docs/tutorial/object_decomp_example.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorial/object_decomp_example.md b/docs/tutorial/object_decomp_example.md index 829dbb917..e4025caae 100644 --- a/docs/tutorial/object_decomp_example.md +++ b/docs/tutorial/object_decomp_example.md @@ -32,7 +32,7 @@ Now that we've gotten around the error, we can see what each limb in the skeleto Note that some limbs don't actually render anything, so sometimes clicking on a limb will not turn anything red; this may indicate a "Root" limb that has no associated display list, or it may indicate something like an eye limb that doesn't have the right textures loaded to display anything in Z64Utils. It may be useful to skip ahead to [Step #5](#step-5-naming-limb-display-lists) to learn how to check if the limb has a display list. If it doesn't have a display list, then it's a "Root" limb that will never be highlighted. -We can now start naming the skeleton and individual limbs. Since we know this particular skeleton is the King's Chamber Deku Guard, we can name the skeleton `gKingsChamberDekuGuardSkel`. For the LimbNone name, we can call it something like `KINGS_CHAMBER_DEKU_GUARD_LIMB_NONE`, and we can name the LimbMax similarly. For the EnumName, we can name it `KingsChamberDekuGuardLimbs`. For each individual limb, we can name them based on what we see in Z64Utils; just make sure to update both the Name and the EnumName. After naming everything, we have something that looks like this: +We can now start naming the skeleton and individual limbs. Since we know this particular skeleton is the King's Chamber Deku Guard, we can name the skeleton `gKingsChamberDekuGuardSkel`. For the LimbNone name, we can call it something like `KINGS_CHAMBER_DEKU_GUARD_LIMB_NONE`, and we can name the LimbMax similarly. For the EnumName, we can name it `KingsChamberDekuGuardLimb`. For each individual limb, we can name them based on what we see in Z64Utils; just make sure to update both the Name and the EnumName. After naming everything, we have something that looks like this: ```xml @@ -47,7 +47,7 @@ We can now start naming the skeleton and individual limbs. Since we know this pa - + ``` Now we can run `./extract_assets.py -s objects/object_dns` to extract the object again, this time with our new names. What can we do with this? Quite a bit actually. In `z_en_dns.h`, we can add this to the top of the file to start using these new names in our code: From 410d412d0a89aa89cf03f538134f05f4657cdd7e Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 31 Jul 2023 16:40:12 -0700 Subject: [PATCH 045/121] Talk Exchange System Docs (#1312) * Fix typo * PLAYER_IA_HELD * Actor offer exchange item functions * SubS_OfferExchangeItemCustom * SubS_OfferItem + enum * Actors that use Subs_OfferItem * SubS_OfferExchangeItemFacing * Comments * Format * Better comment * EnRg * function names and comments * Split enum * exchangeItemId -> exchangeItemAction * namefixer * PR comments * Missed a comment * Max -> Mask * SubS_SetOfferMode * Some more comments updating * rg comment * PLAYER_IA_CONTINUE * Revert back to PLAYER_IA_MINUS1 * Comment typos/grammar * Verify functions * yawRange * Actor_OfferTalkNearby * Actor_OfferTalkExchangeEquiCylinder * format * Actor_OfferTalkNearColChkInfoCylinder * OfferTalk comments * Actor_OfferTalkExchange comment enum * format --- include/functions.h | 10 +- include/z64player.h | 11 ++- include/z64save.h | 30 +++--- include/z64subs.h | 31 ++++-- src/code/z_actor.c | 67 +++++++++---- src/code/z_en_a_keep.c | 2 +- src/code/z_player_lib.c | 6 +- src/code/z_sub_s.c | 96 +++++++++++-------- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 2 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 2 +- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 22 ++--- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c | 2 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 31 +++--- .../ovl_En_Akindonuts/z_en_akindonuts.c | 14 +-- src/overlays/actors/ovl_En_Al/z_en_al.c | 25 ++--- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 10 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 6 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 2 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 2 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 6 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 19 ++-- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 2 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 6 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 2 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 2 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 6 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 17 ++-- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 2 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 6 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 4 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 13 +-- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 7 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 23 ++--- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 21 ++-- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 39 ++++---- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 14 +-- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 6 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 12 +-- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 10 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 4 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 4 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 63 ++++++------ src/overlays/actors/ovl_En_Go/z_en_go.c | 41 ++++---- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 4 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 6 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 2 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 2 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 6 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 37 ++++--- src/overlays/actors/ovl_En_In/z_en_in.c | 12 +-- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 15 +-- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 6 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 8 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 16 ++-- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 6 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 2 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 6 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 14 +-- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 2 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 6 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 8 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 14 +-- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 8 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 6 +- src/overlays/actors/ovl_En_Mm2/z_en_mm2.c | 2 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 6 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 8 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 40 ++++---- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 2 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 2 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 4 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 10 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 13 ++- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 10 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 27 +++--- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 56 +++++------ src/overlays/actors/ovl_En_Pst/z_en_pst.h | 2 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 2 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 7 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 10 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 10 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 6 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 14 +-- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 43 ++++----- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 10 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 16 ++-- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 8 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 12 +-- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 8 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 26 +++-- src/overlays/actors/ovl_En_Talk/z_en_talk.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 4 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 9 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 4 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 16 ++-- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 6 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 65 +++++++------ src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 10 +- .../actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c | 2 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 10 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 6 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 4 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 8 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 2 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 20 ++-- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 28 +++--- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 4 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 4 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 2 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 2 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 2 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 4 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- .../actors/ovl_player_actor/z_player.c | 36 +++---- tools/disasm/functions.txt | 18 ++-- tools/namefixer.py | 16 +++- tools/sizes/code_functions.csv | 16 ++-- 146 files changed, 853 insertions(+), 769 deletions(-) diff --git a/include/functions.h b/include/functions.h index 66265e454..622830246 100644 --- a/include/functions.h +++ b/include/functions.h @@ -560,13 +560,13 @@ PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor); s32 func_800B83F8(Actor* actor, Player* player, s32 flag); s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState); -s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId); -s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId); -s32 func_800B8614(Actor* actor, PlayState* play, f32 radius); -s32 func_800B863C(Actor* actor, PlayState* play); +s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemAction); +s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemAction); +s32 Actor_OfferTalk(Actor* actor, PlayState* play, f32 radius); +s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, PlayState* play); s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play); s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2); -PlayerItemAction Player_GetExchangeItemId(PlayState* play); +PlayerItemAction Player_GetExchangeItemAction(PlayState* play); s32 func_800B8718(Actor* actor, GameState* gameState); s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange); s32 func_800B8804(Actor* actor, PlayState* play, f32 xzRange); diff --git a/include/z64player.h b/include/z64player.h index b74b5846a..5974defc5 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -51,8 +51,15 @@ typedef enum { /* 4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE } PlayerEnvHazard; +/* + * Current known usages for PLAYER_IA_MINUS1: + * 1. With TalkExchange requests, used to continue a current conversation after a textbox is closed + * 2. In `func_80123810` as a return value representing the offer is declined or invalid + * 3. Used as an item action to return the previously held item after player is done shielding + */ + typedef enum PlayerItemAction { - /* -1 */ PLAYER_IA_MINUS1 = -1, + /* -1 */ PLAYER_IA_MINUS1 = -1, // TODO: determine usages with more player docs, possibly split into seperate values (see known usages above) /* 0x00 */ PLAYER_IA_NONE, /* 0x01 */ PLAYER_IA_LAST_USED, /* 0x02 */ PLAYER_IA_FISHING_ROD, @@ -1180,7 +1187,7 @@ typedef struct Player { /* 0xA80 */ Actor* tatlActor; /* 0xA84 */ s16 tatlTextId; /* 0xA86 */ s8 csId; - /* 0xA87 */ s8 exchangeItemId; // PlayerItemAction enum + /* 0xA87 */ s8 exchangeItemAction; // PlayerItemAction enum /* 0xA88 */ Actor* talkActor; /* 0xA8C */ f32 talkActorDistance; /* 0xA90 */ Actor* unk_A90; diff --git a/include/z64save.h b/include/z64save.h index d969ff7bf..85a2a62e3 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -1447,16 +1447,17 @@ typedef enum { /* 1 */ WEEKEVENTREG_HORSE_RACE_STATE_START, /* 2 */ WEEKEVENTREG_HORSE_RACE_STATE_2, /* 3 */ WEEKEVENTREG_HORSE_RACE_STATE_3, - /* 4 */ WEEKEVENTREG_HORSE_RACE_STATE_4, - /* 7 */ WEEKEVENTREG_HORSE_RACE_STATE_MAX = 7 + /* 4 */ WEEKEVENTREG_HORSE_RACE_STATE_4 } WeekEventRegHorseRaceState; -#define GET_WEEKEVENTREG_HORSE_RACE_STATE (WEEKEVENTREG(92) & WEEKEVENTREG_HORSE_RACE_STATE_MAX) +#define WEEKEVENTREG_HORSE_RACE_STATE_MASK 7 + +#define GET_WEEKEVENTREG_HORSE_RACE_STATE (WEEKEVENTREG(92) & WEEKEVENTREG_HORSE_RACE_STATE_MASK) #define SET_WEEKEVENTREG_HORSE_RACE_STATE(state) \ { \ - WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_HORSE_RACE_STATE_MAX; \ - WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_HORSE_RACE_STATE_MAX) | (state)); \ + WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_HORSE_RACE_STATE_MASK; \ + WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_HORSE_RACE_STATE_MASK) | (state)); \ } \ (void)0 @@ -1561,22 +1562,23 @@ typedef enum { typedef enum { /* 0 */ EVENTINF_DOG_RACE_STATE_NOT_STARTED, /* 2 */ EVENTINF_DOG_RACE_STATE_STARTED = 2, - /* 3 */ EVENTINF_DOG_RACE_STATE_ENDED, - /* 7 */ EVENTINF_DOG_RACE_STATE_MAX = 7 + /* 3 */ EVENTINF_DOG_RACE_STATE_ENDED } EventInfDogRaceState; -#define GET_EVENTINF_DOG_RACE_STATE (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) -#define SET_EVENTINF_DOG_RACE_STATE(state) \ - (gSaveContext.eventInf[0] = ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) | (state))) +#define EVENTINF_DOG_RACE_STATE_MASK 7 -#define GET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) >> 3) +#define GET_EVENTINF_DOG_RACE_STATE (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MASK) +#define SET_EVENTINF_DOG_RACE_STATE(state) \ + (gSaveContext.eventInf[0] = ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MASK) | (state))) + +#define GET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MASK) >> 3) #define SET_EVENTINF_DOG_RACE_SELECTED_DOG_INDEX(selectedDogIndex) \ - (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) | (selectedDogIndex << 3)) + (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MASK) | (selectedDogIndex << 3)) // This is exactly the same as the selected dog index; they never need both of them at the same time. -#define GET_EVENTINF_DOG_RACE_RACE_STANDING ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MAX) >> 3) +#define GET_EVENTINF_DOG_RACE_RACE_STANDING ((gSaveContext.eventInf[0] & (u8)~EVENTINF_DOG_RACE_STATE_MASK) >> 3) #define SET_EVENTINF_DOG_RACE_RACE_STANDING(raceStanding) \ - (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MAX) | (raceStanding << 3)) + (gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & EVENTINF_DOG_RACE_STATE_MASK) | (raceStanding << 3)) typedef enum { /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, diff --git a/include/z64subs.h b/include/z64subs.h index 0aaf9bcd2..4d365dd14 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -10,16 +10,31 @@ extern Vec3f gOneVec3f; #define SUBS_TIME_PATHING_ORDER 3 +// NOTE: all on screen checks are bugged, and always evaluate to true, even if the target is off screen +typedef enum { + /* 0 */ SUBS_OFFER_MODE_NONE, + /* 1 */ SUBS_OFFER_MODE_GET_ITEM, + // Further modes all deal with offering talk exchange requests + /* 2 */ SUBS_OFFER_MODE_NEARBY, + /* 3 */ SUBS_OFFER_MODE_ONSCREEN, + /* 4 */ SUBS_OFFER_MODE_AUTO, + /* 5 */ SUBS_OFFER_MODE_AUTO_TARGETED, // Also checks nearby and on screen + /* 6 */ SUBS_OFFER_MODE_AUTO_NEARBY_ONSCREEN +} SubSOfferMode; + +#define SUBS_OFFER_MODE_MASK \ + (SUBS_OFFER_MODE_GET_ITEM | SUBS_OFFER_MODE_NEARBY | SUBS_OFFER_MODE_ONSCREEN | SUBS_OFFER_MODE_AUTO | \ + SUBS_OFFER_MODE_AUTO_TARGETED | SUBS_OFFER_MODE_AUTO_NEARBY_ONSCREEN) + typedef enum { /* 0 */ SUBS_CUTSCENE_WITH_PLAYER, /* 1 */ SUBS_CUTSCENE_NORMAL, /* 2 */ SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG } SubSCutsceneType; -//! TODO: rename based on func_8013E748 and func_800B8500 -typedef s32 (*func_8013E748_VerifyFunc)(struct PlayState*, Actor*, void*); +typedef s32 (*VerifyTalkExchangeActorFunc)(struct PlayState*, Actor*, void*); -typedef s32 (*VerifyActor)(struct PlayState*, Actor*, Actor*, void*); +typedef s32 (*VerifyFindActorFunc)(struct PlayState*, Actor*, Actor*, void*); #define SUBS_SHADOW_TEX_WIDTH 64 #define SUBS_SHADOW_TEX_HEIGHT 64 @@ -91,7 +106,7 @@ s32 SubS_InCsMode(struct PlayState* play); s32 SubS_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 stepRot, s32 overrideRot); -void SubS_UpdateFlags(u16* flags, u16 setBits, u16 unsetBits); +void SubS_SetOfferMode(u16* flags, u16 offerMode, u16 mask); void SubS_TimePathing_FillKnots(f32 knots[], s32 order, s32 numPoints); s32 SubS_TimePathing_ComputeProgress(f32* progress, s32 elapsedTime, s32 waypointTime, s32 totalTime, s32 pathCount, s32 order, f32 knots[]); @@ -115,7 +130,7 @@ s32 SubS_WeightPathing_Move(Actor* actor, Path* path, s32* waypoint, f32* progre s32 SubS_CopyPointFromPathCheckBounds(Path* path, s32 pointIndex, Vec3f* dst); -s32 func_8013C964(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 itemId, s32 type); +s32 SubS_Offer(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 itemId, SubSOfferMode mode); void SubS_FillShadowTex(s32 startCol, s32 startRow, u8* tex, s32 size); void SubS_GenShadowTex(Vec3f bodyPartsPos[], Vec3f* worldPos, u8* tex, f32 tween, u8 bodyPartsNum, u8 sizes[], s8 parentBodyParts[]); @@ -159,11 +174,11 @@ s32 SubS_FillCutscenesList(Actor* actor, s16 csIdList[], s16 numCutscenes); void SubS_ConstructPlane(Vec3f* point, Vec3f* unitVec, Vec3s* rot, Plane* plane); s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePointA, Vec3f* linePointB, Vec3f* intersect); -Actor* SubS_FindActorCustom(struct PlayState* play, Actor* actor, Actor* actorListStart, u8 actorCategory, s16 actorId, void* verifyData, VerifyActor verifyActor); +Actor* SubS_FindActorCustom(struct PlayState* play, Actor* actor, Actor* actorListStart, u8 actorCategory, s16 actorId, void* verifyData, VerifyFindActorFunc verifyActorFunc); -s32 func_8013E748(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemId, void* data, func_8013E748_VerifyFunc verifyFunc); +s32 SubS_OfferTalkExchangeCustom(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, void* data, VerifyTalkExchangeActorFunc verifyActorFunc); s32 SubS_ActorAndPlayerFaceEachOther(struct PlayState* play, Actor* actor, void* data); -s32 func_8013E8F8(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exhangeItemId, s16 playerYawTol, s16 actorYawTol); +s32 SubS_OfferTalkExchangeFacing(Actor* actor, struct PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, s16 playerYawRange, s16 actorYawRange); s32 SubS_TrackPointStep(Vec3f* worldPos, Vec3f* focusPos, s16 shapeYRot, Vec3f* yawTarget, Vec3f* pitchTarget, s16* headZRotStep, s16* headXRotStep, s16* torsoZRotStep, s16* torsoXRotStep, u16 headZRotStepMax, u16 headXRotStepMax, u16 torsoZRotStepMax, u16 torsoXRotStepMax); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index a85c2f31b..1579c1ff9 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1878,14 +1878,38 @@ s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) { return false; } -// Actor_OfferTalk / Actor_OfferGetItemExchange? Seems to be called with PLAYER_IA_MINUS1 if the same actor used -// Actor_OfferGetItem. -// This function is also used to toggle the "Speak" action on the A button -s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId) { +/** + * This function covers offering the ability to `Talk` with the player. + * Passing an exchangeItemAction (see `PlayerItemAction`) allows the player to also use the item to initiate the + * conversation. + * + * This function carries a talk exchange request to the player actor if context allows it (e.g. the player is in range + * and not busy with certain things). The player actor performs the requested action itself. + * + * The following description of what the `exchangeItemAction` values can do is provided here for completeness, but these + * behaviors are entirely out of the scope of this function. All behavior is defined by the player actor. + * + * - Positive values (`PLAYER_IA_NONE < exchangeItemAction < PLAYER_IA_MAX`): + * Offers the ability to initiate the conversation with an item from the player. + * Not all positive values are implemented properly for this to work. + * Working ones are PLAYER_IA_PICTO_BOX and PLAYER_IA_BOTTLE_MIN <= exchangeItemAction < PLAYER_IA_MASK_MIN + * Note: While PLAYER_IA_BEANS works, it is special cased to just plant the bean with no talking. + * - `PLAYER_IA_NONE`: + * Allows the player to speak to or check the actor (by pressing A). + * - `PLAYER_IA_MINUS1`: + * Used by actors/player to continue the current conversation after a textbox is closed. + * + * @return true If the player actor is capable of accepting the offer. + * + * Note: There is only one instance of using this for actually using an item to start the conversation with the player. + * Every other instance is to either offer to speak, or continue the current conversation. + */ +s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, + PlayerItemAction exchangeItemAction) { Player* player = GET_PLAYER(play); if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || - ((exchangeItemId > PLAYER_IA_NONE) && Player_InCsMode(play)) || + ((exchangeItemAction > PLAYER_IA_NONE) && Player_InCsMode(play)) || (!actor->isTargeted && ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) || (xzRange < actor->xzDistToPlayer)))) { @@ -1894,24 +1918,35 @@ s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, Player player->talkActor = actor; player->talkActorDistance = actor->xzDistToPlayer; - player->exchangeItemId = exchangeItemId; + player->exchangeItemAction = exchangeItemAction; CutsceneManager_Queue(CS_ID_GLOBAL_TALK); return true; } -s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId) { - return func_800B8500(actor, play, radius, radius, exchangeItemId); +/** + * Offers a talk exchange request within an equilateral cylinder with the radius specified. + */ +s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, + PlayerItemAction exchangeItemAction) { + return Actor_OfferTalkExchange(actor, play, radius, radius, exchangeItemAction); } -s32 func_800B8614(Actor* actor, PlayState* play, f32 radius) { - return func_800B85E0(actor, play, radius, PLAYER_IA_NONE); +/** + * Offers a talk request within an equilateral cylinder with the radius specified. + */ +s32 Actor_OfferTalk(Actor* actor, PlayState* play, f32 radius) { + return Actor_OfferTalkExchangeEquiCylinder(actor, play, radius, PLAYER_IA_NONE); } -s32 func_800B863C(Actor* actor, PlayState* play) { +/** + * Offers a talk request within an equilateral cylinder whose radius is determined by the actor's collision check + * cylinder's radius. + */ +s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, PlayState* play) { f32 cylRadius = actor->colChkInfo.cylRadius + 50.0f; - return func_800B8614(actor, play, cylRadius); + return Actor_OfferTalk(actor, play, cylRadius); } s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) { @@ -1942,10 +1977,10 @@ s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) { return false; } -PlayerItemAction Player_GetExchangeItemId(PlayState* play) { +PlayerItemAction Player_GetExchangeItemAction(PlayState* play) { Player* player = GET_PLAYER(play); - return player->exchangeItemId; + return player->exchangeItemAction; } s32 func_800B8718(Actor* actor, GameState* gameState) { @@ -1957,7 +1992,7 @@ s32 func_800B8718(Actor* actor, GameState* gameState) { return false; } -// Similar to func_800B8500 +// Similar to Actor_OfferTalkExchange s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange) { Player* player = GET_PLAYER(play); @@ -4127,7 +4162,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac return false; } - if (!func_800B8614(actor, play, interactRange)) { + if (!Actor_OfferTalk(actor, play, interactRange)) { return false; } diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index a9bd49f6f..3f9f6b90e 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -77,7 +77,7 @@ void EnAObj_Idle(EnAObj* this, PlayState* play) { yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y)); if ((yawDiff < 0x2800) || ((this->actor.params == AOBJ_SIGNPOST_ARROW) && (yawDiff > 0x5800))) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } } diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index bd8a5b94e..cd91ee42d 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1286,7 +1286,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) { void func_80123C58(Player* player) { player->itemAction = player->heldItemAction; Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction)); - player->unk_AA5 = 0; + player->unk_AA5 = PLAYER_UNKAA5_0; } void Player_SetEquipmentData(PlayState* play, Player* player) { @@ -2313,7 +2313,7 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G Player* player = (Player*)actor; if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, actor)) { - if (player->unk_AA5 != 3) { + if (player->unk_AA5 != PLAYER_UNKAA5_3) { *dList = NULL; } else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) { *dList = sPlayerFirstPersonLeftForearmDLs[player->transformation]; @@ -3526,7 +3526,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G 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)) { + (player->exchangeItemAction != PLAYER_IA_NONE)) { Math_Vec3f_Copy(&sPlayerGetItemRefPos, &player->leftHandWorld.pos); } else { sPlayerGetItemRefPos.x = diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 0f09f5912..4060c3361 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -209,8 +209,8 @@ s32 SubS_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 stepRo return true; } -void SubS_UpdateFlags(u16* flags, u16 setBits, u16 unsetBits) { - *flags = (*flags & ~unsetBits) | setBits; +void SubS_SetOfferMode(u16* flags, u16 offerMode, u16 mask) { + *flags = (*flags & ~mask) | offerMode; } /** @@ -815,60 +815,68 @@ s32 SubS_CopyPointFromPathCheckBounds(Path* path, s32 pointIndex, Vec3f* dst) { return true; } -//! TODO: Needs docs with func_800B8500 -s32 func_8013C964(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemId, s32 type) { - s32 ret = false; +/** + * Attempt to extend different offers to the player based on different checks + * and on the provided mode (see SubSOfferMode). + * + * The offer types are either GetItem (see Actor_OfferGetItem) or TalkExchange (see Actor_OfferTalkExchange), + * with more check variants provided for TalkExchange offers. + * + * @return `true` if offer was extended and the player can accept it + */ +s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemId, SubSOfferMode mode) { + s32 canAccept = false; s16 x; s16 y; f32 xzDistToPlayerTemp; Actor_GetScreenPos(play, actor, &x, &y); - switch (type) { - case 1: + switch (mode) { + case SUBS_OFFER_MODE_GET_ITEM: yRange = fabsf(actor->playerHeightRel) + 1.0f; xzRange = actor->xzDistToPlayer + 1.0f; - ret = Actor_OfferGetItem(actor, play, itemId, xzRange, yRange); + canAccept = Actor_OfferGetItem(actor, play, itemId, xzRange, yRange); break; - case 2: + case SUBS_OFFER_MODE_NEARBY: if ((fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange)) { - ret = func_800B8500(actor, play, xzRange, yRange, itemId); + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } break; - case 3: + case SUBS_OFFER_MODE_ONSCREEN: //! @bug: Both x and y conditionals are always true, || should be an && if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { - ret = func_800B8500(actor, play, xzRange, yRange, itemId); + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } break; - case 4: + case SUBS_OFFER_MODE_AUTO: yRange = fabsf(actor->playerHeightRel) + 1.0f; xzRange = actor->xzDistToPlayer + 1.0f; xzDistToPlayerTemp = actor->xzDistToPlayer; actor->xzDistToPlayer = 0.0f; actor->flags |= ACTOR_FLAG_10000; - ret = func_800B8500(actor, play, xzRange, yRange, itemId); + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); actor->xzDistToPlayer = xzDistToPlayerTemp; break; - case 5: + case SUBS_OFFER_MODE_AUTO_TARGETED: //! @bug: Both x and y conditionals are always true, || should be an && if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isTargeted) { actor->flags |= ACTOR_FLAG_10000; - ret = func_800B8500(actor, play, xzRange, yRange, itemId); + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } break; - case 6: + case SUBS_OFFER_MODE_AUTO_NEARBY_ONSCREEN: //! @bug: Both x and y conditionals are always true, || should be an && if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange)) { actor->flags |= ACTOR_FLAG_10000; - ret = func_800B8500(actor, play, xzRange, yRange, itemId); + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } break; @@ -876,7 +884,7 @@ s32 func_8013C964(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 it break; } - return ret; + return canAccept; } const u8 sShadowMaps[4][12][12] = { @@ -1504,10 +1512,10 @@ s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePoi /** * Finds the first actor instance of a specified Id and category verified with a custom callback. - * The callback should return `true` when the actor is succesfully verified. + * The callback should return `true` when the actor is successfully verified. */ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart, u8 actorCategory, s16 actorId, - void* verifyData, VerifyActor verifyActor) { + void* verifyData, VerifyFindActorFunc verifyActorFunc) { Actor* actorIter = actorListStart; if (actorListStart == NULL) { @@ -1517,36 +1525,40 @@ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart while ((actorIter != NULL) && ((actorId != actorIter->id) || ((actorId == actorIter->id) && - ((verifyActor == NULL) || ((verifyActor != NULL) && !verifyActor(play, actor, actorIter, verifyData)))))) { + ((verifyActorFunc == NULL) || + ((verifyActorFunc != NULL) && !verifyActorFunc(play, actor, actorIter, verifyData)))))) { actorIter = actorIter->next; } return actorIter; } -//! TODO: Needs docs with func_800B8500 -s32 func_8013E748(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemId, void* data, - func_8013E748_VerifyFunc verifyFunc) { - s32 ret = false; +/** + * Will extend a TalkExchange offer to the player if the actor is verified with a custom callback. + * The callback should return `true` when the actor is successfully verified. + */ +s32 SubS_OfferTalkExchangeCustom(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, + void* data, VerifyTalkExchangeActorFunc verifyActorFunc) { + s32 canAccept = false; - if ((verifyFunc == NULL) || ((verifyFunc != NULL) && verifyFunc(play, actor, data))) { - ret = func_800B8500(actor, play, xzRange, yRange, exchangeItemId); + if ((verifyActorFunc == NULL) || ((verifyActorFunc != NULL) && verifyActorFunc(play, actor, data))) { + canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, exchangeItemAction); } - return ret; + return canAccept; } s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data) { Player* player = GET_PLAYER(play); - Vec3s* yawTols = (Vec3s*)data; + Vec3s* yawRanges = (Vec3s*)data; s16 playerYaw = ABS(BINANG_SUB(Actor_WorldYawTowardActor(&player->actor, actor), player->actor.shape.rot.y)); s16 actorYaw = ABS(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y)); s32 areFacing = false; - s32 actorYawTol = ABS(yawTols->y); - s32 playerYawTol; + s32 actorYawRange = ABS(yawRanges->y); + s32 playerYawRange; - if (actorYaw < (s16)actorYawTol) { - playerYawTol = ABS(yawTols->x); - if (playerYaw < (s16)playerYawTol) { + if (actorYaw < (s16)actorYawRange) { + playerYawRange = ABS(yawRanges->x); + if (playerYaw < (s16)playerYawRange) { areFacing = true; } } @@ -1554,14 +1566,14 @@ s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data) return areFacing; } -//! TODO: Needs docs with func_800B8500 -s32 func_8013E8F8(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exhangeItemId, s16 playerYawTol, - s16 actorYawTol) { - Vec3s yawTols; +s32 SubS_OfferTalkExchangeFacing(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction, + s16 playerYawRange, s16 actorYawRange) { + Vec3s yawRanges; - yawTols.x = playerYawTol; - yawTols.y = actorYawTol; - return func_8013E748(actor, play, xzRange, yRange, exhangeItemId, &yawTols, SubS_ActorAndPlayerFaceEachOther); + yawRanges.x = playerYawRange; + yawRanges.y = actorYawRange; + return SubS_OfferTalkExchangeCustom(actor, play, xzRange, yRange, exchangeItemAction, &yawRanges, + SubS_ActorAndPlayerFaceEachOther); } /** 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 11db327fa..93c0214df 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 @@ -77,7 +77,7 @@ static InitChainEntry sInitChain[] = { /** * Spawns another wooden flower instance that handles the opened flower's collision. - * Returns true if this wooden flower instance was succesfully spawned. + * Returns true if this wooden flower instance was successfully spawned. */ s32 BgNumaHana_SpawnOpenFlowerCollisionChild(BgNumaHana* this, PlayState* play) { Actor* child; 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 5d5009877..a3b8bc1a2 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -1039,7 +1039,7 @@ void DmChar08_Update(Actor* thisx, PlayState* play) { } if (this->unk_1FF != 0) { func_80AAFCCC(this, play); - func_800B8614(&this->dyna.actor, play, 400.0f); + Actor_OfferTalk(&this->dyna.actor, play, 400.0f); } func_80AB096C(this, play); DmChar08_UpdateCollision(this, play); diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 584edd42e..3c12f1bbb 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -207,20 +207,19 @@ s32* func_80C22880(DmTag* this, PlayState* play) { s32 func_80C2291C(DmTag* this, PlayState* play) { s32 ret = false; - if (this->unk_18C & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->unk_18C |= 8; - SubS_UpdateFlags(&this->unk_18C, 0, 7); - this->msgEventScript = func_80C22880(this, play); - this->actionFunc = func_80C229FC; - ret = true; - } + if (((this->unk_18C & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + this->unk_18C |= 8; + SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->msgEventScript = func_80C22880(this, play); + this->actionFunc = func_80C229FC; + ret = true; } return ret; } void func_80C229AC(DmTag* this, PlayState* play) { - SubS_UpdateFlags(&this->unk_18C, 3, 7); + SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actor.flags |= ACTOR_FLAG_1; } @@ -246,7 +245,7 @@ void DmTag_Init(Actor* thisx, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; this->unk_18E = 2; this->unk_18C = 0; - SubS_UpdateFlags(&this->unk_18C, 4, 7); + SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->actor.flags &= ~ACTOR_FLAG_1; this->actionFunc = DmTag_DoNothing; } else if (this->actor.room == 2) { @@ -267,6 +266,7 @@ void DmTag_Update(Actor* thisx, PlayState* play) { func_80C2291C(this, play); this->actionFunc(this, play); - func_8013C964(&this->actor, play, 40.0f, fabsf(this->actor.playerHeightRel) + 1.0f, 0, this->unk_18C & 7); + SubS_Offer(&this->actor, play, 40.0f, fabsf(this->actor.playerHeightRel) + 1.0f, PLAYER_IA_NONE, + this->unk_18C & SUBS_OFFER_MODE_MASK); Actor_SetFocus(&this->actor, 0.0f); } diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c index c917f01a7..c85db8ef0 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c @@ -160,7 +160,7 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) { return; } - if ((bgActor != NULL) && (Actor_ProcessTalkRequest(bgActor, &play->state))) { + if ((bgActor != NULL) && Actor_ProcessTalkRequest(bgActor, &play->state)) { if (ELFMSG4_GET_SWITCHFLAG(thisx) != 0x7F) { Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(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 b199d9716..71da776ac 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -171,13 +171,12 @@ void func_80BD2BA4(EnAh* this, PlayState* play) { s32 func_80BD2BE8(EnAh* this, PlayState* play) { s32 ret = false; - if (this->unk_2D8 & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_2D8, 0, 7); - ret = true; - this->unk_2D8 |= 8; - this->actionFunc = func_80BD3768; - } + if (((this->unk_2D8 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + ret = true; + this->unk_2D8 |= 8; + this->actionFunc = func_80BD3768; } return ret; @@ -406,7 +405,7 @@ s32 func_80BD3374(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80BD3EC4.rot); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); EnAh_ChangeAnim(this, ENAH_ANIM_0); - SubS_UpdateFlags(&this->unk_2D8, 3, 7); + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2D8 |= 0x40; return true; @@ -419,7 +418,7 @@ s32 func_80BD33FC(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80BD3ED8.rot); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); EnAh_ChangeAnim(this, ENAH_ANIM_4); - SubS_UpdateFlags(&this->unk_2D8, 3, 7); + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2D8 |= (0x40 | 0x10); return true; @@ -471,19 +470,17 @@ s32 func_80BD3548(EnAh* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BD35BC(EnAh* this, PlayState* play) { s16 temp; - s16 temp2; switch (this->unk_1DC) { default: return false; case 2: - temp = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); - temp2 = ABS_ALT(temp); - if (temp2 < 0x3800) { - SubS_UpdateFlags(&this->unk_2D8, 3, 7); + temp = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)); + if (temp < 0x3800) { + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_2D8, 0, 7); + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } return false; } @@ -518,7 +515,7 @@ void func_80BD3768(EnAh* this, PlayState* play) { Vec3f sp34; if (func_8010BF58(&this->actor, play, func_80BD3294(this, play), NULL, &this->unk_1E0)) { - SubS_UpdateFlags(&this->unk_2D8, 3, 7); + SubS_SetOfferMode(&this->unk_2D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2D8 &= ~8; this->unk_2D8 |= 0x80; this->unk_2F4 = 20; @@ -580,7 +577,7 @@ void EnAh_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + 60; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2D8 & 7); + SubS_Offer(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2D8 & SUBS_OFFER_MODE_MASK); if (!(this->unk_2D8 & 0x10)) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); 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 15787c39e..4447877ee 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1133,7 +1133,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { player->actor.textId = D_80BF048C[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x15E4) { - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; @@ -1142,7 +1142,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { player->actor.textId = D_80BF0494[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x15F9) { - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; @@ -1151,7 +1151,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { player->actor.textId = D_80BF049C[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x160C) { - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; @@ -1160,7 +1160,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { player->actor.textId = D_80BF04A4[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x1621) { - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; @@ -1319,7 +1319,7 @@ void func_80BEEE10(EnAkindonuts* this, PlayState* play) { } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || this->actor.isTargeted) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { this->animIndex = ENAKINDONUTS_ANIM_4; @@ -1434,7 +1434,7 @@ void func_80BEF360(EnAkindonuts* this, PlayState* play) { void func_80BEF450(EnAkindonuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_80BEF4B8; } } @@ -1444,7 +1444,7 @@ void func_80BEF4B8(EnAkindonuts* this, PlayState* play) { this->unk_2DC(this, play); this->actionFunc = func_80BEEFA8; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 02a2004a4..b0b8822f6 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -502,16 +502,17 @@ s32 func_80BDEC2C(EnAl* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 ret = false; - if ((this->unk_4C2 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (((this->unk_4C2 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_4C2 &= ~0x1800; - if (player->exchangeItemId == PLAYER_IA_LETTER_MAMA) { + if (player->exchangeItemAction == PLAYER_IA_LETTER_MAMA) { this->unk_4C2 |= 0x800; - this->unk_4F4 = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_IA_NONE) { + this->unk_4F4 = player->exchangeItemAction; + } else if (player->exchangeItemAction != PLAYER_IA_NONE) { this->unk_4C2 |= 0x1000; - this->unk_4F4 = player->exchangeItemId; + this->unk_4F4 = player->exchangeItemAction; } - SubS_UpdateFlags(&this->unk_4C2, 0, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_4E6 = 0; this->unk_4EC = 0; this->actor.child = this->unk_368; @@ -670,7 +671,7 @@ s32 func_80BDF244(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { if ((sp20 != NULL) && (sp20->update != NULL) && (temp_v0 != NULL) && (temp_v0->update != NULL)) { EnAl_ChangeAnim(this, ENAL_ANIM_0); - SubS_UpdateFlags(&this->unk_4C2, 3, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_368 = sp20; this->unk_4C2 |= 0x20; ret = true; @@ -679,7 +680,7 @@ s32 func_80BDF244(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { - SubS_UpdateFlags(&this->unk_4C2, 3, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); switch (scheduleOutput->result) { case 1: @@ -752,9 +753,9 @@ void func_80BDF414(EnAl* this, PlayState* play) { temp_v0 = this->actor.world.rot.y - this->actor.yawTowardsPlayer; if (((this->unk_4EA == 0) && (ABS_ALT(temp_v0) >= 0x5800)) || ((this->unk_4EA == 5) && (ABS_ALT(temp_v0) >= 0x5800)) || (this->unk_4EA == 2)) { - SubS_UpdateFlags(&this->unk_4C2, 3, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_4C2, 0, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } } @@ -799,7 +800,7 @@ void func_80BDF5E8(EnAl* this, PlayState* play) { void func_80BDF6C4(EnAl* this, PlayState* play) { if (func_8010BF58(&this->actor, play, this->unk_360, this->unk_4EC, &this->unk_364)) { - SubS_UpdateFlags(&this->unk_4C2, 3, 7); + SubS_SetOfferMode(&this->unk_4C2, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_4C2 &= ~0x20; this->unk_4C2 |= 0x200; this->actor.child = NULL; @@ -846,7 +847,7 @@ void EnAl_Update(Actor* thisx, PlayState* play) { if (this->unk_35C != 0) { EnAl_UpdateSkelAnime(this); func_80BDEE5C(this); - func_8013C964(&this->actor, play, this->unk_4D4, 30.0f, this->unk_4F0, this->unk_4C2 & 7); + SubS_Offer(&this->actor, play, this->unk_4D4, 30.0f, this->unk_4F0, this->unk_4C2 & SUBS_OFFER_MODE_MASK); func_80BDE318(this, play); } } 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 90d31b601..3adc9ad12 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -164,7 +164,7 @@ void EnAni_SetText(EnAni* this, PlayState* play, u16 textId) { this->actor.textId = textId; if ((this->stateFlags & ANI_STATE_WRITHING) || ABS_ALT(diffAngle) <= 0x4300) { if (this->actor.xzDistToPlayer < 100.0f) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } } 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 47372da43..bfc0e6e5a 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 @@ -576,7 +576,7 @@ void EnAob01_BeforeRace_Idle(EnAob01* this, PlayState* play) { if (EnAob01_PlayerIsHoldingDog(this, play) && !(this->stateFlags & ENAOB01_FLAG_PLAYER_CAN_TALK)) { if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); this->stateFlags |= ENAOB01_FLAG_TALKING_TO_PLAYER_HOLDING_DOG; this->actionFunc = EnAob01_BeforeRace_Talk; } @@ -592,7 +592,7 @@ void EnAob01_BeforeRace_Idle(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CAN_TALK; if ((this->actor.xzDistToPlayer < 100.0f) && !(this->collider.base.ocFlags2 & OC2_HIT_PLAYER)) { this->stateFlags |= ENAOB01_FLAG_PLAYER_CAN_TALK; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } } @@ -883,7 +883,7 @@ void EnAob01_AfterRace_GiveRaceResult(EnAob01* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnAob01_AfterRace_Talk; } else if (this->actor.xzDistToPlayer < 100.0f) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -940,7 +940,7 @@ void EnAob01_AfterRace_AfterGivingReward(EnAob01* this, PlayState* play) { } this->textId = 0; - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); SET_EVENTINF_DOG_RACE_STATE(EVENTINF_DOG_RACE_STATE_NOT_STARTED); this->actionFunc = EnAob01_AfterRace_AskToPlayAgain; } @@ -956,7 +956,7 @@ void EnAob01_AfterRace_AskToPlayAgain(EnAob01* this, PlayState* play) { Message_ContinueTextbox(play, this->textId); this->actionFunc = EnAob01_BeforeRace_RespondToPlayAgainQuestion; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } 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 b4ce21b6c..6bede4ab4 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1433,8 +1433,8 @@ void func_80A97410(EnAz* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80A97114(this, play); this->unk_378 = 2; - } else if (func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, - PLAYER_IA_MINUS1)) { + } else if (Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, + this->actor.playerHeightRel, PLAYER_IA_MINUS1)) { this->actor.textId = func_80A973B4(this, play); } } else { @@ -1467,7 +1467,7 @@ void func_80A97410(EnAz* this, PlayState* play) { } else { Actor_GetScreenPos(play, &this->actor, &sp56, &sp54); if ((sp56 >= 0) && (sp56 <= SCREEN_WIDTH) && (sp54 >= 0) && (sp54 <= SCREEN_HEIGHT) && - func_800B8500(&this->actor, play, 120.0f, 120.0f, PLAYER_IA_NONE)) { + Actor_OfferTalkExchange(&this->actor, play, 120.0f, 120.0f, PLAYER_IA_NONE)) { this->unk_3D2 = func_80A97274(this, play); if ((this->unk_3D2 == 0x10CE) || (this->unk_3D2 == 0x10D4)) { this->actor.textId = 0; 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 671a444c0..b2d64c386 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -587,7 +587,7 @@ void EnBaba_Idle(EnBaba* this, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { this->actor.flags |= ACTOR_FLAG_10000; } - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } } @@ -659,7 +659,7 @@ void EnBaba_GaveBlastMask(EnBaba* this, PlayState* play) { EnBaba_HandleConversation(this, play); this->actionFunc = EnBaba_Talk; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -687,7 +687,7 @@ void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { Message_StartTextbox(play, 0x2A39, &this->actor); // "I'm sorry" this->actionFunc = EnBaba_FollowSchedule_Talk; } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } Actor_MoveWithGravity(&this->actor); 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 606c880d3..0bd7dfc0b 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -180,7 +180,7 @@ void func_80BE887C(EnBaisen* this, PlayState* play) { } } this->actor.textId = sTextIds[this->textIdIndex]; - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.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 b8e42ff66..ebd4b5000 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 @@ -149,7 +149,7 @@ s32 func_809CC270(EnBba01* this, PlayState* play) { Actor_GetScreenPos(play, &this->enHy.actor, &x, &y); //! @bug: Both x and y conditionals are always true, || should be an && if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { - func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); + Actor_OfferTalkExchangeEquiCylinder(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); } return true; } 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 8eb598c04..0f2850266 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 @@ -113,7 +113,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } else { this->moonsTear = (ObjMoonStone*)SubS_FindActor(play, NULL, ACTORCAT_PROP, ACTOR_OBJ_MOON_STONE); } - func_800B8500(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE); } } @@ -171,8 +171,8 @@ void func_809CD028(EnBji01* this, PlayState* play) { } else { this->textId = 0x5F1; } - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, - PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); break; case PLAYER_FORM_HUMAN: diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index 09f70d069..d21340d15 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -276,9 +276,9 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) { break; case TOILET_HAND_BEHAVIOUR_TAKE_ITEM: - if (player->exchangeItemId != PLAYER_IA_NONE) { - EnBjt_TakeItem(player->exchangeItemId); - player->exchangeItemId = PLAYER_IA_NONE; + if (player->exchangeItemAction != PLAYER_IA_NONE) { + EnBjt_TakeItem(player->exchangeItemAction); + player->exchangeItemAction = PLAYER_IA_NONE; } if (EnBjt_Vanish(this)) { this->timer = 60; @@ -320,9 +320,10 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) { s32 EnBjt_CheckTalk(EnBjt* this, PlayState* play) { s32 ret = false; - if ((this->stateFlags & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (((this->stateFlags & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->stateFlags |= TOILET_HAND_STATE_TALKING; - SubS_UpdateFlags(&this->stateFlags, 0, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->msgEventCallback = EnBjt_ChooseBehaviour; this->behaviour = 0; this->actionFunc = EnBjt_Talk; @@ -365,7 +366,7 @@ void EnBjt_Talk(EnBjt* this, PlayState* play) { if (func_8010BF58(&this->actor, play, sMsgEventScript, this->msgEventCallback, &this->msgEventArg4)) { this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; - SubS_UpdateFlags(&this->stateFlags, 3, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->stateFlags &= ~TOILET_HAND_STATE_TALKING; this->msgEventArg4 = 0; this->actionFunc = EnBjt_FollowSchedule; @@ -384,7 +385,7 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) { if (scheduleOutput.result == TOILET_HAND_SCH_AVAILABLE) { if (this->stateFlags & TOILET_HAND_STATE_APPEARING) { if (EnBjt_Appear(this)) { - SubS_UpdateFlags(&this->stateFlags, 3, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } } else if (this->stateFlags & TOILET_HAND_STATE_VANISHING) { EnBjt_Vanish(this); @@ -392,7 +393,7 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) { // Vanish if player goes too far away or heart piece given if ((fabsf(this->actor.playerHeightRel) > 70.0f) || (this->actor.xzDistToPlayer > 140.0f) || CHECK_WEEKEVENTREG(WEEKEVENTREG_90_80)) { - SubS_UpdateFlags(&this->stateFlags, 0, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->playedSfx = false; this->stateFlags &= ~TOILET_HAND_STATE_VISIBLE; this->stateFlags |= TOILET_HAND_STATE_VANISHING; @@ -447,7 +448,7 @@ void EnBjt_Update(Actor* thisx, PlayState* play) { if (this->scheduleResult != TOILET_HAND_SCH_NONE) { EnBjt_UpdateSkelAnime(this); - func_8013C964(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE, this->stateFlags & 7); + SubS_Offer(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE, this->stateFlags & SUBS_OFFER_MODE_MASK); Actor_SetFocus(&this->actor, 26.0f); EnBjt_UpdateCollision(this, play); } 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 5c98a2763..b40f1c774 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 @@ -572,7 +572,7 @@ void func_809C59F0(EnBomBowlMan* this, PlayState* play) { } else { this->actor.textId = 0x716; } - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_809C5AA4; } else { Actor_OfferGetItem(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f); @@ -587,7 +587,7 @@ void func_809C5AA4(EnBomBowlMan* this, PlayState* play) { this->actionFunc = func_809C5598; } } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } 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 88ce2bf92..f3baf9341 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -361,7 +361,7 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { this->collider.dim.height = 60; func_80C03F64(this); } else { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } @@ -504,7 +504,7 @@ void func_80C04354(EnBombers* this, PlayState* play) { this->unk_28E = 0; this->actionFunc = func_80C043C8; } else { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } 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 ae7cacff7..390eca9f1 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -196,7 +196,7 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { return; } if (yawDiffAbs < 0x3BB5) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } 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 21103d464..9218016e3 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -449,7 +449,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { } if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } if ((this->bombal->actor.update == NULL) || (this->bombal->actor.colChkInfo.health == 0)) { @@ -616,7 +616,7 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { if (this->unk_2BC >= 5) { func_80BFE67C(this, play); } - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } @@ -948,7 +948,7 @@ void func_80C00168(EnBomjima* this, PlayState* play) { this->unk_2DC = this->actor.yawTowardsPlayer; func_80C00234(this); } else { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } 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 84b548f99..e52c49a82 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -575,7 +575,7 @@ void func_80C0201C(EnBomjimb* this, PlayState* play) { this->unk_2CA = 10; this->actionFunc = func_80C02A14; } else { - func_800B8614(&this->actor, play, 40.0f); + Actor_OfferTalk(&this->actor, play, 40.0f); } } 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 6df2e490a..6416f3325 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 @@ -141,7 +141,7 @@ s32 func_809CB4A0(EnCne01* this, PlayState* play) { Actor_GetScreenPos(play, &this->enHy.actor, &x, &y); //! @bug: Both x and y conditionals are always true, || should be an && if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { - func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); + Actor_OfferTalkExchangeEquiCylinder(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); } return true; } 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 aa74c5007..feb0a8e54 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -256,7 +256,7 @@ void EnCow_Talk(EnCow* this, PlayState* play) { } } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 170.0f); + Actor_OfferTalk(&this->actor, play, 170.0f); this->actor.textId = 0x32C8; //! @bug textId is reset to this no matter the intial value } @@ -274,7 +274,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) { gHorsePlayedEponasSong = false; this->actionFunc = EnCow_Talk; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 170.0f); + Actor_OfferTalk(&this->actor, play, 170.0f); this->actor.textId = 0x32C8; // Text to give milk after playing Epona's Song. EnCow_UpdateAnimation(this, play); @@ -298,7 +298,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) { this->actor.textId = 0x32CA; // Text if you don't have an empty bottle. } this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 170.0f); + Actor_OfferTalk(&this->actor, play, 170.0f); this->actionFunc = EnCow_Talk; } } else { diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 434cb07cf..afe72d120 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -202,12 +202,11 @@ s32 func_80B3E69C(EnDai* this, PlayState* play) { s32 func_80B3E7C8(EnDai* this, PlayState* play) { s32 ret = false; - if (this->unk_1CE & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_1CE, 0, 7); - this->actionFunc = func_80B3EF90; - ret = true; - } + if (((this->unk_1CE & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_1CE, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->actionFunc = func_80B3EF90; + ret = true; } return ret; @@ -429,7 +428,7 @@ void func_80B3EEDC(EnDai* this, PlayState* play) { void func_80B3EF90(EnDai* this, PlayState* play) { if (func_8010BF58(&this->actor, play, D_80B3FC8C, NULL, &this->unk_1D0)) { - SubS_UpdateFlags(&this->unk_1CE, 3, 7); + SubS_SetOfferMode(&this->unk_1CE, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_1D0 = 0; this->actionFunc = func_80B3F00C; } else { @@ -526,7 +525,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { this->unk_1D6 = 0; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { - SubS_UpdateFlags(&this->unk_1CE, 3, 7); + SubS_SetOfferMode(&this->unk_1CE, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_1CE |= 0x80; this->unk_1CD = 0xFF; this->actionFunc = func_80B3F00C; @@ -564,7 +563,7 @@ void EnDai_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); func_80B3E834(this); if (!(this->unk_1CE & 0x200)) { - func_8013C964(&this->actor, play, 0.0f, 0.0f, PLAYER_IA_NONE, this->unk_1CE & 7); + SubS_Offer(&this->actor, play, 0.0f, 0.0f, PLAYER_IA_NONE, this->unk_1CE & SUBS_OFFER_MODE_MASK); } func_80B3E460(this); } 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 2c232f096..00a912adc 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -224,7 +224,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { this->unk_280 = this->actor.yawTowardsPlayer; if ((this->unk_278 == ENDAIKU_PARAM_FF_1) || (this->unk_278 == ENDAIKU_PARAM_FF_2) || (angle <= 0x2890)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } } 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 311b6d216..bdb959b64 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -232,7 +232,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { return; } - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); if ((this->unk_276 == 8) && Animation_OnFrame(&this->skelAnime, 6.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROCK_BROKEN); @@ -350,7 +350,7 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) { } func_80BE61D0(this); } - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } void func_80BE6EB0(EnDaiku2* this) { @@ -421,7 +421,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&this->unk_268, &sp40); } } - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } void func_80BE71A0(EnDaiku2* this) { 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 faacd7510..3a6302411 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 @@ -132,7 +132,7 @@ void EnDemoheishi_Idle(EnDemoheishi* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { EnDemoheishi_SetupTalk(this); } else if (absYawDiff <= 0x4BB8) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } 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 46c6de979..1e6af02ac 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -487,7 +487,7 @@ void EnDg_TryPickUp(EnDg* this, PlayState* play) { this->actor.speed = 0.0f; if (Player_GetMask(play) == PLAYER_MASK_TRUTH) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); this->actionFunc = EnDg_SetupTalk; } else { this->actionFunc = EnDg_Held; @@ -1280,7 +1280,7 @@ void EnDg_SetupTalk(EnDg* this, PlayState* play) { EnDg_StartTextBox(this, play); this->actionFunc = EnDg_Talk; } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 5b7ba1725..47c6c2567 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -95,10 +95,11 @@ void* func_80A50DF8(EnDnh* this, PlayState* play) { } s32 func_80A50E40(EnDnh* this, PlayState* play) { - if (!(this->unk18C & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (((this->unk18C & SUBS_OFFER_MODE_MASK) == SUBS_OFFER_MODE_NONE) || + !Actor_ProcessTalkRequest(&this->actor, &play->state)) { return 0; } - SubS_UpdateFlags(&this->unk18C, 0, 7); + SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->msgEventScript = func_80A50DF8(this, play); this->actionFunc = func_80A50F38; return 1; @@ -116,7 +117,7 @@ s32 func_80A50EC0(EnDnh* this) { void func_80A50F38(EnDnh* this, PlayState* play) { if (func_8010BF58(&this->actor, play, this->msgEventScript, this->msgEventCallback, &this->unk194)) { - SubS_UpdateFlags(&this->unk18C, 3, 7); + SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk194 = 0; this->unk198 = 0; this->actionFunc = EnDnh_DoNothing; @@ -135,10 +136,10 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); this->actor.shape.yOffset = 1100.0f; if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 1)) { - SubS_UpdateFlags(&this->unk18C, 3, 7); + SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk198 = 0; } else { - SubS_UpdateFlags(&this->unk18C, 4, 7); + SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->unk198 = CHECK_EVENTINF(EVENTINF_35) ? 2 : 1; } if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { @@ -159,7 +160,7 @@ void EnDnh_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); func_80A50EC0(this); SkelAnime_Update(&this->skelAnime); - func_8013C964(&this->actor, play, 60.0f, 30.0f, 0, this->unk18C & 7); + SubS_Offer(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk18C & SUBS_OFFER_MODE_MASK); Actor_SetFocus(&this->actor, 26.0f); } 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 56a2b9379..bfe4c7e16 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -368,7 +368,7 @@ void func_80A71C3C(EnDno* this, PlayState* play) { play->msgCtx.msgLength = 0; func_80A71E54(this, play); } else if (this->actor.xzDistToPlayer < 60.0f) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); } } @@ -568,12 +568,13 @@ void func_80A724B8(EnDno* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80A725E0(this, play); } else if (this->actor.xzDistToPlayer < 60.0f) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); } } void func_80A7256C(EnDno* this, PlayState* play) { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_MINUS1); } void func_80A72598(EnDno* this, PlayState* play) { 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 1dd5dac34..8263001aa 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -245,13 +245,14 @@ s32 func_80B3CEC0(EnDnp* this, PlayState* play) { s32 func_80B3CF60(EnDnp* this, PlayState* play) { s32 ret = false; - if ((this->unk_322 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_322, 0, 7); + if (((this->unk_322 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_322 |= 8; this->actionFunc = func_80B3D3F8; ret = true; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && Actor_HasParent(&this->actor, play)) { - SubS_UpdateFlags(&this->unk_322, 0, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~0x500; this->actor.parent = NULL; this->unk_32E = 0; @@ -271,12 +272,12 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; this->cueId = 255; } - SubS_UpdateFlags(&this->unk_322, 0, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = func_80B3D11C; ret = true; } else if (this->unk_322 & 0x200) { this->actor.flags |= ACTOR_FLAG_1; - SubS_UpdateFlags(&this->unk_322, 3, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~(0x200 | 0x10); this->actionFunc = func_80B3D2D4; } @@ -355,14 +356,14 @@ void func_80B3D338(EnDnp* this, PlayState* play) { } else { this->actor.textId = 0x971; player->actor.textId = this->actor.textId; - func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); } } } void func_80B3D3F8(EnDnp* this, PlayState* play) { if (func_8010BF58(&this->actor, play, D_80B3DE58, NULL, &this->unk_328)) { - SubS_UpdateFlags(&this->unk_322, 3, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~8; this->actionFunc = func_80B3D2D4; } else { @@ -375,7 +376,7 @@ void func_80B3D47C(EnDnp* this, PlayState* play) { Math_SmoothStepToF(&this->actor.scale.x, 0.0085f, 0.1f, 0.01f, 0.001f); if ((s32)(this->actor.scale.x * 10000.0f) >= 85) { this->actor.flags |= ACTOR_FLAG_1; - SubS_UpdateFlags(&this->unk_322, 3, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~0x10; this->unk_322 |= 0x400; this->actor.scale.x = 0.0085f; @@ -411,7 +412,7 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { if (EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_RELEASED_FROM_BOTTLE) { this->actor.flags &= ~ACTOR_FLAG_1; Actor_SetScale(&this->actor, 0.00085000007f); - SubS_UpdateFlags(&this->unk_322, 0, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; this->actor.csId = 16; @@ -421,7 +422,7 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { ((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_DEKU_KINGS_CHAMBER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20))) { Actor_SetScale(&this->actor, 0.0085f); - SubS_UpdateFlags(&this->unk_322, 3, 7); + SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 |= 0x400; if ((play->sceneId == SCENE_MITURIN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) { this->unk_322 |= 0x20; @@ -462,7 +463,7 @@ void EnDnp_Update(Actor* thisx, PlayState* play) { if ((this->unk_322 & 0x400) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { Actor_OfferGetItem(&this->actor, play, GI_MAX, sp2C, sp28); } - func_8013C964(&this->actor, play, sp2C, sp28, PLAYER_IA_NONE, this->unk_322 & 7); + SubS_Offer(&this->actor, play, sp2C, sp28, PLAYER_IA_NONE, this->unk_322 & SUBS_OFFER_MODE_MASK); Actor_SetFocus(&this->actor, 30.0f); func_80B3CC80(this, play); } 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 667f1eafb..4e47902f7 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -127,14 +127,14 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { this->cueId = 255; this->unk_37C |= 0x20; } - SubS_UpdateFlags(&this->unk_37C, 0, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); ret = true; } else { if (this->unk_37C & 0x20) { this->picto.actor.flags |= ACTOR_FLAG_1; this->cueId = 255; this->unk_37C &= ~0x20; - SubS_UpdateFlags(&this->unk_37C, 3, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } } @@ -323,8 +323,9 @@ s32* func_80A52CF8(EnDnq* this, PlayState* play) { s32 func_80A52D44(EnDnq* this, PlayState* play) { s32 ret = false; - if ((this->unk_37C & 7) && Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { - SubS_UpdateFlags(&this->unk_37C, 0, 7); + if (((this->unk_37C & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_380 = func_80A52CF8(this, play); this->actionFunc = func_80A52FB8; ret = true; @@ -338,9 +339,9 @@ void func_80A52DC8(EnDnq* this, PlayState* play) { s16 yaw = this->picto.actor.yawTowardsPlayer - this->picto.actor.world.rot.y; if (yaw <= 0x3800) { - SubS_UpdateFlags(&this->unk_37C, 3, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_37C, 0, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { @@ -379,7 +380,7 @@ void func_80A52FB8(EnDnq* this, PlayState* play) { s16 sp2E = this->picto.actor.yawTowardsPlayer; if (func_8010BF58(&this->picto.actor, play, this->unk_380, NULL, &this->unk_1E0)) { - SubS_UpdateFlags(&this->unk_37C, 3, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_386 = 0; this->actionFunc = func_80A52DC8; } else { @@ -429,7 +430,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { this->picto.actor.targetMode = 1; this->unk_386 = 0; this->unk_37C = 0; - SubS_UpdateFlags(&this->unk_37C, 3, 7); + SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) { this->unk_3A4 = 1; } else { @@ -458,8 +459,8 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { 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, - PLAYER_IA_NONE, this->unk_37C & 7); + SubS_Offer(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f, + PLAYER_IA_NONE, this->unk_37C & SUBS_OFFER_MODE_MASK); this->picto.actor.xzDistToPlayer = this->unk_394; Actor_SetFocus(&this->picto.actor, 46.0f); func_80A52604(this, play); 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 a9552c73e..9d5c6ae48 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -226,22 +226,21 @@ s32 EnDns_GetCueType(EnDns* this) { s32 func_8092CAD0(EnDns* this, PlayState* play) { s32 ret = false; - if (this->unk_2C6 & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_2C6, 0, 7); - this->unk_2C6 &= ~0x10; - if (ENDNS_GET_4000(&this->actor)) { - this->unk_2F0 = 0.0f; - if (this->unk_2D2 != 0) { - this->unk_2F0 = this->skelAnime.curFrame; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); - } - this->unk_2DA = this->actor.world.rot.y; + if (((this->unk_2C6 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->unk_2C6 &= ~0x10; + if (ENDNS_GET_4000(&this->actor)) { + this->unk_2F0 = 0.0f; + if (this->unk_2D2 != 0) { + this->unk_2F0 = this->skelAnime.curFrame; + func_8092C63C(this, EN_DNS_ANIM_WALK_1); } - this->unk_1E0 = func_8092C9BC(this, play); - this->actionFunc = func_8092D4D8; - ret = true; + this->unk_2DA = this->actor.world.rot.y; } + this->unk_1E0 = func_8092C9BC(this, play); + this->actionFunc = func_8092D4D8; + ret = true; } return ret; } @@ -253,14 +252,14 @@ s32 func_8092CB98(EnDns* this, PlayState* play) { if (!(this->unk_2C6 & 0x80)) { this->cueType = EnDns_GetCueType(this); this->actor.flags &= ~ACTOR_FLAG_1; - SubS_UpdateFlags(&this->unk_2C6, 0, 7); + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_2C6 |= 0x80; this->cueId = 255; } phi_v1 = 1; } else if (this->unk_2C6 & 0x80) { this->actor.flags |= ACTOR_FLAG_1; - SubS_UpdateFlags(&this->unk_2C6, 3, 7); + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2C6 &= ~0x80; } return phi_v1; @@ -401,7 +400,7 @@ void func_8092D1B8(EnDns* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && !CHECK_EVENTINF(EVENTINF_15) && func_8092CC68(play)) { player->stateFlags1 |= PLAYER_STATE1_20; this->unk_2C6 |= 0x100; - SubS_UpdateFlags(&this->unk_2C6, 4, 7); + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); Audio_PlaySfx(NA_SE_SY_FOUND); SET_EVENTINF(EVENTINF_15); this->unk_2F4 = func_8092CCEC; @@ -454,7 +453,7 @@ void func_8092D4D8(EnDns* this, PlayState* play) { func_8092C63C(this, EN_DNS_ANIM_WALK_1); } } else if (func_8010BF58(&this->actor, play, this->unk_1E0, this->unk_2F4, &this->unk_1DC)) { - SubS_UpdateFlags(&this->unk_2C6, 3, 7); + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2F4 = NULL; if (ENDNS_GET_4000(&this->actor)) { if (!CHECK_EVENTINF(EVENTINF_15)) { @@ -519,7 +518,7 @@ void EnDns_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -0.8f; this->unk_2D2 = 0; this->unk_2C6 = 0; - SubS_UpdateFlags(&this->unk_2C6, 3, 7); + SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2C6 |= (0x40 | 0x10); this->unk_2C6 |= 0x200; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) { @@ -551,7 +550,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) { func_8092C934(this); func_8092C86C(this, play); 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); + SubS_Offer(&this->actor, play, 80.0f, 40.0f, PLAYER_IA_NONE, this->unk_2C6 & SUBS_OFFER_MODE_MASK); Actor_SetFocus(&this->actor, 34.0f); func_8092C6FC(this, play); func_8092C5C0(this); 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 2753650a5..719940b14 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -536,7 +536,7 @@ void func_80A3A7FC(EnElfgrp* this, PlayState* play) { func_80A39CD4(play, this->unk_147, temp_s0); } else if (this->actor.xzDistToPlayer < 280.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } @@ -567,7 +567,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } else { this->actor.flags &= ~ACTOR_FLAG_10000; 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 923cfeef2..6202072cb 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -426,7 +426,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) { itemAction = itemAction->next; } - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.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 02b1178c2..dcf2db26d 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -2822,7 +2822,7 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { D_8090CCF8 = D_809171CC; this->unk_1CB = 1; } else { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } else { this->unk_1CC--; @@ -4711,7 +4711,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { this->unk_154 = 10; } } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } break; 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 ae04bb332..088b504c6 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -224,7 +224,7 @@ void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) && (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED)) { Actor_ProcessTalkRequest(&this->actor, &play->state); - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); if (ENFSN_IS_SHOP(&this->actor)) { this->actor.textId = 0; } @@ -775,7 +775,7 @@ void EnFsn_Idle(EnFsn* this, PlayState* play) { } else if (((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= 15.0f)) && (player->actor.world.pos.y > 0.0f) && ((player->actor.world.pos.z >= -35.0f) && (player->actor.world.pos.z <= -20.0f))) { - func_800B8614(&this->actor, play, 400.0f); + Actor_OfferTalk(&this->actor, play, 400.0f); } } @@ -865,7 +865,7 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) { break; case 0x29CF: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; @@ -965,7 +965,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { this->price = (buttonItem < ITEM_MOONS_TEAR) ? gItemPrices[buttonItem] : 0; if (this->price > 0) { player->actor.textId = 0x29EF; - player->exchangeItemId = buttonItem; + player->exchangeItemAction = buttonItem; this->actionFunc = EnFsn_MakeOffer; } else { player->actor.textId = 0x29CF; @@ -1029,7 +1029,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { case 1: Audio_PlaySfx_MessageCancel(); - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; } @@ -1085,7 +1085,7 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_ConverseBackroom; } } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1424,7 +1424,7 @@ void EnFsn_IdleBackroom(EnFsn* this, PlayState* play) { EnFsn_HandleConversationBackroom(this, play); this->actionFunc = EnFsn_ConverseBackroom; } else if (this->actor.xzDistToPlayer < 100.0f || this->actor.isTargeted) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 a07bede52..c0f3e1cc5 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -418,9 +418,9 @@ void func_80962340(EnFu* this, PlayState* play) { } func_809628BC(this); } else if (this->unk_54A == 2) { - func_800B8614(&this->actor, play, 500.0f); + Actor_OfferTalk(&this->actor, play, 500.0f); } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } Math_SmoothStepToS(&this->actor.shape.rot.y, BINANG_SUB(this->actor.child->shape.rot.y, 0x4000), 10, 3000, 100); } @@ -936,7 +936,7 @@ void func_80963630(EnFu* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; } else { this->actor.child->freezeTimer = 10; - func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } 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 11ba7a8b0..63f5a6736 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -381,7 +381,7 @@ void func_80B0FEBC(EnGb2* this, PlayState* play) { Message_StartTextbox(play, this->unk_26E, &this->actor); this->actionFunc = func_80B0FFA8; } else if ((this->actor.xzDistToPlayer < 300.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -543,7 +543,7 @@ void func_80B10584(EnGb2* this, PlayState* play) { this->actionFunc = func_80B10634; } else if (this->actor.xzDistToPlayer < 300.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } @@ -641,7 +641,7 @@ void func_80B109DC(EnGb2* this, PlayState* play) { Message_StartTextbox(play, this->unk_26E, &this->actor); this->actionFunc = func_80B10634; } else { - func_800B85E0(&this->actor, play, 300.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 300.0f, PLAYER_IA_MINUS1); } } @@ -699,7 +699,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { this->actionFunc = func_80B10DAC; } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { this->unk_26C |= 0x40; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } else { this->unk_26C &= ~0x40; @@ -719,7 +719,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { if (!(this->unk_26C & 0x80)) { this->actor.flags |= ACTOR_FLAG_10000; this->unk_26C |= 0x20; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } } @@ -786,7 +786,7 @@ void func_80B11048(EnGb2* this, PlayState* play) { this->actionFunc = func_80B10DAC; } else if (this->actor.xzDistToPlayer < 300.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } } 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 909cc76bf..ced79c782 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -449,7 +449,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { } else if (this->actor.xzDistToPlayer < 300.0f) { this->unk_230 |= 4; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } else { this->unk_230 &= ~4; @@ -460,7 +460,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { this->unk_230 &= ~8; this->actionFunc = func_80BB27D4; } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); this->unk_230 |= 8; } } else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) { @@ -473,7 +473,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; } else if (this->actor.xzDistToPlayer < 300.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); this->unk_230 |= 8; } } @@ -777,7 +777,7 @@ void func_80BB30B4(EnGeg* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; } else if (this->actor.xzDistToPlayer < 150.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); } } @@ -813,7 +813,7 @@ void func_80BB32AC(EnGeg* this, PlayState* play) { Message_StartTextbox(play, this->unk_496, &this->actor); this->actionFunc = func_80BB27D4; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } 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 ac09c3714..fe7d0198f 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -238,10 +238,10 @@ void func_80B35450(EnGg* this, PlayState* play) { this->actionFunc = func_80B352A4; } else if ((this->actor.xzDistToPlayer < 200.0f) && (this->actor.xzDistToPlayer > 50.0f)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xCEE; } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xCE5; } } 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 eb0e5bfd4..c933d4e39 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -160,7 +160,7 @@ void func_80B3AFB0(EnGg2* this, PlayState* play) { this->actionFunc = func_80B3AE60; } else if ((this->actor.xzDistToPlayer < 100.0f) && (this->actor.xzDistToPlayer > 50.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xCE4; } } 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 5a6ab4aba..974bf929f 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 @@ -105,7 +105,7 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) { } EnGinkoMan_SetupDialogue(this); } else if (ABS_ALT(yaw) < 0x1555) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -591,7 +591,7 @@ void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) { EnGinkoMan_SetupIdle(this); } } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } 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 8fc4c9852..16b4c2993 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -648,7 +648,7 @@ void func_80B51760(EnGk* this, PlayState* play) { } } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (gSaveContext.save.entrance != ENTRANCE(GORON_RACETRACK, 1))) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } if (this->unk_1E4 & 4) { @@ -852,7 +852,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_24_80); this->actionFunc = func_80B51698; } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (player->transformation == PLAYER_FORM_GORON) { this->actor.textId = 0xE74; } else { @@ -920,7 +920,7 @@ void func_80B52340(EnGk* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; @@ -981,7 +981,7 @@ void func_80B525E0(EnGk* this, PlayState* play) { Message_StartTextbox(play, this->unk_31C, &this->actor); this->actionFunc = func_80B52430; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } 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 ab0afe844..f4abc9e91 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -732,28 +732,27 @@ s32* func_8094EDBC(EnGm* this, PlayState* play) { s32 func_8094EE84(EnGm* this, PlayState* play) { s32 ret = false; - if (this->unk_3A4 & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_3A4, 0, 7); - this->unk_3E0 = 0; - this->unk_3E4 = NULL; - this->actor.child = this->unk_268; - this->unk_264 = func_8094EDBC(this, play); + if (((this->unk_3A4 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->unk_3E0 = 0; + this->unk_3E4 = NULL; + this->actor.child = this->unk_268; + this->unk_264 = func_8094EDBC(this, play); - if ((this->unk_258 == 5) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) { - this->unk_3A4 |= 0x20; - } else if ((this->unk_258 != 1) && (this->unk_258 != 5) && (this->unk_258 != 7)) { - this->unk_3A4 |= 0x20; - } - - if ((this->unk_258 == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01)) { - this->unk_3A4 &= ~0x20; - } - - this->actionFunc = func_80950DB8; - ret = true; + if ((this->unk_258 == 5) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) { + this->unk_3A4 |= 0x20; + } else if ((this->unk_258 != 1) && (this->unk_258 != 5) && (this->unk_258 != 7)) { + this->unk_3A4 |= 0x20; } + + if ((this->unk_258 == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01)) { + this->unk_3A4 &= ~0x20; + } + + this->actionFunc = func_80950DB8; + ret = true; } return ret; } @@ -1085,7 +1084,7 @@ s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { (this->timePathElapsedTime / this->timePathWaypointTime) + (SUBS_TIME_PATHING_ORDER - 1); this->unk_3A4 &= ~0x8; this->unk_3A4 &= ~0x10; - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; func_8094E054(this, play, 7); @@ -1102,7 +1101,7 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TAB)) { if (this->unk_258 == 0) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951D90); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); func_8094E054(this, play, 0); } else { func_8094E054(this, play, 9); @@ -1120,7 +1119,7 @@ s32 func_8094FD88(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_RECEPGIRL)) { func_8094E054(this, play, 11); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; ret = true; @@ -1136,7 +1135,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TOTO) && (al != NULL) && (al->update != NULL)) { func_8094E054(this, play, 11); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_268 = al; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) { this->unk_3C8 = 2; @@ -1173,7 +1172,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.world.rot.y = Math_Vec3f_Yaw(&sp3C, &sp30); if (this->unk_258 == 0) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951D9C); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; @@ -1200,7 +1199,7 @@ s32 func_80950088(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951DA8); Math_Vec3s_Copy(&this->actor.world.rot, &D_80951DB4); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x2000 | 0x100); this->unk_3A4 |= 0x200; func_8094E054(this, play, 12); @@ -1215,7 +1214,7 @@ s32 func_80950120(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951DBC); Math_Vec3s_Copy(&this->actor.world.rot, &D_80951DC8); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x800 | 0x100); this->unk_3A4 |= 0x200; func_8094E054(this, play, 4); @@ -1231,7 +1230,7 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80951DDC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); this->actor.targetMode = 6; - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x1000 | 0x100); this->unk_3A4 |= 0x200; this->unk_3C8 = 3; @@ -1338,7 +1337,7 @@ s32 func_809503F8(EnGm* this, PlayState* play) { if (this->unk_3E8 == 9) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); func_8094E054(this, play, 0); } else { AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f); @@ -1370,7 +1369,7 @@ s32 func_80950490(EnGm* this, PlayState* play) { case 9: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; @@ -1606,7 +1605,7 @@ void func_80950DB8(EnGm* this, PlayState* play) { Actor* al; if (func_8010BF58(&this->actor, play, this->unk_264, this->unk_3E4, &this->unk_25C)) { - SubS_UpdateFlags(&this->unk_3A4, 3, 7); + SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL); if ((this->unk_258 == 2) && (al != NULL) && (al->update != NULL)) { this->unk_268 = al; @@ -1712,7 +1711,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { func_8094DFF8(this, play); func_8094E2D0(this); func_8094F2E8(this); - func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & 7); + SubS_Offer(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & SUBS_OFFER_MODE_MASK); 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, UPDBGCHECKINFO_FLAG_4); 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 346753059..2659c042f 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -889,7 +889,8 @@ void EnGo_UpdateCollider(EnGo* this, PlayState* play) { * @return True if talking */ s32 EnGo_UpdateTalking(EnGo* this, PlayState* play) { - if (!(this->actionFlags & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (((this->actionFlags & SUBS_OFFER_MODE_MASK) == SUBS_OFFER_MODE_NONE) || + !Actor_ProcessTalkRequest(&this->actor, &play->state)) { return false; } @@ -906,7 +907,7 @@ s32 EnGo_UpdateTalking(EnGo* this, PlayState* play) { this->actionFlags |= ENGO_FLAG_EYES_OPEN; } - SubS_UpdateFlags(&this->actionFlags, 0, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->cutsceneState = 0; this->gatekeeperAnimState = 0; this->interruptedActionFunc = this->actionFunc; @@ -957,13 +958,13 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { this->springArrivalCutsceneActive = true; this->interruptedActionFunc = this->actionFunc; } - SubS_UpdateFlags(&this->actionFlags, 0, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = EnGo_HandleSpringArrivalCutscene; } else if (this->springArrivalCutsceneActive) { this->actor.flags |= ACTOR_FLAG_1; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = false; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actionFunc = this->interruptedActionFunc; } @@ -1224,13 +1225,13 @@ void EnGo_GravemakerIdle(EnGo* this, PlayState* play) { s16 deltaYaw = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); if ((fabsf(this->actor.playerHeightRel) > 20.0f) || (this->actor.xzDistToPlayer > 300.0f)) { - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(deltaYaw) >= 0x1C70) || CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON) || CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->actionFlags, 4, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); } } @@ -1239,9 +1240,9 @@ void EnGo_GravemakerIdle(EnGo* this, PlayState* play) { */ void EnGo_FrozenIdle(EnGo* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->actionFlags, 4, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); } } @@ -1744,7 +1745,7 @@ void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play) { Actor_SetScale(&this->actor, this->scaleFactor); this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->sleepState = ENGO_AWAKE; this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; this->blinkTimer = 0; @@ -1763,7 +1764,7 @@ void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play) { Actor_SetScale(&this->actor, this->scaleFactor); this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->sleepState = ENGO_AWAKE; this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; this->actionFlags |= ENGO_FLAG_EYES_OPEN; @@ -1878,7 +1879,7 @@ void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { this->actor.targetMode = 3; this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; this->actionFlags |= ENGO_FLAG_EYES_OPEN; this->msgEventFunc = EnGo_HandleGivePowderKegCutscene; @@ -1964,7 +1965,7 @@ void EnGo_Idle(EnGo* this, PlayState* play) { } else if (ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) { // All others besides the Medigoron in the Powder Keg Shop can fall asleep if (EnGo_IsFallingAsleep(this, play)) { - SubS_UpdateFlags(&this->actionFlags, 0, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->sleepState = ENGO_ASLEEP_POS; this->actionFunc = EnGo_Sleep; } else if (ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) { @@ -1982,9 +1983,9 @@ void EnGo_Idle(EnGo* this, PlayState* play) { } } else if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) { if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 0x3FFC) { - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->actionFlags, 0, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } } } @@ -2037,7 +2038,7 @@ void EnGo_Sleep(EnGo* this, PlayState* play) { } this->snorePhase += 0x400; this->actor.shape.yOffset = (this->actor.scale.y / this->scaleFactor) * ENGO_ROLLEDUP_Y_OFFSET; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } } else if ((this->actor.xzDistToPlayer >= 240.0f) || (this->actor.playerHeightRel >= 20.0f) || (this->sleepState != ENGO_AWAKE)) { @@ -2092,7 +2093,7 @@ void EnGo_Thaw(EnGo* this, PlayState* play) { EnGo_ChangeToShiveringAnimation(this, play); if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN)) { - SubS_UpdateFlags(&this->actionFlags, 4, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); EnGo_ChangeToShiveringAnimation(otherGoron, play); otherGoron->actionFunc = EnGo_Idle; } @@ -2400,7 +2401,7 @@ void EnGo_Talk(EnGo* this, PlayState* play) { } this->actionFlags &= ~ENGO_FLAG_ENGAGED; - SubS_UpdateFlags(&this->actionFlags, 3, 7); + SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->msgScriptResumePos = 0; this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; this->actionFunc = this->interruptedActionFunc; @@ -2448,10 +2449,10 @@ void EnGo_Update(Actor* thisx, PlayState* play) { } else { xzRange = this->colliderCylinder.dim.radius + 40; } - func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); + SubS_Offer(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & SUBS_OFFER_MODE_MASK); } else if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) && (this->sleepState != ENGO_AWAKE)) { xzRange = this->colliderCylinder.dim.radius + 40; - func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); + SubS_Offer(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & SUBS_OFFER_MODE_MASK); } if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_SPECTATOR) && 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 e5ae695ed..2b98ba7c6 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -184,8 +184,8 @@ void func_80997D38(EnGs* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { if (this->actor.xzDistToPlayer <= D_8099A408[this->actor.params]) { - func_8013E8F8(&this->actor, play, D_8099A408[this->actor.params], D_8099A408[this->actor.params], - PLAYER_IA_NONE, 0x2000, 0x2000); + SubS_OfferTalkExchangeFacing(&this->actor, play, D_8099A408[this->actor.params], + D_8099A408[this->actor.params], PLAYER_IA_NONE, 0x2000, 0x2000); } } 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 e9ba72003..48b08c7ff 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 @@ -195,7 +195,7 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { this->targetHeadPos.y = -this->targetHeadPos.y; } } - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } void func_80ABB540(EnGuardNuts* this) { 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 bee2ffda8..bdcf620ef 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -167,7 +167,7 @@ void func_80BC6F14(EnGuruguru* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80BC701C(this, play); } else if (yaw <= 0x2890) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); } } @@ -295,7 +295,7 @@ void func_80BC7440(EnGuruguru* this, PlayState* play) { this->textIdIndex++; this->actor.textId = textIDs[this->textIdIndex]; func_801A3B48(1); - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->unk268 = 0; SET_WEEKEVENTREG(WEEKEVENTREG_38_40); this->actionFunc = func_80BC7520; @@ -309,7 +309,7 @@ void func_80BC7520(EnGuruguru* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80BC7068; } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } 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 aa4e0b891..6b0124b00 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -236,7 +236,7 @@ void EnHg_HandleTatlDialog(EnHg* this, PlayState* play) { // "...Sort of looks different..." Message_StartTextbox(play, 0x24F, &this->actor); } else { - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } } } diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 4ff47c781..bbdb2c387 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -180,7 +180,7 @@ void EnHgo_Talk(EnHgo* this, PlayState* play) { } EnHgo_SetupDialogueHandler(this); } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 d0e965936..2bb10c351 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 @@ -189,7 +189,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { } else if (func_801A5100() == 2) { func_80BDB788(this); } else { - func_800B8614(&this->actor, play, BREG(13) + 100.0f); + Actor_OfferTalk(&this->actor, play, BREG(13) + 100.0f); } } } 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 9ce9e8eac..c38d6070d 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 @@ -414,7 +414,7 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { } func_80C208BC(this); } else if ((this->actor.xzDistToPlayer < 100.0f) && !(this->collider.base.acFlags & AC_HIT)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.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 648a13d46..e4026dfe5 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -162,7 +162,7 @@ void func_80953098(EnHs* this, PlayState* play) { this->actionFunc = func_8095345C; this->actor.flags |= ACTOR_FLAG_10000; this->stateFlags |= 0x10; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->stateFlags |= 8; if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) { @@ -264,10 +264,10 @@ void func_8095345C(EnHs* this, PlayState* play) { this->actionFunc = func_80953354; this->stateTimer = 40; } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); this->stateFlags |= 1; } else if ((this->actor.xzDistToPlayer < 120.0f) && Player_IsFacingActor(&this->actor, 0x2000, play)) { - func_800B8614(&this->actor, play, 130.0f); + Actor_OfferTalk(&this->actor, play, 130.0f); this->stateFlags |= 1; } else { this->stateFlags &= ~1; 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 abdf870b9..e7473e7d3 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -420,19 +420,18 @@ s32* func_80BF1920(EnIg* this, PlayState* play) { s32 func_80BF19A0(EnIg* this, PlayState* play) { s32 ret = false; - if (this->unk_3D0 & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_3D0, 0, 7); - this->unk_3F6 = 0; - this->unk_3F8 = NULL; - this->actor.child = this->unk_2A8; - this->unk_29C = func_80BF1920(this, play); - if ((this->scheduleResult != 2) && (this->scheduleResult != 3) && (this->scheduleResult != 4)) { - this->unk_3D0 |= 0x20; - } - this->actionFunc = func_80BF2BD4; - ret = true; + if (((this->unk_3D0 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->unk_3F6 = 0; + this->unk_3F8 = NULL; + this->actor.child = this->unk_2A8; + this->unk_29C = func_80BF1920(this, play); + if ((this->scheduleResult != 2) && (this->scheduleResult != 3) && (this->scheduleResult != 4)) { + this->unk_3D0 |= 0x20; } + this->actionFunc = func_80BF2BD4; + ret = true; } return ret; } @@ -531,7 +530,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_80BF1C44(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AN)) { func_80BF1284(this, 0); - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x20; this->unk_3D0 |= 0x100; sp2C = true; @@ -625,7 +624,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3D0 &= ~0x8; this->unk_3D0 &= ~0x10; - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; func_80BF1284(this, 2); this->actor.gravity = -1.0f; @@ -661,7 +660,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 2: this->actor.home.rot.y = this->actor.world.rot.y; this->actor.home.rot.y += 0x8000; - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; func_80BF1284(this, 1); break; @@ -669,7 +668,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 4: this->actor.world.rot.y += 0x8000; this->actor.shape.rot.y = this->actor.world.rot.y; - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; func_80BF1284(this, 8); break; @@ -834,7 +833,7 @@ s32 func_80BF293C(EnIg* this, PlayState* play) { func_80BF1284(this, 7); } } else if ((this->unk_3FC == 7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); func_80BF1284(this, 9); } return true; @@ -898,7 +897,7 @@ void func_80BF2BD4(EnIg* this, PlayState* play) { Vec3f sp2C; if (func_8010BF58(&this->actor, play, this->unk_29C, this->unk_3F8, &this->unk_2A0)) { - SubS_UpdateFlags(&this->unk_3D0, 3, 7); + SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 &= ~0x20; this->unk_3D0 |= 0x200; this->unk_3EE = 20; @@ -950,7 +949,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) { func_80BF1258(this); func_80BF13E4(this); func_80BF15EC(this); - func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & 7); + SubS_Offer(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & SUBS_OFFER_MODE_MASK); Actor_MoveWithGravity(&this->actor); 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_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 7ab1f4806..2631d3a89 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -344,7 +344,7 @@ void func_808F395C(EnIn* this, PlayState* play) { this->actionFunc = func_808F5A34; this->unk48C = 1; } else { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } } @@ -396,7 +396,7 @@ void func_808F3AD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -420,7 +420,7 @@ void func_808F3BD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -444,7 +444,7 @@ void func_808F3CD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -1378,10 +1378,10 @@ s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) { return 0; } if (this->actor.xyzDistToPlayerSq <= SQ(80.0f)) { - if (func_800B8614(&this->actor, play, 80.0f)) { + if (Actor_OfferTalk(&this->actor, play, 80.0f)) { this->actor.textId = func_808F3DD4(play, this, arg2); } - } else if (func_800B863C(&this->actor, play)) { + } else if (Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play)) { this->actor.textId = func_808F3DD4(play, this, arg2); } return 0; 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 fcbd26b2f..fe3ca06c8 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -123,8 +123,9 @@ void func_80BC1984(EnJa* this, PlayState* play) { s32 func_80BC19FC(EnJa* this, PlayState* play) { s32 ret = false; - if ((this->unk_340 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_340, 0, 7); + if (((this->unk_340 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = func_80BC22F4; ret = true; } @@ -243,7 +244,7 @@ s32 func_80BC1FC8(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_80BC1AE0(this, play)) { - SubS_UpdateFlags(&this->unk_340, 3, 7); + SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_340 |= 0x10; func_80BC192C(this, 5); func_80BC2EA4(this); @@ -261,7 +262,7 @@ s32 func_80BC203C(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { } else { func_80BC192C(this, 4); } - SubS_UpdateFlags(&this->unk_340, 3, 7); + SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actor.shape.shadowDraw = NULL; this->unk_340 |= 0x50; ret = true; @@ -335,7 +336,7 @@ s32* func_80BC2274(EnJa* this, PlayState* play) { void func_80BC22F4(EnJa* this, PlayState* play) { if (func_8010BF58(&this->actor, play, func_80BC2274(this, play), this->unk_368, &this->unk_1D8.unk_04)) { this->unk_340 &= ~8; - SubS_UpdateFlags(&this->unk_340, 3, 7); + SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_1D8.unk_04 = 0; this->unk_340 |= 0x10; this->actor.shape.rot.y = this->actor.world.rot.y; @@ -356,7 +357,7 @@ void EnJa_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; this->actor.uncullZoneForward = 800.0f; this->actor.gravity = 0.0f; - SubS_UpdateFlags(&this->unk_340, 0, 7); + SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_340 |= 0x10; this->unk_1D8.unk_00 = 0; this->unk_368 = NULL; @@ -385,7 +386,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + 30; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_340 & 7); + SubS_Offer(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_340 & SUBS_OFFER_MODE_MASK); if (this->unk_1D8.unk_00 != 2) { Actor_MoveWithGravity(&this->actor); 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 19836174c..dae36a035 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -353,7 +353,7 @@ void EnJg_GoronShrineIdle(EnJg* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnJg_GoronShrineTalk; } else if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->textId = EnJg_GetStartingConversationTextId(this, play); } } @@ -595,7 +595,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) { Message_StartTextbox(play, 0x236, &this->actor); // The old Goron is frozen solid! this->actionFunc = EnJg_EndFrozenInteraction; } else if (this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } } @@ -918,7 +918,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play this->actionFunc = EnJg_SetupTalk; } else { if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (this->action == EN_JG_ACTION_FIRST_THAW) { this->textId = EnJg_GetStartingConversationTextId(this, play); } 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 551b75eb5..2674c8dfb 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 @@ -184,9 +184,9 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { } func_80C14030(this); } else if (this->actor.flags & ACTOR_FLAG_10000) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } else { - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(player->stateFlags1 & PLAYER_STATE1_2000) && @@ -221,7 +221,7 @@ void func_80C13E90(EnJgameTsn* this, PlayState* play) { } func_80C14030(this); } else { - func_800B8614(&this->actor, play, 1000.0f); + Actor_OfferTalk(&this->actor, play, 1000.0f); } } @@ -401,7 +401,7 @@ void func_80C14610(EnJgameTsn* this, PlayState* play) { this->unk_300 = 0x10A4; func_80C14030(this); } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 ea5352a7e..6045da07b 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -608,7 +608,7 @@ void func_80969898(EnJs* this, PlayState* play) { case 0x2210: case 0x2211: case 0x2212: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969748; break; @@ -671,7 +671,7 @@ void func_80969B5C(EnJs* this, PlayState* play) { this->unk_2B4 = 0.0f; func_80969AA0(this, play); } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } func_80968CB8(this); } @@ -765,7 +765,7 @@ void func_80969DA4(EnJs* this, PlayState* play) { } break; case 0x2222: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; case 0x2223: @@ -791,7 +791,7 @@ void func_80969DA4(EnJs* this, PlayState* play) { case 0x221D: case 0x2220: case 0x2221: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969C54; break; @@ -830,7 +830,7 @@ void func_8096A104(EnJs* this, PlayState* play) { this->actionFunc = func_80969DA4; func_8096A080(this, play); } else if (func_80968DD0(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -858,7 +858,7 @@ void func_8096A1E8(EnJs* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_84_20); func_809696EC(this, 0); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -870,7 +870,7 @@ void func_8096A2C0(EnJs* this, PlayState* play) { this->actor.parent = NULL; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = func_8096A1E8; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_OfferGetItem(&this->actor, play, GI_MASK_FIERCE_DEITY, 10000.0f, 1000.0f); } @@ -1003,7 +1003,7 @@ void func_8096A6F4(EnJs* this, PlayState* play) { } if (!(this->unk_2B8 & 8) && (this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x1000)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 99a255ec2..9e3e56828 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -318,7 +318,7 @@ void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) { this->picto.actor.flags &= ~ACTOR_FLAG_10000; this->actionFunc = EnKakasi_RegularDialogue; } else { - func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); } } } @@ -368,7 +368,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_IDLE); } if (this->picto.actor.xzDistToPlayer < 120.0f) { - func_800B8614(&this->picto.actor, play, 100.0f); + Actor_OfferTalk(&this->picto.actor, play, 100.0f); func_800B874C(&this->picto.actor, play, 100.0f, 80.0f); } } @@ -1098,7 +1098,7 @@ void EnKakasi_IdleRisen(EnKakasi* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { this->actionFunc = EnKakasi_RisenDialogue; } else { - func_800B8614(&this->picto.actor, play, 70.0f); + Actor_OfferTalk(&this->picto.actor, play, 70.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 07892f9f0..4decf9ee6 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -186,7 +186,7 @@ void func_80954BE8(EnKanban* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->msgFlag = true; } else { - func_800B8614(&this->actor, play, 68.0f); + Actor_OfferTalk(&this->actor, play, 68.0f); } } } else { 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 6e4d55d28..da83290a9 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -283,7 +283,7 @@ void func_80B34314(EnKbt* this, PlayState* play) { default: break; } - func_800B8614(&this->actor, play, 260.0f); + Actor_OfferTalk(&this->actor, play, 260.0f); } } func_80B3415C(this); 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 77ad3e4c5..0b4fe5e68 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 @@ -211,7 +211,7 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) { func_80B26AE8(this); } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -500,7 +500,7 @@ void func_80B27030(EnKendoJs* this, PlayState* play) { this->unk_288 = 0x271A; func_80B26AE8(this); } else { - func_800B8614(&this->actor, play, 800.0f); + Actor_OfferTalk(&this->actor, play, 800.0f); } } } @@ -676,7 +676,7 @@ void func_80B27774(EnKendoJs* this, PlayState* play) { func_80B26AE8(this); player->stateFlags1 &= ~PLAYER_STATE1_20; } else { - func_800B85E0(&this->actor, play, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 1000.0f, PLAYER_IA_MINUS1); } } 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 fb87c3546..f015ddc5f 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -587,7 +587,7 @@ void func_80B41CBC(EnKgy* this, PlayState* play) { this->actionFunc = func_80B41E18; func_80B411DC(this, play, 4); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -596,7 +596,7 @@ void func_80B41D64(EnKgy* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actionFunc = func_80B41CBC; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f); } @@ -745,7 +745,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC46: case 0xC55: Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; this->unk_29C &= ~0x8; play->msgCtx.msgLength = 0; func_80B41368(this, play, 4); @@ -760,7 +760,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC47: func_80B40BC0(this, 1); if (this->unk_29C & 8) { - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; this->unk_29C &= ~8; } func_80B40EBC(this, play, textId); @@ -848,7 +848,7 @@ void func_80B425A0(EnKgy* this, PlayState* play) { func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); } else if (this->actor.xzDistToPlayer < 200.0f) { - func_800B8614(&this->actor, play, 210.0f); + Actor_OfferTalk(&this->actor, play, 210.0f); } } @@ -949,7 +949,7 @@ void func_80B4296C(EnKgy* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); } } @@ -1070,7 +1070,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { } else { this->actor.textId = 0xC1D; } - func_800B8614(&this->actor, play, 210.0f); + Actor_OfferTalk(&this->actor, play, 210.0f); } if ((this->unk_2D2 == 0) && (this->actor.xzDistToPlayer < 200.0f)) { 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 1800a3042..2700aa1f8 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -104,7 +104,7 @@ void EnKujiya_Wait(EnKujiya* this, PlayState* play) { (this->actor.shape.rot.y == 0)) { EnKujiya_SetupTurnToOpen(this); } else if (this->actor.xzDistToPlayer < 100.0f) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 5755d9f9b..e61db843a 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 @@ -505,9 +505,9 @@ void EnLiftNuts_Idle(EnLiftNuts* this, PlayState* play) { EnLiftNuts_SetupStartConversation(this); } else if (EnLiftNuts_Autotalk(this, ENLIFTNUTS_AUTOTALK_MODE_CHECK_OFF) || (this->autotalk == true)) { if (this->autotalk == true) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } else if (this->actor.playerHeightRel >= -13.0f) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000, 0x500); @@ -973,7 +973,7 @@ void EnLiftNuts_ResumeConversation(EnLiftNuts* this, PlayState* play) { break; } } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 8809fbff5..be08288b2 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -350,7 +350,7 @@ void EnMa4_Wait(EnMa4* this, PlayState* play) { EnMa4_SetupDialogueHandler(this); } else if (this->type != MA4_TYPE_ALIENS_WON || ABS_ALT(yaw) < 0x4000) { if (!(player->stateFlags1 & PLAYER_STATE1_800000)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } } @@ -683,7 +683,7 @@ void EnMa4_HorsebackGameCheckPlayerInteractions(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x336E, &this->actor); this->actionFunc = EnMa4_HorsebackGameTalking; } else if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < SECONDS_TO_TIMER(115)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -839,7 +839,7 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); sCueId = 99; this->hasBow = true; EnMa4_SetupEndEponasSongCs(this); @@ -861,7 +861,7 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; EnMa4_SetupDialogueHandler(this); } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 008507f9b..fe552a124 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 @@ -405,7 +405,7 @@ void EnMaYto_DefaultWait(EnMaYto* this, PlayState* play) { EnMaYto_DefaultStartDialogue(this, play); EnMaYto_SetupDefaultDialogueHandler(this); } else if (ABS_ALT(direction) < 0x1555) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -525,14 +525,14 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { EnMaYto_DinnerStartDialogue(this, play); EnMaYto_SetupDinnerDialogueHandler(this); } else if (ABS_ALT(direction) < 0x4000) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); child = this->actor.child; if ((child != NULL) && (CURRENT_DAY != 2)) { s16 childDirection = child->shape.rot.y - child->yawTowardsPlayer; if (ABS_ALT(childDirection) < 0x4000) { - func_800B8614(child, play, 120.0f); + Actor_OfferTalk(child, play, 120.0f); } } } @@ -723,11 +723,11 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || (ABS_ALT(direction) < 0x2000)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); child = this->actor.child; if (child != NULL) { - func_800B8614(child, play, 100.0f); + Actor_OfferTalk(child, play, 100.0f); } } } @@ -914,7 +914,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { EnMaYto_SetupAfterMilkRunDialogueHandler(this); } else { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } } @@ -1006,7 +1006,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 faa78983f..8bded501d 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 @@ -349,7 +349,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { } EnMaYts_SetupDialogueHandler(this); } else if (ABS_ALT(sp26) < 0x4000) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 339fe91e4..3ffaa1635 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -324,7 +324,7 @@ void EnMinifrog_Idle(EnMinifrog* this, PlayState* play) { } } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && (Player_GetMask(play) == PLAYER_MASK_DON_GERO)) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } @@ -464,7 +464,7 @@ void EnMinifrog_EndChoir(EnMinifrog* this, PlayState* play) { Message_StartTextbox(play, 0xD7E, &this->actor); this->actionFunc = EnMinifrog_YellowFrogDialog; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -475,7 +475,7 @@ void EnMinifrog_GetFrogHP(EnMinifrog* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnMinifrog_EndChoir; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); } else { Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 10000.0f, 50.0f); } @@ -563,7 +563,7 @@ void EnMinifrog_SetupYellowFrogDialog(EnMinifrog* this, PlayState* play) { (Player_IsFacingActor(&this->actor, 0x3000, play) || CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) && Player_GetMask(play) == PLAYER_MASK_DON_GERO) { - func_800B8614(&this->actor, play, 160.0f); + Actor_OfferTalk(&this->actor, play, 160.0f); } } 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 17396969a..23f28262c 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -194,7 +194,7 @@ void func_80959774(EnMk* this, PlayState* play) { func_80959624(this, play); this->actionFunc = func_809596A0; } else if ((this->actor.xzDistToPlayer < 120.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 130.0f); + Actor_OfferTalk(&this->actor, play, 130.0f); } func_8095954C(this, play); @@ -368,7 +368,7 @@ void func_80959C94(EnMk* this, PlayState* play) { Message_StartTextbox(play, 0xFB3, &this->actor); } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -430,7 +430,7 @@ void func_80959E18(EnMk* this, PlayState* play) { this->actionFunc = func_80959C94; } else if ((this->actor.xzDistToPlayer < 120.0f) && (ABS_ALT(sp22) <= 0x4300)) { this->unk_27A |= 1; - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { func_800B874C(&this->actor, play, 200.0f, 100.0f); } diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c index 5c6adcd8a..64cc47ad8 100644 --- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c +++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c @@ -69,7 +69,7 @@ void EnMm2_WaitForRead(EnMm2* this, PlayState* play) { Message_StartTextbox(play, 0x277B, &this->actor); this->actionFunc = EnMm2_Reading; } else if ((this->actor.xzDistToPlayer < 60.0f) && (Player_IsFacingActor(&this->actor, 0x3000, play))) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.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 de2896c28..7065985e8 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -133,7 +133,7 @@ void func_80A6F2C8(EnMm3* this, PlayState* play) { this->unk_2B4 = 0x278A; func_80A6F9C8(this); } else if (func_80A6F22C(this)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } Math_SmoothStepToS(&this->unk_2A0.x, 0, 5, 0x1000, 0x100); @@ -409,7 +409,7 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_START_SHOT); func_80A6F9C8(this); } else { - func_800B8614(&this->actor, play, this->actor.xzDistToPlayer + 10.0f); + Actor_OfferTalk(&this->actor, play, this->actor.xzDistToPlayer + 10.0f); func_80123E90(play, &this->actor); if (Player_GetMask(play) == PLAYER_MASK_BUNNY) { Audio_PlaySfx(NA_SE_SY_STOPWATCH_TIMER_INF - SFX_FLAG); @@ -453,7 +453,7 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; func_80A6F9C8(this); } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 41334cc7e..1e3a3d8bd 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -92,7 +92,7 @@ void EnMs_Wait(EnMs* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnMs_Talk; } else if ((this->actor.xzDistToPlayer < 90.0f) && (ABS_ALT(yawDiff) < 0x2000)) { - func_800B8614(&this->actor, play, 90.0f); + Actor_OfferTalk(&this->actor, play, 90.0f); } } @@ -149,7 +149,8 @@ void EnMs_Talk(EnMs* this, PlayState* play) { void EnMs_Sell(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); this->actionFunc = EnMs_TalkAfterPurchase; } else { Actor_OfferGetItem(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer, this->actor.playerHeightRel); @@ -161,7 +162,8 @@ void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play) { Message_ContinueTextbox(play, 0x936); // "You can plant 'em whenever you want [...]" this->actionFunc = EnMs_Talk; } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_MINUS1); } } 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 6eceb89d6..f86530ed9 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -177,7 +177,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) { } } - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } void EnMuto_SetupDialogue(EnMuto* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 133624f0f..21146f379 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -26,9 +26,6 @@ s32 func_80BC00AC(Actor* thisx, PlayState* play); s32 func_80BC01DC(Actor* thisx, PlayState* play); #define EN_NB_FLAG_NONE (0) -#define EN_NB_FLAG_1 (1 << 0) -#define EN_NB_FLAG_2 (1 << 1) -#define EN_NB_FLAG_4 (1 << 2) #define EN_NB_FLAG_8 (1 << 3) #define EN_NB_FLAG_10 (1 << 4) #define EN_NB_FLAG_20 (1 << 5) @@ -403,18 +400,17 @@ u8* func_80BC045C(EnNb* this, PlayState* play) { s32 func_80BC04FC(EnNb* this, PlayState* play) { s32 ret = false; - if (this->stateFlags & (EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4)) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->stateFlags |= EN_NB_FLAG_20; - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_NONE, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); - this->behaviour = ENNB_BEHAVIOUR_0; - this->msgEventCallback = NULL; - this->actor.child = this->unk_1E8; - this->msgEventScript = func_80BC045C(this, play); - this->stateFlags |= EN_NB_FLAG_20; - this->actionFunc = func_80BC0EAC; - ret = true; - } + if (((this->stateFlags & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + this->stateFlags |= EN_NB_FLAG_20; + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->behaviour = ENNB_BEHAVIOUR_0; + this->msgEventCallback = NULL; + this->actor.child = this->unk_1E8; + this->msgEventScript = func_80BC045C(this, play); + this->stateFlags |= EN_NB_FLAG_20; + this->actionFunc = func_80BC0EAC; + ret = true; } return ret; } @@ -576,7 +572,7 @@ s32 func_80BC0B98(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 success = false; if (EnNb_FindActor(this, play, ACTORCAT_NPC, ACTOR_EN_AN) != NULL) { - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->stateFlags |= EN_NB_FLAG_20; EnNb_ChangeAnim(this, EN_NB_ANIM_0); success = true; @@ -587,9 +583,9 @@ s32 func_80BC0B98(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BC0C0C(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (!CHECK_EVENTINF(EVENTINF_43)) { - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); } EnNb_ChangeAnim(this, EN_NB_ANIM_0); @@ -668,7 +664,7 @@ void func_80BC0EAC(EnNb* this, PlayState* play) { CLEAR_EVENTINF(EVENTINF_43); } - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); if (this->scheduleResult != EN_NB_SCH_2) { this->stateFlags &= ~EN_NB_FLAG_20; } @@ -696,7 +692,7 @@ void EnNb_Init(Actor* thisx, PlayState* play) { this->stateFlags = EN_NB_FLAG_NONE; if (CHECK_EVENTINF(EVENTINF_43)) { - SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); } else { CLEAR_EVENTINF(EVENTINF_42); CLEAR_EVENTINF(EVENTINF_43); @@ -724,8 +720,8 @@ void EnNb_Update(Actor* thisx, PlayState* play) { EnNb_UpdateSkelAnime(this); func_80BC0800(this); if (Actor_IsFacingPlayer(&this->actor, 0x38E0)) { - func_8013C964(&this->actor, play, this->unk_274, 30.0f, ITEM_OCARINA_OF_TIME, - this->stateFlags & (EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4)); + SubS_Offer(&this->actor, play, this->unk_274, 30.0f, PLAYER_IA_NONE, + this->stateFlags & SUBS_OFFER_MODE_MASK); } func_80BBFF24(this, play); } diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index 3b2659d1e..f0d84366c 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -80,7 +80,7 @@ void EnNnh_WaitForDialogue(EnNnh* this, PlayState* play) { Message_StartTextbox(play, 0x228, &this->actor); EnNnh_SetupDialogue(this); } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 58b9dc88f..dbc42f0d8 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -158,7 +158,7 @@ void func_80B121D8(EnOnpuman* this, PlayState* play) { if (this->actor.xzDistToPlayer < 200.0f) { if (ABS_ALT(yaw) <= 0x4300) { this->actor.textId = 0x8D3; - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); func_800B874C(&this->actor, play, 100.0f, 100.0f); } } 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 f209caa1c..72c71f878 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -726,7 +726,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { this->actionFunc = EnOsn_StartCutscene; } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && (yaw > -0x4000)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xFFFF; } } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -734,7 +734,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnOsn_Talk; } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && (yaw > -0x4000)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 0b6c36d4b..21d80e177 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -384,7 +384,7 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) { if ((this->actor.xzDistToPlayer < 100.0f) && (player->actor.world.pos.x >= -40.0f) && (player->actor.world.pos.x <= 40.0f) && (player->actor.world.pos.z >= -91.0f) && (player->actor.world.pos.z <= -60.0f)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } if (this->actor.params == ENOSSAN_PART_TIME_WORKER) { Math_SmoothStepToS(&this->partTimerHeadRot.y, 8000, 3, 2000, 0); @@ -1134,7 +1134,7 @@ void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) { this->csId = this->lookToShopkeeperCsId; CutsceneManager_Queue(this->csId); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1157,7 +1157,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); break; case 1: @@ -1176,7 +1176,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); } } @@ -1200,7 +1200,7 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_ContinueTextbox(play, 0x642); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } 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 8dd771bd8..ab2e30cee 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -537,7 +537,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { func_80B5D114(this, play); } else if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !func_801242B4(player) && (this->actor.xzDistToPlayer < 130.0f)) { - func_800B8614(&this->actor, play, 130.0f); + Actor_OfferTalk(&this->actor, play, 130.0f); } } } @@ -606,7 +606,8 @@ void func_80B5CB0C(EnOt* this, PlayState* play) { void func_80B5CBA0(EnOt* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); this->actionFunc = func_80B5CBEC; } @@ -617,7 +618,8 @@ void func_80B5CBEC(EnOt* this, PlayState* play) { } else { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); this->actor.world.rot.y = this->actor.shape.rot.y; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); } } @@ -696,12 +698,13 @@ void func_80B5CEC8(EnOt* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); if (this->unk_32C & 0x800) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !func_801242B4(player) && (this->actor.xzDistToPlayer < 130.0f)) { - func_800B8614(&this->actor, play, 130.0f); + Actor_OfferTalk(&this->actor, play, 130.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 e53d94b94..be751400f 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -232,7 +232,7 @@ s32 func_8095A978(EnOwl* this, PlayState* play, u16 textId, f32 targetDist, f32 this->actor.textId = textId; if (this->actor.xzDistToPlayer < targetDist) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, targetDist, arg4, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, targetDist, arg4, PLAYER_IA_NONE); } return false; @@ -245,7 +245,7 @@ s32 func_8095A9FC(EnOwl* this, PlayState* play, u16 textId) { this->actor.textId = textId; if (this->actor.xzDistToPlayer < 120.0f) { - func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_NONE); } return false; @@ -514,7 +514,7 @@ void func_8095B574(EnOwl* this, PlayState* play) { this->csIdIndex = 2; } else if (this->actor.xzDistToPlayer < 200.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 200.0f, 400.0f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; } @@ -742,11 +742,11 @@ void func_8095BE0C(EnOwl* this, PlayState* play) { this->actionFlags |= 0x40; } else if (this->actor.textId == 0xBF0) { if (this->actor.isTargeted) { - func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } } else if (this->actor.xzDistToPlayer < 200.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; } 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 989f1e84f..5b42b2bfd 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -621,7 +621,7 @@ void func_80BD994C(EnPamera* this, PlayState* play) { } func_80BD9A9C(this); } else { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 072f6d6ac..b6b7c8866 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -999,8 +999,9 @@ UNK_TYPE* func_80AF8540(EnPm* this, PlayState* play) { s32 func_80AF86F0(EnPm* this, PlayState* play) { s32 ret = false; - if ((this->unk_356 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_356, 0, 7); + if (((this->unk_356 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_398 = 0; this->unk_378 = 0; this->unk_37C = NULL; @@ -1343,7 +1344,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { break; default: - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); func_80AF7E98(this, 0); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; @@ -1440,7 +1441,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROOM_CARTAIN); Flags_SetSwitch(play, 0); this->unk_36C = 20; - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); func_80AF7E98(this, 3); break; @@ -1470,7 +1471,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (scheduleOutput->result == 29) { this->actor.world.rot.y = BINANG_ROT180(this->actor.world.rot.y); } - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_356 |= 0x9000; func_80AF7E98(this, 3); break; @@ -1499,7 +1500,7 @@ s32 func_80AF992C(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80AFB8EC); Math_Vec3s_Copy(&this->actor.world.rot, &D_80AFB8F8); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actor.targetMode = 6; this->actor.gravity = -1.0f; this->unk_368 = 80.0f; @@ -1517,7 +1518,7 @@ s32 func_80AF9A0C(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_80AF8ED4(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AN)) { - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_356 |= 0x20; this->unk_356 |= 0x9000; if (this->unk_258 != 0) { @@ -1535,7 +1536,7 @@ s32 func_80AF9AB0(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_80AF8ED4(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TEST3)) { - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_356 |= 0x20; this->unk_356 |= 0x9000; if (this->unk_258 != 0) { @@ -1553,7 +1554,7 @@ s32 func_80AF9B54(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_80AF8ED4(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AL)) { - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_356 |= 0x9000; this->unk_356 |= 0x20; if (this->unk_258 != 0) { @@ -1854,9 +1855,9 @@ s32 func_80AFA334(EnPm* this, PlayState* play) { case 24: temp_v0 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; if (ABS_ALT(temp_v0) < 0x4000) { - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_356, 0, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } break; @@ -2024,7 +2025,7 @@ void func_80AFA5FC(EnPm* this, PlayState* play) { Vec3f sp2C; if (func_8010BF58(&this->actor, play, this->unk_25C, this->unk_37C, &this->unk_264)) { - SubS_UpdateFlags(&this->unk_356, 3, 7); + SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_356 &= ~0x20; this->unk_356 |= 0x200; this->actor.child = NULL; @@ -2093,7 +2094,7 @@ void EnPm_Update(Actor* thisx, PlayState* play) { func_80AF8DD4(this, play); func_80AF7E6C(this); func_80AF8AC8(this); - func_8013C964(&this->actor, play, this->unk_368, 30.0f, this->unk_394, this->unk_356 & 7); + SubS_Offer(&this->actor, play, this->unk_368, 30.0f, this->unk_394, this->unk_356 & SUBS_OFFER_MODE_MASK); Actor_MoveWithGravity(&this->actor); 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_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index 7a507e0ef..92edec67a 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -208,7 +208,7 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) { itemAction = func_80123810(play); scriptBranch = 0; if ((itemAction == PLAYER_IA_LETTER_TO_KAFEI) || (itemAction == PLAYER_IA_LETTER_MAMA)) { - this->exchangeItemId = itemAction; + this->exchangeItemAction = itemAction; this->behaviour++; scriptBranch = 1; } else if (itemAction <= PLAYER_IA_MINUS1) { @@ -223,7 +223,7 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) { } break; case POSTBOX_BEHAVIOUR_TAKE_ITEM: - if (this->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) { + if (this->exchangeItemAction == PLAYER_IA_LETTER_TO_KAFEI) { scriptBranch = 1; } break; @@ -252,7 +252,7 @@ s32* EnPst_GetMsgEventScript(EnPst* this, PlayState* play) { return NULL; } } else if (this->stateFlags & 0x20) { - if (this->exchangeItemId == PLAYER_IA_LETTER_MAMA) { + if (this->exchangeItemAction == PLAYER_IA_LETTER_MAMA) { return D_80B2C488; } else { return D_80B2C490; @@ -280,32 +280,31 @@ s32 EnPst_CheckTalk(EnPst* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 ret = false; - if (this->stateFlags & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->stateFlags &= ~0x30; - if (player->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) { - this->stateFlags |= 0x10; - this->exchangeItemId = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_IA_NONE) { - this->stateFlags |= 0x20; - this->exchangeItemId = player->exchangeItemId; - } - // If Letter to Kafei is deposited, value is set to 2 - this->isLetterToKafeiDeposited = EnPst_HandleLetterDay1(this); - SubS_UpdateFlags(&this->stateFlags, 0, 7); - this->behaviour = 0; - this->msgEventCallback = NULL; - this->stateFlags |= 0x40; - this->msgEventScript = EnPst_GetMsgEventScript(this, play); - this->actionFunc = EnPst_Talk; - ret = true; + if (((this->stateFlags & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + this->stateFlags &= ~0x30; + if (player->exchangeItemAction == PLAYER_IA_LETTER_TO_KAFEI) { + this->stateFlags |= 0x10; + this->exchangeItemAction = player->exchangeItemAction; + } else if (player->exchangeItemAction != PLAYER_IA_NONE) { + this->stateFlags |= 0x20; + this->exchangeItemAction = player->exchangeItemAction; } + // If Letter to Kafei is deposited, value is set to 2 + this->isLetterToKafeiDeposited = EnPst_HandleLetterDay1(this); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->behaviour = 0; + this->msgEventCallback = NULL; + this->stateFlags |= 0x40; + this->msgEventScript = EnPst_GetMsgEventScript(this, play); + this->actionFunc = EnPst_Talk; + ret = true; } return ret; } -s32 EnPst_UpdateFlagsSubs(EnPst* this, PlayState* play, ScheduleOutput* scheduleOutput) { - SubS_UpdateFlags(&this->stateFlags, 3, 7); +s32 EnPst_SetOfferItemModeOnScreen(EnPst* this, PlayState* play, ScheduleOutput* scheduleOutput) { + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); return true; } @@ -316,8 +315,9 @@ s32 EnPst_ProcessScheduleOutput(EnPst* this, PlayState* play, ScheduleOutput* sc switch (scheduleOutput->result) { case POSTBOX_SCH_AVAILABLE: - ret = EnPst_UpdateFlagsSubs(this, play, scheduleOutput); + ret = EnPst_SetOfferItemModeOnScreen(this, play, scheduleOutput); break; + case POSTBOX_SCH_CHECKED_BY_POSTMAN: ret = true; break; @@ -373,7 +373,7 @@ void EnPst_Talk(EnPst* this, PlayState* play) { break; } } - SubS_UpdateFlags(&this->stateFlags, 3, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->msgEventArg4 = 0; this->actionFunc = EnPst_FollowSchedule; } @@ -388,7 +388,7 @@ void EnPst_Init(Actor* thisx, PlayState* play) { POSTBOX_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); - SubS_UpdateFlags(&this->stateFlags, 3, 7); + SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.02f); @@ -410,7 +410,7 @@ void EnPst_Update(Actor* thisx, PlayState* play) { if (this->scheduleResult != POSTBOX_SCH_NONE) { if (Actor_IsFacingPlayer(&this->actor, 0x1FFE)) { this->unk214 = 0; - func_8013C964(&this->actor, play, 60.0f, 20.0f, 0, this->stateFlags & 7); + SubS_Offer(&this->actor, play, 60.0f, 20.0f, PLAYER_IA_NONE, this->stateFlags & SUBS_OFFER_MODE_MASK); } Actor_SetFocus(&this->actor, 20.0f); EnPst_UpdateCollision(this, play); diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.h b/src/overlays/actors/ovl_En_Pst/z_en_pst.h index c3ebd58a8..9a47181e8 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.h +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.h @@ -32,7 +32,7 @@ typedef struct EnPst { /* 0x20E */ s16 behaviour; /* 0x210 */ MsgEventFunc msgEventCallback; /* 0x214 */ s32 unk214; // Set and not used - /* 0x218 */ s32 exchangeItemId; + /* 0x218 */ s32 exchangeItemAction; /* 0x21C */ s32 isLetterToKafeiDeposited; } EnPst; // size = 0x220 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 bb8f9b9cf..b2ada549f 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 @@ -499,7 +499,7 @@ void func_80B716A8(EnRailSkb* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); func_80B717C8(this); } else if ((this->actor.xzDistToPlayer < 100.0f) && !(this->collider.base.acFlags & AC_HIT)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 1, 0x71C, 0xB6); } 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 3cc86dfe3..30dd6ced2 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -966,7 +966,7 @@ void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play) { this->actor.speed = 0.0f; } else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_8)) && !(this->collider.base.acFlags & AC_HIT)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } else { switch (Message_GetState(&play->msgCtx)) { diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 3632efa2a..6b2f86f53 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -103,7 +103,7 @@ void EnRecepgirl_Wait(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { EnRecepgirl_SetupTalk(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?" } else if (Flags_GetSwitch(play, this->actor.params)) { 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 582ea3a62..cb22f557a 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -750,7 +750,10 @@ void EnRg_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; this->unk_310 = 8; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_310, 3, 7); + + // This is the only usage of this function whose actor does not use `SubS_Offer`. + // Since these bits go unused, it seems like a copy paste that still used `SubSOfferMode` + SubS_SetOfferMode(&this->unk_310, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) { this->unk_318 = Rand_S16Offset(30, 30); @@ -843,7 +846,7 @@ s32 func_80BF5588(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s break; } - if (((this->unk_310 & 8) != 0) && (fidgetIndex < 9)) { + if ((this->unk_310 & 8) && (fidgetIndex < 9)) { rot->y += (s16)(Math_SinS(this->fidgetTableY[fidgetIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->fidgetTableZ[fidgetIndex]) * 200.0f); } 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 52b2ac296..520a01f82 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -536,10 +536,10 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { } else if (EnRz_CanTalk(this, play)) { if (func_80BFBCEC(this, play) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04) && this->sister != NULL) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->actor.flags &= ~ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -572,7 +572,7 @@ void func_80BFC674(EnRz* this, PlayState* play) { Message_StartTextbox(play, 0x2924, &this->actor); } } else if (EnRz_CanTalk(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -609,7 +609,7 @@ void func_80BFC7E0(EnRz* this, PlayState* play) { this->actor.speed = 0.0f; func_80BFBDFC(play); } else if (EnRz_CanTalk(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -644,7 +644,7 @@ void EnRz_Walk(EnRz* this, PlayState* play) { this->actor.speed = 0.0f; func_80BFBDFC(play); } else if (EnRz_CanTalk(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 96b4edea0..ecc9017c5 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 @@ -1114,7 +1114,7 @@ void EnSGoro_WinterShrineGoron_Idle(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_WinterShrineGoron_Talk; } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; @@ -1145,7 +1145,7 @@ void EnSGoro_SpringShrineGoron_Idle(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_SpringShrineGoron_Talk; } else if ((this->actor.xzDistToPlayer < 250.0f) || (this->actor.isTargeted)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; @@ -1186,7 +1186,7 @@ void EnSGoro_ShopGoron_Idle(EnSGoro* this, PlayState* play) { this->actionFunc = EnSGoro_ShopGoron_Talk; } } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; @@ -1271,7 +1271,7 @@ void EnSGoro_ShopGoron_FinishTransaction(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_ShopGoron_Talk; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1280,7 +1280,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, 0x23A, &this->actor); this->actionFunc = EnSGoro_SleepTalk; } else if (this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } EnSGoro_UpdateSleeping(this, play); } 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 085610542..fdab2ca4f 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -302,7 +302,7 @@ void func_80BCB52C(EnScopenuts* this, PlayState* play) { } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || this->actor.isTargeted) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { this->unk_348 = 4; @@ -360,7 +360,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { } } } else if (talkState == TEXT_STATE_DONE) { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_80BCB980; } } @@ -382,7 +382,7 @@ void func_80BCB980(EnScopenuts* this, PlayState* play) { Message_StartTextbox(play, this->unk_33C, &this->actor); this->actionFunc = func_80BCB6D0; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } 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 e26c1769e..885ab2717 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -162,7 +162,7 @@ void func_80A450B0(EnSekihi* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { this->actionFunc = func_80A44F40; } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) && (Player_IsFacingActor(&this->dyna.actor, 0x2600, play))) { - func_800B8614(&this->dyna.actor, play, 120.0f); + Actor_OfferTalk(&this->dyna.actor, play, 120.0f); } } 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 6e54b9be6..d03f411cf 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -341,7 +341,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x7D0, 0); this->actor.world.rot.y = this->actor.shape.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (Player_GetExchangeItemId(play) == PLAYER_IA_MOONS_TEAR) { + if (Player_GetExchangeItemAction(play) == PLAYER_IA_MOONS_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; this->actionFunc = func_80ADBAB8; @@ -382,7 +382,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { } else if (((this->actor.xzDistToPlayer < 80.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || this->actor.isTargeted) { - func_800B85E0(&this->actor, play, 80.0f, PLAYER_IA_MOONS_TEAR); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 80.0f, PLAYER_IA_MOONS_TEAR); if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { this->unk_33A = 2; @@ -426,7 +426,7 @@ void func_80ADB924(EnSellnuts* this, PlayState* play) { if (itemAction == PLAYER_IA_MOONS_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = func_80ADBAB8; } else { player->actor.textId = D_80ADD920[this->unk_33A]; @@ -492,14 +492,14 @@ void func_80ADBC60(EnSellnuts* this, PlayState* play) { Message_StartTextbox(play, this->unk_340, &this->actor); this->actionFunc = func_80ADB0D8; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->unk_340 = D_80ADD930[this->unk_33A]; } } void func_80ADBCE4(EnSellnuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->unk_340 = D_80ADD930[this->unk_33A]; this->actionFunc = func_80ADBC60; } @@ -713,7 +713,7 @@ void func_80ADC5A4(EnSellnuts* this, PlayState* play) { } } else if (func_80ADB08C(play) < 80.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, this->actor.xzDistToPlayer); + Actor_OfferTalk(&this->actor, play, this->actor.xzDistToPlayer); } } @@ -860,7 +860,7 @@ void func_80ADCC04(EnSellnuts* this, PlayState* play) { if (currentFrame == 0) { if (func_80ADB08C(play) < 9999.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 9999.0f); + Actor_OfferTalk(&this->actor, play, 9999.0f); } this->unk_340 = 0x626; this->unk_34C = 0; diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 93a663838..06491bba5 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -290,25 +290,24 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 ret = false; - if (this->unk_1D8 & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->unk_1D8 &= ~0x180; - if (player->exchangeItemId == PLAYER_IA_PICTOGRAPH_BOX) { - this->unk_1D8 |= 0x80; - this->unk_2E4 = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_IA_NONE) { - this->unk_1D8 |= 0x100; - this->unk_2E4 = player->exchangeItemId; - } - SubS_UpdateFlags(&this->unk_1D8, 0, 7); - this->unk_1DC = func_80AE6880(this, play); - this->unk_2C6 = 0; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) { - this->unk_1D8 |= 8; - } - this->actionFunc = func_80AE6A64; - ret = true; + if (((this->unk_1D8 & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + this->unk_1D8 &= ~0x180; + if (player->exchangeItemAction == PLAYER_IA_PICTOGRAPH_BOX) { + this->unk_1D8 |= 0x80; + this->unk_2E4 = player->exchangeItemAction; + } else if (player->exchangeItemAction != PLAYER_IA_NONE) { + this->unk_1D8 |= 0x100; + this->unk_2E4 = player->exchangeItemAction; } + SubS_SetOfferMode(&this->unk_1D8, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->unk_1DC = func_80AE6880(this, play); + this->unk_2C6 = 0; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) { + this->unk_1D8 |= 8; + } + this->actionFunc = func_80AE6A64; + ret = true; } return ret; } @@ -328,7 +327,7 @@ void func_80AE6A64(EnShn* this, PlayState* play) { Vec3f shnPos; if (func_8010BF58(&this->actor, play, this->unk_1DC, this->unk_2D8, &this->unk_1E0)) { - SubS_UpdateFlags(&this->unk_1D8, 3, 7); + SubS_SetOfferMode(&this->unk_1D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_1D8 &= ~8; this->unk_1D8 |= 0x20; this->unk_2CA = 20; @@ -361,10 +360,10 @@ void EnShn_Init(Actor* thisx, PlayState* play) { this->unk_2D8 = 0; this->unk_1D8 = 0; if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 2)) { - SubS_UpdateFlags(&this->unk_1D8, 3, 7); + SubS_SetOfferMode(&this->unk_1D8, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2BE = 0; } else { - SubS_UpdateFlags(&this->unk_1D8, 4, 7); + SubS_SetOfferMode(&this->unk_1D8, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->unk_2BE = 1; } this->actionFunc = func_80AE69E8; @@ -382,7 +381,7 @@ void EnShn_Update(Actor* thisx, PlayState* play) { func_80AE6130(this); func_80AE63A8(this, play); this->unk_2E0 = 0; - func_8013C964(&this->actor, play, 120.0f, 40.0f, PLAYER_IA_NONE, this->unk_1D8 & 7); + SubS_Offer(&this->actor, play, 120.0f, 40.0f, PLAYER_IA_NONE, this->unk_1D8 & SUBS_OFFER_MODE_MASK); } s32 EnShn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { 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 a8167009c..1df91a4f0 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -327,7 +327,7 @@ void func_80994F7C(EnSkb* this, PlayState* play) { this->actionFunc = func_80995190; this->actor.speed = 0.0f; } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && !(this->collider.base.acFlags & AC_HIT)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -357,7 +357,7 @@ void func_80995068(EnSkb* this, PlayState* play) { this->actor.colChkInfo.mass = MASS_HEAVY; func_80995A30(this); } else if (!(this->collider.base.acFlags & AC_HIT)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 cf51ba7d6..ebe1589c3 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -571,7 +571,7 @@ void EnSob1_Idle(EnSob1* this, PlayState* play) { player->actor.world.pos.x <= this->posXZRange.xMax) && (player->actor.world.pos.z >= this->posXZRange.zMin && player->actor.world.pos.z <= this->posXZRange.zMax)) { - func_800B8614(&this->actor, play, 400.0f); + Actor_OfferTalk(&this->actor, play, 400.0f); } if (this->wasTalkedToWhileWalking == true) { this->wasTalkedToWhileWalking = false; @@ -826,7 +826,7 @@ void EnSob1_Walking(EnSob1* this, PlayState* play) { player->actor.world.pos.x <= this->posXZRange.xMax) && (player->actor.world.pos.z >= this->posXZRange.zMin && player->actor.world.pos.z <= this->posXZRange.zMax)) { - func_800B8614(&this->actor, play, 400.0f); + Actor_OfferTalk(&this->actor, play, 400.0f); } } } @@ -851,7 +851,7 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_ContinueTextbox(play, 0x647); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1120,7 +1120,7 @@ void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) { this->csId = this->lookToShopkeeperCsId; CutsceneManager_Queue(this->csId); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1136,7 +1136,7 @@ void EnSob1_ContinueShopping(EnSob1* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->welcomeTextId, &this->actor); EnSob1_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } 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 9bc9dc78c..7c5fdce36 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -750,7 +750,7 @@ void EnSsh_Idle(EnSsh* this, PlayState* play) { if ((this->unkTimer == 0) && (this->animTimer == 0) && (this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } 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 7e3b9ead6..c19dc5b36 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -247,7 +247,7 @@ void EnSth_PanicIdle(EnSth* this, PlayState* play) { EnSth_GetInitialPanicText(this, play); this->actionFunc = EnSth_HandlePanicConversation; } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } @@ -310,7 +310,7 @@ void EnSth_PostOceanspiderhouseReward(EnSth* this, PlayState* play) { } Message_StartTextbox(play, nextTextId, &this->actor); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -321,7 +321,7 @@ void EnSth_GiveOceansideSpiderHouseReward(EnSth* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnSth_PostOceanspiderhouseReward; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); if (CURRENT_DAY == 3) { EnSth_ChangeAnim(this, STH_ANIM_PLEAD); } else { @@ -434,7 +434,7 @@ void EnSth_OceansideSpiderHouseIdle(EnSth* this, PlayState* play) { EnSth_GetInitialOceansideSpiderHouseText(this, play); this->actionFunc = EnSth_HandleOceansideSpiderHouseConversation; } else if (EnSth_CanSpeakToPlayer(this, play)) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } @@ -459,7 +459,7 @@ void EnSth_MoonLookingIdle(EnSth* this, PlayState* play) { } else { this->actor.textId = 0x1131; // (The Moon) gotten bigger again } - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } this->headRot.x = -0x1388; } @@ -510,7 +510,7 @@ void EnSth_TalkAfterSwampSpiderHouseGiveMask(EnSth* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH); Message_StartTextbox(play, 0x918, &this->actor); // I've had enough of this, going home } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -521,7 +521,7 @@ void EnSth_SwampSpiderHouseGiveMask(EnSth* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnSth_TalkAfterSwampSpiderHouseGiveMask; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->sthFlags &= ~STH_FLAG_DRAW_MASK_OF_TRUTH; // This flag is used to keep track if the player has already spoken to the actor, triggering secondary dialogue. @@ -593,7 +593,7 @@ void EnSth_SwampSpiderHouseIdle(EnSth* this, PlayState* play) { this->actionFunc = EnSth_HandleSwampSpiderHouseConversation; } else if (EnSth_CanSpeakToPlayer(this, play)) { this->actor.textId = 0; - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } 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 3a32031d3..534f77cb4 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 @@ -197,7 +197,7 @@ void func_80BC9560(EnStoneheishi* this, PlayState* play) { yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y)); if ((yawDiff <= 0x18F0) && !(player->stateFlags1 & PLAYER_STATE1_800000)) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } @@ -328,7 +328,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) { play->msgCtx.msgLength = 0; player->actor.textId = 0; - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; this->bottleDisplay = EN_STONE_BOTTLE_RED_POTION; if (this->playerGivesBluePotion) { @@ -398,7 +398,7 @@ void func_80BC9D28(EnStoneheishi* this, PlayState* play) { this->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex]; SET_WEEKEVENTREG(WEEKEVENTREG_41_40); Actor_ProcessTalkRequest(&this->actor, &play->state); - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_80BC9E50; } else if (INV_CONTENT(ITEM_MASK_STONE) == ITEM_MASK_STONE) { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f); @@ -416,7 +416,7 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) { this->action = EN_STONE_ACTION_1; this->actionFunc = func_80BC9680; } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } 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 cfb073029..fae0a1246 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 @@ -500,7 +500,7 @@ void func_80AE7F34(EnStopheishi* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; func_80AE854C(this, play); } else if (yawDiffAbs < 0x4BB9) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } 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 c1d833c71..b88f7f6c6 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1079,7 +1079,7 @@ void func_80BACA14(EnSuttari* this, PlayState* play) { func_80BAAB78(this, play); this->actionFunc = func_80BADA9C; } else if (this->actor.xzDistToPlayer < 200.0f) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } } Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 0.1f); @@ -1192,7 +1192,7 @@ void func_80BAD004(EnSuttari* this, PlayState* play) { Message_StartTextbox(play, 0x2A3A, &this->actor); this->actionFunc = func_80BAD130; } else if ((this->actor.xzDistToPlayer < 200.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Actor_MoveWithGravity(&this->actor); } @@ -1325,7 +1325,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } Actor_MoveWithGravity(&this->actor); @@ -1362,7 +1362,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } Actor_MoveWithGravity(&this->actor); @@ -1376,7 +1376,7 @@ void func_80BADA08(EnSuttari* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_81_04); } else if (this->actor.xzDistToPlayer < 500.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 500.0f); + Actor_OfferTalk(&this->actor, play, 500.0f); } } @@ -1481,7 +1481,7 @@ void func_80BADE8C(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD130; } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 500.0f); + Actor_OfferTalk(&this->actor, play, 500.0f); } } 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 61f46966d..bfb3081de 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_Idle(EnSyatekiMan* this, PlayState* play) { } this->actionFunc = EnSyatekiMan_Swamp_Talk; } else { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } if (player->actor.world.pos.z < 135.0f) { @@ -629,7 +629,7 @@ void EnSyatekiMan_Town_Idle(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Town_Talk; } else { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -932,7 +932,7 @@ void EnSyatekiMan_Swamp_GiveReward(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Swamp_Talk; } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } @@ -997,7 +997,7 @@ void EnSyatekiMan_Town_GiveReward(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Town_Talk; } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } 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 1f97e5c57..47500edf0 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -184,16 +184,14 @@ void func_80BE0664(EnTab* this) { s32 func_80BE06DC(EnTab* this, PlayState* play) { s32 ret = false; - if (this->unk_2FC & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - SubS_UpdateFlags(&this->unk_2FC, 0, 7); - ret = true; - this->unk_320 = 0; - this->unk_328 = NULL; - this->actor.child = &GET_PLAYER(play)->actor; - this->unk_2FC |= 8; - this->actionFunc = func_80BE1348; - } + if (((this->unk_2FC & 7) != SUBS_OFFER_MODE_NONE) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { + SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + ret = true; + this->unk_320 = 0; + this->unk_328 = NULL; + this->actor.child = &GET_PLAYER(play)->actor; + this->unk_2FC |= 8; + this->actionFunc = func_80BE1348; } return ret; } @@ -375,7 +373,7 @@ s32 func_80BE0F04(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1AFC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); this->actor.targetMode = 0; - SubS_UpdateFlags(&this->unk_2FC, 3, 7); + SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 30; this->unk_1E4 = sp28; @@ -392,7 +390,7 @@ s32 func_80BE0FC4(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1B10); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); this->actor.targetMode = 6; - SubS_UpdateFlags(&this->unk_2FC, 3, 7); + SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 0x50; func_80BE05BC(this, 1); @@ -494,7 +492,7 @@ void func_80BE1348(EnTab* this, PlayState* play) { Vec3f sp34; if (func_8010BF58(&this->actor, play, func_80BE0E04(this, play), this->unk_328, &this->unk_1DC)) { - SubS_UpdateFlags(&this->unk_2FC, 3, 7); + SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC &= ~8; this->unk_2FC |= 0x40; this->unk_324 = 20; @@ -551,7 +549,7 @@ void EnTab_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + this->unk_30C; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2FC & 7); + SubS_Offer(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2FC & SUBS_OFFER_MODE_MASK); Actor_MoveWithGravity(&this->actor); 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/z_en_talk.c b/src/overlays/actors/ovl_En_Talk/z_en_talk.c index 7c639c44a..1dac7592b 100644 --- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c +++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c @@ -58,7 +58,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) { if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) || this->actor.isTargeted) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 d1a95988f..37ab26196 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 @@ -788,7 +788,7 @@ void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) { EnTalkGibud_SetupTalk(this); } else if (this->actor.xzDistToPlayer < 100.0f && !(this->collider.base.acFlags & AC_HIT)) { Actor_TrackPlayer(play, &this->actor, &this->headRotation, &this->upperBodyRotation, this->actor.focus.pos); - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } else { Math_SmoothStepToS(&this->headRotation.y, 0, 1, 100, 0); Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 100, 0); 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 65f006401..12dc134aa 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -671,7 +671,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { CutsceneManager_SetReturnCamera(this->subCamId); play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_WAIT); } - func_800B863C(&this->player.actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->player.actor, play); if (this->unk_D88 == 3) { func_80A3F534(this, play); } else if (this->unk_D88 == 5) { @@ -1023,7 +1023,7 @@ void func_80A40908(EnTest3* this, PlayState* play) { Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } else { - func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); this->unk_D78 = &D_80A41854[6]; this->player.actor.textId = this->unk_D78->textId; this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 007673dbe..5243b5c47 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -164,7 +164,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) { (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) || CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) { this->actor.flags |= ACTOR_FLAG_1; - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } @@ -277,7 +277,7 @@ void EnTimeTag_Diary_Wait(EnTimeTag* this, PlayState* play) { } this->actionFunc = EnTimeTag_Diary_Cutscene; } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } 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 71e344683..ccc5e4489 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -294,7 +294,7 @@ void func_80AECA90(EnTk* this, PlayState* play) { play->msgCtx.msgLength = 0; func_80AEDE10(this, play); } else if (this->actor.xzDistToPlayer < 100.0f) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -486,7 +486,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) { } if (!(this->unk_3CE & 8) && !(this->unk_2CA & 0x10) && (this->actor.xzDistToPlayer < 100.0f)) { - func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); + SubS_OfferTalkExchangeFacing(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); } return false; @@ -696,10 +696,11 @@ void func_80AED940(EnTk* this, PlayState* play) { func_80AEDE10(this, play); } else if (!(this->unk_2CA & 0x80)) { if (this->actor.xzDistToPlayer < 100.0f) { - func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); + SubS_OfferTalkExchangeFacing(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); } } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, + PLAYER_IA_NONE); } } diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index b9cb09326..39ac19dba 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -257,10 +257,10 @@ void func_80BA39C8(EnToto* this, PlayState* play) { if (this->unk2B6 != 0) { this->text = D_80BA5044; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 50.0f); + Actor_OfferTalk(&this->actor, play, 50.0f); if (play->sceneId == SCENE_SONCHONOIE) { if (player->transformation == PLAYER_FORM_DEKU) { if (!Flags_GetSwitch(play, this->actor.home.rot.x)) { 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 7984b26fa..d61786e6f 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -486,7 +486,7 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) { CutsceneManager_Queue(this->csId); } } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = EnTrt_ItemGiven; } } @@ -817,7 +817,7 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_BeginInteraction; } else if (((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= -25.0f)) && ((player->actor.world.pos.z >= -19.0f) && (player->actor.world.pos.z <= 30.0f))) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } if (DECR(this->timer) == 0) { this->timer = 40; @@ -863,7 +863,7 @@ void EnTrt_IdleAwake(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_BeginInteraction; } else if ((player->actor.world.pos.x >= -50.0f && player->actor.world.pos.x <= -25.0f) && (player->actor.world.pos.z >= -19.0f && player->actor.world.pos.z <= 30.0f)) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } if (DECR(this->timer) == 0) { this->timer = Rand_S16Offset(150, 100); @@ -1058,7 +1058,7 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) { } Message_ContinueTextbox(play, this->textId); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1077,7 +1077,7 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) { } else { if ((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= 50.0f) && (player->actor.world.pos.z >= -19.0f) && (player->actor.world.pos.z <= 30.0f)) { - func_800B8614(&this->actor, play, 200.0f); + Actor_OfferTalk(&this->actor, play, 200.0f); } } if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { @@ -1131,7 +1131,7 @@ void EnTrt_SetupItemGiven(EnTrt* this, PlayState* play) { this->csId = this->lookToShopkeeperCsId; CutsceneManager_Queue(this->csId); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1154,7 +1154,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnTrt_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); break; case 1: @@ -1428,7 +1428,7 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { player->actor.textId = 0x883; } this->textId = player->actor.textId; - player->exchangeItemId = itemAction; + player->exchangeItemAction = itemAction; this->actionFunc = EnTrt_GetMushroom; } else { if (this->flags & ENTRT_GIVEN_MUSHROOM) { 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 9c24088db..e56369ce4 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -426,7 +426,7 @@ void func_80AD3FF4(EnTrt2* this, PlayState* play) { void func_80AD40AC(EnTrt2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->unk_3B2 = 13; } } @@ -437,7 +437,7 @@ void func_80AD4110(EnTrt2* this, PlayState* play) { Message_ContinueTextbox(play, this->unk_3A8); this->unk_3B2 = 10; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -711,7 +711,7 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) { } if (func_80AD4C4C(this) && this->actor.isTargeted && (sp1E < 0x4000) && (sp1E > -0x4000)) { - func_800B863C(&this->actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } return true; 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 fd627b9a6..ba1a8c983 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -685,29 +685,28 @@ s32 func_80A872AC(EnTru* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 ret = false; - if (this->unk_34E & 7) { - if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (player->transformation == PLAYER_FORM_HUMAN) { - this->unk_34E &= ~0x80; - } - this->unk_34E &= ~(0x4000 | 0x2000); - - if ((player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_RED) || - (player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_BLUE)) { - this->unk_34E |= 0x2000; - this->unk_38C = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_IA_NONE) { - this->unk_34E |= 0x4000; - } - - this->unk_378 = func_80A875AC; - this->unk_390 = 0; - this->unk_364 = 0; - this->unk_354 = func_80A871E0(this, play); - SubS_UpdateFlags(&this->unk_34E, 0, 7); - this->actionFunc = func_80A881E0; - ret = true; + if (((this->unk_34E & SUBS_OFFER_MODE_MASK) != SUBS_OFFER_MODE_NONE) && + Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (player->transformation == PLAYER_FORM_HUMAN) { + this->unk_34E &= ~0x80; } + this->unk_34E &= ~(0x4000 | 0x2000); + + if ((player->exchangeItemAction == PLAYER_IA_BOTTLE_POTION_RED) || + (player->exchangeItemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) { + this->unk_34E |= 0x2000; + this->unk_38C = player->exchangeItemAction; + } else if (player->exchangeItemAction != PLAYER_IA_NONE) { + this->unk_34E |= 0x4000; + } + + this->unk_378 = func_80A875AC; + this->unk_390 = 0; + this->unk_364 = 0; + this->unk_354 = func_80A871E0(this, play); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); + this->actionFunc = func_80A881E0; + ret = true; } return ret; @@ -973,8 +972,8 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) { this->actor.shape.shadowDraw = NULL; this->unk_34E |= (0x200 | 0x8); this->unk_34E &= ~0x800; - if (player->exchangeItemId != PLAYER_IA_NONE) { - player->exchangeItemId = PLAYER_IA_NONE; + if (player->exchangeItemAction != PLAYER_IA_NONE) { + player->exchangeItemAction = PLAYER_IA_NONE; } EnTru_ChangeAnim(this, KOUME_ANIM_HOVER1); } @@ -1060,15 +1059,15 @@ void func_80A87FD0(EnTru* this, PlayState* play) { if (this->actor.draw != NULL) { if ((this->unk_34E & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED)) { if (func_80A873B8(this)) { - SubS_UpdateFlags(&this->unk_34E, 3, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_34E, 0, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } } else if (this->unk_34E & 0x40) { if (func_80A873B8(this)) { - SubS_UpdateFlags(&this->unk_34E, 3, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_34E, 0, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } if ((this->animIndex == KOUME_ANIM_TRY_GET_UP) && @@ -1083,13 +1082,13 @@ void func_80A87FD0(EnTru* this, PlayState* play) { } } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_KOUME_INJURED) && (fabsf(this->actor.playerHeightRel) < 10.0f) && (this->actor.xzDistToPlayer < 140.0f)) { - SubS_UpdateFlags(&this->unk_34E, 4, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->unk_34E |= 0x1040; this->unk_362 = Rand_S16Offset(40, 20); } else if (func_80A873B8(this)) { - SubS_UpdateFlags(&this->unk_34E, 3, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); } else { - SubS_UpdateFlags(&this->unk_34E, 0, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); } } } @@ -1115,7 +1114,7 @@ void func_80A881E0(EnTru* this, PlayState* play) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP_MORPH); } - SubS_UpdateFlags(&this->unk_34E, 0, 7); + SubS_SetOfferMode(&this->unk_34E, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_34E &= ~(0x1000 | 0x8); this->unk_34E |= 0x10; this->actor.shape.rot.y = this->actor.world.rot.y; @@ -1180,7 +1179,7 @@ void EnTru_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.worldSphere.radius + 30; this->unk_388 = !(this->unk_34E & 0x80) ? PLAYER_IA_NONE : PLAYER_IA_NONE; - func_8013C964(&this->actor, play, radius, 20.0f, this->unk_388, this->unk_34E & 7); + SubS_Offer(&this->actor, play, radius, 20.0f, this->unk_388, this->unk_34E & SUBS_OFFER_MODE_MASK); func_80A8697C(this, play); func_80A86384(this->unk_394, &this->unk_1F8); } 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 da0bfed86..6f27da823 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -275,7 +275,7 @@ void func_80AE0304(EnTsn* this, PlayState* play) { func_80ADFF84(this, play); } } else if ((this->actor.xzDistToPlayer < 150.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 160.0f); + Actor_OfferTalk(&this->actor, play, 160.0f); this->unk_220 |= 1; } else { this->unk_220 &= ~1; @@ -420,7 +420,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { case 0x1075: case 0x1078: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; @@ -448,7 +448,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { break; case 0x107B: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; @@ -537,7 +537,7 @@ void func_80AE0C88(EnTsn* this, PlayState* play) { ENTSN_SET_Z(&this->unk_1D8->actor, true); } } else if (this->actor.isTargeted) { - func_800B8614(&this->actor, play, 1000.0f); + Actor_OfferTalk(&this->actor, play, 1000.0f); } } @@ -554,7 +554,7 @@ void func_80AE0D78(EnTsn* this, PlayState* play) { this->actionFunc = func_80AE0D10; this->unk_220 |= 4; } else if (this->actor.isTargeted) { - func_800B8614(&this->actor, play, 1000.0f); + Actor_OfferTalk(&this->actor, play, 1000.0f); } } diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c index 3cfc1eba7..fd68a22ce 100644 --- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c +++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c @@ -103,7 +103,7 @@ void func_80A66278(EnWarpUzu* this, PlayState* play) { phi_v1 = ABS(temp_v0); if (phi_a0 >= 0x2AAB) { if (phi_v1 < 0x238E) { - func_800B8614(&this->actor, play, 70.0f); + Actor_OfferTalk(&this->actor, play, 70.0f); } } } 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 78b32120d..037ca93d6 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -267,7 +267,7 @@ void EnYb_SetupLeaving(EnYb* this, PlayState* play) { Message_StartTextbox(play, 0x147D, &this->actor); func_80BFA2FC(play); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } @@ -279,7 +279,7 @@ void EnYb_ReceiveMask(EnYb* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnYb_SetupLeaving; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_OfferGetItem(&this->actor, play, GI_MASK_KAMARO, 10000.0f, 100.0f); } @@ -332,7 +332,7 @@ void EnYb_TeachingDanceFinish(EnYb* this, PlayState* play) { Message_StartTextbox(play, 0x147C, &this->actor); this->actor.flags &= ~ACTOR_FLAG_10000; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } @@ -347,7 +347,7 @@ void EnYb_TeachingDance(EnYb* this, PlayState* play) { EnYb_FinishTeachingCutscene(this); this->actionFunc = EnYb_TeachingDanceFinish; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } @@ -374,7 +374,7 @@ void EnYb_Idle(EnYb* this, PlayState* play) { Message_StartTextbox(play, 0x147B, &this->actor); } } else if (EnYb_CanTalk(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } if (this->playerOcarinaOut & 1) { 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 3e606e19e..c963df55b 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -543,7 +543,7 @@ void func_80BA0610(EnZob* this, PlayState* play) { func_80B9FC70(this, 0); this->actionFunc = func_80BA00BC; } else { - func_800B8614(&this->actor, play, 500.0f); + Actor_OfferTalk(&this->actor, play, 500.0f); } } @@ -581,7 +581,7 @@ void func_80BA0728(EnZob* this, PlayState* play) { this->actionFunc = func_80BA06BC; } else if ((this->actor.xzDistToPlayer < 180.0f) && (this->actor.xzDistToPlayer > 60.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); func_800B874C(&this->actor, play, 200.0f, 150.0f); } @@ -658,7 +658,7 @@ void func_80BA0AD8(EnZob* this, PlayState* play) { func_80BA08E8(this, play); } else if ((this->actor.xzDistToPlayer < 120.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 4c21502fe..df67493d6 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -380,7 +380,7 @@ void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play) { EnZod_HandleRoomConversation(this, play); this->actionFunc = func_80BAF7CC; } else if (EnZod_PlayerIsFacingTijo(this, play)) { - func_800B8614(&this->actor, play, 210.0f); + Actor_OfferTalk(&this->actor, play, 210.0f); } seqPos.x = this->actor.projectedPos.x; @@ -436,7 +436,7 @@ void func_80BAFB84(EnZod* this, PlayState* play) { func_80BAFA44(this, play); this->actionFunc = func_80BAFADC; } else if (EnZod_PlayerIsFacingTijo(this, play)) { - func_800B8614(&this->actor, play, 210.0f); + Actor_OfferTalk(&this->actor, play, 210.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 d4605d47d..15c8a0017 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -634,7 +634,7 @@ void func_80B9451C(EnZog* this, PlayState* play) { this->actor.shape.shadowDraw = NULL; } } else if (this->actor.xzDistToPlayer < 120.0f) { - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); } func_80B943EC(this, play); } @@ -732,7 +732,7 @@ void func_80B948A8(EnZog* this, PlayState* play) { } if ((this->unk_302 == 0) && (this->actor.xzDistToPlayer < 120.0f)) { - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); } } func_80B93A48(this, play); @@ -906,7 +906,7 @@ void func_80B94E34(EnZog* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_88_10); } else if ((this->actor.yawTowardsPlayer > 16000) && (this->actor.yawTowardsPlayer < 32000) && (this->unk_302 == 0)) { - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); } this->actor.shape.rot.y = this->actor.world.rot.y; @@ -939,7 +939,7 @@ void func_80B95128(EnZog* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; SET_WEEKEVENTREG(WEEKEVENTREG_91_01); } else { - func_800B8614(&this->actor, play, 150.0f); + Actor_OfferTalk(&this->actor, play, 150.0f); } this->actor.shape.rot.y = this->actor.world.rot.y; func_80B93A48(this, play); 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 0bfc986dc..e45026d5b 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -345,7 +345,7 @@ void func_80B320E0(EnZoraegg* this, PlayState* play) { } else { Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 60.0f); if (this->actor.isTargeted) { - func_800B8614(&this->actor, play, 110.0f); + Actor_OfferTalk(&this->actor, play, 110.0f); } } 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 10def20cf..19ecd207f 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -254,7 +254,7 @@ void func_80BBB2C4(EnZos* this, PlayState* play) { this->actionFunc = func_80BBB8AC; this->actor.flags &= ~ACTOR_FLAG_10000; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -266,7 +266,7 @@ void func_80BBB354(EnZos* this, PlayState* play) { this->actionFunc = func_80BBB2C4; SET_WEEKEVENTREG(WEEKEVENTREG_39_20); this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_20)) { getItemId = GI_RUPEE_PURPLE; @@ -420,7 +420,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { switch (play->msgCtx.currentTextId) { case 0x1237: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; // fallthrough case 0x1238: case 0x123A: @@ -439,7 +439,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { case 0x1232: case 0x1241: - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; // fallthrough case 0x1239: case 0x1246: @@ -516,7 +516,7 @@ void func_80BBBB84(EnZos* this, PlayState* play) { this->unk_2B6 |= 0x10; } } else { - func_800B8614(&this->actor, play, 300.0f); + Actor_OfferTalk(&this->actor, play, 300.0f); } } @@ -527,7 +527,7 @@ void func_80BBBCBC(EnZos* this, PlayState* play) { Message_StartTextbox(play, 0x124D, &this->actor); this->actionFunc = func_80BBB574; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -536,7 +536,7 @@ void func_80BBBD5C(EnZos* this, PlayState* play) { if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) { this->actionFunc = func_80BBBCBC; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -559,7 +559,7 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { play->msgCtx.ocarinaMode = 4; this->actionFunc = func_80BBBB84; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); return; } @@ -569,7 +569,7 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) { this->actionFunc = func_80BBBD5C; } else if (func_80BBAF5C(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } if (!Actor_IsFacingPlayer(&this->actor, 0x4000) && (this->actor.xzDistToPlayer < 100.0f)) { @@ -645,7 +645,7 @@ void func_80BBC14C(EnZos* this, PlayState* play) { this->actionFunc = func_80BBC070; func_80BBBFBC(this, play); } else if (func_80BBAF5C(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 0598d5cf9..8a02b3b8c 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -404,7 +404,7 @@ void func_80B97240(EnZot* this, PlayState* play) { func_80B97110(this, play); } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -517,7 +517,7 @@ void func_80B975F8(EnZot* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B973BC; } else { - func_800B8500(&this->actor, play, 10000.0f, 1000.0f, PLAYER_IA_NONE); + Actor_OfferTalkExchange(&this->actor, play, 10000.0f, 1000.0f, PLAYER_IA_NONE); } } @@ -579,7 +579,7 @@ void func_80B97708(EnZot* this, PlayState* play) { func_80B975F8(this, play); this->actionFunc = func_80B975F8; } else if (func_80B96DF0(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -703,7 +703,7 @@ void func_80B97B5C(EnZot* this, PlayState* play) { this->actionFunc = func_80B97A44; func_80B9787C(this, play); } else if (func_80B96DF0(this, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -732,7 +732,7 @@ void func_80B97CC8(EnZot* this, PlayState* play) { this->actionFunc = func_80B97C40; Message_StartTextbox(play, 0x128B, &this->actor); } else if (Player_IsFacingActor(&this->actor, 0x3000, play) && (this->actor.xzDistToPlayer < 100.0f)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -815,7 +815,7 @@ void func_80B97FD0(EnZot* this, PlayState* play) { func_80B96BEC(this, 6, ANIMMODE_ONCE); } } else if (Player_IsFacingActor(&this->actor, 0x3000, play) && (this->actor.xzDistToPlayer < 100.0f)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -936,7 +936,7 @@ void func_80B9849C(EnZot* this, PlayState* play) { } this->actionFunc = func_80B98728; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -946,7 +946,7 @@ void func_80B9854C(EnZot* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = func_80B9849C; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); + Actor_OfferTalkExchange(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_OfferGetItem(&this->actor, play, this->unk_2D4, 10000.0f, 50.0f); } @@ -1074,7 +1074,7 @@ void func_80B98998(EnZot* this, PlayState* play) { func_80B98178(this, play); } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x7000)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -1140,7 +1140,7 @@ void func_80B98BF4(EnZot* this, PlayState* play) { this->actionFunc = func_80B98AD0; } } else { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -1150,13 +1150,13 @@ void func_80B98CA8(EnZot* this, PlayState* play) { AudioOcarina_StartDefault(0xFFFF); this->actionFunc = func_80B98BF4; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B98AD0; func_80B98A4C(this, play); } else { if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } if ((GET_PLAYER_FORM == PLAYER_FORM_ZORA) || (this->actor.xzDistToPlayer < 100.0f)) { @@ -1252,7 +1252,7 @@ void func_80B990A4(EnZot* this, PlayState* play) { this->actionFunc = func_80B98F94; func_80B98E10(this, play); } else if (Player_IsFacingActor(&this->actor, 0x3000, play) && (this->actor.xzDistToPlayer < 100.0f)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } } @@ -1303,7 +1303,7 @@ void func_80B992C0(EnZot* this, PlayState* play) { func_80B96BEC(this, 0, ANIMMODE_LOOP); } else { if (Player_IsFacingActor(&this->actor, 0x3000, play) && (this->actor.xzDistToPlayer < 100.0f)) { - func_800B8614(&this->actor, play, 120.0f); + Actor_OfferTalk(&this->actor, play, 120.0f); } this->actor.speed = 1.5f; func_80B96FB0(this); 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 d3e833266..cf8c30dc7 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -378,7 +378,7 @@ void func_80BD1C84(EnZov* this, PlayState* play) { this->actionFunc = func_80BD187C; func_80BD160C(this, play); } else if (func_80BD15A4(this, play)) { - func_800B8614(&this->picto.actor, play, 120.0f); + Actor_OfferTalk(&this->picto.actor, play, 120.0f); } if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) { @@ -452,7 +452,7 @@ void func_80BD1F1C(EnZov* this, PlayState* play) { this->actionFunc = func_80BD1DB8; func_80BD1D30(this, play); } else if (func_80BD15A4(this, play)) { - func_800B8614(&this->picto.actor, play, 120.0f); + Actor_OfferTalk(&this->picto.actor, play, 120.0f); } } 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 2885e965b..c6f8f2560 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -502,7 +502,7 @@ void func_80BDD634(EnZow* this, PlayState* play) { this->actionFunc = func_80BDD570; func_80BDD1E0(this, play); } else if (func_80BDD154(this, play)) { - func_800B8614(&this->actor, play, 180.0f); + Actor_OfferTalk(&this->actor, play, 180.0f); } } 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 7d1f748f3..0ad12d3f3 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -546,7 +546,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) { this->unk_1E8(this); if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { - if (Player_GetExchangeItemId(play) == PLAYER_IA_MAGIC_BEANS) { + if (Player_GetExchangeItemAction(play) == PLAYER_IA_MAGIC_BEANS) { func_809383B4(this); Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)); } @@ -576,7 +576,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } } else { - func_800B85E0(&this->dyna.actor, play, 28.0f, PLAYER_IA_MAGIC_BEANS); + Actor_OfferTalkExchangeEquiCylinder(&this->dyna.actor, play, 28.0f, PLAYER_IA_MAGIC_BEANS); } } } 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 b7fc601e3..02d7f2973 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -76,7 +76,7 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) { func_80B3C29C(this); } else if (this->dyna.actor.xzDistToPlayer < 100.0f || this->dyna.actor.isTargeted) { if (distDiff <= -0x5556 || distDiff >= 0x5556) { - func_800B863C(&this->dyna.actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play); if (player->transformation == PLAYER_FORM_GORON) { this->dyna.actor.textId = 0xCF3; } else { 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 40db98b1f..5201c1de8 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -168,7 +168,7 @@ void func_80B14460(ObjHakaisi* this, PlayState* play) { func_80B14510(this); } else if (this->dyna.actor.textId != 0) { if (ABS_ALT(sp26) < 0x2000) { - func_800B8614(&this->dyna.actor, play, 100.0f); + Actor_OfferTalk(&this->dyna.actor, play, 100.0f); } } diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index 7a05542d2..c40d03f6a 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -80,7 +80,7 @@ void func_80C06640(ObjMoonStone* this, PlayState* play) { } else { s32 phi_v0 = ABS_ALT(sp1A); if (phi_v0 < 0x1555) { - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } } } diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c index d08f2d638..3e93f15bc 100644 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c +++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c @@ -76,7 +76,7 @@ void func_80C06B70(ObjMuPict* this, PlayState* play) { func_80C06C54(this); } } else if (ABS_ALT(yawDiff) < 0x2AAA) { - func_800B8614(&this->actor, play, 80.0f); + Actor_OfferTalk(&this->actor, play, 80.0f); } } 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 81bbb8ebb..fc4d2ecf5 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -427,7 +427,7 @@ void func_80BA3230(ObjNozoki* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { ObjNozoki_SetupAction(this, func_80BA3344); } else { - func_800B8614(&this->dyna.actor, play, 50.0f); + Actor_OfferTalk(&this->dyna.actor, play, 50.0f); } } } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index 92ac9ad85..281c813e2 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -771,7 +771,7 @@ void ObjSnowball_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (sp24 && (this->actionFunc == func_80B04350)) { - func_800B8614(&this->actor, play, 100.0f); + Actor_OfferTalk(&this->actor, play, 100.0f); } if ((this->actor.floorPoly != NULL) && (this->actor.projectedPos.z < 920.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 41ed1e9d5..e860d381a 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -970,10 +970,10 @@ s32 func_80B7984C(PlayState* play, ObjUm* this, s32 arg2, s32* arg3) { } if (this->dyna.actor.xyzDistToPlayerSq <= SQ(50.0f)) { - if (func_800B8614(&this->dyna.actor, play, 50.0f)) { + if (Actor_OfferTalk(&this->dyna.actor, play, 50.0f)) { this->dyna.actor.textId = ObjUm_RanchGetDialogue(play, this, arg2); } - } else if (func_800B863C(&this->dyna.actor, play)) { + } else if (Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play)) { this->dyna.actor.textId = ObjUm_RanchGetDialogue(play, this, arg2); } 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 5a67aa663..4ae133dd3 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -152,7 +152,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) { } else if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { this->isTalking = true; } else if (!this->actionFunc(this, play)) { - func_800B863C(&this->dyna.actor, play); + Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play); } Collider_ResetCylinderAC(play, &this->collider.base); diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index acb5d28be..27192e894 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4290,7 +4290,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (itemAction == PLAYER_IA_OCARINA) || ((itemAction > PLAYER_IA_BOTTLE_MIN) && itemAction < PLAYER_IA_MASK_MIN) || ((itemAction == PLAYER_IA_PICTOGRAPH_BOX) && (this->talkActor != NULL) && - (this->exchangeItemId > PLAYER_IA_NONE))) { + (this->exchangeItemAction > PLAYER_IA_NONE))) { if (var_v1) { PlayerTransformation playerForm = (itemAction < PLAYER_IA_MASK_FIERCE_DEITY) ? PLAYER_FORM_HUMAN @@ -6662,7 +6662,7 @@ void func_808379C0(PlayState* play, Player* this) { void func_80837B60(PlayState* play, Player* this) { Player_SetAction_PreserveMoveFlags(play, this, Player_Action_44, 0); - this->exchangeItemId = PLAYER_IA_NONE; + this->exchangeItemAction = PLAYER_IA_NONE; this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); if (this->actor.textId != 0) { Message_StartTextbox(play, this->actor.textId, this->talkActor); @@ -7182,10 +7182,10 @@ s32 func_80838A90(Player* this, PlayState* play) { ((this->itemAction >= PLAYER_IA_BOTTLE_ZORA_EGG) && (this->itemAction <= PLAYER_IA_BOTTLE_HYLIAN_LOACH)) || (this->itemAction > PLAYER_IA_BOTTLE_FAIRY) || - ((this->talkActor != NULL) && (this->exchangeItemId > PLAYER_IA_NONE) && - (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + ((this->talkActor != NULL) && (this->exchangeItemAction > PLAYER_IA_NONE) && + (((this->exchangeItemAction == PLAYER_IA_MAGIC_BEANS) && (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || - ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && + ((this->exchangeItemAction != PLAYER_IA_MAGIC_BEANS) && (Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE))))))) { Actor* talkActor; s32 heldItemTemp = this->itemAction; @@ -7197,12 +7197,12 @@ s32 func_80838A90(Player* this, PlayState* play) { this->itemAction = heldItemTemp; this->csId = CS_ID_NONE; - if ((talkActor != NULL) && (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + if ((talkActor != NULL) && (((this->exchangeItemAction == PLAYER_IA_MAGIC_BEANS) && (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || - ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && - (this->exchangeItemId > PLAYER_IA_NONE)))) { + ((this->exchangeItemAction != PLAYER_IA_MAGIC_BEANS) && + (this->exchangeItemAction > PLAYER_IA_NONE)))) { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_40); - if (this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) { + if (this->exchangeItemAction == PLAYER_IA_MAGIC_BEANS) { Inventory_ChangeAmmo(ITEM_MAGIC_BEANS, -1); Player_SetAction_PreserveItemAction(play, this, Player_Action_17, 0); this->currentYaw = talkActor->yawTowardsPlayer + 0x8000; @@ -7231,7 +7231,7 @@ s32 func_80838A90(Player* this, PlayState* play) { this->actor.textId = 0xFE; } this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; - this->exchangeItemId = this->itemAction; + this->exchangeItemAction = this->itemAction; if (this->unk_AE7 >= 0) { Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]); } @@ -11898,7 +11898,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { this->talkActorDistance = 0.0f; } else { this->talkActor = NULL; - this->exchangeItemId = PLAYER_IA_NONE; + this->exchangeItemAction = PLAYER_IA_NONE; this->talkActorDistance = FLT_MAX; } if (!(this->actor.flags & ACTOR_FLAG_20000000) && (this->unk_AA5 != PLAYER_UNKAA5_5)) { @@ -16632,14 +16632,14 @@ void Player_Action_65(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_20000000; func_8085B28C(play, NULL, PLAYER_CSMODE_93); } else { - s32 var_a2 = ((this->talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) || + s32 var_a2 = ((this->talkActor != NULL) && (this->exchangeItemAction <= PLAYER_IA_MINUS1)) || (this->stateFlags3 & PLAYER_STATE3_20); if (var_a2 || (gSaveContext.healthAccumulator == 0)) { Player_StopCutscene(this); if (var_a2) { func_80848250(play, this); - this->exchangeItemId = PLAYER_IA_NONE; + this->exchangeItemAction = PLAYER_IA_NONE; if (!func_80847994(play, this)) { Player_TalkWithPlayer(play, this->talkActor); } @@ -16875,7 +16875,7 @@ void Player_Action_68(Player* this, PlayState* play) { func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); talkActor = this->talkActor; - if ((talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) { + if ((talkActor != NULL) && (this->exchangeItemAction <= PLAYER_IA_MINUS1)) { Player_TalkWithPlayer(play, talkActor); } } @@ -17029,7 +17029,7 @@ void Player_Action_71(Player* this, PlayState* play) { func_8083249C(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->exchangeItemId == PLAYER_IA_NONE) { + if (this->exchangeItemAction == PLAYER_IA_NONE) { Actor* talkActor = this->talkActor; Player_StopCutscene(this); @@ -17040,7 +17040,7 @@ void Player_Action_71(Player* this, PlayState* play) { } Player_TalkWithPlayer(play, talkActor); } else { - GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->exchangeItemId] - 1]; + GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->exchangeItemAction] - 1]; if (Player_BottleFromIA(this, this->itemAction) <= PLAYER_BOTTLE_NONE) { this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); @@ -20159,7 +20159,7 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) { } player->talkActor = actor; - player->exchangeItemId = PLAYER_IA_NONE; + player->exchangeItemAction = PLAYER_IA_NONE; player->targetedActor = actor; if (actor->textId == 0xFFFF) { @@ -20267,7 +20267,7 @@ PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_give_other); this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); this->getItemDrawIdPlusOne = GID_NONE + 1; - this->exchangeItemId = itemAction; + this->exchangeItemAction = itemAction; return itemAction; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c3ce2833f..4db192c4b 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -770,10 +770,10 @@ 0x800B83BC:("func_800B83BC",), 0x800B83F8:("func_800B83F8",), 0x800B84D0:("Actor_ProcessTalkRequest",), - 0x800B8500:("func_800B8500",), - 0x800B85E0:("func_800B85E0",), - 0x800B8614:("func_800B8614",), - 0x800B863C:("func_800B863C",), + 0x800B8500:("Actor_OfferTalkExchange",), + 0x800B85E0:("Actor_OfferTalkExchangeEquiCylinder",), + 0x800B8614:("Actor_OfferTalk",), + 0x800B863C:("Actor_OfferTalkNearColChkInfoCylinder",), 0x800B867C:("Actor_TextboxIsClosing",), 0x800B86C8:("Actor_ChangeFocus",), 0x800B8708:("Player_GetExchangeItemId",), @@ -2660,7 +2660,7 @@ 0x8013AB00:("SubS_DrawTransformFlex",), 0x8013AD6C:("SubS_InCsMode",), 0x8013AD9C:("SubS_UpdateLimb",), - 0x8013AED4:("SubS_UpdateFlags",), + 0x8013AED4:("SubS_SetOfferMode",), 0x8013AF00:("SubS_TimePathing_FillKnots",), 0x8013B010:("SubS_TimePathing_ComputeProgress",), 0x8013B0C8:("SubS_TimePathing_ComputeWeights",), @@ -2675,7 +2675,7 @@ 0x8013C068:("SubS_WeightPathing_ComputePoint",), 0x8013C624:("SubS_WeightPathing_Move",), 0x8013C8B8:("SubS_CopyPointFromPathCheckBounds",), - 0x8013C964:("func_8013C964",), + 0x8013C964:("SubS_Offer",), 0x8013CC2C:("SubS_FillShadowTex",), 0x8013CD64:("SubS_GenShadowTex",), 0x8013CF04:("SubS_DrawShadowTex",), @@ -2706,9 +2706,9 @@ 0x8013E4B0:("SubS_ConstructPlane",), 0x8013E5CC:("SubS_LineSegVsPlane",), 0x8013E640:("SubS_FindActorCustom",), - 0x8013E748:("func_8013E748",), + 0x8013E748:("SubS_OfferTalkExchangeCustom",), 0x8013E7C0:("SubS_ActorAndPlayerFaceEachOther",), - 0x8013E8F8:("func_8013E8F8",), + 0x8013E8F8:("SubS_OfferTalkExchangeFacing",), 0x8013E950:("SubS_TrackPointStep",), 0x8013EC10:("Rumble_Update",), 0x8013EC44:("Rumble_Override",), @@ -13378,7 +13378,7 @@ 0x80B2B974:("EnPst_ChooseBehaviour",), 0x80B2BAA4:("EnPst_GetMsgEventScript",), 0x80B2BBFC:("EnPst_CheckTalk",), - 0x80B2BCF8:("EnPst_UpdateFlagsSubs",), + 0x80B2BCF8:("EnPst_SetOfferItemModeOnScreen",), 0x80B2BD30:("EnPst_ProcessScheduleOutput",), 0x80B2BD88:("EnPst_Idle",), 0x80B2BD98:("EnPst_FollowSchedule",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 0a809f804..c4f4552c9 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -174,6 +174,10 @@ wordReplace = { "func_800B6474": "Actor_UpdatePlayerImpact", "func_800B648C": "Actor_SetPlayerImpact", "func_800B64FC": "Actor_GetPlayerImpact", + "func_800B8500": "Actor_OfferTalkExchange", + "func_800B85E0": "Actor_OfferTalkExchangeRadius", + "func_800B8614": "Actor_OfferTalk", + "func_800B863C": "Actor_OfferTalkNearColChkInfoCylinder", "Audio_PlaySoundAtPosition": "SoundSource_PlaySfxAtFixedWorldPos", "func_800F0590": "SoundSource_PlaySfxEachFrameAtFixedWorldPos", "func_8016970C": "Play_SetCameraAtEye", @@ -344,7 +348,8 @@ wordReplace = { "Audio_PlaySfxGeneral": "AudioSfx_PlaySfx", "func_800B8C50": "Actor_SetClosestSecretDistance", "func_800BBDAC": "Actor_SpawnFloorDustRing", - "func_800B8708": "Player_GetExchangeItemId", + "func_800B8708": "Player_GetExchangeItemAction", + "Player_GetExchangeItemId": "Player_GetExchangeItemAction" "func_801233E4": "Player_InCsMode", "func_800BC4EC": "Actor_TestFloorInDirection", "func_800BC5B8": "Actor_IsTargeted", @@ -718,7 +723,8 @@ wordReplace = { "func_8013E2D4": "SubS_StartCutscene", "SubS_StartActorCutscene": "SubS_StartCutscene", "func_8013E3B8": "SubS_FillCutscenesList", - "func_8013AED4": "SubS_UpdateFlags", + "func_8013AED4": "SubS_SetOfferMode", + "SubS_UpdateFlags": "SubS_SetOfferMode" "func_8013D8DC": "SubS_IsObjectLoaded", "func_8013D924": "SubS_GetObjectIndex", "func_8013D5E8": "SubS_AngleDiffLessEqual", @@ -742,6 +748,9 @@ wordReplace = { "func_8013DCCC": "SubS_GetPathCount", "func_8013AD9C": "SubS_UpdateLimb", "func_8013D2E0": "SubS_TurnToPoint", + "func_8013C964": "SubS_Offer", + "func_8013E748": "SubS_OfferTalkExchangeCustom", + "func_8013E8F8": "SubS_OfferTalkExchangeFacing", "func_80147624": "Message_ShouldAdvance", "func_80147734": "Message_ShouldAdvanceSilent", @@ -1009,7 +1018,8 @@ wordReplace = { "gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData", "gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum", - "player->unk_A87": "player->exchangeItemId", + "player->unk_A87": "player->exchangeItemAction", + "player->exchangeItemId": "player->exchangeItemAction", "player->leftHandActor": "player->heldActor", "player->unk_384": "player->getItemId", "player->unk_386": "player->getItemDirection", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 25d7f3b61..5e2e9ce14 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -284,10 +284,10 @@ asm/non_matchings/code/z_actor/func_800B82EC.s,func_800B82EC,0x800B82EC,0x34 asm/non_matchings/code/z_actor/func_800B83BC.s,func_800B83BC,0x800B83BC,0xF asm/non_matchings/code/z_actor/func_800B83F8.s,func_800B83F8,0x800B83F8,0x36 asm/non_matchings/code/z_actor/Actor_ProcessTalkRequest.s,Actor_ProcessTalkRequest,0x800B84D0,0xC -asm/non_matchings/code/z_actor/func_800B8500.s,func_800B8500,0x800B8500,0x38 -asm/non_matchings/code/z_actor/func_800B85E0.s,func_800B85E0,0x800B85E0,0xD -asm/non_matchings/code/z_actor/func_800B8614.s,func_800B8614,0x800B8614,0xA -asm/non_matchings/code/z_actor/func_800B863C.s,func_800B863C,0x800B863C,0x10 +asm/non_matchings/code/z_actor/Actor_OfferTalkExchange.s,Actor_OfferTalkExchange,0x800B8500,0x38 +asm/non_matchings/code/z_actor/Actor_OfferTalkExchangeEquiCylinder.s,Actor_OfferTalkExchangeEquiCylinder,0x800B85E0,0xD +asm/non_matchings/code/z_actor/Actor_OfferTalk.s,Actor_OfferTalk,0x800B8614,0xA +asm/non_matchings/code/z_actor/Actor_OfferTalkNearColChkInfoCylinder.s,Actor_OfferTalkNearColChkInfoCylinder,0x800B863C,0x10 asm/non_matchings/code/z_actor/Actor_TextboxIsClosing.s,Actor_TextboxIsClosing,0x800B867C,0x13 asm/non_matchings/code/z_actor/Actor_ChangeFocus.s,Actor_ChangeFocus,0x800B86C8,0x10 asm/non_matchings/code/z_actor/Player_GetExchangeItemId.s,Player_GetExchangeItemId,0x800B8708,0x4 @@ -2174,7 +2174,7 @@ asm/non_matchings/code/z_sub_s/SubS_DrawTransformFlexLimb.s,SubS_DrawTransformFl asm/non_matchings/code/z_sub_s/SubS_DrawTransformFlex.s,SubS_DrawTransformFlex,0x8013AB00,0x9B asm/non_matchings/code/z_sub_s/SubS_InCsMode.s,SubS_InCsMode,0x8013AD6C,0xC asm/non_matchings/code/z_sub_s/SubS_UpdateLimb.s,SubS_UpdateLimb,0x8013AD9C,0x4E -asm/non_matchings/code/z_sub_s/SubS_UpdateFlags.s,SubS_UpdateFlags,0x8013AED4,0xB +asm/non_matchings/code/z_sub_s/SubS_SetOfferMode.s,SubS_SetOfferMode,0x8013AED4,0xB asm/non_matchings/code/z_sub_s/SubS_TimePathing_FillKnots.s,SubS_TimePathing_FillKnots,0x8013AF00,0x44 asm/non_matchings/code/z_sub_s/SubS_TimePathing_ComputeProgress.s,SubS_TimePathing_ComputeProgress,0x8013B010,0x2E asm/non_matchings/code/z_sub_s/SubS_TimePathing_ComputeWeights.s,SubS_TimePathing_ComputeWeights,0x8013B0C8,0xA2 @@ -2189,7 +2189,7 @@ asm/non_matchings/code/z_sub_s/SubS_GetDayDependentPath.s,SubS_GetDayDependentPa asm/non_matchings/code/z_sub_s/SubS_WeightPathing_ComputePoint.s,SubS_WeightPathing_ComputePoint,0x8013C068,0x16F asm/non_matchings/code/z_sub_s/SubS_WeightPathing_Move.s,SubS_WeightPathing_Move,0x8013C624,0xA5 asm/non_matchings/code/z_sub_s/SubS_CopyPointFromPathCheckBounds.s,SubS_CopyPointFromPathCheckBounds,0x8013C8B8,0x2B -asm/non_matchings/code/z_sub_s/func_8013C964.s,func_8013C964,0x8013C964,0xB2 +asm/non_matchings/code/z_sub_s/SubS_Offer.s,SubS_Offer,0x8013C964,0xB2 asm/non_matchings/code/z_sub_s/SubS_FillShadowTex.s,SubS_FillShadowTex,0x8013CC2C,0x4E asm/non_matchings/code/z_sub_s/SubS_GenShadowTex.s,SubS_GenShadowTex,0x8013CD64,0x68 asm/non_matchings/code/z_sub_s/SubS_DrawShadowTex.s,SubS_DrawShadowTex,0x8013CF04,0x77 @@ -2220,9 +2220,9 @@ asm/non_matchings/code/z_sub_s/SubS_FillCutscenesList.s,SubS_FillCutscenesList,0 asm/non_matchings/code/z_sub_s/SubS_ConstructPlane.s,SubS_ConstructPlane,0x8013E4B0,0x47 asm/non_matchings/code/z_sub_s/SubS_LineSegVsPlane.s,SubS_LineSegVsPlane,0x8013E5CC,0x1D asm/non_matchings/code/z_sub_s/SubS_FindActorCustom.s,SubS_FindActorCustom,0x8013E640,0x42 -asm/non_matchings/code/z_sub_s/func_8013E748.s,func_8013E748,0x8013E748,0x1E +asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeCustom.s,SubS_OfferTalkExchangeCustom,0x8013E748,0x1E asm/non_matchings/code/z_sub_s/SubS_ActorAndPlayerFaceEachOther.s,SubS_ActorAndPlayerFaceEachOther,0x8013E7C0,0x4E -asm/non_matchings/code/z_sub_s/func_8013E8F8.s,func_8013E8F8,0x8013E8F8,0x16 +asm/non_matchings/code/z_sub_s/SubS_OfferTalkExchangeFacing.s,SubS_OfferTalkExchangeFacing,0x8013E8F8,0x16 asm/non_matchings/code/z_sub_s/SubS_TrackPointStep.s,SubS_TrackPointStep,0x8013E950,0xB0 asm/non_matchings/code/code_8013EC10/Rumble_Update.s,Rumble_Update,0x8013EC10,0xD asm/non_matchings/code/code_8013EC10/Rumble_Override.s,Rumble_Override,0x8013EC44,0x27 From fa30dea28db6ddabf01332080db9b7031cf786c9 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 1 Aug 2023 23:55:14 +1000 Subject: [PATCH 046/121] namefixer.py hotfix (#1347) * namefixer hotfix * Actor_OfferTalkExchangeEquiCylinder --- tools/namefixer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/namefixer.py b/tools/namefixer.py index c4f4552c9..86095aa6e 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -175,7 +175,7 @@ wordReplace = { "func_800B648C": "Actor_SetPlayerImpact", "func_800B64FC": "Actor_GetPlayerImpact", "func_800B8500": "Actor_OfferTalkExchange", - "func_800B85E0": "Actor_OfferTalkExchangeRadius", + "func_800B85E0": "Actor_OfferTalkExchangeEquiCylinder", "func_800B8614": "Actor_OfferTalk", "func_800B863C": "Actor_OfferTalkNearColChkInfoCylinder", "Audio_PlaySoundAtPosition": "SoundSource_PlaySfxAtFixedWorldPos", @@ -349,7 +349,7 @@ wordReplace = { "func_800B8C50": "Actor_SetClosestSecretDistance", "func_800BBDAC": "Actor_SpawnFloorDustRing", "func_800B8708": "Player_GetExchangeItemAction", - "Player_GetExchangeItemId": "Player_GetExchangeItemAction" + "Player_GetExchangeItemId": "Player_GetExchangeItemAction", "func_801233E4": "Player_InCsMode", "func_800BC4EC": "Actor_TestFloorInDirection", "func_800BC5B8": "Actor_IsTargeted", @@ -724,7 +724,7 @@ wordReplace = { "SubS_StartActorCutscene": "SubS_StartCutscene", "func_8013E3B8": "SubS_FillCutscenesList", "func_8013AED4": "SubS_SetOfferMode", - "SubS_UpdateFlags": "SubS_SetOfferMode" + "SubS_UpdateFlags": "SubS_SetOfferMode", "func_8013D8DC": "SubS_IsObjectLoaded", "func_8013D924": "SubS_GetObjectIndex", "func_8013D5E8": "SubS_AngleDiffLessEqual", From 253209d7222155b5085a109d92a8281319a5b457 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:27:03 +1000 Subject: [PATCH 047/121] Bottle Params (#1328) * bottle param docs * none to any * reorder * macro use * PR Review * brackets --- src/code/z_demo.c | 6 +- src/code/z_en_item00.c | 7 +- .../ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c | 5 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 15 ++- src/overlays/actors/ovl_En_Butte/z_en_butte.h | 12 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 124 +++++++++--------- src/overlays/actors/ovl_En_Dnp/z_en_dnp.h | 10 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 45 ++++--- src/overlays/actors/ovl_En_Elf/z_en_elf.h | 34 +++-- src/overlays/actors/ovl_En_Fish/z_en_fish.h | 2 + src/overlays/actors/ovl_En_Go/z_en_go.c | 3 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 7 +- .../actors/ovl_En_Insect/z_en_insect.h | 2 + src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 11 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.h | 35 +++-- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 11 +- .../actors/ovl_En_Mushi2/z_en_mushi2.h | 8 ++ src/overlays/actors/ovl_En_Ot/z_en_ot.c | 66 +++++----- src/overlays/actors/ovl_En_Ot/z_en_ot.h | 21 ++- .../actors/ovl_En_Tag_Obj/z_en_tag_obj.c | 3 +- src/overlays/actors/ovl_En_Test5/z_en_test5.h | 2 + .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 86 ++++++------ .../actors/ovl_En_Zoraegg/z_en_zoraegg.h | 60 +++++---- src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c | 4 +- src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h | 10 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 4 +- src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c | 37 +++--- src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h | 19 ++- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 10 +- .../actors/ovl_player_actor/z_player.c | 83 +++++++----- 32 files changed, 437 insertions(+), 315 deletions(-) diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 771e76722..7abd9db76 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -4,6 +4,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx); void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx); @@ -816,8 +817,9 @@ void CutsceneCmd_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmd if (player->tatlActor != NULL) { return; } - player->tatlActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, player->actor.world.pos.x, - player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, 0); + player->tatlActor = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_0, false, 0)); } } } diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 0f1836dfb..55ab1a708 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -1,6 +1,7 @@ #include "global.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_gi_hearts/object_gi_hearts.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" #define FLAGS 0x00000000 @@ -929,7 +930,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { newParamFF = params & 0xFF; if (newParamFF == ITEM00_FLEXIBLE) { spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, - spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102); + spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); } @@ -990,7 +991,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { if ((((params & 0xFF) == ITEM00_FLEXIBLE) || ((params & 0xFF) == ITEM00_BIG_FAIRY)) && (param10000 == 0)) { if ((params & 0xFF) == ITEM00_FLEXIBLE) { spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, - spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102); + spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); } else { spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, @@ -1373,7 +1374,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP if (dropId == ITEM00_FLEXIBLE) { 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); + FAIRY_PARAMS(FAIRY_TYPE_2, false, 0)); SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); return; } diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c index 1b9e93009..f7b428837 100644 --- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c +++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c @@ -12,6 +12,7 @@ */ #include "z_bg_sinkai_kabe.h" +#include "overlays/actors/ovl_En_Ot/z_en_ot.h" #include "objects/object_sinkai_kabe/object_sinkai_kabe.h" #define FLAGS (ACTOR_FLAG_10) @@ -99,8 +100,8 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { pos.z += (Math_CosS(this->dyna.actor.world.rot.y + 0x8000) * 500.0f); if (shouldSpawnSeahorse) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, pos.x, pos.y, pos.z, 0, - this->dyna.actor.shape.rot.y, 0, 0x4000, this->dyna.actor.csId, - this->dyna.actor.halfDaysBits, NULL); + this->dyna.actor.shape.rot.y, 0, SEAHORSE_PARAMS(SEAHORSE_TYPE_1, 0, 0), + this->dyna.actor.csId, this->dyna.actor.halfDaysBits, NULL); } Actor_Kill(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 0d7b60823..d27aaf679 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -5,6 +5,7 @@ */ #include "z_en_butte.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -164,8 +165,8 @@ void EnButte_Init(Actor* thisx, PlayState* play) { s32 pad; EnButte* this = THIS; - if (ENBUTTE_GET(&this->actor) == ENBUTTE_MINUS1) { - this->actor.params = ENBUTTE_0; + if (BUTTERFLY_GET(&this->actor) == BUTTERFLY_MINUS1) { + this->actor.params = BUTTERFLY_0; } this->actor.world.rot.y = Rand_Next(); @@ -173,7 +174,7 @@ void EnButte_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; Actor_ProcessInitChain(&this->actor, sInitChain); - if ((ENBUTTE_GET_1(&this->actor) & 0xFF) == ENBUTTE_1) { + if ((BUTTERFLY_GET_1(&this->actor) & 0xFF) == BUTTERFLY_1) { this->actor.uncullZoneScale = 200.0f; } @@ -286,7 +287,7 @@ void func_8091C794(EnButte* this, PlayState* play) { func_8091C0A0(this, &D_8091D324[this->unk_24E]); } - if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->heldItemAction == PLAYER_IA_DEKU_STICK) && + if ((BUTTERFLY_GET_1(&this->actor) == BUTTERFLY_1) && (player->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_252 <= 0) && ((Math3D_XZDistanceSquared(player->actor.world.pos.x, player->actor.world.pos.z, this->actor.home.pos.x, this->actor.home.pos.z) < SQ(120.0f)) || @@ -381,7 +382,7 @@ void func_8091CFB4(EnButte* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 60, NA_SE_EV_BUTTERFRY_TO_FAIRY); } else if (this->unk_24C == 4) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.focus.pos.x, this->actor.focus.pos.y, - this->actor.focus.pos.z, 0, this->actor.shape.rot.y, 0, 2); + this->actor.focus.pos.z, 0, this->actor.shape.rot.y, 0, FAIRY_PARAMS(FAIRY_TYPE_2, false, 0)); this->unk_250 = 0; } else if (this->unk_24C <= 0) { func_8091D070(this); @@ -415,7 +416,7 @@ void EnButte_Update(Actor* thisx, PlayState* play) { this->unk_256 += 0x1000; this->unk_258 += 0x600; - if (ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) { + if (BUTTERFLY_GET_1(&this->actor) == BUTTERFLY_1) { if (GET_PLAYER(play)->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) { if (this->unk_252 > 0) { this->unk_252--; @@ -450,7 +451,7 @@ void EnButte_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); } - if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (this->actionFunc == func_8091CFB4)) { + if ((BUTTERFLY_GET_1(&this->actor) == BUTTERFLY_1) && (this->actionFunc == func_8091CFB4)) { func_8091C178(this, play); } } diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.h b/src/overlays/actors/ovl_En_Butte/z_en_butte.h index b035d2845..39c24a533 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.h +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.h @@ -8,12 +8,14 @@ struct EnButte; typedef void (*EnButteActionFunc)(struct EnButte*, PlayState*); -#define ENBUTTE_GET(thisx) ((thisx)->params) -#define ENBUTTE_GET_1(thisx) ((thisx)->params & 1) +#define BUTTERFLY_GET(thisx) ((thisx)->params) +#define BUTTERFLY_GET_1(thisx) ((thisx)->params & 1) -#define ENBUTTE_MINUS1 -1 -#define ENBUTTE_0 0 -#define ENBUTTE_1 1 +#define BUTTERFLY_MINUS1 -1 +#define BUTTERFLY_0 0 +#define BUTTERFLY_1 1 + +#define BUTTERFLY_PARAMS(param) (param) typedef struct EnButte { /* 0x000 */ Actor actor; 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 8263001aa..0ef492e9c 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -25,11 +25,11 @@ void func_80B3D3F8(EnDnp* this, PlayState* play); void func_80B3D558(EnDnp* this, PlayState* play); typedef enum { - /* 0 */ EN_DNP_EYE_OPEN, - /* 1 */ EN_DNP_EYE_HALF, - /* 2 */ EN_DNP_EYE_CLOSED, - /* 3 */ EN_DNP_EYE_ANGRY, - /* 4 */ EN_DNP_EYE_MAX + /* 0 */ DEKU_PRINCESS_EYE_OPEN, + /* 1 */ DEKU_PRINCESS_EYE_HALF, + /* 2 */ DEKU_PRINCESS_EYE_CLOSED, + /* 3 */ DEKU_PRINCESS_EYE_ANGRY, + /* 4 */ DEKU_PRINCESS_EYE_MAX } EnDnpEyeIndex; ActorInit En_Dnp_InitVars = { @@ -67,33 +67,33 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; typedef enum { - /* -1 */ EN_DNP_ANIM_NONE = -1, - /* 0 */ EN_DNP_ANIM_JUMP_KICK, // Can be triggered by a cutscene, but no cutscene in the final game does so - /* 1 */ EN_DNP_ANIM_HURRY, - /* 2 */ EN_DNP_ANIM_CUTSCENE_HURRY, - /* 3 */ EN_DNP_ANIM_HURRY_END, - /* 4 */ EN_DNP_ANIM_SCOLD, // Unused - /* 5 */ EN_DNP_ANIM_LAUGH_START, - /* 6 */ EN_DNP_ANIM_LAUGH_LOOP, - /* 7 */ EN_DNP_ANIM_TURN_AROUND, - /* 8 */ EN_DNP_ANIM_BOW, - /* 9 */ EN_DNP_ANIM_RUN, // Unused - /* 10 */ EN_DNP_ANIM_THINK_START, - /* 11 */ EN_DNP_ANIM_THINK_LOOP, - /* 12 */ EN_DNP_ANIM_ARMS_TOGETHER_START, - /* 13 */ EN_DNP_ANIM_ARMS_TOGETHER_LOOP, - /* 14 */ EN_DNP_ANIM_GREETING, - /* 15 */ EN_DNP_ANIM_IDLE, - /* 16 */ EN_DNP_ANIM_CUTSCENE_IDLE, - /* 17 */ EN_DNP_ANIM_UNUSED_WALK, // Unused - /* 18 */ EN_DNP_ANIM_WALK, // Can be triggered by a cutscene, but no cutscene in the final game does so - /* 19 */ EN_DNP_ANIM_ANGRY_START, - /* 20 */ EN_DNP_ANIM_ANGRY_LOOP, - /* 21 */ EN_DNP_ANIM_JUMP, - /* 22 */ EN_DNP_ANIM_BOUNCE_START, - /* 23 */ EN_DNP_ANIM_BOUNCE_LOOP, - /* 24 */ EN_DNP_ANIM_GLARE_START, - /* 25 */ EN_DNP_ANIM_GLARE_LOOP + /* -1 */ DEKU_PRINCESS_ANIM_NONE = -1, + /* 0 */ DEKU_PRINCESS_ANIM_JUMP_KICK, // Can be triggered by a cutscene, but no cutscene in the final game does so + /* 1 */ DEKU_PRINCESS_ANIM_HURRY, + /* 2 */ DEKU_PRINCESS_ANIM_CUTSCENE_HURRY, + /* 3 */ DEKU_PRINCESS_ANIM_HURRY_END, + /* 4 */ DEKU_PRINCESS_ANIM_SCOLD, // Unused + /* 5 */ DEKU_PRINCESS_ANIM_LAUGH_START, + /* 6 */ DEKU_PRINCESS_ANIM_LAUGH_LOOP, + /* 7 */ DEKU_PRINCESS_ANIM_TURN_AROUND, + /* 8 */ DEKU_PRINCESS_ANIM_BOW, + /* 9 */ DEKU_PRINCESS_ANIM_RUN, // Unused + /* 10 */ DEKU_PRINCESS_ANIM_THINK_START, + /* 11 */ DEKU_PRINCESS_ANIM_THINK_LOOP, + /* 12 */ DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START, + /* 13 */ DEKU_PRINCESS_ANIM_ARMS_TOGETHER_LOOP, + /* 14 */ DEKU_PRINCESS_ANIM_GREETING, + /* 15 */ DEKU_PRINCESS_ANIM_IDLE, + /* 16 */ DEKU_PRINCESS_ANIM_CUTSCENE_IDLE, + /* 17 */ DEKU_PRINCESS_ANIM_UNUSED_WALK, // Unused + /* 18 */ DEKU_PRINCESS_ANIM_WALK, // Can be triggered by a cutscene, but no cutscene in the final game does so + /* 19 */ DEKU_PRINCESS_ANIM_ANGRY_START, + /* 20 */ DEKU_PRINCESS_ANIM_ANGRY_LOOP, + /* 21 */ DEKU_PRINCESS_ANIM_JUMP, + /* 22 */ DEKU_PRINCESS_ANIM_BOUNCE_START, + /* 23 */ DEKU_PRINCESS_ANIM_BOUNCE_LOOP, + /* 24 */ DEKU_PRINCESS_ANIM_GLARE_START, + /* 25 */ DEKU_PRINCESS_ANIM_GLARE_LOOP } EnDnpAnimation; static AnimationInfoS sAnimationInfo[] = { @@ -130,39 +130,40 @@ static s32 D_80B3DE58[] = { }; s32 func_80B3CA20(EnDnp* this) { - if ((this->animIndex == EN_DNP_ANIM_CUTSCENE_HURRY) || (this->animIndex == EN_DNP_ANIM_RUN)) { + if ((this->animIndex == DEKU_PRINCESS_ANIM_CUTSCENE_HURRY) || (this->animIndex == DEKU_PRINCESS_ANIM_RUN)) { if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_TURN); } - } else if ((this->animIndex == EN_DNP_ANIM_GLARE_START) || (this->animIndex == EN_DNP_ANIM_TURN_AROUND)) { + } else if ((this->animIndex == DEKU_PRINCESS_ANIM_GLARE_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_TURN_AROUND)) { if (Animation_OnFrame(&this->skelAnime, 1.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_TURN); } - } else if (this->animIndex == EN_DNP_ANIM_GREETING) { + } else if (this->animIndex == DEKU_PRINCESS_ANIM_GREETING) { if (Animation_OnFrame(&this->skelAnime, 7.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET); } if (Animation_OnFrame(&this->skelAnime, 22.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET2); } - } else if (this->animIndex == EN_DNP_ANIM_BOW) { + } else if (this->animIndex == DEKU_PRINCESS_ANIM_BOW) { if (Animation_OnFrame(&this->skelAnime, 9.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET); } if (Animation_OnFrame(&this->skelAnime, 18.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET2); } - } else if ((this->animIndex == EN_DNP_ANIM_UNUSED_WALK) && (this->animIndex == EN_DNP_ANIM_WALK)) { + } else if ((this->animIndex == DEKU_PRINCESS_ANIM_UNUSED_WALK) && (this->animIndex == DEKU_PRINCESS_ANIM_WALK)) { //! @bug: Impossible to reach, && should be an || if (Animation_OnFrame(&this->skelAnime, 7.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK); } - } else if (this->animIndex == EN_DNP_ANIM_JUMP) { + } else if (this->animIndex == DEKU_PRINCESS_ANIM_JUMP) { if (Animation_OnFrame(&this->skelAnime, 17.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK); } - } else if (this->animIndex == EN_DNP_ANIM_BOUNCE_LOOP) { + } else if (this->animIndex == DEKU_PRINCESS_ANIM_BOUNCE_LOOP) { if (Animation_OnFrame(&this->skelAnime, 3.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK); } @@ -194,9 +195,9 @@ void func_80B3CC80(EnDnp* this, PlayState* play) { void func_80B3CD1C(EnDnp* this) { if ((this->unk_322 & 0x80) && (DECR(this->blinkTimer) == 0)) { this->eyeIndex++; - if (this->eyeIndex >= EN_DNP_EYE_MAX) { + if (this->eyeIndex >= DEKU_PRINCESS_EYE_MAX) { this->blinkTimer = Rand_S16Offset(30, 30); - this->eyeIndex = EN_DNP_EYE_OPEN; + this->eyeIndex = DEKU_PRINCESS_EYE_OPEN; } } } @@ -287,11 +288,11 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { void func_80B3D11C(EnDnp* this, PlayState* play) { static s32 sCsAnimations[] = { - EN_DNP_ANIM_JUMP_KICK, EN_DNP_ANIM_CUTSCENE_IDLE, EN_DNP_ANIM_GREETING, - EN_DNP_ANIM_THINK_START, EN_DNP_ANIM_WALK, EN_DNP_ANIM_ARMS_TOGETHER_START, - EN_DNP_ANIM_LAUGH_START, EN_DNP_ANIM_TURN_AROUND, EN_DNP_ANIM_CUTSCENE_HURRY, - EN_DNP_ANIM_ANGRY_START, EN_DNP_ANIM_JUMP, EN_DNP_ANIM_BOUNCE_START, - EN_DNP_ANIM_GLARE_START, EN_DNP_ANIM_BOW, + DEKU_PRINCESS_ANIM_JUMP_KICK, DEKU_PRINCESS_ANIM_CUTSCENE_IDLE, DEKU_PRINCESS_ANIM_GREETING, + DEKU_PRINCESS_ANIM_THINK_START, DEKU_PRINCESS_ANIM_WALK, DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START, + DEKU_PRINCESS_ANIM_LAUGH_START, DEKU_PRINCESS_ANIM_TURN_AROUND, DEKU_PRINCESS_ANIM_CUTSCENE_HURRY, + DEKU_PRINCESS_ANIM_ANGRY_START, DEKU_PRINCESS_ANIM_JUMP, DEKU_PRINCESS_ANIM_BOUNCE_START, + DEKU_PRINCESS_ANIM_GLARE_START, DEKU_PRINCESS_ANIM_BOW, }; s32 cueChannel; s32 cueId; @@ -306,27 +307,30 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { EnDnp_ChangeAnim(this, sCsAnimations[cueId]); - if (this->animIndex == EN_DNP_ANIM_CUTSCENE_IDLE) { + if (this->animIndex == DEKU_PRINCESS_ANIM_CUTSCENE_IDLE) { this->unk_322 |= 8; } else { this->unk_322 &= ~8; } - if (this->animIndex == EN_DNP_ANIM_ANGRY_START) { + if (this->animIndex == DEKU_PRINCESS_ANIM_ANGRY_START) { Actor_PlaySfx(&this->actor, NA_SE_VO_DHVO04); } - if (this->animIndex == EN_DNP_ANIM_GLARE_START) { + if (this->animIndex == DEKU_PRINCESS_ANIM_GLARE_START) { this->unk_322 &= ~0x80; - this->eyeIndex = EN_DNP_EYE_ANGRY; + this->eyeIndex = DEKU_PRINCESS_EYE_ANGRY; this->blinkTimer = 0; } } this->cueId = cueId; - if (((this->animIndex == EN_DNP_ANIM_THINK_START) || (this->animIndex == EN_DNP_ANIM_ARMS_TOGETHER_START) || - (this->animIndex == EN_DNP_ANIM_LAUGH_START) || (this->animIndex == EN_DNP_ANIM_ANGRY_START) || - (this->animIndex == EN_DNP_ANIM_BOUNCE_START) || (this->animIndex == EN_DNP_ANIM_GLARE_START)) && + if (((this->animIndex == DEKU_PRINCESS_ANIM_THINK_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_LAUGH_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_ANGRY_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_BOUNCE_START) || + (this->animIndex == DEKU_PRINCESS_ANIM_GLARE_START)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnDnp_ChangeAnim(this, this->animIndex + 1); } @@ -401,32 +405,32 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 16.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gDekuPrincessSkel, NULL, this->jointTable, this->morphTable, DEKU_PRINCESS_LIMB_MAX); - this->animIndex = EN_DNP_ANIM_NONE; - EnDnp_ChangeAnim(this, EN_DNP_ANIM_IDLE); + this->animIndex = DEKU_PRINCESS_ANIM_NONE; + EnDnp_ChangeAnim(this, DEKU_PRINCESS_ANIM_IDLE); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->unk_322 = 0; this->actor.targetMode = 0; this->unk_322 |= (0x100 | 0x80 | 0x10); this->actor.gravity = -1.0f; - if (EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_RELEASED_FROM_BOTTLE) { + if (DEKU_PRINCESS_GET_TYPE(&this->actor) == DEKU_PRINCESS_TYPE_RELEASED_FROM_BOTTLE) { this->actor.flags &= ~ACTOR_FLAG_1; - Actor_SetScale(&this->actor, 0.00085000007f); + Actor_SetScale(&this->actor, 0.85f * 0.001f); SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; this->actor.csId = 16; this->actionFunc = func_80B3D47C; - } else if (((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_WOODFALL_TEMPLE) && + } else if (((DEKU_PRINCESS_GET_TYPE(&this->actor) == DEKU_PRINCESS_TYPE_WOODFALL_TEMPLE) && !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) || - ((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_DEKU_KINGS_CHAMBER) && + ((DEKU_PRINCESS_GET_TYPE(&this->actor) == DEKU_PRINCESS_TYPE_DEKU_KINGS_CHAMBER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20))) { Actor_SetScale(&this->actor, 0.0085f); SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 |= 0x400; if ((play->sceneId == SCENE_MITURIN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) { this->unk_322 |= 0x20; - EnDnp_ChangeAnim(this, EN_DNP_ANIM_HURRY); + EnDnp_ChangeAnim(this, DEKU_PRINCESS_ANIM_HURRY); } this->actionFunc = func_80B3D2D4; } else { diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h index 9b02f19d3..4bd0fe14c 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h @@ -8,12 +8,14 @@ struct EnDnp; typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*); -#define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7) +#define DEKU_PRINCESS_GET_TYPE(thisx) ((thisx)->params & 7) + +#define DEKU_PRINCESS_PARAMS(type) ((type) & 7) typedef enum { - /* 0 */ EN_DNP_TYPE_WOODFALL_TEMPLE, - /* 1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE, - /* 2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER + /* 0 */ DEKU_PRINCESS_TYPE_WOODFALL_TEMPLE, + /* 1 */ DEKU_PRINCESS_TYPE_RELEASED_FROM_BOTTLE, + /* 2 */ DEKU_PRINCESS_TYPE_DEKU_KINGS_CHAMBER } EnDnpType; typedef struct EnDnp { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index fae9fc4fc..69773f821 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -5,6 +5,7 @@ */ #include "z_en_dragon.h" +#include "overlays/actors/ovl_En_Ot/z_en_ot.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -682,7 +683,8 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) { seahorsePos.y += -100.0f + BREG(33); seahorsePos.z += (Math_CosS((this->actor.parent->world.rot.y + 0x8000)) * (500.0f + BREG(38))); if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, seahorsePos.x, seahorsePos.y, - seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.csId, + seahorsePos.z, 0, this->actor.shape.rot.y, 0, + SEAHORSE_PARAMS(SEAHORSE_TYPE_1, 0, 0), this->actor.csId, this->actor.halfDaysBits, NULL)) { SET_WEEKEVENTREG(WEEKEVENTREG_13_01); switch (this->pythonIndex) { 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 11719bd43..a69d30e38 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -298,7 +298,7 @@ void func_8088CC48(EnElf* this, PlayState* play) { func_8088CBAC(this, play); this->unk_25C = 0; this->disappearTimer = 240; - if ((this->fairyFlags & 0x400) && Flags_GetCollectible(play, this->unk_260)) { + if ((this->fairyFlags & 0x400) && Flags_GetCollectible(play, this->collectibleFlag)) { Actor_Kill(&this->actor); } } @@ -320,7 +320,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { EnElf* this = THIS; Player* player = GET_PLAYER(play); s32 colorConfig; - s32 params; + s32 fairyType; Actor_ProcessInitChain(thisx, sInitChain); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable, @@ -340,15 +340,15 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { this->unk_240 = 0.0f; colorConfig = 0; - this->unk_260 = ENELF_GET_FE00(&this->actor); - params = ENELF_GET_F(&this->actor); - if (thisx->params & 0x100) { + this->collectibleFlag = FAIRY_GET_COLLECTIBLE_FLAG(&this->actor); + fairyType = FAIRY_GET_TYPE(&this->actor); + if (FAIRY_GET_BOOL_PARAM(thisx)) { this->fairyFlags |= 0x400; } - this->actor.params = params; - switch (params) { - case 0: + this->actor.params = fairyType; + switch (fairyType) { + case FAIRY_TYPE_0: thisx->room = -1; EnElf_SetupAction(this, func_8088E850); func_8088C51C(this, 0); @@ -364,7 +364,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { this->unk_266 = QuestHint_GetTatlTextId(play); break; - case 1: + case FAIRY_TYPE_1: colorConfig = -1; gSaveContext.jinxTimer = 0; EnElf_SetupAction(this, func_8088E0F0); @@ -376,7 +376,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { this->unk_250 = 0.0f; break; - case 5: + case FAIRY_TYPE_5: colorConfig = -1; EnElf_SetupAction(this, func_8088E484); this->unk_254 = 0.0f; @@ -387,7 +387,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { this->unk_250 = 7.0f; break; - case 7: + case FAIRY_TYPE_7: this->fairyFlags |= 0x200; thisx->shape.shadowDraw = ActorShadow_DrawWhiteCircle; this->fairyFlags |= 0x100; @@ -397,7 +397,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { func_8088CC48(this, play); break; - case 2: + case FAIRY_TYPE_2: this->fairyFlags |= 0x100; colorConfig = -1; this->fairyFlags |= 0x800; @@ -406,7 +406,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { func_8088CC48(this, play); break; - case 6: + case FAIRY_TYPE_6: colorConfig = -1; this->fairyFlags |= 0x800; this->fairyFlags |= 0x2000; @@ -414,25 +414,25 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { func_8088CC48(this, play); break; - case 9: + case FAIRY_TYPE_9: this->fairyFlags |= 0x1000; - case 10: + case FAIRY_TYPE_10: colorConfig = -2; func_8088CC48(this, play); break; - case 8: + case FAIRY_TYPE_8: Actor_Kill(thisx); return; - case 3: + case FAIRY_TYPE_3: colorConfig = Rand_ZeroFloat(11.99f) + 1.0f; EnElf_SetupAction(this, func_8088E018); func_8088C51C(this, 0); break; - case 4: + case FAIRY_TYPE_4: EnElf_SetupAction(this, func_8088E0E0); func_8088C51C(this, 6); this->fairyFlags |= 8; @@ -441,10 +441,13 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { for (i = 0; i < 8; i++) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, thisx->world.pos.x, thisx->world.pos.y - 30.0f, - thisx->world.pos.z, 0, 0, 0, 6); + thisx->world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_6, false, 0)); } } break; + + default: + break; } this->unk_23C = 3.0f; @@ -659,7 +662,7 @@ void func_8088DD34(EnElf* this, PlayState* play) { func_8088D9BC(this, play); if (Actor_HasParent(&this->actor, play)) { if (this->fairyFlags & 0x400) { - Flags_SetCollectible(play, this->unk_260); + Flags_SetCollectible(play, this->collectibleFlag); } Actor_Kill(&this->actor); return; @@ -689,7 +692,7 @@ void func_8088DD34(EnElf* this, PlayState* play) { this->unk_246 = 0; EnElf_SetupAction(this, func_8088E0F0); if (this->fairyFlags & 0x400) { - Flags_SetCollectible(play, this->unk_260); + Flags_SetCollectible(play, this->collectibleFlag); } return; } diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/src/overlays/actors/ovl_En_Elf/z_en_elf.h index 18e444e97..ae34be352 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h @@ -8,8 +8,25 @@ struct EnElf; typedef void (*EnElfActionFunc)(struct EnElf*, PlayState*); typedef void (*EnElfUnkFunc)(struct EnElf*, PlayState*); -#define ENELF_GET_F(thisx) ((thisx)->params & 0xF) -#define ENELF_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define FAIRY_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define FAIRY_GET_BOOL_PARAM(thisx) ((thisx)->params & 0x100) +#define FAIRY_GET_COLLECTIBLE_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) + +#define FAIRY_PARAMS(type, boolParam, collectibleFlag) (((type) /* & 0xF */) | (((boolParam) & 0x1) << 8) | ((((collectibleFlag) & 0x7F) << 9) & 0xFE00)) + +typedef enum { + /* 0x0 */ FAIRY_TYPE_0, + /* 0x1 */ FAIRY_TYPE_1, + /* 0x2 */ FAIRY_TYPE_2, + /* 0x3 */ FAIRY_TYPE_3, + /* 0x4 */ FAIRY_TYPE_4, + /* 0x5 */ FAIRY_TYPE_5, + /* 0x6 */ FAIRY_TYPE_6, + /* 0x7 */ FAIRY_TYPE_7, + /* 0x8 */ FAIRY_TYPE_8, + /* 0x9 */ FAIRY_TYPE_9, + /* 0xA */ FAIRY_TYPE_10 +} FairyType; typedef struct EnElf { /* 0x000 */ Actor actor; @@ -39,7 +56,7 @@ typedef struct EnElf { /* 0x25A */ u16 timer; /* 0x25C */ s16 unk_25C; /* 0x25E */ s16 disappearTimer; - /* 0x260 */ s16 unk_260; + /* 0x260 */ s16 collectibleFlag; /* 0x262 */ u16 fairyFlags; /* 0x264 */ u16 unk_264; /* 0x266 */ u16 unk_266; @@ -49,15 +66,4 @@ typedef struct EnElf { /* 0x270 */ EnElfActionFunc actionFunc; } EnElf; // size = 0x274 -typedef enum { - /* 0 */ ENELF_TYPE_0, - /* 1 */ ENELF_TYPE_1, - /* 2 */ ENELF_TYPE_2, - /* 3 */ ENELF_TYPE_3, - /* 4 */ ENELF_TYPE_4, - /* 5 */ ENELF_TYPE_5, - /* 6 */ ENELF_TYPE_6, - /* 7 */ ENELF_TYPE_7 -} FairyType; - #endif // Z_EN_ELF_H 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 2a348051e..4261a4f83 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h @@ -14,6 +14,8 @@ typedef enum { /* 2 */ ENFISH_2 } EnFishParam; +#define FISH_PARAMS(param) (param) + typedef struct EnFish { /* 0x000 */ Actor actor; /* 0x144 */ ColliderJntSph collider; 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 2659c042f..cb13f9504 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -2062,7 +2062,8 @@ void EnGo_Frozen(EnGo* this, PlayState* play) { Actor* actorCollidedWith = this->colliderCylinder.base.ac; if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && - (((actorCollidedWith != NULL) && (actorCollidedWith->id == ACTOR_OBJ_AQUA) && AQUA_HOT(actorCollidedWith)) || + (((actorCollidedWith != NULL) && (actorCollidedWith->id == ACTOR_OBJ_AQUA) && + (AQUA_GET_TYPE(actorCollidedWith) != AQUA_TYPE_COLD)) || (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_FIRE))) { this->actionFunc = EnGo_AwaitThaw; } 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 2b98ba7c6..d4ae8ed26 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -6,6 +6,7 @@ #include "z_en_gs.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "objects/object_gs/object_gs.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -282,7 +283,8 @@ void func_8099807C(EnGs* this, PlayState* play) { case OCARINA_SONG_EPONAS: if (!Flags_GetSwitch(play, this->unk_196)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, - this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, 2); + this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, + FAIRY_PARAMS(FAIRY_TYPE_2, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); Flags_SetSwitch(play, this->unk_196); } @@ -291,7 +293,8 @@ void func_8099807C(EnGs* this, PlayState* play) { case OCARINA_SONG_STORMS: if (!Flags_GetSwitch(play, this->unk_196)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, - this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, 7); + this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, + FAIRY_PARAMS(FAIRY_TYPE_7, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); Flags_SetSwitch(play, this->unk_196); } diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.h b/src/overlays/actors/ovl_En_Insect/z_en_insect.h index ea4025414..4e1f5b762 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h @@ -9,6 +9,8 @@ typedef void (*EnInsectActionFunc)(struct EnInsect*, PlayState*); #define ENINSECT_GET_1(thisx) ((thisx)->params & 1) +#define ENINSECT_PARAMS(param) (param) + typedef struct EnInsect { /* 0x000 */ Actor actor; /* 0x144 */ ColliderJntSph collider; 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 cb7972f04..23e19bba2 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -10,6 +10,7 @@ #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_ishi/object_ishi.h" +#include "overlays/actors/ovl_En_Insect/z_en_insect.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000) @@ -353,8 +354,9 @@ void func_8095E204(EnIshi* this, PlayState* play) { for (i = 0; i < 3; i++) { if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1, - this->actor.csId, this->actor.halfDaysBits, NULL) == NULL) { + this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, + ENINSECT_PARAMS(true), this->actor.csId, this->actor.halfDaysBits, + NULL) == NULL) { break; } } 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 16ce97153..39e092e2f 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -9,6 +9,7 @@ #include "objects/object_kusa/object_kusa.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" +#include "overlays/actors/ovl_En_Insect/z_en_insect.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000) @@ -251,8 +252,8 @@ void EnKusa_DropCollectible(EnKusa* this, PlayState* play) { } } else if (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_REGROWING_GRASS) { Item_DropCollectible(play, &this->actor.world.pos, 3); - } else { - collectible = func_800A8150(KUSA_GET_PARAM_3F(&this->actor)); + } else { // ENKUSA_TYPE_GRASS_2 + collectible = func_800A8150(KUSA_GET_PARAM_FC(&this->actor)); if (collectible >= 0) { collectableParams = KUSA_GET_COLLECTIBLE_ID(&this->actor); Item_DropCollectible(play, &this->actor.world.pos, (collectableParams << 8) | collectible); @@ -327,9 +328,9 @@ void EnKusa_SpawnBugs(EnKusa* this, PlayState* play) { u32 numBugs; for (numBugs = 0; numBugs < 3; numBugs++) { - Actor* bug = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1, - this->actor.csId, this->actor.halfDaysBits, 0); + Actor* bug = Actor_SpawnAsChildAndCutscene( + &play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, 0, 0, ENINSECT_PARAMS(true), this->actor.csId, this->actor.halfDaysBits, 0); if (bug == NULL) { break; diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h index b231f3e0e..1871b1dbe 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h @@ -7,6 +7,19 @@ struct EnKusa; typedef void (*EnKusaActionFunc)(struct EnKusa*, PlayState*); +#define KUSA_GET_TYPE(thisx)((thisx)->params & 0x3) + +// `ENKUSA_TYPE_BUSH` and `ENKUSA_TYPE_GRASS` +#define KUSA_GET_RAND_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0xF) +#define KUSA_GET_PARAM_0C(thisx) (((thisx)->params >> 12) & 1) + +// `ENKUSA_TYPE_REGROWING_GRASS`, `ENKUSA_TYPE_BUSH` and `ENKUSA_TYPE_GRASS` +#define KUSA_SHOULD_SPAWN_BUGS(thisx) (((thisx)->params >> 4) & 1) + +// `ENKUSA_TYPE_GRASS_2` +#define KUSA_GET_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0x7F) +#define KUSA_GET_PARAM_FC(thisx) (((thisx)->params >> 2) & 0x3F) + typedef enum { /* 0 */ ENKUSA_TYPE_BUSH, /* 1 */ ENKUSA_TYPE_REGROWING_GRASS, @@ -14,6 +27,19 @@ typedef enum { /* 3 */ ENKUSA_TYPE_GRASS_2 } EnKusaType; +#define KUSA_BUSH_PARAMS(spawnBugs, randCollectibleId, param0C) \ + ((ENKUSA_TYPE_BUSH & 0x3) | (((spawnBugs) & 1) << 4) | (((randCollectibleId) & 0xF) << 8) | (((param0C) & 1) << 12)) + +#define KUSA_REGROWING_GRASS_PARAMS(spawnBugs) \ + ((ENKUSA_TYPE_REGROWING_GRASS & 0x3) | (((spawnBugs) & 1) << 4)) + +#define KUSA_GRASS_PARAMS(spawnBugs, randCollectibleId, param0C) \ + ((ENKUSA_TYPE_GRASS & 0x3) | (((spawnBugs) & 1) << 4) | (((randCollectibleId) & 0xF) << 8) | (((param0C) & 1) << 12)) + +#define KUSA_GRASS_2_PARAMS(paramFC, collectibleId) \ + ((ENKUSA_TYPE_GRASS_2 & 0x3) | (((paramFC) & 0x3F) << 2) | (((collectibleId) & 0x7F) << 8)) + + typedef struct EnKusa { /* 0x000 */ Actor actor; /* 0x144 */ EnKusaActionFunc actionFunc; @@ -25,13 +51,4 @@ typedef struct EnKusa { /* 0x198 */ u8 isInWater; } EnKusa; // size = 0x19C -#define KUSA_GET_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0x7F) -#define KUSA_GET_RAND_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0xF) -#define KUSA_SHOULD_SPAWN_BUGS(thisx) (((thisx)->params >> 0x4) & 1) -#define KUSA_GET_PARAM_0C(thisx) (((thisx)->params >> 0xC) & 0x1) -#define KUSA_GET_PARAM_3F(thisx) (((thisx)->params >> 0x2) & 0x3F) - - -#define KUSA_GET_TYPE(thisx)((thisx)->params & 0x3) - #endif // Z_EN_KUSA_H 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 98b01d728..e7f14e8a8 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -103,7 +103,11 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneDownward, 20, ICHAIN_STOP), }; -static f32 D_80A6BA14[] = { 0.06f, 0.1f, 0.13f }; +f32 D_80A6BA14[] = { + 0.06f, // ENMUSHI2_0 + 0.1f, // ENMUSHI2_1 + 0.13f, // ENMUSHI2_2 +}; void func_80A687A0(EnMushi2* this) { MtxF* matrix = Matrix_GetCurrent(); @@ -743,7 +747,7 @@ void EnMushi2_Init(Actor* thisx, PlayState* play) { s32 sp3C; Actor_ProcessInitChain(&this->actor, sInitChain); - if (!ENMUSHI2_GET_3(&this->actor)) { + if (ENMUSHI2_GET_3(&this->actor) == ENMUSHI2_0) { func_80A68A78(this, play); } this->actor.shape.rot.y += Rand_S16Offset(-2000, 4000); @@ -759,7 +763,8 @@ void EnMushi2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = 30; sp3C = func_80A69EE4(this, play); - if ((sp3C == 0) && func_80A68860(this, play) && func_80A68910(this, play) && !ENMUSHI2_GET_3(&this->actor)) { + if ((sp3C == 0) && func_80A68860(this, play) && func_80A68910(this, play) && + (ENMUSHI2_GET_3(&this->actor) == ENMUSHI2_0)) { func_80A6A024(this); } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h index 1a776a52a..e0c381133 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h @@ -9,6 +9,14 @@ typedef void (*EnMushi2ActionFunc)(struct EnMushi2*, PlayState*); #define ENMUSHI2_GET_3(thisx) ((thisx)->params & 3) +#define ENMUSHI2_PARAMS(param) ((param) & 3) + +typedef enum { + /* 0 */ ENMUSHI2_0, + /* 1 */ ENMUSHI2_1, + /* 2 */ ENMUSHI2_2 +} EnMush2Param; + typedef struct { /* 0x0 */ s16 unk_00; /* 0x2 */ s16 unk_02; 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 ab2e30cee..48e3c3c03 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -106,9 +106,9 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP), }; -void func_80B5B2E0(PlayState* play, Vec3f* pos, s16 params, Vec3f* vec, s32* index) { +void func_80B5B2E0(PlayState* play, Vec3f* pos, s16 pathIndex, Vec3f* vec, s32* index) { s32 i; - Path* path = &play->setupPathList[params]; + Path* path = &play->setupPathList[pathIndex]; f32 dist; Vec3f sp58; Vec3f sp4C; @@ -117,7 +117,7 @@ void func_80B5B2E0(PlayState* play, Vec3f* pos, s16 params, Vec3f* vec, s32* ind for (i = 0; i < path->count; i++) { Math_Vec3s_ToVec3f(&sp58, &((Vec3s*)Lib_SegmentedToVirtual(path->points))[i]); dist = Math_Vec3f_DistXYZ(pos, &sp58); - if (dist < minDist) { + if (minDist > dist) { minDist = dist; Math_Vec3f_Copy(&sp4C, &sp58); *index = i; @@ -137,8 +137,8 @@ void EnOt_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); this->unk_388 = 0; - this->unk_33C = ENOT_GET_C000(&this->actor); - if (this->unk_33C == 0) { + this->type = SEAHORSE_GET_TYPE(&this->actor); + if (this->type == SEAHORSE_TYPE_0) { D_80B5E880 = this; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); @@ -155,7 +155,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { Animation_GetLastFrame(&sAnimations[0].animation->common) * Rand_ZeroOne(), Animation_GetLastFrame(&sAnimations[0].animation->common), sAnimations[0].mode, sAnimations[0].morphFrames); - this->unk_346 = ENOT_GET_7F(&this->actor); + this->pathIndex = SEAHORSE_GET_PATH_INDEX(&this->actor); this->unk_344 = this->actor.world.rot.z; this->actor.world.rot.z = 0; this->actor.shape.rot.z = 0; @@ -169,10 +169,10 @@ void EnOt_Init(Actor* thisx, PlayState* play) { this->unk_744.g = 200; this->unk_744.b = 80; - switch (ENOT_GET_C000(&this->actor)) { - case 1: + switch (SEAHORSE_GET_TYPE(&this->actor)) { + case SEAHORSE_TYPE_1: D_80B5E884 = this; - Actor_SetScale(&this->actor, 0.012999999f); + Actor_SetScale(&this->actor, 1.3f * 0.01f); switch (this->unk_344) { case 0: @@ -185,7 +185,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { Math_Vec3f_Sum(&this->actor.world.pos, &sp64, &sp64); this->unk_360 = (EnOt*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_OT, sp64.x, sp64.y, sp64.z, 0, BINANG_ROT180(this->actor.shape.rot.y), 1, - ENOT_GET_3FFF(&this->actor) | 0x8000); + SEAHORSE_PARAMS_PARTNER(&this->actor, SEAHORSE_TYPE_2)); if (this->unk_360 != NULL) { this->unk_360->unk_360 = this; this->unk_3A0 = 0; @@ -223,7 +223,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { } break; - case 2: + case SEAHORSE_TYPE_2: D_80B5E888 = this; switch (this->unk_344) { @@ -248,7 +248,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { break; case 1: - Actor_SetScale(&this->actor, 0.012999999f); + Actor_SetScale(&this->actor, 1.3f * 0.01f); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) { func_80B5C244(this, play); @@ -262,7 +262,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { } break; - case 3: + case SEAHORSE_TYPE_3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); @@ -276,6 +276,9 @@ void EnOt_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } break; + + default: + break; } } @@ -407,7 +410,7 @@ void func_80B5C25C(EnOt* this, PlayState* play) { this->unk_32C |= 0x80; } - if ((this->unk_33C == 2) && (this->unk_32C & 0x80) && (this->unk_360->unk_32C & 0x80)) { + if ((this->type == SEAHORSE_TYPE_2) && (this->unk_32C & 0x80) && (this->unk_360->unk_32C & 0x80)) { this->unk_32C |= 0x100; this->unk_360->unk_32C |= 0x100; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 2, &this->animIndex); @@ -501,7 +504,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { sp3E = Actor_WorldYawTowardPoint(&player->actor, &this->unk_394); Matrix_RotateYS(BINANG_ADD(sp3E, 0x4000), MTXMODE_NEW); - if (this->unk_33C == 2) { + if (this->type == SEAHORSE_TYPE_2) { Matrix_MultVecZ(26.259998f, &sp30); } else { if (this->unk_73C == 0) { @@ -527,7 +530,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { Math_SmoothStepToF(&this->actor.world.pos.x, this->unk_348.x, 1.0f, 2.0f, 0.01f); Math_SmoothStepToF(&this->actor.world.pos.z, this->unk_348.z, 1.0f, 2.0f, 0.01f); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (this->unk_33C == 1)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (this->type == SEAHORSE_TYPE_1)) { this->actor.textId = 0; this->unk_384 = 1; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -581,9 +584,9 @@ void func_80B5C9D0(EnOt* this, PlayState* play) { } void func_80B5CA30(EnOt* this, PlayState* play) { - Math_SmoothStepToF(&this->actor.scale.x, 0.012999999f, 0.7f, 0.0001f, 0.01f); + Math_SmoothStepToF(&this->actor.scale.x, 1.3f * 0.01f, 0.7f, 0.0001f, 0.01f); Actor_SetScale(&this->actor, this->actor.scale.x); - if (this->actor.scale.x == 0.012999999f) { + if (this->actor.scale.x == 1.3f * 0.01f) { this->unk_360->unk_32C |= 0x1000; this->unk_360->unk_360 = this; func_80B5C9A8(this, play); @@ -596,9 +599,9 @@ void func_80B5CAD0(EnOt* this, PlayState* play) { } void func_80B5CB0C(EnOt* this, PlayState* play) { - Math_SmoothStepToF(&this->actor.scale.x, 0.012999999f, 0.7f, 0.0001f, 0.01f); + Math_SmoothStepToF(&this->actor.scale.x, 1.3f * 0.01f, 0.7f, 0.0001f, 0.01f); Actor_SetScale(&this->actor, this->actor.scale.x); - if (this->actor.scale.x == 0.012999999f) { + if (this->actor.scale.x == 1.3f * 0.01f) { this->unk_32C |= 0x800; func_80B5CE6C(this, play); } @@ -708,7 +711,7 @@ void func_80B5CEC8(EnOt* this, PlayState* play) { } } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (ENOT_GET_C000(&this->actor) == 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (SEAHORSE_GET_TYPE(&this->actor) == 1)) { if ((fabsf(this->actor.xzDistToPlayer) <= 130.0f) && (fabsf(this->actor.playerHeightRel) <= 130.0f)) { player->unk_B2B = 29; } @@ -753,14 +756,14 @@ void func_80B5D160(EnOt* this, PlayState* play) { if (temp == 0) { switch (this->unk_384) { case 0: - if ((this->unk_33C != 1) && (this->unk_33C == 2)) { + if ((this->type != SEAHORSE_TYPE_1) && (this->type == SEAHORSE_TYPE_2)) { if (this->unk_32C & 1) { if (this->unk_32C & 4) { phi_a1 = 0x106A; } else { phi_a1 = 0x1069; } - } else if (Flags_GetSwitch(play, ENOT_GET_3F80(&this->actor))) { + } else if (Flags_GetSwitch(play, SEAHORSE_GET_SWITCH_FLAG(&this->actor))) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_10)) { phi_a1 = 0x106C; } else { @@ -883,10 +886,10 @@ s32 EnOt_ActorPathing_UpdateActorInfo(PlayState* play, ActorPathing* actorPath) } void func_80B5D648(EnOt* this, PlayState* play) { - func_80B5B2E0(play, &this->actor.world.pos, this->unk_346, &this->unk_348, &this->unk_340); + func_80B5B2E0(play, &this->actor.world.pos, this->pathIndex, &this->unk_348, &this->unk_340); Math_Vec3f_Copy(&this->unk_330, &this->actor.world.pos); - SubS_ActorPathing_Init(play, &this->unk_330, &this->actor, &this->actorPath, play->setupPathList, this->unk_346, 0, - 0, this->unk_340, 0); + SubS_ActorPathing_Init(play, &this->unk_330, &this->actor, &this->actorPath, play->setupPathList, this->pathIndex, + 0, 0, this->unk_340, 0); this->unk_32C = 0; this->actorPath.pointOffset.x = 0.0f; this->actorPath.pointOffset.y = 0.0f; @@ -896,7 +899,7 @@ void func_80B5D648(EnOt* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - Flags_SetSwitch(play, ENOT_GET_3F80(&this->actor)); + Flags_SetSwitch(play, SEAHORSE_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80B5D750; } @@ -996,10 +999,11 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_04)) { Vec3f sp50; - func_80B5B2E0(play, &this->actor.world.pos, ENOT_GET_7F(&this->actor), &sp50, &this->unk_340); + func_80B5B2E0(play, &this->actor.world.pos, SEAHORSE_GET_PATH_INDEX(&this->actor), &sp50, &this->unk_340); if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, sp50.x, sp50.y, sp50.z, 0, - this->actor.shape.rot.y, 1, ENOT_GET_3FFF(&this->actor) | 0x8000, - this->actor.csId, this->actor.halfDaysBits, NULL) != NULL) { + this->actor.shape.rot.y, 1, + SEAHORSE_PARAMS_PARTNER(&this->actor, SEAHORSE_TYPE_2), this->actor.csId, + this->actor.halfDaysBits, NULL) != NULL) { this->unk_32C |= 8; } } else if (D_80B5E888 != NULL) { @@ -1015,7 +1019,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { EnOt* temp = D_80B5E888; temp->unk_32C |= 8; - temp->unk_346 = ENOT_GET_7F(&this->actor); + temp->pathIndex = SEAHORSE_GET_PATH_INDEX(&this->actor); temp->actor.params = this->actor.params; temp->actor.csId = this->actor.csId; this->unk_32C |= 8; diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.h b/src/overlays/actors/ovl_En_Ot/z_en_ot.h index 8b01c6654..aa90ffa0b 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.h +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.h @@ -7,10 +7,19 @@ struct EnOt; typedef void (*EnOtActionFunc)(struct EnOt*, PlayState*); -#define ENOT_GET_7F(thisx) ((thisx)->params & 0x7F) -#define ENOT_GET_3F80(thisx) (((thisx)->params >> 7) & 0x7F) -#define ENOT_GET_3FFF(thisx) ((thisx)->params & 0x3FFF) -#define ENOT_GET_C000(thisx) (((thisx)->params >> 0xE) & 3) +#define SEAHORSE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) +#define SEAHORSE_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 7) & 0x7F) +#define SEAHORSE_GET_TYPE(thisx) (((thisx)->params >> 0xE) & 3) + +#define SEAHORSE_PARAMS(type, pathIndex, switchFlag) (((pathIndex) & 0x7F) | (((switchFlag) & 0x7F) << 7) | (((type) & 3) << 0xE)) +#define SEAHORSE_PARAMS_PARTNER(thisx, type) (((thisx)->params & 0x3FFF) | (((type) & 3) << 0xE)) + +typedef enum SeahorseType { + /* 0 */ SEAHORSE_TYPE_0, + /* 1 */ SEAHORSE_TYPE_1, + /* 2 */ SEAHORSE_TYPE_2, + /* 3 */ SEAHORSE_TYPE_3 +} SeahorseType; typedef struct { /* 0x00 */ u8 unk_00; @@ -39,10 +48,10 @@ typedef struct EnOt { /* 0x2C0 */ ActorPathing actorPath; /* 0x32C */ u16 unk_32C; /* 0x330 */ Vec3f unk_330; - /* 0x33C */ s32 unk_33C; + /* 0x33C */ s32 type; /* 0x340 */ s32 unk_340; /* 0x344 */ s16 unk_344; - /* 0x346 */ s16 unk_346; + /* 0x346 */ s16 pathIndex; /* 0x348 */ Vec3f unk_348; /* 0x354 */ s16 unk_354; /* 0x356 */ s16 csIdList[4]; diff --git a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c index 2cc547e9a..9a4b0f2d7 100644 --- a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c +++ b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c @@ -5,6 +5,7 @@ */ #include "z_en_tag_obj.h" +#include "overlays/actors/ovl_En_Ot/z_en_ot.h" #define FLAGS 0x00000000 @@ -60,7 +61,7 @@ void EnTagObj_Update(Actor* thisx, PlayState* play) { if (!this->hasSpawnedSeahorse) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_OT, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.z, 0, 0, 0, SEAHORSE_PARAMS(SEAHORSE_TYPE_0, 0, 0)); this->hasSpawnedSeahorse = true; } } diff --git a/src/overlays/actors/ovl_En_Test5/z_en_test5.h b/src/overlays/actors/ovl_En_Test5/z_en_test5.h index 8d0c47784..7a4b656b5 100644 --- a/src/overlays/actors/ovl_En_Test5/z_en_test5.h +++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.h @@ -5,6 +5,8 @@ #define ENTEST5_IS_HOT_SPRING(thisx) ((thisx)->params != 0) +#define ENTEST5_PARAMS(isHotSpringWater) (isHotSpringWater) + struct EnTest5; // SpringWaterModifier typedef void (*EnTest5ActionFunc)(struct EnTest5*, PlayState*); 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 e45026d5b..632292857 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -98,15 +98,15 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -10.0f; this->actor.gravity = -5.0f; - switch (ENZORAEGG_GET_1F(&this->actor)) { - case ENZORAEGG_1F_00: - if (Flags_GetSwitch(play, ENZORAEGG_GET_FE00(&this->actor))) { + switch (ZORA_EGG_GET_TYPE(&this->actor)) { + case ZORA_EGG_TYPE_00: + if (Flags_GetSwitch(play, ZORA_EGG_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } break; - case ENZORAEGG_1F_11: + case ZORA_EGG_TYPE_11: if (func_80B319A8(play) >= 7) { Actor_Kill(&this->actor); this->actor.home.rot.z = 1; @@ -114,26 +114,26 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { } break; - case ENZORAEGG_1F_03: - case ENZORAEGG_1F_04: - case ENZORAEGG_1F_05: - case ENZORAEGG_1F_06: - case ENZORAEGG_1F_07: - case ENZORAEGG_1F_08: - case ENZORAEGG_1F_09: + case ZORA_EGG_TYPE_03: + case ZORA_EGG_TYPE_04: + case ZORA_EGG_TYPE_05: + case ZORA_EGG_TYPE_06: + case ZORA_EGG_TYPE_07: + case ZORA_EGG_TYPE_08: + case ZORA_EGG_TYPE_09: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { Actor_Kill(&this->actor); return; } break; - case ENZORAEGG_1F_0A: - case ENZORAEGG_1F_0B: - case ENZORAEGG_1F_0C: - case ENZORAEGG_1F_0D: - case ENZORAEGG_1F_0E: - case ENZORAEGG_1F_0F: - case ENZORAEGG_1F_10: + case ZORA_EGG_TYPE_0A: + case ZORA_EGG_TYPE_0B: + case ZORA_EGG_TYPE_0C: + case ZORA_EGG_TYPE_0D: + case ZORA_EGG_TYPE_0E: + case ZORA_EGG_TYPE_0F: + case ZORA_EGG_TYPE_10: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { Actor_Kill(&this->actor); return; @@ -141,50 +141,50 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { break; } - switch (ENZORAEGG_GET_1F(&this->actor)) { - case ENZORAEGG_1F_00: + switch (ZORA_EGG_GET_TYPE(&this->actor)) { + case ZORA_EGG_TYPE_00: this->actionFunc = func_80B320E0; this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); this->actor.targetMode = 3; break; - case ENZORAEGG_1F_01: + case ZORA_EGG_TYPE_01: this->actionFunc = func_80B322BC; func_80B31590(this); break; - case ENZORAEGG_1F_02: + case ZORA_EGG_TYPE_02: this->actionFunc = func_80B32390; func_80B31590(this); break; - case ENZORAEGG_1F_03: - case ENZORAEGG_1F_04: - case ENZORAEGG_1F_05: - case ENZORAEGG_1F_06: - case ENZORAEGG_1F_07: - case ENZORAEGG_1F_08: - case ENZORAEGG_1F_09: - this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03]; + case ZORA_EGG_TYPE_03: + case ZORA_EGG_TYPE_04: + case ZORA_EGG_TYPE_05: + case ZORA_EGG_TYPE_06: + case ZORA_EGG_TYPE_07: + case ZORA_EGG_TYPE_08: + case ZORA_EGG_TYPE_09: + this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_03]; Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08); this->unk_1EC = 1; this->unk_1EE = 0; this->unk_1EF = 0; this->actionFunc = func_80B32B10; - if (((ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03) >= func_80B319A8(play)) { + if ((ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_03) >= func_80B319A8(play)) { this->actionFunc = func_80B32B3C; this->actor.draw = NULL; } break; - case ENZORAEGG_1F_0A: - case ENZORAEGG_1F_0B: - case ENZORAEGG_1F_0C: - case ENZORAEGG_1F_0D: - case ENZORAEGG_1F_0E: - case ENZORAEGG_1F_0F: - case ENZORAEGG_1F_10: - this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_0A]; + case ZORA_EGG_TYPE_0A: + case ZORA_EGG_TYPE_0B: + case ZORA_EGG_TYPE_0C: + case ZORA_EGG_TYPE_0D: + case ZORA_EGG_TYPE_0E: + case ZORA_EGG_TYPE_0F: + case ZORA_EGG_TYPE_10: + this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_0A]; this->unk_1EC = 2; this->actionFunc = func_80B324B0; Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); @@ -193,7 +193,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { this->unk_1EA |= 3; break; - case ENZORAEGG_1F_11: + case ZORA_EGG_TYPE_11: Actor_SetScale(&this->actor, 0.0006f); this->actionFunc = func_80B32D08; this->actor.world.pos.y -= this->actor.shape.yOffset * this->actor.scale.y; @@ -254,7 +254,7 @@ Actor* func_80B31CB4(PlayState* play) { Actor* actor = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; while (actor != NULL) { - if ((actor->id == ACTOR_EN_ZORAEGG) && (ENZORAEGG_GET_1F(actor) == ENZORAEGG_1F_11) && + if ((actor->id == ACTOR_EN_ZORAEGG) && (ZORA_EGG_GET_TYPE(actor) == ZORA_EGG_TYPE_11) && (actor->home.rot.z == 0)) { actor->home.rot.z = 1; return actor; @@ -268,7 +268,7 @@ Actor* func_80B31D14(PlayState* play) { Actor* actor = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; while (actor != NULL) { - if ((actor->id == ACTOR_EN_ZORAEGG) && (ENZORAEGG_GET_1F(actor) == ENZORAEGG_1F_03)) { + if ((actor->id == ACTOR_EN_ZORAEGG) && (ZORA_EGG_GET_TYPE(actor) == ZORA_EGG_TYPE_03)) { return actor; } actor = actor->next; @@ -337,7 +337,7 @@ void func_80B32094(EnZoraegg* this, PlayState* play) { void func_80B320E0(EnZoraegg* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { - Flags_SetSwitch(play, ENZORAEGG_GET_FE00(&this->actor)); + Flags_SetSwitch(play, ZORA_EGG_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B32094; diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h index f8895af3f..84fce59df 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h @@ -7,37 +7,39 @@ struct EnZoraegg; typedef void (*EnZoraeggActionFunc)(struct EnZoraegg*, PlayState*); -#define ENZORAEGG_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENZORAEGG_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ZORA_EGG_GET_TYPE(thisx) ((thisx)->params & 0x1F) +#define ZORA_EGG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) + +#define ZORA_EGG_PARAMS(type, switchFlag) (((type) & 0x1F) | (((switchFlag) & 0x7F) << 9)) typedef enum { - /* 0x00 */ ENZORAEGG_1F_00, - /* 0x01 */ ENZORAEGG_1F_01, - /* 0x02 */ ENZORAEGG_1F_02, - /* 0x03 */ ENZORAEGG_1F_03, - /* 0x04 */ ENZORAEGG_1F_04, - /* 0x05 */ ENZORAEGG_1F_05, - /* 0x06 */ ENZORAEGG_1F_06, - /* 0x07 */ ENZORAEGG_1F_07, - /* 0x08 */ ENZORAEGG_1F_08, - /* 0x09 */ ENZORAEGG_1F_09, - /* 0x0A */ ENZORAEGG_1F_0A, - /* 0x0B */ ENZORAEGG_1F_0B, - /* 0x0C */ ENZORAEGG_1F_0C, - /* 0x0D */ ENZORAEGG_1F_0D, - /* 0x0E */ ENZORAEGG_1F_0E, - /* 0x0F */ ENZORAEGG_1F_0F, - /* 0x10 */ ENZORAEGG_1F_10, - /* 0x11 */ ENZORAEGG_1F_11, - /* 0x12 */ ENZORAEGG_1F_12, - /* 0x13 */ ENZORAEGG_1F_13, - /* 0x14 */ ENZORAEGG_1F_14, - /* 0x15 */ ENZORAEGG_1F_15, - /* 0x16 */ ENZORAEGG_1F_16, - /* 0x17 */ ENZORAEGG_1F_17, - /* 0x18 */ ENZORAEGG_1F_18, - /* 0x19 */ ENZORAEGG_1F_19 -} EnZoraeggParam; + /* 0x00 */ ZORA_EGG_TYPE_00, + /* 0x01 */ ZORA_EGG_TYPE_01, + /* 0x02 */ ZORA_EGG_TYPE_02, + /* 0x03 */ ZORA_EGG_TYPE_03, + /* 0x04 */ ZORA_EGG_TYPE_04, + /* 0x05 */ ZORA_EGG_TYPE_05, + /* 0x06 */ ZORA_EGG_TYPE_06, + /* 0x07 */ ZORA_EGG_TYPE_07, + /* 0x08 */ ZORA_EGG_TYPE_08, + /* 0x09 */ ZORA_EGG_TYPE_09, + /* 0x0A */ ZORA_EGG_TYPE_0A, + /* 0x0B */ ZORA_EGG_TYPE_0B, + /* 0x0C */ ZORA_EGG_TYPE_0C, + /* 0x0D */ ZORA_EGG_TYPE_0D, + /* 0x0E */ ZORA_EGG_TYPE_0E, + /* 0x0F */ ZORA_EGG_TYPE_0F, + /* 0x10 */ ZORA_EGG_TYPE_10, + /* 0x11 */ ZORA_EGG_TYPE_11, + /* 0x12 */ ZORA_EGG_TYPE_12, + /* 0x13 */ ZORA_EGG_TYPE_13, + /* 0x14 */ ZORA_EGG_TYPE_14, + /* 0x15 */ ZORA_EGG_TYPE_15, + /* 0x16 */ ZORA_EGG_TYPE_16, + /* 0x17 */ ZORA_EGG_TYPE_17, + /* 0x18 */ ZORA_EGG_TYPE_18, + /* 0x19 */ ZORA_EGG_TYPE_19 +} ZoraEggType; typedef struct EnZoraegg { /* 0x000 */ Actor actor; 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 ca4efd4bb..7324448a4 100644 --- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c +++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c @@ -199,7 +199,7 @@ void func_80ACBD34(ObjAqua* this) { } void func_80ACBD48(ObjAqua* this, PlayState* play) { - if ((AQUA_HOT(&this->actor) == 1) && (this->alpha > 90)) { + if ((AQUA_GET_TYPE(&this->actor) == AQUA_TYPE_HOT) && (this->alpha > 90)) { func_80ACB940(this, play); } if (this->alpha > 5) { @@ -228,7 +228,7 @@ void func_80ACBDFC(ObjAqua* this, PlayState* play) { this->alpha = (s32)(temp * 3.25f) + 10; this->actor.shape.shadowAlpha = this->alpha; this->unk_198 += 1000; - if (AQUA_HOT(&this->actor) == 1) { + if (AQUA_GET_TYPE(&this->actor) == AQUA_TYPE_HOT) { f32 temp_f2 = this->actor.scale.x * 10000.0f; EffectSsBubble_Spawn(play, &this->actor.world.pos, temp_f2 * -0.5f, temp_f2, temp_f2, diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h index a47ea661a..12dcedc1c 100644 --- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h +++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h @@ -3,8 +3,14 @@ #include "global.h" -#define AQUA_HOT(thisx) ((thisx)->params & 1) -#define OBJAQUA_1 1 +#define AQUA_GET_TYPE(thisx) ((thisx)->params & 1) + +#define AQUA_PARAMS(type) ((type) & 1) + +typedef enum { + /* 0 */ AQUA_TYPE_COLD, + /* 1 */ AQUA_TYPE_HOT +} AquaType; struct ObjAqua; diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index d1601e69d..9b3a08bda 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -193,13 +193,13 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { ((this->colliders2[0].base.ac->id != ACTOR_OBJ_AQUA) && (this->colliders2[0].info.acHitInfo->toucher.dmgFlags == 0x800)) || ((this->colliders2[0].base.ac->id == ACTOR_OBJ_AQUA) && - (this->colliders2[0].base.ac->params == OBJAQUA_1)))) || + (this->colliders2[0].base.ac->params == AQUA_TYPE_HOT)))) || ((this->colliders2[1].base.acFlags & AC_HIT) && ((this->colliders2[1].base.ac == NULL) || ((this->colliders2[1].base.ac->id != ACTOR_OBJ_AQUA) && (this->colliders2[1].info.acHitInfo->toucher.dmgFlags == 0x800)) || ((this->colliders2[1].base.ac->id == ACTOR_OBJ_AQUA) && - (this->colliders2[1].base.ac->params == OBJAQUA_1))))) { + (this->colliders2[1].base.ac->params == AQUA_TYPE_HOT))))) { CutsceneManager_Queue(this->actor.csId); this->unk_14A = 0; this->actionFunc = func_80931E58; diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c index f63201966..49a0bb656 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c @@ -5,6 +5,10 @@ */ #include "z_obj_mure.h" +#include "overlays/actors/ovl_En_Butte/z_en_butte.h" +#include "overlays/actors/ovl_En_Fish/z_en_fish.h" +#include "overlays/actors/ovl_En_Insect/z_en_insect.h" +#include "overlays/actors/ovl_En_Kusa/z_en_kusa.h" #define FLAGS 0x00000000 @@ -32,8 +36,12 @@ ActorInit Obj_Mure_InitVars = { (ActorFunc)NULL, }; -static f32 sZClip[] = { - 1600.0f, 1600.0f, 1000.0f, 1000.0f, 1000.0f, +static f32 sZClip[OBJMURE_TYPE_MAX] = { + 1600.0f, // OBJMURE_TYPE_GRASS + 1600.0f, // OBJMURE_TYPE_UNDEFINED + 1000.0f, // OBJMURE_TYPE_FISH + 1000.0f, // OBJMURE_TYPE_BUGS + 1000.0f, // OBJMURE_TYPE_BUTTERFLY }; static s32 sMaxChildSpawns[] = { @@ -43,12 +51,20 @@ static s32 sMaxChildSpawns[] = { 0, }; -static s16 sSpawnActorIds[] = { - ACTOR_EN_KUSA, 0, ACTOR_EN_FISH, ACTOR_EN_INSECT, ACTOR_EN_BUTTE, +static s16 sSpawnActorIds[OBJMURE_TYPE_MAX] = { + ACTOR_EN_KUSA, // OBJMURE_TYPE_GRASS + ACTOR_PLAYER, // OBJMURE_TYPE_UNDEFINED + ACTOR_EN_FISH, // OBJMURE_TYPE_FISH + ACTOR_EN_INSECT, // OBJMURE_TYPE_BUGS + ACTOR_EN_BUTTE, // OBJMURE_TYPE_BUTTERFLY }; -static s16 sSpawnParams[] = { - 0, 2, -1, 0, -1, +static s16 sSpawnParams[OBJMURE_TYPE_MAX] = { + KUSA_BUSH_PARAMS(false, 0, false), // OBJMURE_TYPE_GRASS + PLAYER_PARAMS(2, PLAYER_INITMODE_0), // OBJMURE_TYPE_UNDEFINED + FISH_PARAMS(ENFISH_MINUS1), // OBJMURE_TYPE_FISH + ENINSECT_PARAMS(false), // OBJMURE_TYPE_BUGS + BUTTERFLY_PARAMS(BUTTERFLY_MINUS1), // OBJMURE_TYPE_BUTTERFLY }; static InitChainEntry sInitChain[] = { @@ -57,15 +73,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP), }; -typedef enum { - /* 0 */ OBJMURE_TYPE_GRASS, - /* 1 */ OBJMURE_TYPE_UNDEFINED, - /* 2 */ OBJMURE_TYPE_FISH, - /* 3 */ OBJMURE_TYPE_BUGS, - /* 4 */ OBJMURE_TYPE_BUTTERFLY, - /* 5 */ OBJMURE_TYPE_MAX -} ObjMureType; - typedef enum { /* 0 */ OBJMURE_CHILD_STATE_0, /* 1 */ OBJMURE_CHILD_STATE_DEAD, diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h index 7bf2d40b7..57a099dc1 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h @@ -7,6 +7,20 @@ struct ObjMure; typedef void (*ObjMureActionFunc)(struct ObjMure*, PlayState*); +#define OBJ_MURE_GET_CHNUM(thisx) (((thisx)->params >> 12) & 0xF) +#define OBJ_MURE_GET_PTN(thisx) (((thisx)->params >> 8) & 0x7) +#define OBJ_MURE_GET_SVNUM(thisx) (((thisx)->params >> 5) & 0x3) +#define OBJ_MURE_GET_TYPE(thisx) ((thisx)->params & 0x1F) + +typedef enum { + /* 0 */ OBJMURE_TYPE_GRASS, + /* 1 */ OBJMURE_TYPE_UNDEFINED, + /* 2 */ OBJMURE_TYPE_FISH, + /* 3 */ OBJMURE_TYPE_BUGS, + /* 4 */ OBJMURE_TYPE_BUTTERFLY, + /* 5 */ OBJMURE_TYPE_MAX +} ObjMureType; + #define OBJMURE_MAX_SPAWNS 15 typedef struct { @@ -29,9 +43,4 @@ typedef struct ObjMure { /* 0x1A0 */ s16 unk_1A0; } ObjMure; // size = 0x1A4 -#define OBJ_MURE_GET_CHNUM(thisx) (((thisx)->params >> 12) & 0xF) -#define OBJ_MURE_GET_PTN(thisx) (((thisx)->params >> 8) & 0x7) -#define OBJ_MURE_GET_SVNUM(thisx) (((thisx)->params >> 5) & 0x3) -#define OBJ_MURE_GET_TYPE(thisx) ((thisx)->params & 0x1F) - #endif // Z_OBJ_MURE_H diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 815b21b9b..491dee545 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -90,14 +90,18 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { CutsceneManager_Stop(this->actor.csId); switch (params) { case SHOTSUN_FAIRY_SPAWNER_SUNS: - fairyType = ENELF_TYPE_7; + fairyType = FAIRY_TYPE_7; break; + case SHOTSUN_FAIRY_SPAWNER_STORMS: - fairyType = ENELF_TYPE_7; + fairyType = FAIRY_TYPE_7; + break; + + default: break; } Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.home.pos.x, this->actor.home.pos.y, - this->actor.home.pos.z, 0, 0, 0, fairyType); + this->actor.home.pos.z, 0, 0, 0, FAIRY_PARAMS(fairyType, false, 0)); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 27192e894..20d16f817 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,6 +4,7 @@ * Description: Player */ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" #include "z64quake.h" @@ -17,12 +18,20 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Boom/z_en_boom.h" #include "overlays/actors/ovl_En_Box/z_en_box.h" +#include "overlays/actors/ovl_En_Dnp/z_en_dnp.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "overlays/actors/ovl_En_Elf/z_en_elf.h" +#include "overlays/actors/ovl_En_Fish/z_en_fish.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" #include "overlays/actors/ovl_En_Ishi/z_en_ishi.h" +#include "overlays/actors/ovl_En_Mushi2/z_en_mushi2.h" +#include "overlays/actors/ovl_En_Ot/z_en_ot.h" #include "overlays/actors/ovl_En_Test3/z_en_test3.h" +#include "overlays/actors/ovl_En_Test5/z_en_test5.h" #include "overlays/actors/ovl_En_Test7/z_en_test7.h" #include "overlays/actors/ovl_En_Torch2/z_en_torch2.h" +#include "overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h" +#include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h" #include "overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h" @@ -5910,12 +5919,12 @@ void func_80835BF8(Vec3f* srcPos, s16 rotY, f32 radius, Vec3f* dstPos) { dstPos->z = Math_CosS(rotY) * radius + srcPos->z; } -Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3f* arg3, s32 elfParams) { - Vec3f pos; +Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3f* pos, s32 fairyParams) { + Vec3f spawnPos; - Player_TranslateAndRotateY(this, translation, arg3, &pos); + Player_TranslateAndRotateY(this, translation, pos, &spawnPos); - return Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, pos.x, pos.y, pos.z, 0, 0, 0, elfParams); + return Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos.x, spawnPos.y, spawnPos.z, 0, 0, 0, fairyParams); } f32 func_80835CD8(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos, CollisionPoly** outPoly, s32* outBgId) { @@ -9916,7 +9925,7 @@ void func_80840770(PlayState* play, Player* this) { Player_StopCutscene(this); this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE]; this->unk_AE8 = 60; - Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, 5); + Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, FAIRY_PARAMS(FAIRY_TYPE_5, false, 0)); Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) { play->gameOverCtx.state = GAMEOVER_DEATH_FADE_OUT; @@ -10533,7 +10542,8 @@ void Player_Init(Actor* thisx, PlayState* play) { if ((this->actor.draw != NULL) && gSaveContext.save.hasTatl && ((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && (play->sceneId != SCENE_SPOT00)) { - this->tatlActor = Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D340, 0); + this->tatlActor = + Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D340, FAIRY_PARAMS(FAIRY_TYPE_0, false, 0)); if (gSaveContext.dogParams != 0) { gSaveContext.dogParams |= 0x8000; @@ -16836,21 +16846,23 @@ void Player_Action_67(Player* this, PlayState* play) { } } +#define BOTTLE_CATCH_PARAMS_ANY -1 + struct_8085D798 D_8085D798[] = { - { ACTOR_EN_ELF, 2, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, - { ACTOR_EN_FISH, -1, ITEM_FISH, PLAYER_IA_BOTTLE_FISH, 0x62 }, - { ACTOR_EN_INSECT, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, - { ACTOR_EN_MUSHI2, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, - { ACTOR_EN_TEST5, 0, ITEM_SPRING_WATER, PLAYER_IA_BOTTLE_SPRING_WATER, 0x67 }, - { ACTOR_EN_TEST5, 1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, - { ACTOR_BG_GORON_OYU, -1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, - { ACTOR_EN_ZORAEGG, -1, ITEM_ZORA_EGG, PLAYER_IA_BOTTLE_ZORA_EGG, 0x69 }, - { ACTOR_EN_DNP, -1, ITEM_DEKU_PRINCESS, PLAYER_IA_BOTTLE_DEKU_PRINCESS, 0x5F }, - { ACTOR_EN_OT, -1, ITEM_SEAHORSE, PLAYER_IA_BOTTLE_SEAHORSE, 0x6E }, - { ACTOR_OBJ_KINOKO, -1, ITEM_MUSHROOM, PLAYER_IA_BOTTLE_SEAHORSE, 0x6B }, - { ACTOR_EN_POH, -1, ITEM_POE, PLAYER_IA_BOTTLE_POE, 0x65 }, - { ACTOR_EN_BIGPO, -1, ITEM_BIG_POE, PLAYER_IA_BOTTLE_BIG_POE, 0x66 }, - { ACTOR_EN_ELF, 6, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, + { ACTOR_EN_ELF, FAIRY_PARAMS(FAIRY_TYPE_2, false, 0), ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, + { ACTOR_EN_FISH, BOTTLE_CATCH_PARAMS_ANY, ITEM_FISH, PLAYER_IA_BOTTLE_FISH, 0x62 }, + { ACTOR_EN_INSECT, BOTTLE_CATCH_PARAMS_ANY, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_MUSHI2, BOTTLE_CATCH_PARAMS_ANY, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_TEST5, ENTEST5_PARAMS(false), ITEM_SPRING_WATER, PLAYER_IA_BOTTLE_SPRING_WATER, 0x67 }, + { ACTOR_EN_TEST5, ENTEST5_PARAMS(true), ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_BG_GORON_OYU, BOTTLE_CATCH_PARAMS_ANY, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_EN_ZORAEGG, BOTTLE_CATCH_PARAMS_ANY, ITEM_ZORA_EGG, PLAYER_IA_BOTTLE_ZORA_EGG, 0x69 }, + { ACTOR_EN_DNP, BOTTLE_CATCH_PARAMS_ANY, ITEM_DEKU_PRINCESS, PLAYER_IA_BOTTLE_DEKU_PRINCESS, 0x5F }, + { ACTOR_EN_OT, BOTTLE_CATCH_PARAMS_ANY, ITEM_SEAHORSE, PLAYER_IA_BOTTLE_SEAHORSE, 0x6E }, + { ACTOR_OBJ_KINOKO, BOTTLE_CATCH_PARAMS_ANY, ITEM_MUSHROOM, PLAYER_IA_BOTTLE_SEAHORSE, 0x6B }, + { ACTOR_EN_POH, BOTTLE_CATCH_PARAMS_ANY, ITEM_POE, PLAYER_IA_BOTTLE_POE, 0x65 }, + { ACTOR_EN_BIGPO, BOTTLE_CATCH_PARAMS_ANY, ITEM_BIG_POE, PLAYER_IA_BOTTLE_BIG_POE, 0x66 }, + { ACTOR_EN_ELF, FAIRY_PARAMS(FAIRY_TYPE_6, false, 0), ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, }; void Player_Action_68(Player* this, PlayState* play) { @@ -16900,7 +16912,8 @@ void Player_Action_68(Player* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(D_8085D798); i++) { if (((interactRangeActor->id == entry->actorId) && - ((entry->actorParams < 0) || (interactRangeActor->params == entry->actorParams)))) { + ((entry->actorParams <= BOTTLE_CATCH_PARAMS_ANY) || + (interactRangeActor->params == entry->actorParams)))) { break; } entry++; @@ -16934,17 +16947,17 @@ void Player_Action_69(Player* this, PlayState* play) { Player_StopCutscene(this); func_80839E74(this, play); } else if (PlayerAnimation_OnFrame(&this->skelAnime, 37.0f)) { - s32 sp2C = 8; + s32 fairyParams = FAIRY_PARAMS(FAIRY_TYPE_8, false, 0); Player_PlaySfx(this, NA_SE_EV_BOTTLE_CAP_OPEN); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); if (this->itemAction == PLAYER_IA_BOTTLE_FAIRY) { Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); - sp2C = 1; + fairyParams = FAIRY_PARAMS(FAIRY_TYPE_1, false, 0); } - Player_SpawnFairy(play, this, &this->leftHandWorld.pos, &D_8085D7EC, sp2C); + Player_SpawnFairy(play, this, &this->leftHandWorld.pos, &D_8085D7EC, fairyParams); } } @@ -16958,17 +16971,17 @@ void Player_Action_70(Player* this, PlayState* play) { 0x28, // PLAYER_FORM_HUMAN }; static struct_8085D80C D_8085D80C[] = { - { ACTOR_EN_FISH, 0 }, // PLAYER_BOTTLE_FISH - { ACTOR_OBJ_AQUA, 0 }, // PLAYER_BOTTLE_SPRING_WATER - { ACTOR_OBJ_AQUA, 1 }, // PLAYER_BOTTLE_HOT_SPRING_WATER - { ACTOR_EN_ZORAEGG, 0x11 }, // PLAYER_BOTTLE_ZORA_EGG - { ACTOR_EN_DNP, 1 }, // PLAYER_BOTTLE_DEKU_PRINCESS - { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_GOLD_DUST - { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_1C - { ACTOR_EN_OT, 0x8000 }, // PLAYER_BOTTLE_SEAHORSE - { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_MUSHROOM - { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_HYLIAN_LOACH - { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_BUG + { ACTOR_EN_FISH, FISH_PARAMS(ENFISH_0) }, // PLAYER_BOTTLE_FISH + { ACTOR_OBJ_AQUA, AQUA_PARAMS(AQUA_TYPE_COLD) }, // PLAYER_BOTTLE_SPRING_WATER + { ACTOR_OBJ_AQUA, AQUA_PARAMS(AQUA_TYPE_HOT) }, // PLAYER_BOTTLE_HOT_SPRING_WATER + { ACTOR_EN_ZORAEGG, ZORA_EGG_PARAMS(ZORA_EGG_TYPE_11, 0) }, // PLAYER_BOTTLE_ZORA_EGG + { ACTOR_EN_DNP, DEKU_PRINCESS_PARAMS(DEKU_PRINCESS_TYPE_RELEASED_FROM_BOTTLE) }, // PLAYER_BOTTLE_DEKU_PRINCESS + { ACTOR_EN_MUSHI2, ENMUSHI2_PARAMS(ENMUSHI2_0) }, // PLAYER_BOTTLE_GOLD_DUST + { ACTOR_EN_MUSHI2, ENMUSHI2_PARAMS(ENMUSHI2_0) }, // PLAYER_BOTTLE_1C + { ACTOR_EN_OT, SEAHORSE_PARAMS(SEAHORSE_TYPE_2, 0, 0) }, // PLAYER_BOTTLE_SEAHORSE + { ACTOR_EN_MUSHI2, ENMUSHI2_PARAMS(ENMUSHI2_0) }, // PLAYER_BOTTLE_MUSHROOM + { ACTOR_EN_MUSHI2, ENMUSHI2_PARAMS(ENMUSHI2_0) }, // PLAYER_BOTTLE_HYLIAN_LOACH + { ACTOR_EN_MUSHI2, ENMUSHI2_PARAMS(ENMUSHI2_0) }, // PLAYER_BOTTLE_BUG }; static AnimSfxEntry D_8085D838[] = { ANIMSFX(ANIMSFX_TYPE_VOICE, 38, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), From 5625603b56e11a59f5eb36b346c89390f7352fbf Mon Sep 17 00:00:00 2001 From: Isghj <42048411+isghj5@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:35:59 -0700 Subject: [PATCH 048/121] ShotSun: some docs (#1348) --- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 25 +++++++++++-------- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h | 11 ++++++-- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 491dee545..e128e7263 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -55,9 +55,9 @@ void ShotSun_Init(Actor* thisx, PlayState* play) { s32 pad; ShotSun* this = THIS; - if ((SHOTSUN_GET_FF(thisx) == SHOTSUN_FAIRY_SPAWNER_SUNS) || - (SHOTSUN_GET_FF(thisx) == SHOTSUN_FAIRY_SPAWNER_STORMS)) { - this->unk_19C = 0; + if ((SHOTSUN_GET_TYPE(thisx) == SHOTSUN_FAIRY_SPAWNER_SUNS) || + (SHOTSUN_GET_TYPE(thisx) == SHOTSUN_FAIRY_SPAWNER_STORMS)) { + this->fairySpawnerState = SPAWNER_OUT_OF_RANGE; // never read after here this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; this->actionFunc = ShotSun_UpdateForOcarina; @@ -73,14 +73,14 @@ void ShotSun_Init(Actor* thisx, PlayState* play) { void ShotSun_Destroy(Actor* thisx, PlayState* play) { ShotSun* this = THIS; - if ((SHOTSUN_GET_FF(thisx) != SHOTSUN_FAIRY_SPAWNER_SUNS) && - (SHOTSUN_GET_FF(thisx) != SHOTSUN_FAIRY_SPAWNER_STORMS)) { + if ((SHOTSUN_GET_TYPE(thisx) != SHOTSUN_FAIRY_SPAWNER_SUNS) && + (SHOTSUN_GET_TYPE(thisx) != SHOTSUN_FAIRY_SPAWNER_STORMS)) { Collider_DestroyCylinder(play, &this->collider); } } void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { - s32 params = SHOTSUN_GET_FF(&this->actor); + s32 type = SHOTSUN_GET_TYPE(&this->actor); s32 fairyType = 0; PlayState* play = play2; @@ -88,7 +88,7 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { this->timer--; } else { CutsceneManager_Stop(this->actor.csId); - switch (params) { + switch (type) { case SHOTSUN_FAIRY_SPAWNER_SUNS: fairyType = FAIRY_TYPE_7; break; @@ -100,6 +100,7 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) { default: break; } + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, 0, 0, 0, FAIRY_PARAMS(fairyType, false, 0)); Actor_Kill(&this->actor); @@ -111,10 +112,14 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Start(this->actor.csId, &this->actor); } + this->actionFunc = ShotSun_SpawnFairy; this->timer = 50; + + //! @bug: This Demo_Kankyo spawn will crash because parameter 0x11 is an invalid value (type goes up to 4) Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, 0, 0, 0, 0x11); + Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR); } else { CutsceneManager_Queue(this->actor.csId); @@ -122,18 +127,18 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { } void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play) { - s32 params = SHOTSUN_GET_FF(&this->actor); + s32 type = SHOTSUN_GET_TYPE(&this->actor); if (play->msgCtx.ocarinaMode == 3) { switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_STORMS: - if (params == SHOTSUN_FAIRY_SPAWNER_STORMS) { + if (type == SHOTSUN_FAIRY_SPAWNER_STORMS) { this->actionFunc = ShotSun_TriggerFairy; play->msgCtx.ocarinaMode = 4; } break; case OCARINA_SONG_SUNS: - if (params == SHOTSUN_FAIRY_SPAWNER_SUNS) { + if (type == SHOTSUN_FAIRY_SPAWNER_SUNS) { this->actionFunc = ShotSun_TriggerFairy; play->msgCtx.ocarinaMode = 4; } diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h index 3ba7f35d9..ad94fda73 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h @@ -3,7 +3,7 @@ #include "global.h" -#define SHOTSUN_GET_FF(thisx) ((thisx)->params & 0xFF) +#define SHOTSUN_GET_TYPE(thisx) ((thisx)->params & 0xFF) #define SHOTSUN_FAIRY_SPAWNER_SUNS 0x40 #define SHOTSUN_FAIRY_SPAWNER_STORMS 0x41 @@ -17,7 +17,14 @@ typedef struct ShotSun { /* 0x190 */ ShotSunActionFunc actionFunc; /* 0x194 */ Vec3s hitboxPos; /* 0x19A */ s16 timer; - /* 0x19C */ s8 unk_19C; // leftover from OOT secret ocarina occurrence function. + /* 0x19C */ s8 fairySpawnerState; // leftover from OOT secret ocarina occurrence function. } ShotSun; // size = 0x1A0 +// Left over from OOT, unused in MM +typedef enum { + /* 0 */ SPAWNER_OUT_OF_RANGE, + /* 1 */ SPAWNER_OCARINA_START, + /* 2 */ SPAWNER_OCARINA_PLAYING +} FairySpawnerState; + #endif // Z_SHOT_SUN_H From 27ccadc77ee0a65eee0d5eb1cbd77dec6ee9d408 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 3 Aug 2023 20:06:36 -0700 Subject: [PATCH 049/121] Document the function that handles the Giant's Mask cutscene in Boss02 (#1345) * Document the function that handles the Giant's Mask cutscene in Boss02 * Remove newline between fallthrough and next case --- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 419 ++++++++++++-------- src/overlays/actors/ovl_Boss_02/z_boss_02.h | 22 +- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 6 +- 4 files changed, 264 insertions(+), 191 deletions(-) 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 02d9cfc4c..255e2d3f7 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -31,12 +31,42 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play); void Boss02_Static_Draw(Actor* thisx, PlayState* play); void Boss02_UpdateEffects(PlayState* play); void Boss02_DrawEffects(PlayState* play); -void func_809DD934(Boss02* this, PlayState* play); +void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play); void func_809DEAC4(Boss02* this, PlayState* play); -u8 D_809E0420; -u8 D_809E0421; +typedef enum { + /* 0 */ GIANTS_MASK_CS_STATE_WAITING_FOR_MASK, // Starts the cutscene when the player puts on/takes off the mask. + /* 1 */ GIANTS_MASK_CS_STATE_MASK_ON, // Controls the cutscene where the player puts the mask on. + /* 2 */ GIANTS_MASK_CS_STATE_MASK_ON_SKIPPED, // Moves to the "done" state when the mask-on cutscene is skipped. + /* 10 */ GIANTS_MASK_CS_STATE_MASK_OFF = 10, // Controls the cutscene where the player takes the mask off. + /* 11 */ GIANTS_MASK_CS_STATE_MASK_OFF_SKIPPED, // Moves to the "done" state when the mask-off cutscene is skipped. + /* 20 */ GIANTS_MASK_CS_STATE_DONE = 20 // Stops the cutscene and resets the player's scale back to normal. +} GiantsMaskCsState; + +typedef enum { + /* 0 */ GIANTS_MASK_CS_FLASH_STATE_NOT_STARTED, // Does nothing at all. + /* 1 */ GIANTS_MASK_CS_FLASH_STATE_STARTED, // Plays the "mask flash" SFX and initializes a white FillScreen. + /* 2 */ GIANTS_MASK_CS_FLASH_STATE_INCREASE_ALPHA, // Increases the alpha for the FillScreen on every frame. + /* 3 */ GIANTS_MASK_CS_FLASH_STATE_DECREASE_ALPHA // Decreases the alpha for the FillScreen on every frame. +} GiantsMaskCsFlashState; + +/** + * If set to true, the player can skip the cutscene of putting on the Giant's Mask + * by pressing A, B, or any C-button. If false, they must watch it in full. + */ +u8 sCanSkipMaskOnCs; + +/** + * If set to true, the player can skip the cutscene of taking off the Giant's Mask + * by pressing A, B, or any C-button. If false, they must watch it in full. + */ +u8 sCanSkipMaskOffCs; + +/** + * True when the player is giant-sized (i.e. wearing the Giant's Mask), false when the player is normal-sized. + */ u8 sIsInGiantMode; + Boss02* sRedTwinmold; Boss02* sBlueTwinmold; Boss02* sTwinmoldStatic; @@ -468,7 +498,7 @@ Vec3f D_809DFA2C[] = { { -800.0f, -1000.0f, 0.0f }, { -800.0f, -1000.0f, 0.0f }, { -800.0f, -1000.0f, 0.0f }, }; -void func_809DA1D0(PlayState* play, u8 red, u8 green, u8 blue, u8 alpha) { +void Boss02_FillScreen(PlayState* play, u8 red, u8 green, u8 blue, u8 alpha) { R_PLAY_FILL_SCREEN_ON = true; R_PLAY_FILL_SCREEN_R = red; R_PLAY_FILL_SCREEN_G = green; @@ -476,11 +506,11 @@ void func_809DA1D0(PlayState* play, u8 red, u8 green, u8 blue, u8 alpha) { R_PLAY_FILL_SCREEN_ALPHA = alpha; } -void func_809DA22C(PlayState* play, u8 alpha) { +void Boss02_SetFillScreenAlpha(PlayState* play, u8 alpha) { R_PLAY_FILL_SCREEN_ALPHA = alpha; } -void func_809DA24C(PlayState* play) { +void Boss02_StopFillScreen(PlayState* play) { R_PLAY_FILL_SCREEN_ON = false; } @@ -572,7 +602,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { this->actor.update = Boss02_Static_Update; this->actor.draw = Boss02_Static_Draw; this->actor.flags &= ~ACTOR_FLAG_1; - this->unk_1D70 = 0.00999999977648f; + this->playerScale = 0.01f; if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_55) || (sBlueWarp != NULL)) { this->unk_1D20 = 0; sMusicStartTimer = KREG(15) + 20; @@ -1181,7 +1211,7 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.060000001f); } - if (sTwinmoldStatic->unk_1D18 == 0) { + if (sTwinmoldStatic->giantsMaskCsState == GIANTS_MASK_CS_STATE_WAITING_FOR_MASK) { for (i = 0; i < ARRAY_COUNT(this->unk_0146); i++) { if (this->unk_0146[i] != 0) { this->unk_0146[i]--; @@ -1294,17 +1324,17 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) { play->envCtx.sandstormState = 0xD; if (sBlueWarp != NULL) { - this->unk_1D74 = KREG(23) + -15.0f; + this->fogNear = KREG(23) + -15.0f; D_801F4E30 = 0; play->envCtx.lightSettingOverride = 1; play->skyboxId = SKYBOX_NORMAL_SKY; } else if (!sIsInGiantMode) { - this->unk_1D74 = 0.0f; + this->fogNear = 0.0f; D_801F4E30 = this->unk_1D7C; play->envCtx.lightSettingOverride = 0; play->skyboxId = SKYBOX_2; } else { - this->unk_1D74 = KREG(23) + -15.0f; + this->fogNear = KREG(23) + -15.0f; D_801F4E30 = ((KREG(24) * 0.1f) + 1.0f) * this->unk_1D7C; play->envCtx.lightSettingOverride = 1; play->skyboxId = SKYBOX_NORMAL_SKY; @@ -1327,7 +1357,7 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) { Boss02_UpdateEffects(play); func_809DEAC4(this, play); - func_809DD934(this, play); + Boss02_HandleGiantsMaskCutscene(this, play); } Gfx* D_809DFA9C[] = { @@ -1630,158 +1660,181 @@ void Boss02_DrawEffects(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -void func_809DD934(Boss02* this, PlayState* play) { +/** + * This function is primarily responsible for handling the cutscene where the player puts on + * or takes off the Giant's Mask. It does some manual camera control, adjusts the player's + * scale, switches between the "Normal" and "Giant" variations of the arena, and creates a + * "flash" when the cutscene ends by filling the screen with white. In addition, this function + * is responsible for updating the EnvironmentContext's fogNear variable, which it does even + * when the Giant's Mask cutscene is not playing. + */ +void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 i; - Actor* temp_a0_5; - Vec3f sp58; - u8 sp57 = 0; - f32 phi_f0_2; + Actor* actorIter; + Vec3f subCamEyeOffset; + u8 switchArena = false; + f32 scale; s16 alpha; - this->unk_1D14++; + this->giantsMaskCsTimer++; - switch (this->unk_1D18) { - case 0: + switch (this->giantsMaskCsState) { + case GIANTS_MASK_CS_STATE_WAITING_FOR_MASK: if (player->stateFlags1 & PLAYER_STATE1_100) { Cutscene_StartManual(play, &play->csCtx); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); Play_EnableMotionBlur(150); - this->unk_1D14 = 0; + this->giantsMaskCsTimer = 0; this->subCamAtVel = 0.0f; - this->unk_1D58 = 0.0f; + this->subCamUpRotZScale = 0.0f; if (!sIsInGiantMode) { - this->unk_1D18 = 1; - this->unk_1D68 = 10.0f; - this->unk_1D64 = 60.0f; - this->unk_1D6C = 23.0f; - this->unk_1D70 = 0.01f; - this->unk_1D74 = 0.0f; - goto label1; + this->giantsMaskCsState = GIANTS_MASK_CS_STATE_MASK_ON; + this->subCamEyeOffsetY = 10.0f; + this->subCamDistZFromPlayer = 60.0f; + this->subCamAtOffsetY = 23.0f; + this->playerScale = 0.01f; + this->fogNear = 0.0f; + goto maskOn; // Jumps to this label to prevent the player from skipping the cutscene immediately. } else { - this->unk_1D18 = 10; - this->unk_1D68 = 10.0f; - this->unk_1D64 = 200.0f; - this->unk_1D6C = 273.0f; - this->unk_1D70 = 0.1f; - this->unk_1D74 = -100.0f; - sp57 = 1; - goto label2; + this->giantsMaskCsState = GIANTS_MASK_CS_STATE_MASK_OFF; + this->subCamEyeOffsetY = 10.0f; + this->subCamDistZFromPlayer = 200.0f; + this->subCamAtOffsetY = 273.0f; + this->playerScale = 0.1f; + this->fogNear = -100.0f; + switchArena = true; + goto maskOff; // Jumps to this label to prevent the player from skipping the cutscene immediately. } } break; - case 1: - if ((this->unk_1D14 < 80) && (D_809E0420 != 0) && + case GIANTS_MASK_CS_STATE_MASK_ON: + if ((this->giantsMaskCsTimer < 80) && sCanSkipMaskOnCs && CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT)) { - this->unk_1D18++; - this->unk_1D78 = 1; - this->unk_1D14 = 0; + this->giantsMaskCsState++; + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_STARTED; + this->giantsMaskCsTimer = 0; + break; + } + + maskOn: + if (this->giantsMaskCsTimer >= 50) { + if (this->giantsMaskCsTimer == (u32)(BREG(43) + 60)) { + Audio_PlaySfx(NA_SE_PL_TRANSFORM_GIANT); + } + + // Makes the camera quickly move away from the player and look upwards as the player + // increases in size. Also decreases the fogNear from 0.0f to -100.0f. + Math_ApproachF(&this->subCamDistZFromPlayer, 200.0f, 0.1f, this->subCamAtVel * 640.0f); + Math_ApproachF(&this->subCamAtOffsetY, 273.0f, 0.1f, this->subCamAtVel * 150.0f); + Math_ApproachF(&this->playerScale, 0.1f, 0.2f, this->subCamAtVel * 0.1f); + Math_ApproachF(&this->fogNear, -100.0f, 1.0f, this->subCamAtVel * 100.0f); + Math_ApproachF(&this->subCamAtVel, 1.0f, 1.0f, 0.001f); } else { - label1: - if (this->unk_1D14 >= 50) { - if (this->unk_1D14 == (u32)(BREG(43) + 60)) { - Audio_PlaySfx(NA_SE_PL_TRANSFORM_GIANT); - } - Math_ApproachF(&this->unk_1D64, 200.0f, 0.1f, this->subCamAtVel * 640.0f); - Math_ApproachF(&this->unk_1D6C, 273.0f, 0.1f, this->subCamAtVel * 150.0f); - Math_ApproachF(&this->unk_1D70, 0.1f, 0.2f, this->subCamAtVel * 0.1f); - Math_ApproachF(&this->unk_1D74, -100.0f, 1.0f, this->subCamAtVel * 100.0f); - Math_ApproachF(&this->subCamAtVel, 1.0f, 1.0f, 0.001f); - } else { - Math_ApproachF(&this->unk_1D64, 30.0f, 0.1f, 1.0f); - } + // Makes the camera slowly approach the player. + Math_ApproachF(&this->subCamDistZFromPlayer, 30.0f, 0.1f, 1.0f); + } - if (this->unk_1D14 > 50) { - Math_ApproachZeroF(&this->unk_1D58, 1.0f, 0.06f); - } else { - Math_ApproachF(&this->unk_1D58, 0.4f, 1.0f, 0.02f); - } + // Makes the camera roll side-to-side at the start of the cutscene, and stops + // the camera from rolling after 51 frames have passed. + if (this->giantsMaskCsTimer > 50) { + Math_ApproachZeroF(&this->subCamUpRotZScale, 1.0f, 0.06f); + } else { + Math_ApproachF(&this->subCamUpRotZScale, 0.4f, 1.0f, 0.02f); + } - if (this->unk_1D14 == 107) { - this->unk_1D78 = 1; - } + if (this->giantsMaskCsTimer == 107) { + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_STARTED; + } - if (this->unk_1D14 < 121) { - break; - } - - sp57 = 1; - D_809E0420 = 1; - goto block_38; + if (this->giantsMaskCsTimer > 120) { + switchArena = true; + sCanSkipMaskOnCs = true; + goto done; } break; - case 2: - if (this->unk_1D14 < 8) { - break; + case GIANTS_MASK_CS_STATE_MASK_ON_SKIPPED: + if (this->giantsMaskCsTimer >= 8) { + switchArena = true; + goto done; } - sp57 = 1; - goto block_38; + break; - case 10: - if ((this->unk_1D14 < 30) && (D_809E0421 != 0) && + case GIANTS_MASK_CS_STATE_MASK_OFF: + if ((this->giantsMaskCsTimer < 30) && sCanSkipMaskOffCs && CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT)) { - this->unk_1D18++; - this->unk_1D78 = 1; - this->unk_1D14 = 0; + this->giantsMaskCsState++; + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_STARTED; + this->giantsMaskCsTimer = 0; break; } - label2: - if (this->unk_1D14 != 0) { - if (this->unk_1D14 == (u32)(BREG(44) + 10)) { + maskOff: + if (this->giantsMaskCsTimer != 0) { + if (this->giantsMaskCsTimer == (u32)(BREG(44) + 10)) { Audio_PlaySfx(NA_SE_PL_TRANSFORM_NORAML); } - Math_ApproachF(&this->unk_1D64, 60.0f, 0.1f, this->subCamAtVel * 640.0f); - Math_ApproachF(&this->unk_1D6C, 23.0f, 0.1f, this->subCamAtVel * 150.0f); - Math_ApproachF(&this->unk_1D70, 0.01f, 0.1f, 0.003f); - Math_ApproachF(&this->unk_1D74, 0.0f, 1.0f, this->subCamAtVel * 100.0f); + + // Makes the camera move slowly towards the player and look downwards as the player + // decreases in size. Also increases the fogNear from -100.0f to 0.0f. + Math_ApproachF(&this->subCamDistZFromPlayer, 60.0f, 0.1f, this->subCamAtVel * 640.0f); + Math_ApproachF(&this->subCamAtOffsetY, 23.0f, 0.1f, this->subCamAtVel * 150.0f); + Math_ApproachF(&this->playerScale, 0.01f, 0.1f, 0.003f); + Math_ApproachF(&this->fogNear, 0.0f, 1.0f, this->subCamAtVel * 100.0f); Math_ApproachF(&this->subCamAtVel, 2.0f, 1.0f, 0.01f); } - if (this->unk_1D14 == 42) { - this->unk_1D78 = 1; + if (this->giantsMaskCsTimer == 42) { + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_STARTED; } - if (this->unk_1D14 > 50) { - D_809E0421 = 1; - goto block_38; + if (this->giantsMaskCsTimer > 50) { + sCanSkipMaskOffCs = true; + goto done; } break; - case 11: - if (this->unk_1D14 < 8) { - break; + case GIANTS_MASK_CS_STATE_MASK_OFF_SKIPPED: + if (this->giantsMaskCsTimer >= 8) { + goto done; } + break; - block_38: - case 20: - this->unk_1D18 = 0; + done: + case GIANTS_MASK_CS_STATE_DONE: + // Ends the cutscene and restores the player's scale to its "original" value of 0.1f. + // This might seem strange in the case where the player has put on the Giant's Mask, + // since they seem so large after the cutscene ends. However, the player is still + // their normal size; the arena and everything in it has shrunk instead. + this->giantsMaskCsState = GIANTS_MASK_CS_STATE_WAITING_FOR_MASK; func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_StopManual(play, &play->csCtx); this->actor.flags |= ACTOR_FLAG_1; player->stateFlags1 &= ~PLAYER_STATE1_100; - this->unk_1D70 = 0.01f; + this->playerScale = 0.01f; Play_DisableMotionBlur(); break; } if (player->transformation == PLAYER_FORM_FIERCE_DEITY) { - Actor_SetScale(&player->actor, this->unk_1D70 * 1.5f); + Actor_SetScale(&player->actor, this->playerScale * 1.5f); } else { - Actor_SetScale(&player->actor, this->unk_1D70); + Actor_SetScale(&player->actor, this->playerScale); } - play->envCtx.lightSettings.fogNear = this->unk_1D74; + play->envCtx.lightSettings.fogNear = this->fogNear; - if (sp57) { - sIsInGiantMode = 1 - sIsInGiantMode; + // Switches from the "normal" variation of the arena to the "giant" variation (or vice versa) + // at the appropriate point in the Giant's Mask cutscene. + if (switchArena) { + sIsInGiantMode = true - sIsInGiantMode; if (!sIsInGiantMode) { sGiantModeScaleFactor = 1.0f; } else { @@ -1789,7 +1842,12 @@ void func_809DD934(Boss02* this, PlayState* play) { } this->giantModeScaleFactor = sGiantModeScaleFactor; + if (!sIsInGiantMode) { + // In this case, the player is switching from the "giant" arena to the "normal" arena. + // The "giant" arena sits 3150 units above the "normal" arena, so this moves the player, + // Twinmold, and the blue warp down and scales their world coordinates upwards to be + // appropriate for the larger arena. if (sBlueWarp != NULL) { sBlueWarp->unk_203 = 0; sBlueWarp->unk_204 = 1.0f; @@ -1802,6 +1860,10 @@ void func_809DD934(Boss02* this, PlayState* play) { player->fallStartHeight = player->actor.world.pos.y; player->actor.world.pos.z *= 10.0f; + // If the blue warp exists, and if the player is within 60 units of its center after switching + // to the "normal" arena, this code will move the player to a fixed point next to the blue warp. + // This prevents the player from instantly activating the blue warp after switching arenas, and + // it relies on the blue warp's XZ-coordinates being (0, 0) as they are in Twinmold's boss room. if ((sBlueWarp != NULL) && ((SQ(player->actor.world.pos.z) + SQ(player->actor.world.pos.x)) < SQ(60.0f))) { player->actor.world.pos.z = 60.0f; player->actor.world.pos.x = 60.0f; @@ -1862,7 +1924,11 @@ void func_809DD934(Boss02* this, PlayState* play) { sBlueTwinmold->unk_0188.y *= 10.0f; } else { - if (sBlueWarp != 0) { + // In this case, the player is switching from the "normal" arena to the "giant" arena. + // The "giant" arena sits 3150 units above the "normal" arena, so this moves the player, + // Twinmold, and the blue warp up and scales their world coordinates downwards to be + // appropriate for the smaller arena. + if (sBlueWarp != NULL) { sBlueWarp->unk_203 = 1; sBlueWarp->unk_204 = 0.1f; sBlueWarp->dyna.actor.world.pos.y = 3155.0f; @@ -1932,113 +1998,120 @@ void func_809DD934(Boss02* this, PlayState* play) { player->actor.home.pos = player->actor.world.pos; player->actor.prevPos = player->actor.world.pos; - temp_a0_5 = play->actorCtx.actorLists[ACTORCAT_BG].first; - while (temp_a0_5 != NULL) { - if (temp_a0_5->id == ACTOR_BG_INIBS_MOVEBG) { - Actor_Kill(temp_a0_5); + // Kills the existing instance of Twinmold's arena and spawns a new instance with the appropriate + // scale and at the appropriate height. + actorIter = play->actorCtx.actorLists[ACTORCAT_BG].first; + while (actorIter != NULL) { + if (actorIter->id == ACTOR_BG_INIBS_MOVEBG) { + Actor_Kill(actorIter); break; } - temp_a0_5 = temp_a0_5->next; + + actorIter = actorIter->next; } { - f32 tmp = sIsInGiantMode ? 3150.0f : 0.0f; + f32 arenaPosY = sIsInGiantMode ? 3150.0f : 0.0f; - Actor_Spawn(&play->actorCtx, play, ACTOR_BG_INIBS_MOVEBG, 0, tmp, 0, 0, 0, 0, sIsInGiantMode); + Actor_Spawn(&play->actorCtx, play, ACTOR_BG_INIBS_MOVEBG, 0, arenaPosY, 0, 0, 0, 0, sIsInGiantMode); } - temp_a0_5 = play->actorCtx.actorLists[ACTORCAT_BOSS].first; - while (temp_a0_5 != NULL) { - if ((temp_a0_5->id == ACTOR_EN_TANRON5) || (temp_a0_5->id == ACTOR_ITEM_B_HEART)) { + // Moves the props in Twinmold's arena and the Heart Container 3150 units up or down + // so they're in the appropriate arena and scales them accordingly. + actorIter = play->actorCtx.actorLists[ACTORCAT_BOSS].first; + while (actorIter != NULL) { + if ((actorIter->id == ACTOR_EN_TANRON5) || (actorIter->id == ACTOR_ITEM_B_HEART)) { if (!sIsInGiantMode) { - temp_a0_5->world.pos.y -= 3150.0f; - temp_a0_5->world.pos.y *= 10.0f; + actorIter->world.pos.y -= 3150.0f; + actorIter->world.pos.y *= 10.0f; - temp_a0_5->floorHeight -= 3150.0f; - temp_a0_5->floorHeight *= 10.0f; + actorIter->floorHeight -= 3150.0f; + actorIter->floorHeight *= 10.0f; - phi_f0_2 = 10.0f; + scale = 10.0f; } else { - temp_a0_5->world.pos.y *= 0.1f; - temp_a0_5->world.pos.y += 3150.0f; + actorIter->world.pos.y *= 0.1f; + actorIter->world.pos.y += 3150.0f; - temp_a0_5->floorHeight *= 0.1f; - temp_a0_5->floorHeight += 3150.0f; + actorIter->floorHeight *= 0.1f; + actorIter->floorHeight += 3150.0f; - phi_f0_2 = 0.1f; + scale = 0.1f; } - temp_a0_5->world.pos.x *= phi_f0_2; - temp_a0_5->world.pos.z *= phi_f0_2; + actorIter->world.pos.x *= scale; + actorIter->world.pos.z *= scale; - temp_a0_5->speed *= phi_f0_2; + actorIter->speed *= scale; - temp_a0_5->velocity.x *= phi_f0_2; - temp_a0_5->velocity.y *= phi_f0_2; - temp_a0_5->velocity.z *= phi_f0_2; + actorIter->velocity.x *= scale; + actorIter->velocity.y *= scale; + actorIter->velocity.z *= scale; - temp_a0_5->gravity *= phi_f0_2; - temp_a0_5->terminalVelocity *= phi_f0_2; + actorIter->gravity *= scale; + actorIter->terminalVelocity *= scale; - temp_a0_5->scale.x *= phi_f0_2; - temp_a0_5->scale.y *= phi_f0_2; - temp_a0_5->scale.z *= phi_f0_2; + actorIter->scale.x *= scale; + actorIter->scale.y *= scale; + actorIter->scale.z *= scale; - if (temp_a0_5->id == ACTOR_ITEM_B_HEART) { - ((ItemBHeart*)temp_a0_5)->baseScale *= phi_f0_2; + if (actorIter->id == ACTOR_ITEM_B_HEART) { + ((ItemBHeart*)actorIter)->baseScale *= scale; } } - temp_a0_5 = temp_a0_5->next; + + actorIter = actorIter->next; } } - switch (this->unk_1D78) { - case 0: + switch (this->giantsMaskCsFlashState) { + case GIANTS_MASK_CS_FLASH_STATE_NOT_STARTED: break; - case 1: - this->unk_1D7A = 0; - func_809DA1D0(play, 255, 255, 255, 0); - this->unk_1D78 = 2; + case GIANTS_MASK_CS_FLASH_STATE_STARTED: + this->giantsMaskCsFlashAlpha = 0; + Boss02_FillScreen(play, 255, 255, 255, 0); + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_INCREASE_ALPHA; Audio_PlaySfx(NA_SE_SY_TRANSFORM_MASK_FLASH); - - case 2: - this->unk_1D7A += 40; - if (this->unk_1D7A >= 400) { - this->unk_1D78 = 3; + // fallthrough + case GIANTS_MASK_CS_FLASH_STATE_INCREASE_ALPHA: + this->giantsMaskCsFlashAlpha += 40; + if (this->giantsMaskCsFlashAlpha >= 400) { + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_DECREASE_ALPHA; } - alpha = this->unk_1D7A; + + alpha = this->giantsMaskCsFlashAlpha; alpha = CLAMP_MAX(alpha, 255); - func_809DA22C(play, alpha); + Boss02_SetFillScreenAlpha(play, alpha); break; - case 3: - this->unk_1D7A -= 40; - if (this->unk_1D7A <= 0) { - this->unk_1D7A = 0; - this->unk_1D78 = 0; - func_809DA24C(play); + case GIANTS_MASK_CS_FLASH_STATE_DECREASE_ALPHA: + this->giantsMaskCsFlashAlpha -= 40; + if (this->giantsMaskCsFlashAlpha <= 0) { + this->giantsMaskCsFlashAlpha = 0; + this->giantsMaskCsFlashState = GIANTS_MASK_CS_FLASH_STATE_NOT_STARTED; + Boss02_StopFillScreen(play); } else { - alpha = this->unk_1D7A; + alpha = this->giantsMaskCsFlashAlpha; alpha = CLAMP_MAX(alpha, 255); - func_809DA22C(play, alpha); + Boss02_SetFillScreenAlpha(play, alpha); } break; } - if ((this->unk_1D18 != 0) && (this->subCamId != SUB_CAM_ID_DONE)) { + if ((this->giantsMaskCsState != GIANTS_MASK_CS_STATE_WAITING_FOR_MASK) && (this->subCamId != SUB_CAM_ID_DONE)) { Matrix_RotateYS(player->actor.shape.rot.y, MTXMODE_NEW); - Matrix_MultVecZ(this->unk_1D64, &sp58); + Matrix_MultVecZ(this->subCamDistZFromPlayer, &subCamEyeOffset); - this->subCamEye.x = player->actor.world.pos.x + sp58.x; - this->subCamEye.y = player->actor.world.pos.y + sp58.y + this->unk_1D68; - this->subCamEye.z = player->actor.world.pos.z + sp58.z; + this->subCamEye.x = player->actor.world.pos.x + subCamEyeOffset.x; + this->subCamEye.y = player->actor.world.pos.y + subCamEyeOffset.y + this->subCamEyeOffsetY; + this->subCamEye.z = player->actor.world.pos.z + subCamEyeOffset.z; this->subCamAt.x = player->actor.world.pos.x; - this->subCamAt.y = player->actor.world.pos.y + this->unk_1D6C; + this->subCamAt.y = player->actor.world.pos.y + this->subCamAtOffsetY; this->subCamAt.z = player->actor.world.pos.z; - this->unk_1D54 = Math_SinS(this->unk_1D14 * 1512) * this->unk_1D58; - Matrix_RotateZF(this->unk_1D54, MTXMODE_APPLY); + this->subCamUpRotZ = Math_SinS(this->giantsMaskCsTimer * 1512) * this->subCamUpRotZScale; + Matrix_RotateZF(this->subCamUpRotZ, MTXMODE_APPLY); Matrix_MultVecY(1.0f, &this->subCamUp); Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); ShrinkWindow_Letterbox_SetSizeTarget(27); @@ -2049,7 +2122,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { Player* player = GET_PLAYER(play); Boss02* sp68; Vec3f subCamEye; - f32 sp58 = 0.0f; + f32 subCamEyeOffset = 0.0f; this->unk_1D1C++; if (this->unk_0194 == 0) { @@ -2089,7 +2162,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { Rumble_Override(0.0f, 50, 200, 1); } this->unk_0150 += 0x4000; - sp58 = (Math_SinS(this->unk_0150) * (BREG(19) + 5)) * 0.1f; + subCamEyeOffset = (Math_SinS(this->unk_0150) * (BREG(19) + 5)) * 0.1f; Matrix_RotateZF(Math_SinS(this->unk_1D1C * 0x3000) * ((KREG(28) * 0.001f) + 0.017f), MTXMODE_NEW); Matrix_MultVecY(1.0f, &this->subCamUp); Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG); @@ -2208,8 +2281,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) { case 103: this->unk_0150 += 0x4000; - sp58 = Math_SinS(this->unk_0150); - sp58 = (sp58 * this->unk_0146[0]) * 1.5f; + subCamEyeOffset = Math_SinS(this->unk_0150); + subCamEyeOffset = (subCamEyeOffset * this->unk_0146[0]) * 1.5f; if (this->unk_1D1C == 30) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; @@ -2248,7 +2321,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { if ((this->unk_1D20 != 0) && (this->subCamId != SUB_CAM_ID_DONE)) { subCamEye = this->subCamEye; - subCamEye.y += sp58 * sGiantModeScaleFactor; + subCamEye.y += subCamEyeOffset * sGiantModeScaleFactor; Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &subCamEye, &this->subCamUp); this->subCamUp.z = this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.h b/src/overlays/actors/ovl_Boss_02/z_boss_02.h index f3024c241..41f373b52 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h @@ -87,8 +87,8 @@ typedef struct Boss02 { /* 0x1C28 */ ColliderJntSph colliderSphere2; /* 0x1C48 */ ColliderJntSphElement colliderSphere2Elements[2]; /* 0x1CC8 */ ColliderCylinder colliderCylinder; - /* 0x1D14 */ u32 unk_1D14; - /* 0x1D18 */ s16 unk_1D18; + /* 0x1D14 */ u32 giantsMaskCsTimer; + /* 0x1D18 */ s16 giantsMaskCsState; /* 0x1D1A */ s16 unk_1D1A; /* 0x1D1C */ u32 unk_1D1C; /* 0x1D20 */ s16 unk_1D20; @@ -97,17 +97,17 @@ typedef struct Boss02 { /* 0x1D30 */ Vec3f subCamAt; /* 0x1D3C */ Vec3f subCamUp; /* 0x1D48 */ Vec3f subCamAtNext; - /* 0x1D54 */ f32 unk_1D54; - /* 0x1D58 */ f32 unk_1D58; + /* 0x1D54 */ f32 subCamUpRotZ; + /* 0x1D58 */ f32 subCamUpRotZScale; /* 0x1D5C */ f32 subCamAtVel; /* 0x1D60 */ UNK_TYPE1 unk1D60[0x4]; - /* 0x1D64 */ f32 unk_1D64; - /* 0x1D68 */ f32 unk_1D68; - /* 0x1D6C */ f32 unk_1D6C; - /* 0x1D70 */ f32 unk_1D70; - /* 0x1D74 */ f32 unk_1D74; - /* 0x1D78 */ u8 unk_1D78; - /* 0x1D7A */ s16 unk_1D7A; + /* 0x1D64 */ f32 subCamDistZFromPlayer; + /* 0x1D68 */ f32 subCamEyeOffsetY; + /* 0x1D6C */ f32 subCamAtOffsetY; + /* 0x1D70 */ f32 playerScale; + /* 0x1D74 */ f32 fogNear; + /* 0x1D78 */ u8 giantsMaskCsFlashState; + /* 0x1D7A */ s16 giantsMaskCsFlashAlpha; /* 0x1D7C */ s16 unk_1D7C; /* 0x1D7E */ s16 unk_1D7E; } Boss02; // size = 0x1D80 diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4db192c4b..4adec0d21 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -9292,9 +9292,9 @@ 0x809D6C98:("func_809D6C98",), 0x809D6E7C:("func_809D6E7C",), 0x809D73D4:("func_809D73D4",), - 0x809DA1D0:("func_809DA1D0",), - 0x809DA22C:("func_809DA22C",), - 0x809DA24C:("func_809DA24C",), + 0x809DA1D0:("Boss02_FillScreen",), + 0x809DA22C:("Boss02_SetFillScreenAlpha",), + 0x809DA24C:("Boss02_StopFillScreen",), 0x809DA264:("Boss02_SpawnEffectSand",), 0x809DA344:("Boss02_SpawnEffectFragment",), 0x809DA460:("Boss02_SpawnEffectFlash",), @@ -9313,7 +9313,7 @@ 0x809DD0A8:("Boss02_Static_Draw",), 0x809DD0CC:("Boss02_UpdateEffects",), 0x809DD2F8:("Boss02_DrawEffects",), - 0x809DD934:("func_809DD934",), + 0x809DD934:("Boss02_HandleGiantsMaskCutscene",), 0x809DEAC4:("func_809DEAC4",), 0x809E2760:("Boss03_PlayUnderwaterSfx",), 0x809E2788:("Boss03_SpawnEffectWetSpot",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6d6a74981..7183aec29 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -10109,9 +10109,9 @@ 0x809DFD34:("D_809DFD34","f32","",0x4), 0x809DFD38:("D_809DFD38","f32","",0x4), 0x809DFD3C:("D_809DFD3C","f32","",0x4), - 0x809E0420:("D_809E0420","UNK_TYPE1","",0x1), - 0x809E0421:("D_809E0421","UNK_TYPE1","",0x1), - 0x809E0422:("D_809E0422","UNK_TYPE1","",0x1), + 0x809E0420:("sCanSkipMaskOnCs","UNK_TYPE1","",0x1), + 0x809E0421:("sCanSkipMaskOffCs","UNK_TYPE1","",0x1), + 0x809E0422:("sIsInGiantMode","UNK_TYPE1","",0x1), 0x809E0424:("sRedTwinmold","UNK_TYPE4","",0x4), 0x809E0428:("sBlueTwinmold","UNK_TYPE4","",0x4), 0x809E042C:("sTwinmoldStatic","UNK_TYPE4","",0x4), From 4ae00e909e74044f05155683b49d2561f91de7ba Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 5 Aug 2023 06:36:03 +1000 Subject: [PATCH 050/121] Fix Cutscene Bss (#1305) * demo bss * fix bss * sPad * also matching * static bss pad * ultratypes * spacing * cleanup --- include/variables.h | 19 ------------------- include/z64cutscene.h | 8 +++++++- src/code/z_demo.c | 33 ++++++++++++++------------------- 3 files changed, 21 insertions(+), 39 deletions(-) diff --git a/include/variables.h b/include/variables.h index 6b2522e4b..1565e0201 100644 --- a/include/variables.h +++ b/include/variables.h @@ -225,11 +225,7 @@ extern ActorOverlay gActorOverlayTable[ACTOR_ID_MAX]; extern ActorId gMaxActorId; extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[]; extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; -// extern UNK_TYPE1 D_801B4708; -extern u8 gOpeningEntranceIndex; - -extern ActorCutscene sGlobalCutsceneList[8]; extern GameStateOverlay gGameStateOverlayTable[]; extern s32 gGraphNumGameStates; @@ -1973,21 +1969,6 @@ extern TriNorm D_801EF5C8; extern TriNorm D_801EF600; extern TriNorm D_801EF638; extern SaveContext gSaveContext; -// extern UNK_TYPE2 D_801F3F38; -// extern UNK_TYPE1 D_801F3F3A; -// extern UNK_TYPE1 D_801F3F3B; -// extern UNK_TYPE1 D_801F3F3C; -// extern UNK_TYPE1 D_801F3F42; -// extern UNK_TYPE1 D_801F3F4A; -// extern UNK_TYPE1 D_801F3F5A; - -// extern UNK_TYPE1 D_801F3F80; -// extern UNK_TYPE1 D_801F3F83; -// extern UNK_TYPE1 D_801F48C8; - -extern UNK_TYPE D_801F4DDC; -extern u8 gDisablePlayerCsModeStartPos; -extern s16 gDungeonBossWarpSceneId; // extern UNK_TYPE1 D_801F4E20; extern u8 D_801F4E30; diff --git a/include/z64cutscene.h b/include/z64cutscene.h index 83e9994f1..af427d1a7 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -781,7 +781,7 @@ typedef struct { /* 0x2E */ UNK_TYPE1 unk_2E[2]; } CutsceneCameraInterp; // size = 0x30 -typedef struct { +typedef struct CutsceneCamera { /* 0x00 */ s16 splineIndex; /* 0x02 */ s16 cmdIndex; /* 0x04 */ s16 splineNeedsInit; @@ -856,4 +856,10 @@ void CutsceneFlags_Set(struct PlayState* play, s16 flag); void CutsceneFlags_Unset(struct PlayState* play, s16 flag); s32 CutsceneFlags_Get(struct PlayState* play, s16 flag); +extern u8 gOpeningEntranceIndex; + +extern u8 D_801F4DDC; +extern u8 gDisablePlayerCsModeStartPos; +extern s16 gDungeonBossWarpSceneId; + #endif diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 7abd9db76..24371cdbe 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,4 +1,17 @@ #include "prevent_bss_reordering.h" +#include "PR/ultratypes.h" + +// Variables are put before most headers as a hacky way to bypass bss reordering +struct CutsceneCamera; + +s16 sCutsceneQuakeIndex; +struct CutsceneCamera sCutsceneCameraInfo; +u16 sCueTypeList[10]; +u8 D_801F4DDC; +static s16 sBssPad; +u8 gDisablePlayerCsModeStartPos; +s16 gDungeonBossWarpSceneId; + #include "global.h" #include "z64quake.h" #include "z64rumble.h" @@ -14,24 +27,12 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx); void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx); void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx); -// Unused -UNK_TYPE4 D_801BB120 = 0; +static s32 sPad = 0; u16 sCurTextId = 0; u16 sCurOcarinaAction = 0; u8 gOpeningEntranceIndex = 0; u8 sCutsceneStoredPlayerForm = 0; -// bss -#ifndef NON_MATCHING -static u16 sSeqId; -#endif -s16 sCutsceneQuakeIndex; -CutsceneCamera sCutsceneCameraInfo; -u16 sCueTypeList[10]; -UNK_TYPE D_801F4DDC; -u8 gDisablePlayerCsModeStartPos; -s16 gDungeonBossWarpSceneId; - void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) { s32 i; @@ -454,8 +455,6 @@ void Cutscene_SetSfxReverbIndexTo1(PlayState* play, CutsceneContext* csCtx, CsCm } } -#ifdef NON_MATCHING -// needs in-function static bss void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd) { static u16 sSeqId; u8 dayMinusOne; @@ -506,10 +505,6 @@ void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdMo } } } -#else -void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s") -#endif void CutsceneCmd_FadeOutAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutAmbience* cmd) { if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) { From 17b774effe03aa959158d8a650bcb6b6bb9ac9a2 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 7 Aug 2023 00:02:37 +1000 Subject: [PATCH 051/121] Animation Cleanup: En_F* (#1332) * Anim F Cleanup * minifrog * cleanup * more cleanup * cleanup fishing limb * format * spacing * PR Review --- assets/xml/objects/object_fish.xml | 74 +++++----- include/z64save.h | 2 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 4 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 43 ++++-- src/overlays/actors/ovl_En_Fall2/z_en_fall2.c | 15 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 6 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 131 +++++++++-------- src/overlays/actors/ovl_En_Fg/z_en_fg.h | 32 ++--- .../actors/ovl_En_Fire_Rock/z_en_fire_rock.c | 3 + src/overlays/actors/ovl_En_Fish/z_en_fish.c | 3 +- src/overlays/actors/ovl_En_Fish/z_en_fish.h | 5 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 123 +++++++++------- src/overlays/actors/ovl_En_Fish2/z_en_fish2.h | 81 +++++------ .../actors/ovl_En_Fishing/z_en_fishing.c | 59 ++++++-- .../actors/ovl_En_Floormas/z_en_floormas.c | 58 +++++--- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 61 ++++---- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 61 ++++++-- src/overlays/actors/ovl_En_Fu/z_en_fu.h | 5 +- .../actors/ovl_En_Fu_Kago/z_en_fu_kago.c | 4 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 132 +++++++++++------- .../actors/ovl_En_Minifrog/z_en_minifrog.h | 29 ++-- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 4 +- tools/disasm/functions.txt | 6 +- tools/disasm/variables.txt | 4 +- 24 files changed, 561 insertions(+), 384 deletions(-) diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index 918c0eb5f..07e0e3d23 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -20,22 +20,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -65,15 +65,15 @@ - - - - - - - - - + + + + + + + + + @@ -120,18 +120,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 85a2a62e3..01739975d 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -875,7 +875,7 @@ typedef enum { // Mountain village is unfrozen #define WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE PACK_WEEKEVENTREG_FLAG(33, 0x80) -// Spoken to MINIFROG_YELLOW +// Spoken to FROG_YELLOW #define WEEKEVENTREG_34_01 PACK_WEEKEVENTREG_FLAG(34, 0x01) #define WEEKEVENTREG_34_02 PACK_WEEKEVENTREG_FLAG(34, 0x02) 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 59e3a09e9..ff4c54559 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -312,7 +312,7 @@ static InitChainEntry sInitChain[] = { }; void EnBigslime_Init(Actor* thisx, PlayState* play2) { - static s32 isFrogReturnedFlags[] = { + static s32 sIsFrogReturnedFlags[] = { WEEKEVENTREG_32_40, WEEKEVENTREG_32_80, WEEKEVENTREG_33_01, @@ -341,7 +341,7 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) { if (Flags_GetClear(play, play->roomCtx.curRoom.num)) { Actor_Kill(&this->actor); - if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) { + if (!CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->actor.params - 1])) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->actor.params); } diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 39cbee8dc..8468c3e54 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -115,6 +115,9 @@ void EnFall_Moon_AdjustScaleAndPosition(EnFall* this, PlayState* play) { this->actor.home.pos.y - (finalDayRelativeHeight * 6700.0f * (this->scale * 6.25f)); } break; + + default: + break; } } @@ -354,6 +357,9 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { case 9: play->csCtx.curFrame--; break; + + default: + break; } } } @@ -392,6 +398,9 @@ void EnFall_StoppedOpenMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* case 4: this->actor.draw = EnFall_OpenMouthMoon_Draw; break; + + default: + break; } } } @@ -406,6 +415,9 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat case 4: this->actor.draw = NULL; break; + + default: + break; } } @@ -424,6 +436,9 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat case 1303: Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON); break; + + default: + break; } if (play->csCtx.curFrame >= 1145) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); @@ -443,11 +458,17 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat case 737: Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON); break; + + default: + break; } if (play->csCtx.curFrame >= 650) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG); } break; + + default: + break; } } } @@ -540,20 +561,20 @@ void EnFall_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); } +static u8 sAlphaTableIndices[] = { + 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 3, 0, 1, 1, 1, 4, 0, 4, 0, 1, 1, 1, 3, 0, 3, 0, 1, 1, 1, 4, 4, 1, + 1, 0, 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, 4, 0, 4, 4, 0, 4, 4, 1, 1, 1, 1, + 1, 1, 3, 3, 0, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, 1, 4, 4, 0, 4, 0, 1, 1, 1, 3, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, + 1, 4, 4, 0, 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 2, 2, 0, 1, 1, 0, 0, 1, 0, + 2, 0, 0, 1, 0, 2, 0, 0, 2, 1, 2, 0, 1, 0, 1, 0, 0, 1, 2, 2, 0, 0, 2, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, + 0, 0, 2, 0, 2, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 2, 2, 0, 0, 0, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, +}; + /** * Updates the alpha for every vertex in the fire ball so that some parts of * the sphere are more transparent or opaque than others. */ void EnFall_Fireball_SetPerVertexAlpha(f32 fireballAlpha) { - static u8 sAlphaTableIndex[] = { - 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 3, 0, 1, 1, 1, 4, 0, 4, 0, 1, 1, 1, 3, 0, 3, 0, 1, 1, 1, 4, 4, 1, - 1, 0, 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, 4, 0, 4, 4, 0, 4, 4, 1, 1, 1, 1, - 1, 1, 3, 3, 0, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, 1, 4, 4, 0, 4, 0, 1, 1, 1, 3, 0, 3, 3, 0, 0, 1, 1, 1, 1, 1, - 1, 4, 4, 0, 4, 4, 0, 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 2, 2, 0, 1, 1, 0, 0, 1, 0, - 2, 0, 0, 1, 0, 2, 0, 0, 2, 1, 2, 0, 1, 0, 1, 0, 0, 1, 2, 2, 0, 0, 2, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, - 0, 0, 2, 0, 2, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 2, 2, 0, 0, 0, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, - }; - s32 pad; u8 perVertexAlphaTable[5]; Vtx* vertices = Lib_SegmentedToVirtual(gMoonFireballVtx); @@ -568,8 +589,8 @@ void EnFall_Fireball_SetPerVertexAlpha(f32 fireballAlpha) { perVertexAlphaTable[3] = (s8)(104.0f * fireballAlpha); perVertexAlphaTable[4] = (s8)(54.0f * fireballAlpha); - for (i = 0; i < ARRAY_COUNT(sAlphaTableIndex); i++, vertices++) { - vertices->v.cn[3] = perVertexAlphaTable[sAlphaTableIndex[i]]; + for (i = 0; i < ARRAY_COUNT(sAlphaTableIndices); i++, vertices++) { + vertices->v.cn[3] = perVertexAlphaTable[sAlphaTableIndices[i]]; } } diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index 7ff59c572..8ba7c66bc 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -15,11 +15,8 @@ void EnFall2_Destroy(Actor* thisx, PlayState* play); void EnFall2_Update(Actor* thisx, PlayState* play); void EnFall2_Draw(Actor* thisx, PlayState* play); -void func_80C1B724(f32 arg0); void EnFall2_DoNothing(EnFall2* this, PlayState* play); -void func_80C1B9D4(EnFall2* this, PlayState* play); -void func_80C1B8F0(EnFall2* this); -void func_80C1B9D4(EnFall2* this, PlayState* play); +void EnFall2_HandleCutscene(EnFall2* this, PlayState* play); ActorInit En_Fall2_InitVars = { ACTOR_EN_FALL2, @@ -43,7 +40,7 @@ void EnFall2_Init(Actor* thisx, PlayState* play) { func_801835EC(&this->skeletonInfo, object_fall2_Blob_005EF4); this->unk2DC = Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840); Actor_SetScale(&this->actor, 0.02f); - this->actionFunc = func_80C1B9D4; + this->actionFunc = EnFall2_HandleCutscene; this->cueType = CS_CMD_ACTOR_CUE_561; this->alphaLevel = 0.0f; } @@ -54,7 +51,7 @@ void EnFall2_Destroy(Actor* thisx, PlayState* play) { func_8018349C(&this->skeletonInfo); } -u8 sAlphaTableIndices[] = { +static u8 sAlphaTableIndices[] = { 0, 2, 0, 0, 4, 0, 4, 4, 2, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 2, 0, 4, 2, 2, 0, 4, 4, 4, 4, 0, 2, 2, 4, 0, 2, 0, 4, 4, 2, 0, 2, 4, 4, 4, 2, 0, 4, 4, 4, 2, 2, 0, 4, 4, 2, 4, 0, 2, 0, 0, 2, 4, 4, 2, 0, 2, 4, 4, 4, 2, 0, 4, 4, 4, 4, 4, 2, 2, 0, 2, 4, 0, 2, 0, 0, 2, 4, 4, 2, 0, 2, 4, 4, 4, 2, 0, 0, 2, 2, 4, 4, 4, 4, 4, 4, @@ -106,6 +103,7 @@ void func_80C1B8F0(EnFall2* this) { this->alphaLevel = 1.0f; } break; + case 2: if (this->alphaLevel > 0.0f) { this->alphaLevel -= 0.1f; @@ -120,10 +118,13 @@ void func_80C1B8F0(EnFall2* this) { } this->actor.scale.z = this->actor.scale.x; } + + default: + break; } } -void func_80C1B9D4(EnFall2* this, PlayState* play) { +void EnFall2_HandleCutscene(EnFall2* this, PlayState* play) { func_80183DE0(&this->skeletonInfo); if (Cutscene_IsCueInChannel(play, this->cueType)) { Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); 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 2fe21ebc7..d7933db62 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -18,9 +18,6 @@ void EnFamos_Destroy(Actor* thisx, PlayState* play); void EnFamos_Update(Actor* thisx, PlayState* play); void EnFamos_Draw(Actor* thisx, PlayState* play); -void EnFamos_SetupAttackDebris(EnFamos* this); -void EnFamos_SetupDeathDebris(EnFamos* this); -s32 EnFamos_IsPlayerSeen(EnFamos* this, PlayState* play); void EnFamos_SetupStillIdle(EnFamos* this); void EnFamos_StillIdle(EnFamos* this, PlayState* play); void EnFamos_SetupPathingIdle(EnFamos* this); @@ -49,7 +46,6 @@ void EnFamos_SetupDeathExplosion(EnFamos* this); void EnFamos_DeathExplosion(EnFamos* this, PlayState* play); void EnFamos_SetupDeathFade(EnFamos* this); void EnFamos_DeathFade(EnFamos* this, PlayState* play); -void EnFamos_DrawDebris(EnFamos* this, PlayState* play); ActorInit En_Famos_InitVars = { ACTOR_EN_FAMOS, @@ -501,7 +497,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { Math_StepToF(&this->actor.speed, 6.0f, 0.5f); 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 + if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && ((surfaceType != FLOOR_PROPERTY_12) && (surfaceType != FLOOR_PROPERTY_13))) { EnFamos_SetupAttackAim(this); 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 491d3c499..3fecf1861 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -5,7 +5,6 @@ */ #include "z_en_fg.h" -#include "objects/object_fr/object_fr.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_200 | ACTOR_FLAG_4000) @@ -20,9 +19,18 @@ void EnFg_Draw(Actor* thisx, PlayState* play); void EnFg_Jump(EnFg* this, PlayState* play); void EnFg_DoNothing(EnFg* this, PlayState* play); void EnFg_Knockback(EnFg* this, PlayState* play); -void EnFg_AddDust(EnFgEffectDust* dustEffect, Vec3f* worldPos); -void EnFg_UpdateDust(EnFgEffectDust* dustEffect); -void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect); +void EnFg_AddDust(BetaFrogEffectDust* dustEffect, Vec3f* pos); +void EnFg_UpdateDust(BetaFrogEffectDust* dustEffect); +void EnFg_DrawDust(PlayState* play, BetaFrogEffectDust* dustEffect); + +typedef enum { + /* 0 */ BETAFROG_DMGEFFECT_NONE, + /* 1 */ BETAFROG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg + /* 2 */ BETAFROG_DMGEFFECT_DEKUSTICK, + /* 3 */ BETAFROG_DMGEFFECT_HOOKSHOT, + /* 4 */ BETAFROG_DMGEFFECT_ARROW, + /* 5 */ BETAFROG_DMGEFFECT_ICEARROW +} BetaFrogDamageEffect; ActorInit En_Fg_InitVars = { ACTOR_EN_FG, @@ -95,29 +103,37 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_fr_Anim_0011C0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_fr_Anim_0007BC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, +typedef enum { + /* -1 */ BETAFROG_ANIM_NONE = -1, + /* 0 */ BETAFROG_ANIM_0, + /* 1 */ BETAFROG_ANIM_1, + /* 2 */ BETAFROG_ANIM_2, + /* 3 */ BETAFROG_ANIM_3, + /* 4 */ BETAFROG_ANIM_MAX +} BetaFrogAnimation; + +static AnimationInfoS sAnimationInfo[BETAFROG_ANIM_MAX] = { + { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // BETAFROG_ANIM_0 + { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_1 + { &object_fr_Anim_0011C0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_2 + { &object_fr_Anim_0007BC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // BETAFROG_ANIM_3 }; s32 EnFg_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { - s16 frameCount; - s32 ret; + s16 endFrame; + s32 didAnimChange = false; - ret = false; - if ((animIndex >= 0) && (animIndex < 4)) { - ret = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); + if ((animIndex > BETAFROG_ANIM_NONE) && (animIndex < BETAFROG_ANIM_MAX)) { + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); } Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, - sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); } - return ret; + return didAnimChange; } void func_80A2D348(EnFg* this, PlayState* play) { @@ -130,7 +146,7 @@ void func_80A2D348(EnFg* this, PlayState* play) { } } -void func_80A2D3D4(EnFg* this, PlayState* play) { +void EnFg_UpdateSkelAnime(EnFg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } @@ -144,28 +160,28 @@ u8 EnFg_UpdateHealth(EnFg* this) { } s32 EnFg_GetDamageEffect(EnFg* this) { - s32 ret = 0; + s32 ret = BETAFROG_DMGEFFECT_NONE; if (this->collider.base.acFlags & AC_HIT) { switch (this->actor.colChkInfo.damageEffect) { case 1: - ret = FG_DMGEFFECT_DEKUSTICK; + ret = BETAFROG_DMGEFFECT_DEKUSTICK; break; case 15: - ret = FG_DMGEFFECT_HOOKSHOT; + ret = BETAFROG_DMGEFFECT_HOOKSHOT; break; case 14: - ret = FG_DMGEFFECT_ARROW; + ret = BETAFROG_DMGEFFECT_ARROW; break; case 3: - ret = FG_DMGEFFECT_ICEARROW; + ret = BETAFROG_DMGEFFECT_ICEARROW; break; default: - ret = FG_DMGEFFECT_EXPLOSION; + ret = BETAFROG_DMGEFFECT_EXPLOSION; break; } this->collider.base.acFlags &= ~AC_HIT; @@ -180,7 +196,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { s16 rotX; switch (EnFg_GetDamageEffect(this)) { - case FG_DMGEFFECT_DEKUSTICK: + case BETAFROG_DMGEFFECT_DEKUSTICK: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_1); this->skelAnime.playSpeed = 0.0f; @@ -192,10 +208,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actionFunc = EnFg_DoNothing; break; - case FG_DMGEFFECT_HOOKSHOT: + case BETAFROG_DMGEFFECT_HOOKSHOT: break; - case FG_DMGEFFECT_ARROW: + case BETAFROG_DMGEFFECT_ARROW: this->actor.flags &= ~ACTOR_FLAG_1; this->skelAnime.playSpeed = 0.0f; rotY = this->collider.base.ac->world.rot.y; @@ -209,10 +225,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actionFunc = EnFg_DoNothing; break; - case FG_DMGEFFECT_EXPLOSION: + case BETAFROG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); - this->actor.params = FG_BLACK; + this->actor.params = BETAFROG_BLACK; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; this->actor.world.rot.y = Math_Vec3f_Yaw(&ac->world.pos, &this->actor.world.pos); @@ -228,7 +244,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { default: if (DECR(this->timer) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP); - EnFg_ChangeAnim(&this->skelAnime, 3); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_3); this->actor.velocity.y = 10.0f; this->timer = Rand_S16Offset(30, 30); this->actionFunc = EnFg_Jump; @@ -244,7 +260,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { s16 rotX; switch (EnFg_GetDamageEffect(this)) { - case FG_DMGEFFECT_ARROW: + case BETAFROG_DMGEFFECT_ARROW: this->actor.flags &= ~ACTOR_FLAG_1; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; @@ -259,14 +275,14 @@ void EnFg_Jump(EnFg* this, PlayState* play) { this->actionFunc = EnFg_DoNothing; break; - case FG_DMGEFFECT_HOOKSHOT: + case BETAFROG_DMGEFFECT_HOOKSHOT: break; - case FG_DMGEFFECT_EXPLOSION: + case BETAFROG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); - EnFg_ChangeAnim(&this->skelAnime, 0); - this->actor.params = FG_BLACK; + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); + this->actor.params = BETAFROG_BLACK; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; this->actor.world.rot.y = Math_Vec3f_Yaw(&ac->world.pos, &this->actor.world.pos); @@ -286,7 +302,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { } if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - EnFg_ChangeAnim(&this->skelAnime, 0); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); this->actionFunc = EnFg_Idle; this->actor.velocity.y = 0.0f; } else { @@ -325,8 +341,9 @@ void EnFg_Init(Actor* thisx, PlayState* play) { EnFg* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_fr_Skel_00B538, NULL, this->jointTable, this->morphTable, 24); - EnFg_ChangeAnim(&this->skelAnime, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_fr_Skel_00B538, NULL, this->jointTable, this->morphTable, + OBJECT_FR_LIMB_MAX); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); @@ -360,7 +377,7 @@ void EnFg_Update(Actor* thisx, PlayState* play) { } } - func_80A2D3D4(this, play); + EnFg_UpdateSkelAnime(this, play); EnFg_UpdateDust(&this->dustEffect[0]); func_80A2D348(this, play); } @@ -368,12 +385,12 @@ void EnFg_Update(Actor* thisx, PlayState* play) { s32 EnFg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFg* this = THIS; - if ((limbIndex == 7) || (limbIndex == 8)) { + if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { *dList = NULL; } if (this->actor.colChkInfo.health == 0) { - if ((limbIndex == 5) || (limbIndex == 9)) { + if ((limbIndex == OBJECT_FR_LIMB_05) || (limbIndex == OBJECT_FR_LIMB_09)) { *dList = NULL; } } @@ -383,9 +400,9 @@ s32 EnFg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnFg* this = THIS; s16 pad; - Vec3f vec1 = { 0.0f, 0.0f, 0.0f }; + Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; - if ((limbIndex == 7) || (limbIndex == 8)) { + if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -397,8 +414,8 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == 4) { - Matrix_MultVec3f(&vec1, &this->actor.focus.pos); + if (limbIndex == OBJECT_FR_LIMB_04) { + Matrix_MultVec3f(&zeroVec, &this->actor.focus.pos); } } @@ -406,8 +423,12 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { EnFg* this = THIS; s32 pad; Color_RGBA8 envColor[] = { - { 200, 170, 0, 255 }, { 0, 170, 200, 255 }, { 210, 120, 100, 255 }, - { 120, 130, 230, 255 }, { 190, 190, 190, 255 }, { 0, 0, 0, 255 }, + { 200, 170, 0, 255 }, // BETAFROG_YELLOW + { 0, 170, 200, 255 }, // BETAFROG_CYAN + { 210, 120, 100, 255 }, // BETAFROG_PINK + { 120, 130, 230, 255 }, // BETAFROG_BLUE + { 190, 190, 190, 255 }, // BETAFROG_WHITE + { 0, 0, 0, 255 }, // BETAFROG_BLACK }; Matrix_Push(); @@ -428,8 +449,8 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -void EnFg_AddDust(EnFgEffectDust* dustEffect, Vec3f* worldPos) { - Vec3f vel = { 0.0f, 3.0f, 0.0f }; +void EnFg_AddDust(BetaFrogEffectDust* dustEffect, Vec3f* pos) { + Vec3f velocity = { 0.0f, 3.0f, 0.0f }; Vec3f unk_20 = { 0.0f, 0.0f, 0.0f }; s32 i; @@ -437,8 +458,8 @@ void EnFg_AddDust(EnFgEffectDust* dustEffect, Vec3f* worldPos) { if (!dustEffect->type) { dustEffect->type = true; dustEffect->timer = 16; - dustEffect->pos = *worldPos; - dustEffect->velocity = vel; + dustEffect->pos = *pos; + dustEffect->velocity = velocity; dustEffect->unk_20 = unk_20; dustEffect->xyScale = 0.4f; break; @@ -446,7 +467,7 @@ void EnFg_AddDust(EnFgEffectDust* dustEffect, Vec3f* worldPos) { } } -void EnFg_UpdateDust(EnFgEffectDust* dustEffect) { +void EnFg_UpdateDust(BetaFrogEffectDust* dustEffect) { s32 i; for (i = 0; i < 10; i++, dustEffect++) { @@ -463,7 +484,7 @@ static TexturePtr sDustTextures[] = { gEffDust8Tex, gEffDust7Tex, gEffDust6Tex, gEffDust5Tex, gEffDust4Tex, gEffDust3Tex, gEffDust2Tex, gEffDust1Tex, }; -void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { +void EnFg_DrawDust(PlayState* play, BetaFrogEffectDust* dustEffect) { s16 i; s16 alpha; s16 index; diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.h b/src/overlays/actors/ovl_En_Fg/z_en_fg.h index a1917b9bc..4f4f84fe0 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.h +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.h @@ -2,6 +2,7 @@ #define Z_EN_FG_H #include "global.h" +#include "objects/object_fr/object_fr.h" struct EnFg; @@ -9,22 +10,13 @@ typedef void (*EnFgActionFunc)(struct EnFg*, PlayState*); // Based on the envColor data. Related to params but mostly unused. typedef enum { - /* 0 */ FG_YELLOW, - /* 1 */ FG_CYAN, - /* 2 */ FG_PINK, - /* 3 */ FG_BLUE, - /* 4 */ FG_WHITE, - /* 5 */ FG_BLACK // All frogs are blackened when hit by an explosion -} FrogType; - -typedef enum { - /* 0 */ FG_DMGEFFECT_NONE, - /* 1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg - /* 2 */ FG_DMGEFFECT_DEKUSTICK, - /* 3 */ FG_DMGEFFECT_HOOKSHOT, - /* 4 */ FG_DMGEFFECT_ARROW, - /* 5 */ FG_DMGEFFECT_ICEARROW -} FrogDamageEffect; + /* 0 */ BETAFROG_YELLOW, + /* 1 */ BETAFROG_CYAN, + /* 2 */ BETAFROG_PINK, + /* 3 */ BETAFROG_BLUE, + /* 4 */ BETAFROG_WHITE, + /* 5 */ BETAFROG_BLACK // All frogs are blackened when hit by an explosion +} BetaFrogType; typedef struct { /* 0x00 */ u8 type; @@ -35,18 +27,18 @@ typedef struct { /* 0x20 */ Vec3f unk_20; // Likely acceleration, set to 0 but unused /* 0x2C */ Vec3f velocity; /* 0x38 */ UNK_TYPE1 unk_38[0x4]; -} EnFgEffectDust; // size = 0x3C +} BetaFrogEffectDust; // size = 0x3C typedef struct EnFg { /* 0x000 */ Actor actor; /* 0x144 */ EnFgActionFunc actionFunc; /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ ColliderCylinder collider; - /* 0x1D8 */ Vec3s jointTable[24]; - /* 0x268 */ Vec3s morphTable[24]; + /* 0x1D8 */ Vec3s jointTable[OBJECT_FR_LIMB_MAX]; + /* 0x268 */ Vec3s morphTable[OBJECT_FR_LIMB_MAX]; /* 0x2F8 */ s16 timer; /* 0x2FA */ s16 bounceCounter; - /* 0x2FC */ EnFgEffectDust dustEffect[10]; + /* 0x2FC */ BetaFrogEffectDust dustEffect[10]; } EnFg; // size = 0x554 #endif // Z_EN_FG_H diff --git a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c index 90801ef44..1e8425412 100644 --- a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c +++ b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c @@ -29,9 +29,12 @@ ActorInit En_Fire_Rock_InitVars = { void EnFireRock_Init(Actor* thisx, PlayState* play) { } + void EnFireRock_Destroy(Actor* thisx, PlayState* play) { } + void EnFireRock_Update(Actor* thisx, PlayState* play) { } + void EnFireRock_Draw(Actor* thisx, PlayState* play) { } 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 0331ec347..0a7e892a7 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c @@ -5,7 +5,6 @@ */ #include "z_en_fish.h" -#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS 0x00000000 @@ -206,7 +205,7 @@ void EnFish_Init(Actor* thisx, PlayState* play) { } SkelAnime_InitFlex(play, &this->skelAnime, &gameplay_keep_Skel_02F028, &gameplay_keep_Anim_02F0EC, this->jointTable, - this->morphTable, 7); + this->morphTable, FISH_LIMB_MAX); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->actor.colChkInfo.mass = this->unk_25C * 30.0f; 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 4261a4f83..e0837779d 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h @@ -2,6 +2,7 @@ #define Z_EN_FISH_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnFish; @@ -21,8 +22,8 @@ typedef struct EnFish { /* 0x144 */ ColliderJntSph collider; /* 0x164 */ ColliderJntSphElement colliderElements[1]; /* 0x1A4 */ SkelAnime skelAnime; - /* 0x1E8 */ Vec3s jointTable[7]; - /* 0x212 */ Vec3s morphTable[7]; + /* 0x1E8 */ Vec3s jointTable[FISH_LIMB_MAX]; + /* 0x212 */ Vec3s morphTable[FISH_LIMB_MAX]; /* 0x23C */ EnFishUnkFunc unkFunc; /* 0x240 */ s16 unk_240; /* 0x242 */ s16 unk_242; 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 6202072cb..b047e65ee 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -8,7 +8,6 @@ #include "overlays/actors/ovl_En_Mushi2/z_en_mushi2.h" #include "z_en_fish2.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "objects/object_fb/object_fb.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -44,7 +43,7 @@ void func_80B2B180(EnFish2* this, PlayState* play); static s32 D_80B2B2E0 = 0; static s32 D_80B2B2E4 = 0; -static s32 D_80B2B2E8 = 0; +static s32 D_80B2B2E8 = false; static s32 D_80B2B2EC = 0; static s32 D_80B2B2F0 = 0; static Actor* D_80B2B2F4 = NULL; @@ -102,29 +101,51 @@ static ColliderJntSphInit sJntSphInit = { static f32 D_80B2B370[] = { 0.01f, 0.012f, 0.014f, 0.017f }; static f32 D_80B2B380[] = { 0.019f, 0.033f }; -void func_80B28370(EnFish2* this, s32 arg0) { - static AnimationHeader* D_80B2B388[] = { - &object_fb_Anim_0013AC, &object_fb_Anim_0007D4, &object_fb_Anim_0006D8, - &object_fb_Anim_0006D8, &object_fb_Anim_001174, &object_fb_Anim_000ACC, - }; - static u8 D_80B2B3A0[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, - }; - f32 sp34; +typedef enum { + /* 0 */ FISH2_ANIM_0, + /* 1 */ FISH2_ANIM_1, + /* 2 */ FISH2_ANIM_2, + /* 3 */ FISH2_ANIM_3, + /* 4 */ FISH2_ANIM_4, + /* 5 */ FISH2_ANIM_5, + /* 6 */ FISH2_ANIM_MAX +} Fish2Animation; - this->unk_2AC = arg0; - this->unk_2CC = Animation_GetLastFrame(&D_80B2B388[arg0]->common); - sp34 = 0.0f; - if (this->unk_2AC == 3) { - sp34 = Animation_GetLastFrame(&D_80B2B388[this->unk_2AC]->common) - 21.0f; +static AnimationHeader* sAnimations[FISH2_ANIM_MAX] = { + &object_fb_Anim_0013AC, // FISH2_ANIM_0 + &object_fb_Anim_0007D4, // FISH2_ANIM_1 + &object_fb_Anim_0006D8, // FISH2_ANIM_2 + &object_fb_Anim_0006D8, // FISH2_ANIM_3 + &object_fb_Anim_001174, // FISH2_ANIM_4 + &object_fb_Anim_000ACC, // FISH2_ANIM_5 +}; + +static u8 sAnimationModes[FISH2_ANIM_MAX] = { + ANIMMODE_LOOP, // FISH2_ANIM_0 + ANIMMODE_LOOP, // FISH2_ANIM_1 + ANIMMODE_ONCE, // FISH2_ANIM_2 + ANIMMODE_ONCE, // FISH2_ANIM_3 + ANIMMODE_ONCE, // FISH2_ANIM_4 + ANIMMODE_ONCE, // FISH2_ANIM_5 +}; + +void EnFish2_ChangeAnim(EnFish2* this, s32 animIndex) { + f32 startFrame; + + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(&sAnimations[animIndex]->common); + + startFrame = 0.0f; + if (this->animIndex == FISH2_ANIM_3) { + startFrame = Animation_GetLastFrame(&sAnimations[this->animIndex]->common) - 21.0f; } - if (this->unk_2AC == 2) { - this->unk_2CC = Animation_GetLastFrame(&D_80B2B388[this->unk_2AC]->common) - 21.0f; + if (this->animIndex == FISH2_ANIM_2) { + this->animEndFrame = Animation_GetLastFrame(&sAnimations[this->animIndex]->common) - 21.0f; } - Animation_Change(&this->skelAnime, D_80B2B388[this->unk_2AC], 1.0f, sp34, this->unk_2CC, D_80B2B3A0[this->unk_2AC], - -10.0f); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, startFrame, this->animEndFrame, + sAnimationModes[this->animIndex], -10.0f); } s32 func_80B28478(EnFish2* this) { @@ -160,7 +181,7 @@ void EnFish2_Init(Actor* thisx, PlayState* play) { if (this->actor.params == 0) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_fb_Skel_006190, &object_fb_Anim_0013AC, this->jointTable, - this->morphTable, 24); + this->morphTable, OBJECT_FB_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; if (this->unk_344 == 0) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_10)) { @@ -309,7 +330,7 @@ void func_80B289DC(EnFish2* this, PlayState* play) { } void func_80B28B5C(EnFish2* this) { - func_80B28370(this, 0); + EnFish2_ChangeAnim(this, FISH2_ANIM_0); this->unk_2B4 = 0; this->unk_348 = 0; this->unk_2C4 = 0; @@ -387,7 +408,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) { Math_ApproachZeroF(&this->actor.speed, 0.3f, 0.3f); } - if ((D_80B2B2E8 == 0) && (D_80B2B2E0 != 2)) { + if (!D_80B2B2E8 && (D_80B2B2E0 != 2)) { while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_FISH) && (itemAction->id != ACTOR_EN_MUSHI2)) { itemAction = itemAction->next; @@ -457,7 +478,7 @@ void func_80B29194(EnFish2* this) { this->unk_34A = 0; this->unk_340 = (s32)Rand_ZeroOne() & 1; - func_80B28370(this, 1); + EnFish2_ChangeAnim(this, FISH2_ANIM_1); this->actionFunc = func_80B29250; } @@ -482,15 +503,15 @@ void func_80B29250(EnFish2* this, PlayState* play) { } void func_80B2938C(EnFish2* this) { - func_80B28370(this, 5); + EnFish2_ChangeAnim(this, FISH2_ANIM_5); this->unk_348 = 0; this->actionFunc = func_80B293C4; } void func_80B293C4(EnFish2* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; - if (func_80B28478(this) == 0) { + if (!func_80B28478(this)) { func_80B287F4(this, 1); Math_ApproachF(&this->actor.speed, (*D_80B2B380 - this->unk_330) * 1000.0f, 0.3f, 0.3f); @@ -500,8 +521,8 @@ void func_80B293C4(EnFish2* this, PlayState* play) { this->actor.speed = 1.0f; } - if (this->unk_2CC <= currentFrame) { - func_80B28370(this, 1); + if (curFrame >= this->animEndFrame) { + EnFish2_ChangeAnim(this, FISH2_ANIM_1); if (this->unk_2B0 == 0) { this->actionFunc = func_80B29250; } else { @@ -536,7 +557,7 @@ void func_80B2951C(EnFish2* this) { void func_80B295A4(EnFish2* this, PlayState* play) { s32 i; - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 pad; Vec3f sp60; @@ -551,9 +572,9 @@ void func_80B295A4(EnFish2* this, PlayState* play) { for (i = 0; i < 2; i++) { EffectSsBubble_Spawn(play, &sp60, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f); } - } else if (this->unk_2CC <= currentFrame) { - if (this->unk_2AC != 5) { - func_80B28370(this, 5); + } else if (curFrame >= this->animEndFrame) { + if (this->animIndex != FISH2_ANIM_5) { + EnFish2_ChangeAnim(this, FISH2_ANIM_5); } else if (this->unk_2C8 == 0) { func_80B29778(this); } else { @@ -566,7 +587,7 @@ void func_80B295A4(EnFish2* this, PlayState* play) { } void func_80B29778(EnFish2* this) { - func_80B28370(this, 0); + EnFish2_ChangeAnim(this, FISH2_ANIM_0); this->unk_2B4 = 0; this->unk_2C4 = 0; this->unk_2B6 = this->unk_2B4; @@ -645,12 +666,12 @@ void func_80B297FC(EnFish2* this, PlayState* play) { case 2: phi_f0 = 0.1f; - + // fallthrough case 4: if (phi_f0 == 0) { phi_f0 = 0.3f; } - + // fallthrough case 6: if (phi_f0 == 0) { phi_f0 = 0.5f; @@ -676,12 +697,12 @@ void func_80B297FC(EnFish2* this, PlayState* play) { case 3: phi_f0 = 1.3f; - + // fallthrough case 5: if (phi_f0 == 0) { phi_f0 = 1.5f; } - + // fallthrough case 7: if (phi_f0 == 0) { phi_f0 = 1.7f; @@ -754,7 +775,7 @@ void func_80B29E5C(EnFish2* this, PlayState* play) { if (&this->actor != prop) { this->unk_350 = prop; this->unk_2B0 = D_80B2B2E8 = 1; - func_80B28370(this, 0); + EnFish2_ChangeAnim(this, FISH2_ANIM_0); this->actionFunc = func_80B29EE4; break; } @@ -868,7 +889,7 @@ void func_80B2A23C(EnFish2* this, PlayState* play) { } void func_80B2A448(EnFish2* this) { - func_80B28370(this, 4); + EnFish2_ChangeAnim(this, FISH2_ANIM_4); this->unk_2B4 = 0; this->unk_2C4 = 0; this->unk_2B6 = this->unk_2B4; @@ -877,10 +898,10 @@ void func_80B2A448(EnFish2* this) { } void func_80B2A498(EnFish2* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Vec3f sp80; - if ((this->unk_2AC == 4) && Animation_OnFrame(&this->skelAnime, 13.0f)) { + if ((this->animIndex == FISH2_ANIM_4) && Animation_OnFrame(&this->skelAnime, 13.0f)) { Actor* temp_v0; Math_Vec3f_Copy(&sp80, &this->unk_318); @@ -899,7 +920,7 @@ void func_80B2A498(EnFish2* this, PlayState* play) { } } - if ((this->unk_2AC == 4) && + if ((this->animIndex == FISH2_ANIM_4) && (Animation_OnFrame(&this->skelAnime, 13.0f) || Animation_OnFrame(&this->skelAnime, 31.0f))) { WaterBox* sp78; @@ -920,12 +941,12 @@ void func_80B2A498(EnFish2* this, PlayState* play) { } } - if ((this->unk_2CC <= currentFrame) && (this->unk_2AC == 4)) { + if ((curFrame >= this->animEndFrame) && (this->animIndex == FISH2_ANIM_4)) { D_80B2B2E0 = 0; D_80B2B2E4 = 3; this->actor.world.pos.x = this->unk_324.x; this->actor.world.pos.z = this->unk_324.z; - func_80B28370(this, 0); + EnFish2_ChangeAnim(this, FISH2_ANIM_0); } } @@ -1004,7 +1025,7 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { } } - if ((D_80B2B2E8 == 0) && (this->actionFunc == func_80B28C14)) { + if (!D_80B2B2E8 && (this->actionFunc == func_80B28C14)) { s32 temp_s0_2 = this->unk_344 * 2; f32 phi_f2 = 0.0f; f32 phi_f20 = 0; @@ -1029,7 +1050,7 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { } } - if (D_80B2B2E8 == 0) { + if (!D_80B2B2E8) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } @@ -1039,7 +1060,7 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { s32 EnFish2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFish2* this = THIS; - if ((limbIndex == 20) || (limbIndex == 21)) { + if ((limbIndex == OBJECT_FB_LIMB_14) || (limbIndex == OBJECT_FB_LIMB_15)) { *dList = NULL; } @@ -1050,7 +1071,7 @@ void EnFish2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro EnFish2* this = THIS; s32 pad; - if ((limbIndex == 20) || (limbIndex == 21)) { + if ((limbIndex == OBJECT_FB_LIMB_14) || (limbIndex == OBJECT_FB_LIMB_15)) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -1064,11 +1085,11 @@ void EnFish2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == 14) { + if (limbIndex == OBJECT_FB_LIMB_0E) { Matrix_MultVec3f(&gZeroVec3f, &this->unk_318); } - if (limbIndex == 17) { + if (limbIndex == OBJECT_FB_LIMB_11) { Matrix_MultVec3f(&gZeroVec3f, &this->unk_300); } diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h index 20b1ff21b..a324e0bab 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h @@ -2,6 +2,7 @@ #define Z_EN_FISH2_H #include "global.h" +#include "objects/object_fb/object_fb.h" struct EnFish2; @@ -18,46 +19,46 @@ typedef struct { } EnFish2UnkStruct; // size = 0x24 typedef struct EnFish2 { - /* 0x0000 */ Actor actor; - /* 0x0144 */ SkelAnime skelAnime; - /* 0x0188 */ Vec3s jointTable[24]; - /* 0x0218 */ Vec3s morphTable[24]; - /* 0x02A8 */ EnFish2ActionFunc actionFunc; - /* 0x02AC */ s32 unk_2AC; - /* 0x02B0 */ s32 unk_2B0; - /* 0x02B4 */ s16 unk_2B4; - /* 0x02B6 */ s16 unk_2B6; - /* 0x02B8 */ s16 unk_2B8; - /* 0x02BA */ s16 csIdList[3]; - /* 0x02C0 */ s32 unk_2C0; - /* 0x02C4 */ s32 unk_2C4; - /* 0x02C8 */ u8 unk_2C8; - /* 0x02CA */ s16 subCamId; - /* 0x02CC */ f32 unk_2CC; - /* 0x02D0 */ UNK_TYPE1 unk_2D0[0x4]; - /* 0x02D4 */ f32 unk_2D4; - /* 0x02D8 */ f32 unk_2D8; - /* 0x02DC */ Vec3f subCamEye; - /* 0x02E8 */ Vec3f subCamAt; - /* 0x02F4 */ Vec3f unk_2F4; - /* 0x0300 */ Vec3f unk_300; - /* 0x030C */ Vec3f unk_30C; - /* 0x0318 */ Vec3f unk_318; - /* 0x0324 */ Vec3f unk_324; - /* 0x0330 */ f32 unk_330; - /* 0x0334 */ f32 unk_334; - /* 0x0338 */ f32 unk_338; - /* 0x033C */ f32 unk_33C; - /* 0x0340 */ s32 unk_340; - /* 0x0344 */ s32 unk_344; - /* 0x0348 */ s16 unk_348; - /* 0x034A */ s16 unk_34A; - /* 0x034C */ s16 unk_34C; - /* 0x0350 */ Actor* unk_350; - /* 0x0354 */ struct EnFish2* unk_354; - /* 0x0358 */ ColliderJntSph collider; - /* 0x0378 */ ColliderJntSphElement colliderElements[2]; - /* 0x03F8 */ EnFish2UnkStruct unk_3F8[200]; + /* 0x000 */ Actor actor; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ Vec3s jointTable[OBJECT_FB_LIMB_MAX]; + /* 0x218 */ Vec3s morphTable[OBJECT_FB_LIMB_MAX]; + /* 0x2A8 */ EnFish2ActionFunc actionFunc; + /* 0x2AC */ s32 animIndex; + /* 0x2B0 */ s32 unk_2B0; + /* 0x2B4 */ s16 unk_2B4; + /* 0x2B6 */ s16 unk_2B6; + /* 0x2B8 */ s16 unk_2B8; + /* 0x2BA */ s16 csIdList[3]; + /* 0x2C0 */ s32 unk_2C0; + /* 0x2C4 */ s32 unk_2C4; + /* 0x2C8 */ u8 unk_2C8; + /* 0x2CA */ s16 subCamId; + /* 0x2CC */ f32 animEndFrame; + /* 0x2D0 */ UNK_TYPE1 unk_2D0[0x4]; + /* 0x2D4 */ f32 unk_2D4; + /* 0x2D8 */ f32 unk_2D8; + /* 0x2DC */ Vec3f subCamEye; + /* 0x2E8 */ Vec3f subCamAt; + /* 0x2F4 */ Vec3f unk_2F4; + /* 0x300 */ Vec3f unk_300; + /* 0x30C */ Vec3f unk_30C; + /* 0x318 */ Vec3f unk_318; + /* 0x324 */ Vec3f unk_324; + /* 0x330 */ f32 unk_330; + /* 0x334 */ f32 unk_334; + /* 0x338 */ f32 unk_338; + /* 0x33C */ f32 unk_33C; + /* 0x340 */ s32 unk_340; + /* 0x344 */ s32 unk_344; + /* 0x348 */ s16 unk_348; + /* 0x34A */ s16 unk_34A; + /* 0x34C */ s16 unk_34C; + /* 0x350 */ Actor* unk_350; + /* 0x354 */ struct EnFish2* unk_354; + /* 0x358 */ ColliderJntSph collider; + /* 0x378 */ ColliderJntSphElement colliderElements[2]; + /* 0x3F8 */ EnFish2UnkStruct unk_3F8[200]; } EnFish2; // size = 0x2018 #endif // Z_EN_FISH2_H 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 dcf2db26d..f481c346c 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -2611,6 +2611,9 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { sReelLinePos[LINE_SEG_COUNT - 1].z = sLurePos.z; D_809101C4 = 2.0f; break; + + default: + break; } } @@ -3892,6 +3895,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } } break; + case 1: if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) || Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { @@ -3909,6 +3913,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } } break; + + default: + break; } } @@ -4172,19 +4179,19 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { s32 EnFishing_FishOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == 13) { + if (limbIndex == FISHING_FISH_LIMB_0D) { rot->z -= this->unk_168 - 11000; - } else if ((limbIndex == 2) || (limbIndex == 3)) { + } else if ((limbIndex == FISHING_FISH_LIMB_02) || (limbIndex == FISHING_FISH_LIMB_03)) { rot->y += this->unk_164; - } else if (limbIndex == 4) { + } else if (limbIndex == FISHING_FISH_LIMB_04) { rot->y += this->unk_16E; - } else if (limbIndex == 0xE) { + } else if (limbIndex == FISHING_FISH_LIMB_0E) { rot->y -= this->unk_16A; - } else if (limbIndex == 0xF) { + } else if (limbIndex == FISHING_FISH_LIMB_0F) { rot->y += this->unk_16A; - } else if (limbIndex == 8) { + } else if (limbIndex == FISHING_FISH_LIMB_08) { rot->y += this->unk_16C; - } else if (limbIndex == 9) { + } else if (limbIndex == FISHING_FISH_LIMB_09) { rot->y -= this->unk_16C; } @@ -4194,7 +4201,7 @@ s32 EnFishing_FishOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == 13) { + if (limbIndex == FISHING_FISH_LIMB_0D) { Matrix_MultVec3f(&sFishMouthOffset, &this->fishMouthPos); } } @@ -4202,11 +4209,11 @@ void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec s32 EnFishing_LoachOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == 3) { + if (limbIndex == FISHING_LOACH_LIMB_03) { rot->y += this->unk_1C4[0]; - } else if (limbIndex == 4) { + } else if (limbIndex == FISHING_LOACH_LIMB_04) { rot->y += this->unk_1C4[1]; - } else if (limbIndex == 5) { + } else if (limbIndex == FISHING_LOACH_LIMB_05) { rot->y += this->unk_1C4[2]; } @@ -4217,7 +4224,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve static Vec3f sLoachMouthOffset = { 500.0f, 500.0f, 0.0f }; EnFishing* this = THIS; - if (limbIndex == 11) { + if (limbIndex == FISHING_LOACH_LIMB_0B) { Matrix_MultVec3f(&sLoachMouthOffset, &this->fishMouthPos); } } @@ -4735,10 +4742,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { this->unk_154 = 3; } break; + case 1: Message_ContinueTextbox(play, 0x2D); this->unk_154 = 3; break; + + default: + break; } } break; @@ -4771,9 +4782,13 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { Message_ContinueTextbox(play, 0x4080); this->unk_154 = 5; break; + case 1: Message_ContinueTextbox(play, 0x407F); break; + + default: + break; } } break; @@ -4806,9 +4821,13 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { D_8090CD0C = 0; this->unk_154 = 20; break; + case 1: this->unk_154 = 0; break; + + default: + break; } } } else { @@ -4839,6 +4858,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } Message_ContinueTextbox(play, this->actor.textId); break; + case 1: if (D_8090CD00 > 36000) { D_8090CD00 = 30000; @@ -4870,6 +4890,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } this->unk_154 = 0; break; + case 2: if (D_809171D8 == 0) { Message_ContinueTextbox(play, 0x4085); @@ -4878,6 +4899,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } this->unk_154 = 22; break; + + default: + break; } } } @@ -4975,6 +4999,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { case 0: this->unk_154 = 0; break; + case 1: if (D_809171D8 == 0) { Message_ContinueTextbox(play, 0x4085); @@ -4983,6 +5008,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } this->unk_154 = 22; break; + + default: + break; } } break; @@ -5019,6 +5047,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } } break; + + default: + break; } } @@ -5582,7 +5613,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { s32 EnFishing_OwnerOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == 8) { // Head + if (limbIndex == FISHING_OWNER_LIMB_HEAD) { rot->x -= this->unk_15C; } @@ -5590,7 +5621,7 @@ s32 EnFishing_OwnerOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, } void EnFishing_OwnerPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - if (limbIndex == 8) { // Head + if (limbIndex == FISHING_OWNER_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); Matrix_MultVec3f(&sZeroVec, &sOwnerHeadPos); 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 6ecc9f2aa..57466a251 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -135,20 +135,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(gravity, -1000, ICHAIN_STOP), }; -static Vec3f D_808D3900[PLAYER_FORM_MAX] = { - { 25.0f, 45.0f, -7.0f }, // PLAYER_FORM_FIERCE_DEITY - { 25.0f, 40.0f, -12.0f }, // PLAYER_FORM_GORON - { 25.0f, 35.0f, -2.0f }, // PLAYER_FORM_ZORA - { 10.0f, 20.0f, -4.0f }, // PLAYER_FORM_DEKU - { 15.0f, 25.0f, -2.0f }, // PLAYER_FORM_HUMAN -}; - -static s8 D_808D393C[] = { - -1, -1, -1, -1, 0, -1, -1, 1, -1, 2, -1, -1, 3, -1, 4, -1, -1, 5, -1, -1, -1, 6, 7, -1, 8, -}; - -static Color_RGBA8 D_808D3958 = { 0, 255, 0, 0 }; - void EnFloormas_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnFloormas* this = THIS; @@ -393,7 +379,7 @@ void func_808D108C(EnFloormas* this) { } void func_808D11BC(EnFloormas* this, PlayState* play) { - f32 frame; + f32 curFrame; f32 sp30; f32 sp2C; @@ -410,8 +396,8 @@ void func_808D11BC(EnFloormas* this, PlayState* play) { } } - frame = this->skelAnime.curFrame; - if ((frame >= 7.0f) && (frame < 22.0f)) { + curFrame = this->skelAnime.curFrame; + if ((curFrame >= 7.0f) && (curFrame < 22.0f)) { sp30 = Math_SinS(this->actor.shape.rot.y + 0x4268); sp2C = Math_CosS(this->actor.shape.rot.y + 0x4268); this->actor.shape.rot.y += this->unk_190; @@ -715,6 +701,14 @@ void func_808D2040(EnFloormas* this, PlayState* play) { } } +static Vec3f D_808D3900[PLAYER_FORM_MAX] = { + { 25.0f, 45.0f, -7.0f }, // PLAYER_FORM_FIERCE_DEITY + { 25.0f, 40.0f, -12.0f }, // PLAYER_FORM_GORON + { 25.0f, 35.0f, -2.0f }, // PLAYER_FORM_ZORA + { 10.0f, 20.0f, -4.0f }, // PLAYER_FORM_DEKU + { 15.0f, 25.0f, -2.0f }, // PLAYER_FORM_HUMAN +}; + void func_808D217C(EnFloormas* this, Player* player) { Vec3f* ptr; @@ -1163,6 +1157,34 @@ s32 EnFloormas_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec return false; } +static s8 D_808D393C[WALLMASTER_LIMB_MAX] = { + -1, // WALLMASTER_LIMB_NONE + -1, // WALLMASTER_LIMB_ROOT + -1, // WALLMASTER_LIMB_HAND + -1, // WALLMASTER_LIMB_INDEX_FINGER_ROOT + 0, // WALLMASTER_LIMB_INDEX_FINGER_PROXIMAL + -1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL_ROOT + -1, // WALLMASTER_LIMB_INDEX_FINGER_MIDDLE + 1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL + -1, // WALLMASTER_LIMB_RING_FINGER_ROOT + 2, // WALLMASTER_LIMB_RING_FINGER_PROXIMAL + -1, // WALLMASTER_LIMB_RING_FINGER_DISTAL_ROOT + -1, // WALLMASTER_LIMB_RING_FINGER_MIDDLE + 3, // WALLMASTER_LIMB_RING_FINGER_DISTAL + -1, // WALLMASTER_LIMB_MIDDLE_FINGER_ROOT + 4, // WALLMASTER_LIMB_MIDDLE_FINGER_PROXIMAL + -1, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL_ROOT + -1, // WALLMASTER_LIMB_MIDDLE_FINGER_MIDDLE + 5, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL + -1, // WALLMASTER_LIMB_WRIST_ROOT + -1, // WALLMASTER_LIMB_WRIST + -1, // WALLMASTER_LIMB_THUMB_ROOT + 6, // WALLMASTER_LIMB_THUMB_PROXIMAL + 7, // WALLMASTER_LIMB_THUMB_DISTAL_ROOT + -1, // WALLMASTER_LIMB_THUMB_MIDDLE + 8, // WALLMASTER_LIMB_THUMB_DISTAL +}; + void EnFloormas_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnFloormas* this = THIS; @@ -1187,6 +1209,8 @@ void EnFloormas_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* } } +static Color_RGBA8 D_808D3958 = { 0, 255, 0, 0 }; + void EnFloormas_Draw(Actor* thisx, PlayState* play) { EnFloormas* this = THIS; 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 088b504c6..268ea9626 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -52,6 +52,18 @@ typedef enum { /* 2 */ ENFSN_CUTSCENESTATE_PLAYING } EnFsnCutsceneState; +ActorInit En_Fsn_InitVars = { + ACTOR_EN_FSN, + ACTORCAT_NPC, + FLAGS, + OBJECT_FSN, + sizeof(EnFsn), + (ActorFunc)EnFsn_Init, + (ActorFunc)EnFsn_Destroy, + (ActorFunc)EnFsn_Update, + (ActorFunc)EnFsn_Draw, +}; + typedef enum { /* 0 */ FSN_ANIM_IDLE, /* 1 */ FSN_ANIM_SCRATCH_BACK, @@ -69,32 +81,20 @@ typedef enum { /* 13 */ FSN_ANIM_MAX } FsnAnimation; -ActorInit En_Fsn_InitVars = { - ACTOR_EN_FSN, - ACTORCAT_NPC, - FLAGS, - OBJECT_FSN, - sizeof(EnFsn), - (ActorFunc)EnFsn_Init, - (ActorFunc)EnFsn_Destroy, - (ActorFunc)EnFsn_Update, - (ActorFunc)EnFsn_Draw, -}; - -static AnimationInfoS sAnimationInfo[] = { - { &gFsnIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnScratchBackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnTurnAroundAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnHandsOnCounterStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnHandsOnCounterLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnHandOnFaceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnHandOnFaceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnLeanForwardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnLeanForwardLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnSlamCounterStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gFsnSlamCounterLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gFsnMakeOfferAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +static AnimationInfoS sAnimationInfo[FSN_ANIM_MAX] = { + { &gFsnIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_IDLE + { &gFsnScratchBackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_SCRATCH_BACK + { &gFsnTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_TURN_AROUND_FORWARD + { &gFsnTurnAroundAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_TURN_AROUND_REVERSE + { &gFsnHandsOnCounterStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_HANDS_ON_COUNTER_START + { &gFsnHandsOnCounterLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_HANDS_ON_COUNTER_LOOP + { &gFsnHandOnFaceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_HAND_ON_FACE_START + { &gFsnHandOnFaceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_HAND_ON_FACE_LOOP + { &gFsnLeanForwardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_LEAN_FORWARD_START + { &gFsnLeanForwardLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_LEAN_FORWARD_LOOP + { &gFsnSlamCounterStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_SLAM_COUNTER_START + { &gFsnSlamCounterLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // FSN_ANIM_SLAM_COUNTER_LOOP + { &gFsnMakeOfferAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // FSN_ANIM_MAKE_OFFER }; static ColliderCylinderInit sCylinderInit = { @@ -745,8 +745,9 @@ void EnFsn_Idle(EnFsn* this, PlayState* play) { if (this->animIndex == FSN_ANIM_HANDS_ON_COUNTER_START) { s16 curFrame = this->skelAnime.curFrame; - s16 frameCount = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (curFrame == frameCount) { + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + + if (curFrame == endFrame) { this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -781,7 +782,7 @@ void EnFsn_Idle(EnFsn* this, PlayState* play) { void EnFsn_Haggle(EnFsn* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 frameCount = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->flags & ENFSN_ANGRY) { this->flags &= ~ENFSN_ANGRY; @@ -801,7 +802,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } else { if (this->animIndex == FSN_ANIM_MAKE_OFFER) { - if (curFrame == frameCount) { + if (curFrame == endFrame) { this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } else { 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 c0f3e1cc5..4881e38a7 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -9,7 +9,6 @@ #include "overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.h" #include "overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" -#include "objects/object_mu/object_mu.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) @@ -73,13 +72,31 @@ static Vec3f D_80964B0C = { 0.0f, 60.0f, -8.0f }; static Vec3f D_80964B18 = { 0.0f, 55.0f, 12.0f }; static Vec3f D_80964B24 = { 0.0f, 60.0f, 0.0f }; -static AnimationInfo sAnimationInfo[] = { +typedef enum { + /* 0 */ HONEY_DARLING_ANIM_IDLE, + /* 1 */ HONEY_DARLING_ANIM_CUP_CHEEKS, + /* 2 */ HONEY_DARLING_ANIM_HUG, + /* 3 */ HONEY_DARLING_ANIM_GAME_DANCE, + /* 4 */ HONEY_DARLING_ANIM_HOLD_HANDS_MORPH, + /* 5 */ HONEY_DARLING_ANIM_HOLD_HANDS, + /* 6 */ HONEY_DARLING_ANIM_SURPRISE, + /* 7 */ HONEY_DARLING_ANIM_MAX +} HoneyAndDarlingAnimation; + +static AnimationInfo sAnimationInfo[HONEY_DARLING_ANIM_MAX] = { + // HONEY_DARLING_ANIM_IDLE { &gHoneyAndDarlingIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + // HONEY_DARLING_ANIM_CUP_CHEEKS { &gHoneyAndDarlingCupCheeksLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + // HONEY_DARLING_ANIM_HUG { &gHoneyAndDarlingHugLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + // HONEY_DARLING_ANIM_GAME_DANCE { &gHoneyAndDarlingGameDanceLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, + // HONEY_DARLING_ANIM_HOLD_HANDS_MORPH { &gHoneyAndDarlingHoldHandsLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, + // HONEY_DARLING_ANIM_HOLD_HANDS { &gHoneyAndDarlingHoldHandsLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, + // HONEY_DARLING_ANIM_SURPRISE { &gHoneyAndDarlingSurpiseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, }; @@ -371,7 +388,7 @@ void func_8096209C(EnFu* this, PlayState* play) { } void func_809622FC(EnFu* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_CUP_CHEEKS); this->actionFunc = func_80962340; } @@ -538,7 +555,7 @@ void func_80962660(EnFu* this, PlayState* play) { Message_CloseTextbox(play); player->stateFlags1 |= PLAYER_STATE1_20; this->unk_53C = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_GAME_DANCE); Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME); if (this->unk_542 == 0) { if (this->unk_546 == 1) { @@ -617,6 +634,9 @@ void func_809628D0(EnFu* this, PlayState* play) { } } break; + + default: + break; } if (talkState != TEXT_STATE_3) { @@ -760,6 +780,9 @@ void func_80962F4C(EnFu* this, PlayState* play) { case 2: play->unk_1887D = 30; break; + + default: + break; } if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < SECONDS_TO_TIMER(20)) { @@ -931,6 +954,9 @@ void func_80963630(EnFu* this, PlayState* play) { case 3: SET_WEEKEVENTREG(WEEKEVENTREG_22_40); break; + + default: + break; } } player->stateFlags1 &= ~PLAYER_STATE1_20; @@ -1112,6 +1138,9 @@ void func_809639D0(EnFu* this, PlayState* play) { this->unk_552 = 0x286D; } break; + + default: + break; } } @@ -1136,6 +1165,9 @@ void func_80963DE4(EnFu* this, PlayState* play) { Message_StartTextbox(play, 0x287B, &this->actor); this->unk_552 = 0x287B; break; + + default: + break; } } @@ -1215,7 +1247,7 @@ void func_80964190(EnFu* this, PlayState* play) { case 0x2842: case 0x2844: case 0x2848: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_CUP_CHEEKS); break; case 0x2840: @@ -1241,21 +1273,24 @@ void func_80964190(EnFu* this, PlayState* play) { case 0x286B: case 0x286D: case 0x2871: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_HOLD_HANDS_MORPH); break; case 0x2860: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_HOLD_HANDS); break; case 0x285F: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_SURPRISE); break; case 0x287E: case 0x2880: case 0x2883: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HONEY_DARLING_ANIM_HUG); + break; + + default: break; } } @@ -1348,13 +1383,13 @@ void EnFu_Update(Actor* thisx, PlayState* play) { s32 EnFu_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFu* this = THIS; - if (limbIndex == 9) { + if (limbIndex == HONEY_AND_DARLING_LIMB_MAN_HEAD) { Matrix_Translate(1600.0f, 300.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->unk_524[1], MTXMODE_APPLY); Matrix_RotateZS(this->unk_524[0], MTXMODE_APPLY); Matrix_RotateYS(this->unk_524[2], MTXMODE_APPLY); Matrix_Translate(-1600.0f, -300.0f, 0.0f, MTXMODE_APPLY); - } else if (limbIndex == 20) { + } else if (limbIndex == HONEY_AND_DARLING_LIMB_WOMAN_HEAD) { Matrix_Translate(1800.0f, 200.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->unk_52A[1], MTXMODE_APPLY); Matrix_RotateZS(this->unk_52A[0], MTXMODE_APPLY); @@ -1369,9 +1404,9 @@ void EnFu_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, static Vec3f D_80964C34 = { -3500.0f, 0.0f, 0.0f }; EnFu* this = THIS; - if (limbIndex == 9) { + if (limbIndex == HONEY_AND_DARLING_LIMB_MAN_HEAD) { Matrix_MultVec3f(&D_80964C28, &this->unk_508); - } else if (limbIndex == 20) { + } else if (limbIndex == HONEY_AND_DARLING_LIMB_WOMAN_HEAD) { Matrix_MultVec3f(&D_80964C34, &this->unk_514); } } diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.h b/src/overlays/actors/ovl_En_Fu/z_en_fu.h index 44f769a8c..ecd4878c2 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.h +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.h @@ -2,6 +2,7 @@ #define Z_EN_FU_H #include "global.h" +#include "objects/object_mu/object_mu.h" #include "overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.h" struct EnFu; @@ -27,8 +28,8 @@ typedef struct EnFu { /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnFuActionFunc actionFunc; - /* 0x1D8 */ Vec3s jointTable[21]; - /* 0x256 */ Vec3s morphTable[21]; + /* 0x1D8 */ Vec3s jointTable[HONEY_AND_DARLING_LIMB_MAX]; + /* 0x256 */ Vec3s morphTable[HONEY_AND_DARLING_LIMB_MAX]; /* 0x2D4 */ BgFuMizu* unk_2D4; /* 0x2D8 */ EnFuUnkStruct unk_2D8[10]; /* 0x508 */ Vec3f unk_508; 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 576e307b2..8aa3909f7 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 @@ -138,9 +138,9 @@ s32 func_80ACF8B8(EnFuKago* this, PlayState* play) { Actor_PlaySfx(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR); return true; - } else { - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } + + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); return false; } 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 3ffaa1635..e6a80e00b 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -5,7 +5,6 @@ */ #include "z_en_minifrog.h" -#include "objects/object_fr/object_fr.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -66,11 +65,15 @@ static TexturePtr D_808A4D74[] = { object_fr_Tex_005BA0, }; -static u16 isFrogReturnedFlags[] = { - 0, WEEKEVENTREG_32_40, WEEKEVENTREG_32_80, WEEKEVENTREG_33_01, WEEKEVENTREG_33_02, +static u16 sIsFrogReturnedFlags[] = { + 0, // FROG_YELLOW + WEEKEVENTREG_32_40, // FROG_CYAN + WEEKEVENTREG_32_80, // FROG_PINK + WEEKEVENTREG_33_01, // FROG_BLUE + WEEKEVENTREG_33_02, // FROG_WHITE }; -static s32 isInitialized = false; +static s32 sIsInitialized = false; static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(gravity, -800, ICHAIN_STOP), @@ -83,32 +86,32 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_fr_Skel_00B538, &object_fr_Anim_001534, this->jointTable, - this->morphTable, 24); + this->morphTable, OBJECT_FR_LIMB_MAX); CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - if (!isInitialized) { + if (!sIsInitialized) { for (i = 0; i < ARRAY_COUNT(D_808A4D74); i++) { D_808A4D74[i] = Lib_SegmentedToVirtual(D_808A4D74[i]); } - isInitialized = true; + sIsInitialized = true; } this->frogIndex = (this->actor.params & 0xF); if (this->frogIndex >= 5) { - this->frogIndex = MINIFROG_YELLOW; + this->frogIndex = FROG_YELLOW; } this->actor.speed = 0.0f; this->actionFunc = EnMinifrog_Idle; - this->jumpState = MINIFROG_STATE_GROUND; + this->jumpState = FROG_STATE_GROUND; this->flags = 0; this->timer = 0; if (1) {} - if (!EN_MINIFROG_IS_RETURNED(&this->actor)) { - if ((this->frogIndex == MINIFROG_YELLOW) || CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) { + if (!EN_FROG_IS_RETURNED(&this->actor)) { + if ((this->frogIndex == FROG_YELLOW) || CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->frogIndex])) { Actor_Kill(&this->actor); return; } @@ -118,7 +121,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->actor.textId = 0xD81; this->actor.colChkInfo.mass = 30; } else { // Frogs in mountain village - if (this->frogIndex == MINIFROG_YELLOW) { + if (this->frogIndex == FROG_YELLOW) { this->actor.textId = 0; this->actionFunc = EnMinifrog_SetupYellowFrogDialog; @@ -133,7 +136,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; // Frog has been returned - if (CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) { + if (CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->frogIndex])) { this->actionFunc = EnMinifrog_SetupNextFrogInit; } else { this->actor.draw = NULL; @@ -167,8 +170,8 @@ EnMinifrog* EnMinifrog_GetFrog(PlayState* play) { } void EnMinifrog_SetJumpState(EnMinifrog* this) { - if (this->jumpState == MINIFROG_STATE_GROUND) { - this->jumpState = MINIFROG_STATE_JUMP; + if (this->jumpState == FROG_STATE_GROUND) { + this->jumpState = FROG_STATE_JUMP; Animation_Change(&this->skelAnime, &object_fr_Anim_0007BC, 1.0f, 0.0f, 7.0f, ANIMMODE_ONCE, -5.0f); } } @@ -185,21 +188,25 @@ void EnMinifrog_JumpTimer(EnMinifrog* this) { void EnMinifrog_Jump(EnMinifrog* this) { SkelAnime_Update(&this->skelAnime); switch (this->jumpState) { - case MINIFROG_STATE_JUMP: + case FROG_STATE_JUMP: if (Animation_OnFrame(&this->skelAnime, 4.0f)) { this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; this->actor.velocity.y = 6.0f; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP); - this->jumpState = MINIFROG_STATE_AIR; + this->jumpState = FROG_STATE_AIR; } break; - case MINIFROG_STATE_AIR: + + case FROG_STATE_AIR: if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - this->jumpState = MINIFROG_STATE_GROUND; + this->jumpState = FROG_STATE_GROUND; Animation_MorphToLoop(&this->skelAnime, &object_fr_Anim_001534, -2.5f); SkelAnime_Update(&this->skelAnime); } break; + + default: + break; } } @@ -219,7 +226,7 @@ static Color_RGBA8 sEnvColor = { 80, 80, 80, 255 }; void EnMinifrog_SpawnDust(EnMinifrog* this, PlayState* play) { Vec3f pos; Vec3f vec5; - Vec3f vel; + Vec3f velocity; Vec3f accel; s16 yaw; s16 pitch; @@ -233,16 +240,16 @@ void EnMinifrog_SpawnDust(EnMinifrog* this, PlayState* play) { vec5.z = this->actor.world.pos.z - (5.0f * Math_CosS(yaw) * Math_CosS(pitch)); for (i = 0; i < 5; i++) { - vel.x = Rand_CenteredFloat(4.0f); - vel.y = Rand_CenteredFloat(4.0f); - vel.z = Rand_CenteredFloat(4.0f); - accel.x = -vel.x * 0.1f; - accel.y = -vel.y * 0.1f; - accel.z = -vel.z * 0.1f; - pos.x = vec5.x + vel.x; - pos.y = vec5.y + vel.y; - pos.z = vec5.z + vel.z; - func_800B0F80(play, &pos, &vel, &accel, &sPrimColor, &sEnvColor, 300, 30, 10); + velocity.x = Rand_CenteredFloat(4.0f); + velocity.y = Rand_CenteredFloat(4.0f); + velocity.z = Rand_CenteredFloat(4.0f); + accel.x = -velocity.x * 0.1f; + accel.y = -velocity.y * 0.1f; + accel.z = -velocity.z * 0.1f; + pos.x = vec5.x + velocity.x; + pos.y = vec5.y + velocity.y; + pos.z = vec5.z + velocity.z; + func_800B0F80(play, &pos, &velocity, &accel, &sPrimColor, &sEnvColor, 300, 30, 10); } } @@ -269,7 +276,7 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) { Message_ContinueTextbox(play, 0xD86); } - SET_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex]); + SET_WEEKEVENTREG(sIsFrogReturnedFlags[this->frogIndex]); break; case 0xD85: @@ -366,20 +373,25 @@ void EnMinifrog_CheckChoirSuccess(EnMinifrog* this, PlayState* play) { void EnMinifrog_ContinueChoirCutscene(EnMinifrog* this, PlayState* play) { EnMinifrog_Jump(this); + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { EnMinifrog_CheckChoirSuccess(this, play); - return; // necessary to match - } else if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + return; + } + + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { CutsceneManager_Start(CS_ID_GLOBAL_TALK, NULL); EnMinifrog_CheckChoirSuccess(this, play); - return; // necessary to match - } else if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->actor.csId)) { + return; + } + + if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->actor.csId)) { CutsceneManager_Stop(this->actor.csId); CutsceneManager_Queue(CS_ID_GLOBAL_TALK); - return; // necessary to match - } else { - CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + return; } + + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } void EnMinifrog_NextFrogMissing(EnMinifrog* this, PlayState* play) { @@ -398,8 +410,8 @@ void EnMinifrog_NextFrogReturned(EnMinifrog* this, PlayState* play) { this->timer--; } else { this->actionFunc = EnMinifrog_ContinueChoirCutscene; - this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE | - 0x2 << MINIFROG_WHITE); + this->flags &= ~((0x2 << FROG_YELLOW) | (0x2 << FROG_CYAN) | (0x2 << FROG_PINK) | (0x2 << FROG_BLUE) | + (0x2 << FROG_WHITE)); play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP); } } @@ -409,11 +421,11 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) { EnMinifrog_Jump(this); frogIndex = func_801A39F8(); - if (frogIndex != MINIFROG_INVALID) { - if (frogIndex == MINIFROG_YELLOW) { + if (frogIndex != FROG_NONE) { + if (frogIndex == FROG_YELLOW) { EnMinifrog_SetJumpState(this); } else { - this->actor.home.rot.z = frogIndex; // This is strange to store the frog index in home z rotation + this->actor.home.rot.z = frogIndex; } if (!(this->flags & (0x2 << frogIndex))) { @@ -429,8 +441,8 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) { this->actor.home.rot.y = Actor_WorldYawTowardActor(&this->actor, &this->frog->actor); func_801A1F88(); this->flags &= ~0x100; - this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE | - 0x2 << MINIFROG_WHITE); + this->flags &= + ~(0x2 << FROG_YELLOW | 0x2 << FROG_CYAN | 0x2 << FROG_PINK | 0x2 << FROG_BLUE | 0x2 << FROG_WHITE); play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP); } else if (this->timer <= 0) { this->actionFunc = EnMinifrog_NextFrogReturned; @@ -493,10 +505,14 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { this->actionFunc = EnMinifrog_BeginChoirCutscene; play->msgCtx.msgLength = 0; break; + case 1: // No Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0xD7E); break; + + default: + break; } } break; @@ -510,16 +526,19 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; SET_WEEKEVENTREG(WEEKEVENTREG_34_01); break; + case 0xD78: case 0xD79: case 0xD7A: case 0xD7F: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0xD77: this->actionFunc = EnMinifrog_BeginChoirCutscene; play->msgCtx.msgLength = 0; break; + case 0xD7C: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_80)) { // Obtained Heart Piece Message_ContinueTextbox(play, 0xD7E); @@ -528,11 +547,13 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_35_80); } break; + case 0xD7D: Message_CloseTextbox(play); this->actionFunc = EnMinifrog_GetFrogHP; EnMinifrog_GetFrogHP(this, play); break; + case 0xD7B: case 0xD7E: default: @@ -543,6 +564,9 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { } } break; + + default: + break; } } @@ -592,11 +616,11 @@ void EnMinifrog_UpdateMissingFrog(Actor* thisx, PlayState* play) { } s32 EnMinifrog_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { - if (limbIndex == 1) { + if (limbIndex == OBJECT_FR_LIMB_01) { pos->z -= 500.0f; } - if ((limbIndex == 7) || (limbIndex == 8)) { + if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { *dList = NULL; } @@ -606,7 +630,7 @@ s32 EnMinifrog_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnMinifrog* this = THIS; - if ((limbIndex == 7) || (limbIndex == 8)) { + if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { OPEN_DISPS(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); @@ -616,13 +640,17 @@ void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == 4) { + if (limbIndex == OBJECT_FR_LIMB_04) { Matrix_MultZero(&this->actor.focus.pos); } } -static Color_RGBA8 sEnMinifrogColor[] = { - { 200, 170, 0, 255 }, { 0, 170, 200, 255 }, { 210, 120, 100, 255 }, { 120, 130, 230, 255 }, { 190, 190, 190, 255 }, +static Color_RGBA8 sFrogEnvColors[] = { + { 200, 170, 0, 255 }, // FROG_YELLOW + { 0, 170, 200, 255 }, // FROG_CYAN + { 210, 120, 100, 255 }, // FROG_PINK + { 120, 130, 230, 255 }, // FROG_BLUE + { 190, 190, 190, 255 }, // FROG_WHITE }; void EnMinifrog_Draw(Actor* thisx, PlayState* play) { @@ -632,7 +660,7 @@ void EnMinifrog_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - envColor = &sEnMinifrogColor[this->frogIndex]; + envColor = &sFrogEnvColors[this->frogIndex]; gSPSegment(POLY_OPA_DISP++, 0x08, D_808A4D74[0]); gSPSegment(POLY_OPA_DISP++, 0x09, D_808A4D74[0]); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, envColor->a); diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h index 3e321cc56..5f1fd80b5 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h @@ -2,33 +2,34 @@ #define Z_EN_MINIFROG_H #include "global.h" +#include "objects/object_fr/object_fr.h" struct EnMinifrog; typedef void (*EnMinifrogActionFunc)(struct EnMinifrog*, PlayState*); -#define EN_MINIFROG_IS_RETURNED(thisx) ((((thisx)->params) & 0xF0) >> 4) +#define EN_FROG_IS_RETURNED(thisx) ((((thisx)->params) & 0xF0) >> 4) typedef enum { - /* 0x00 */ MINIFROG_YELLOW, // Mountain Village - /* 0x01 */ MINIFROG_CYAN, // Woodfall Temple - /* 0x02 */ MINIFROG_PINK, // Great Bay Temple - /* 0x03 */ MINIFROG_BLUE, // Southern Swamp - /* 0x04 */ MINIFROG_WHITE, // Laundry Pool - /* 0xFF */ MINIFROG_INVALID = 0xFF // -1 -} MinifrogType; + /* 0x00 */ FROG_YELLOW, // Mountain Village + /* 0x01 */ FROG_CYAN, // Woodfall Temple + /* 0x02 */ FROG_PINK, // Great Bay Temple + /* 0x03 */ FROG_BLUE, // Southern Swamp + /* 0x04 */ FROG_WHITE, // Laundry Pool + /* 0xFF */ FROG_NONE = 0xFF // -1 +} FrogType; typedef enum { - /* 0 */ MINIFROG_STATE_JUMP, - /* 1 */ MINIFROG_STATE_AIR, - /* 2 */ MINIFROG_STATE_GROUND -} MinifrogJumpState; + /* 0 */ FROG_STATE_JUMP, + /* 1 */ FROG_STATE_AIR, + /* 2 */ FROG_STATE_GROUND +} FrogJumpState; typedef struct EnMinifrog { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[24]; - /* 0x218 */ Vec3s morphTable[24]; + /* 0x188 */ Vec3s jointTable[OBJECT_FR_LIMB_MAX]; + /* 0x218 */ Vec3s morphTable[OBJECT_FR_LIMB_MAX]; /* 0x2A8 */ EnMinifrogActionFunc actionFunc; /* 0x2AC */ struct EnMinifrog* frog; /* 0x2B0 */ s16 frogIndex; 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 adee7503c..7ebe76367 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -172,7 +172,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_U8(targetMode, 10, ICHAIN_STOP), }; -static s32 isFrogReturnedFlags[] = { +static s32 sIsFrogReturnedFlags[] = { WEEKEVENTREG_32_40, WEEKEVENTREG_32_80, WEEKEVENTREG_33_01, @@ -192,7 +192,7 @@ void EnPametfrog_Init(Actor* thisx, PlayState* play) { this->params = CLAMP(this->actor.params, 1, 4); if (Flags_GetClear(play, play->roomCtx.curRoom.num)) { Actor_Kill(&this->actor); - if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) { + if (!CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->actor.params - 1])) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->params); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4adec0d21..4a9dd7ae1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -10092,7 +10092,7 @@ 0x80A2D0FC:("ElfMsg3_Update",), 0x80A2D280:("EnFg_ChangeAnim",), 0x80A2D348:("func_80A2D348",), - 0x80A2D3D4:("func_80A2D3D4",), + 0x80A2D3D4:("EnFg_UpdateSkelAnime",), 0x80A2D400:("func_80A2D400",), 0x80A2D42C:("func_80A2D42C",), 0x80A2D4B8:("func_80A2D4B8",), @@ -13338,7 +13338,7 @@ 0x80B2815C:("func_80B2815C",), 0x80B2816C:("BgBotihasira_Update",), 0x80B28240:("BgBotihasira_Draw",), - 0x80B28370:("func_80B28370",), + 0x80B28370:("EnFish2_ChangeAnim",), 0x80B28478:("func_80B28478",), 0x80B28538:("EnFish2_Init",), 0x80B287B8:("EnFish2_Destroy",), @@ -16927,7 +16927,7 @@ 0x80C1B8A4:("func_80C1B8A4",), 0x80C1B8B4:("func_80C1B8B4",), 0x80C1B8F0:("func_80C1B8F0",), - 0x80C1B9D4:("func_80C1B9D4",), + 0x80C1B9D4:("EnFall2_HandleCutscene",), 0x80C1BAC8:("EnFall2_Update",), 0x80C1BAEC:("EnFall2_Draw",), 0x80C1BD90:("DmAl_ChangeAnim",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 7183aec29..6a991f1de 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -13899,8 +13899,8 @@ 0x80B2B360:("D_80B2B360","UNK_TYPE1","",0x1), 0x80B2B370:("D_80B2B370","f32","",0x4), 0x80B2B380:("D_80B2B380","f32","",0x4), - 0x80B2B388:("D_80B2B388","UNK_TYPE1","",0x1), - 0x80B2B3A0:("D_80B2B3A0","UNK_TYPE1","",0x1), + 0x80B2B388:("sAnimations","UNK_TYPE1","",0x1), + 0x80B2B3A0:("sAnimationModes","UNK_TYPE1","",0x1), 0x80B2B3A8:("D_80B2B3A8","UNK_TYPE1","",0x1), 0x80B2B3C0:("D_80B2B3C0","f32","",0x4), 0x80B2B3C4:("D_80B2B3C4","f32","",0x4), From d107b6c2a922fff477075fb3525e6541b6d7f108 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Wed, 9 Aug 2023 19:44:31 -0400 Subject: [PATCH 052/121] `z64vi*.h` and `sys_cfb.h` headers (#1259) * z64vimode.h * z64viscvg.h * z64vis*.h * VisCvg * sys_cfb.h * a bit of naming * review * Renames * bss * fix * bss * bss * bss * messed up the merge * bss is borken * reordering 2 * remove prevent header from fault.c --- include/functions.h | 30 ------- include/padmgr.h | 2 +- include/prevent_bss_reordering2.h | 44 +++++++++++ include/sys_cfb.h | 38 +++++++++ include/variables.h | 44 ----------- include/z64.h | 48 ----------- include/z64vimode.h | 43 ++++++++++ include/z64viscvg.h | 18 +++++ include/z64vismono.h | 20 +++++ include/z64viszbuf.h | 18 +++++ src/boot_O2_g3/CIC6105.c | 1 + src/boot_O2_g3/fault.c | 1 - src/code/game.c | 79 +++++++++++-------- src/code/graph.c | 1 + src/code/sys_cfb.c | 22 ++++-- src/code/z_actor.c | 1 + src/code/z_fbdemo_circle.c | 1 + src/code/z_lights.c | 1 + src/code/z_parameter.c | 1 + src/code/z_play.c | 44 ++++++----- src/code/z_play_hireso.c | 1 + src/code/z_player_call.c | 1 + src/code/z_rcp.c | 1 + src/code/z_scene_proc.c | 1 + src/code/z_skin.c | 1 + src/code/z_vimode.c | 1 + src/code/z_viscvg.c | 7 +- src/code/z_vismono.c | 1 + src/code/z_viszbuf.c | 3 + src/libultra/flash/osFlash.c | 1 + src/overlays/actors/ovl_Boss_06/z_boss_06.c | 1 + src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 1 + src/overlays/actors/ovl_En_Test3/z_en_test3.c | 1 - .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 1 + .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1 - tools/disasm/files.txt | 4 +- tools/disasm/variables.txt | 12 +-- 37 files changed, 300 insertions(+), 196 deletions(-) create mode 100644 include/prevent_bss_reordering2.h create mode 100644 include/sys_cfb.h create mode 100644 include/z64vimode.h create mode 100644 include/z64viscvg.h create mode 100644 include/z64vismono.h create mode 100644 include/z64viszbuf.h diff --git a/include/functions.h b/include/functions.h index 622830246..92d1350e8 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1206,18 +1206,6 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a); void SkinMatrix_MulYRotation(MtxF* mf, s16 a); void SkinMatrix_SetZRotation(MtxF* mf, s16 a); -void ViMode_LogPrint(OSViMode* vimode); -void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, - s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust); -void ViMode_Save(ViMode* viMode); -void ViMode_Load(ViMode* viMode); -void ViMode_Init(ViMode* viMode); -void ViMode_Destroy(ViMode* viMode); -void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures); -void ViMode_Update(ViMode* viMode, Input* input); -void VisCvg_Init(struct_801F8010* this); -void VisCvg_Destroy(struct_801F8010* this); -void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp); void func_80140E80(Struct_80140E80* arg0); void func_80140EA0(Struct_80140E80* arg0); // void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); @@ -1228,16 +1216,6 @@ void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height // void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx); -void VisMono_Init(VisMono* this); -void VisMono_Destroy(VisMono* this); -// void VisMono_DesaturateTLUT(u16* tlut); -// void VisMono_DesaturateDList(Gfx* gfx); -void VisMono_Draw(VisMono* this, Gfx** gfxp); -// void VisMono_DrawOld(VisMono* this); - -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); @@ -1491,14 +1469,6 @@ void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ); -void SysCfb_SetLoResMode(void); -void SysCfb_SetHiResMode(void); -void SysCfb_Init(void); -void* SysCfb_GetFramebuffer(s32 index); -void* SysCfb_GetZBuffer(void); -void* SysCfb_GetWorkBuffer(void); -u16 SysCfb_GetZBufferPixel(s32 x, s32 y); -s32 SysCfb_GetZBufferInt(s32 x, s32 y); void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size); void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); diff --git a/include/padmgr.h b/include/padmgr.h index 1a21e5052..7cb3cc800 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -5,7 +5,7 @@ #include "io/controller.h" #include "irqmgr.h" -typedef struct { +typedef struct Input { /* 0x00 */ OSContPad cur; /* 0x06 */ OSContPad prev; /* 0x0C */ OSContPad press; // X/Y store delta from last frame diff --git a/include/prevent_bss_reordering2.h b/include/prevent_bss_reordering2.h new file mode 100644 index 000000000..c0a4820d7 --- /dev/null +++ b/include/prevent_bss_reordering2.h @@ -0,0 +1,44 @@ +#ifndef PREVENT_BSS_REORDERING2_H +#define PREVENT_BSS_REORDERING2_H + +/** + * See the explanation at prevent_bss_reordering.h + * + * Instead of producing 64 dummy declarations, this header only produces 32 + * dummy declarations + */ + +struct Dummy100 { int x; }; +struct Dummy101 { int x; }; +struct Dummy102 { int x; }; +struct Dummy103 { int x; }; +struct Dummy104 { int x; }; +struct Dummy105 { int x; }; +struct Dummy106 { int x; }; +struct Dummy107 { int x; }; +struct Dummy108 { int x; }; +struct Dummy109 { int x; }; +struct Dummy110 { int x; }; +struct Dummy111 { int x; }; +struct Dummy112 { int x; }; +struct Dummy113 { int x; }; +struct Dummy114 { int x; }; +struct Dummy115 { int x; }; +struct Dummy116 { int x; }; +struct Dummy117 { int x; }; +struct Dummy118 { int x; }; +struct Dummy119 { int x; }; +struct Dummy120 { int x; }; +struct Dummy121 { int x; }; +struct Dummy122 { int x; }; +struct Dummy123 { int x; }; +struct Dummy124 { int x; }; +struct Dummy125 { int x; }; +struct Dummy126 { int x; }; +struct Dummy127 { int x; }; +struct Dummy128 { int x; }; +struct Dummy129 { int x; }; +struct Dummy130 { int x; }; +struct Dummy131 { int x; }; + +#endif diff --git a/include/sys_cfb.h b/include/sys_cfb.h new file mode 100644 index 000000000..f8f0d4539 --- /dev/null +++ b/include/sys_cfb.h @@ -0,0 +1,38 @@ +#ifndef SYS_CFB_H +#define SYS_CFB_H + +#include "ultra64.h" +#include "macros.h" + +void SysCfb_SetLoResMode(void); +void SysCfb_SetHiResMode(void); +void SysCfb_Init(void); +void* SysCfb_GetFramebuffer(s32 index); +void* SysCfb_GetZBuffer(void); +void* SysCfb_GetWorkBuffer(void); +u16 SysCfb_GetZBufferPixel(s32 x, s32 y); +s32 SysCfb_GetZBufferInt(s32 x, s32 y); + +extern void* gFramebuffers[2]; +extern OSViMode* gActiveViMode; +extern u16* gZBufferPtr; +extern void* gWorkBuffer; +extern u64* gGfxSPTaskOutputBufferPtr; +extern void* gGfxSPTaskOutputBufferEnd; + +extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndLoRes; + +extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndHiRes; +extern s16 gCfbWidth; +extern s16 gCfbHeight; +extern s16 gCfbLeftAdjust; +extern s16 gCfbUpperAdjust; +extern u8 gSysCfbHiResEnabled; + +#endif diff --git a/include/variables.h b/include/variables.h index 1565e0201..0afe12864 100644 --- a/include/variables.h +++ b/include/variables.h @@ -356,10 +356,6 @@ extern SceneTableEntry gSceneTable[SCENE_MAX]; extern UNK_PTR D_801C5C50; // extern UNK_TYPE1 D_801C5C9C; extern UNK_PTR D_801C5CB0; -// extern UNK_TYPE1 D_801C5DD0; -// extern UNK_TYPE1 D_801C5DE0; -// extern UNK_TYPE1 D_801C5DF0; -// extern UNK_TYPE1 D_801C5E00; // extern UNK_TYPE1 D_801C6A70; // extern UNK_TYPE2 D_801C6A74; @@ -2051,23 +2047,8 @@ extern s16 D_801F4E7A; extern void (*sKaleidoScopeUpdateFunc)(PlayState* play); extern void (*sKaleidoScopeDrawFunc)(PlayState* play); -extern s16 sTransitionFillTimer; -extern Input D_801F6C18; -extern TransitionTile sTransitionTile; extern s32 gTransitionTileState; -extern VisMono sVisMono; extern Color_RGBA8_u32 gVisMonoColor; -extern Struct_80140E80 D_801F6D38; -extern Struct_80140E80* D_801F6D4C; -extern BombersNotebook sBombersNotebook; -extern u8 sBombersNotebookOpen; -extern u8 sMotionBlurStatus; - -extern UNK_TYPE1 D_801F7FF0; -extern struct_801F8010 D_801F8010; -extern VisZbuf sVisZbuf; -extern VisMono sMonoColors; -extern ViMode D_801F8048; extern GfxMasterList* gGfxMasterDL; @@ -2085,31 +2066,6 @@ extern volatile OSTime sRSPOtherTotalTime; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; -extern OSViMode sNotebookViMode; -extern void* gFramebuffers[2]; -extern OSViMode* gActiveViMode; -extern u16* gZBufferPtr; -extern void* gWorkBuffer; -extern u64* gGfxSPTaskOutputBufferPtr; -extern void* gGfxSPTaskOutputBufferEnd; -extern void* sCfbLoRes1; -extern void* sCfbLoRes0; -extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; -extern void* gGfxSPTaskOutputBufferEndLoRes; -extern void* sCfbHiRes1; -extern void* sCfbHiRes0; -extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; -extern void* gGfxSPTaskOutputBufferEndHiRes; -extern s16 gCfbWidth; -extern s16 gCfbHeight; -extern s16 gCfbLeftAdjust; -extern s16 gCfbUpperAdjust; -extern u8 gSysCfbHiResEnabled; - extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64.h b/include/z64.h index ba2d5ffc3..c94bec081 100644 --- a/include/z64.h +++ b/include/z64.h @@ -396,29 +396,6 @@ typedef struct { /* 0x10 */ Color_RGBA8_u32 envColor; } Struct_80140E80; // size = 0x14 -typedef struct { - /* 0x0 */ u32 type; - /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8_u32 color; - /* 0xC */ Color_RGBA8 envColor; -} struct_801F8010; // size = 0x10 - -typedef struct { - /* 0x0 */ u32 useRgba; - /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8_u32 primColor; - /* 0xC */ Color_RGBA8_u32 envColor; -} VisZbuf; // size = 0x10 - -typedef struct { - /* 0x00 */ u32 unk_00; - /* 0x04 */ u32 setScissor; - /* 0x08 */ Color_RGBA8_u32 primColor; - /* 0x0C */ Color_RGBA8_u32 envColor; - /* 0x10 */ u16* tlut; - /* 0x14 */ Gfx* dList; -} VisMono; // size = 0x18 - // TODO: Dedicated Header? #define FRAM_BASE_ADDRESS 0x08000000 // FRAM Base Address in Cart Memory #define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory @@ -471,29 +448,4 @@ typedef enum FramMode { /* 4 */ FRAM_MODE_STATUS } FramMode; -typedef enum { - /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, - /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, - /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments - /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode -} ViModeEditState; - -typedef struct { - /* 0x00 */ OSViMode customViMode; - /* 0x50 */ s32 viHeight; - /* 0x54 */ s32 viWidth; - /* 0x58 */ s32 rightAdjust; - /* 0x5C */ s32 leftAdjust; - /* 0x60 */ s32 lowerAdjust; - /* 0x64 */ s32 upperAdjust; - /* 0x68 */ s32 editState; - /* 0x6C */ s32 tvType; - /* 0x70 */ u32 loRes; - /* 0x74 */ u32 antialiasOff; - /* 0x78 */ u32 modeN; - /* 0x7C */ u32 fb16Bit; - /* 0x80 */ u32 viFeatures; - /* 0x84 */ u32 unk_84; -} ViMode; // size = 0x88 - #endif diff --git a/include/z64vimode.h b/include/z64vimode.h new file mode 100644 index 000000000..48b175196 --- /dev/null +++ b/include/z64vimode.h @@ -0,0 +1,43 @@ +#ifndef Z64_VIMODE_H +#define Z64_VIMODE_H + +#include "ultra64.h" + +struct Input; + +typedef enum { + /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, + /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, + /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments + /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode +} ViModeEditState; + +typedef struct ViMode { + /* 0x00 */ OSViMode customViMode; + /* 0x50 */ s32 viHeight; + /* 0x54 */ s32 viWidth; + /* 0x58 */ s32 rightAdjust; + /* 0x5C */ s32 leftAdjust; + /* 0x60 */ s32 lowerAdjust; + /* 0x64 */ s32 upperAdjust; + /* 0x68 */ s32 editState; + /* 0x6C */ s32 tvType; + /* 0x70 */ u32 loRes; + /* 0x74 */ u32 antialiasOff; + /* 0x78 */ u32 modeN; + /* 0x7C */ u32 fb16Bit; + /* 0x80 */ u32 viFeatures; + /* 0x84 */ u32 unk_84; +} ViMode; // size = 0x88 + +void ViMode_LogPrint(OSViMode* vimode); +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust); +void ViMode_Save(ViMode* viMode); +void ViMode_Load(ViMode* viMode); +void ViMode_Init(ViMode* viMode); +void ViMode_Destroy(ViMode* viMode); +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures); +void ViMode_Update(ViMode* viMode, struct Input* input); + +#endif diff --git a/include/z64viscvg.h b/include/z64viscvg.h new file mode 100644 index 000000000..354cf2a14 --- /dev/null +++ b/include/z64viscvg.h @@ -0,0 +1,18 @@ +#ifndef Z64_VISCVG_H +#define Z64_VISCVG_H + +#include "ultra64.h" +#include "color.h" + +typedef struct VisCvg { + /* 0x0 */ u32 type; + /* 0x4 */ u32 setScissor; + /* 0x8 */ Color_RGBA8_u32 color; + /* 0xC */ Color_RGBA8 envColor; +} VisCvg; // size = 0x10 + +void VisCvg_Init(VisCvg* this); +void VisCvg_Destroy(VisCvg* this); +void VisCvg_Draw(VisCvg* this, Gfx** gfxp); + +#endif diff --git a/include/z64vismono.h b/include/z64vismono.h new file mode 100644 index 000000000..9965034a8 --- /dev/null +++ b/include/z64vismono.h @@ -0,0 +1,20 @@ +#ifndef Z64_VISMONO_H +#define Z64_VISMONO_H + +#include "ultra64.h" +#include "color.h" + +typedef struct VisMono { + /* 0x00 */ u32 unk_00; + /* 0x04 */ u32 setScissor; + /* 0x08 */ Color_RGBA8_u32 primColor; + /* 0x0C */ Color_RGBA8_u32 envColor; + /* 0x10 */ u16* tlut; + /* 0x14 */ Gfx* dList; +} VisMono; // size = 0x18 + +void VisMono_Init(VisMono* this); +void VisMono_Destroy(VisMono* this); +void VisMono_Draw(VisMono* this, Gfx** gfxp); + +#endif diff --git a/include/z64viszbuf.h b/include/z64viszbuf.h new file mode 100644 index 000000000..ea68b34ce --- /dev/null +++ b/include/z64viszbuf.h @@ -0,0 +1,18 @@ +#ifndef Z64_VISZBUF_H +#define Z64_VISZBUF_H + +#include "ultra64.h" +#include "color.h" + +typedef struct VisZbuf { + /* 0x0 */ u32 useRgba; + /* 0x4 */ u32 setScissor; + /* 0x8 */ Color_RGBA8_u32 primColor; + /* 0xC */ Color_RGBA8_u32 envColor; +} VisZbuf; // size = 0x10 + +void VisZbuf_Init(VisZbuf* this); +void VisZbuf_Destroy(VisZbuf* this); +void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer); + +#endif diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index b45b19313..e18223b03 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 30166d785..b2afc3f95 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -42,7 +42,6 @@ #include "fault_internal.h" #include "fault.h" -#include "prevent_bss_reordering.h" #include "global.h" #include "vt.h" #include "stackcheck.h" diff --git a/src/code/game.c b/src/code/game.c index a5e02304c..0884de444 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -1,11 +1,22 @@ #include "global.h" #include "audiomgr.h" #include "idle.h" +#include "sys_cfb.h" #include "system_malloc.h" #include "z64debug_text.h" #include "z64rumble.h" +#include "z64vimode.h" +#include "z64viscvg.h" +#include "z64vismono.h" +#include "z64viszbuf.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +extern UNK_TYPE1 D_801F7FF0; +extern VisCvg sGameVisCvg; +extern VisZbuf sGameVisZbuf; +extern VisMono sGameVisMono; +extern ViMode sGameViMode; + s32 gFramerateDivisor = 1; f32 gFramerateDivisorF = 1.0f; f32 gFramerateDivisorHalf = 1.0f / 2.0f; @@ -28,34 +39,34 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { Gfx* dlist = *gfx; if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) { - D_801F8010.type = R_FB_FILTER_TYPE; - D_801F8010.color.r = R_FB_FILTER_PRIM_COLOR(0); - 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; - VisCvg_Draw(&D_801F8010, &dlist); + sGameVisCvg.type = R_FB_FILTER_TYPE; + sGameVisCvg.color.r = R_FB_FILTER_PRIM_COLOR(0); + sGameVisCvg.color.g = R_FB_FILTER_PRIM_COLOR(1); + sGameVisCvg.color.b = R_FB_FILTER_PRIM_COLOR(2); + sGameVisCvg.color.a = R_FB_FILTER_A; + VisCvg_Draw(&sGameVisCvg, &dlist); } 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); + sGameVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); + sGameVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); + sGameVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1); + sGameVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2); + sGameVisZbuf.primColor.a = R_FB_FILTER_A; + sGameVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0); + sGameVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1); + sGameVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2); + sGameVisZbuf.envColor.a = R_FB_FILTER_A; + VisZbuf_Draw(&sGameVisZbuf, &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); + sGameVisMono.unk_00 = 0; + sGameVisMono.primColor.r = R_FB_FILTER_PRIM_COLOR(0); + sGameVisMono.primColor.g = R_FB_FILTER_PRIM_COLOR(1); + sGameVisMono.primColor.b = R_FB_FILTER_PRIM_COLOR(2); + sGameVisMono.primColor.a = R_FB_FILTER_A; + sGameVisMono.envColor.r = R_FB_FILTER_ENV_COLOR(0); + sGameVisMono.envColor.g = R_FB_FILTER_ENV_COLOR(1); + sGameVisMono.envColor.b = R_FB_FILTER_ENV_COLOR(2); + sGameVisMono.envColor.a = R_FB_FILTER_A; + VisMono_Draw(&sGameVisMono, &dlist); } *gfx = dlist; @@ -209,10 +220,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g init(gameState); - VisCvg_Init(&D_801F8010); - VisZbuf_Init(&sVisZbuf); - VisMono_Init(&sMonoColors); - ViMode_Init(&D_801F8048); + VisCvg_Init(&sGameVisCvg); + VisZbuf_Init(&sGameVisZbuf); + VisMono_Init(&sGameVisMono); + ViMode_Init(&sGameViMode); func_801773A0(&D_801F7FF0); Rumble_Init(); @@ -230,10 +241,10 @@ void GameState_Destroy(GameState* gameState) { Rumble_Destroy(); func_801773C4(&D_801F7FF0); - VisCvg_Destroy(&D_801F8010); - VisZbuf_Destroy(&sVisZbuf); - VisMono_Destroy(&sMonoColors); - ViMode_Destroy(&D_801F8048); + VisCvg_Destroy(&sGameVisCvg); + VisZbuf_Destroy(&sGameVisZbuf); + VisMono_Destroy(&sGameVisMono); + ViMode_Destroy(&sGameViMode); THA_Destroy(&gameState->heap); GameAlloc_Cleanup(&gameState->alloc); } diff --git a/src/code/graph.c b/src/code/graph.c index ce929e6c0..24a554dc2 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -14,6 +14,7 @@ OSTime sGraphTaskStartTime; #include "macros.h" #include "buffers.h" #include "idle.h" +#include "sys_cfb.h" #include "system_malloc.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 29d6e39c4..383a35cc9 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,11 +1,9 @@ -#include "prevent_bss_reordering.h" -#include "global.h" -#include "buffers.h" -#include "system_malloc.h" - -extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; -extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; +#include "z64.h" +#include "regs.h" +#include "functions.h" +#include "macros.h" +// Variables are put before most headers as a hacky way to bypass bss reordering OSViMode sNotebookViMode; // placeholder name void* gFramebuffers[2]; OSViMode* gActiveViMode; @@ -35,6 +33,16 @@ s16 gCfbUpperAdjust; u8 gSysCfbHiResEnabled; +#include "variables.h" +#include "sys_cfb.h" +#include "libc/stdbool.h" +#include "buffers.h" +#include "system_malloc.h" +#include "z64vimode.h" + +extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; +extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; + void SysCfb_SetLoResMode(void) { gFramebuffers[1] = sCfbLoRes1; gFramebuffers[0] = sCfbLoRes0; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 1579c1ff9..ef1ca4b48 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -5,6 +5,7 @@ #include "global.h" #include "fault.h" +#include "sys_cfb.h" #include "loadfragment.h" #include "z64horse.h" #include "z64quake.h" diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index 185373e06..efd492d5c 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -1,4 +1,5 @@ #include "global.h" +#include "sys_cfb.h" typedef enum { /* 0 */ TRANS_CIRCLE_DIR_IN, diff --git a/src/code/z_lights.c b/src/code/z_lights.c index e82c3a9b2..ef1af66f5 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -1,4 +1,5 @@ #include "global.h" +#include "sys_cfb.h" #include "objects/gameplay_keep/gameplay_keep.h" LightsBuffer sLightsBuffer; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index cbbe959e7..cd458e331 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1,4 +1,5 @@ #include "global.h" +#include "sys_cfb.h" #include "z64snap.h" #include "z64view.h" #include "archives/icon_item_static/icon_item_static_yar.h" diff --git a/src/code/z_play.c b/src/code/z_play.c index 2965e0e2e..1d5617850 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,13 +1,33 @@ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "z64.h" +#include "regs.h" +#include "functions.h" +#include "z64vismono.h" + +// Variables are put before most headers as a hacky way to bypass bss reordering +s16 sTransitionFillTimer; +Input D_801F6C18; +TransitionTile sTransitionTile; +s32 gTransitionTileState; +VisMono sPlayVisMono; +Color_RGBA8_u32 gVisMonoColor; +Struct_80140E80 D_801F6D38; +Struct_80140E80* D_801F6D4C; +BombersNotebook sBombersNotebook; +u8 sBombersNotebookOpen; +u8 sMotionBlurStatus; + +#include "variables.h" +#include "macros.h" #include "buffers.h" #include "idle.h" +#include "sys_cfb.h" #include "z64bombers_notebook.h" #include "z64debug_display.h" #include "z64quake.h" #include "z64rumble.h" #include "z64shrink_window.h" #include "z64view.h" + #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" @@ -16,18 +36,6 @@ s32 gDbgCamEnabled = false; u8 D_801D0D54 = false; -s16 sTransitionFillTimer; -Input D_801F6C18; -TransitionTile sTransitionTile; -s32 gTransitionTileState; -VisMono sVisMono; -Color_RGBA8_u32 gVisMonoColor; -Struct_80140E80 D_801F6D38; -Struct_80140E80* D_801F6D4C; -BombersNotebook sBombersNotebook; -u8 sBombersNotebookOpen; -u8 sMotionBlurStatus; - typedef enum { /* 0 */ MOTION_BLUR_OFF, /* 1 */ MOTION_BLUR_SETUP, @@ -406,7 +414,7 @@ void Play_Destroy(GameState* thisx) { ShrinkWindow_Destroy(); TransitionFade_Destroy(&this->unk_18E48); - VisMono_Destroy(&sVisMono); + VisMono_Destroy(&sPlayVisMono); func_80140EA0(D_801F6D4C); D_801F6D4C = NULL; @@ -1227,8 +1235,8 @@ void Play_DrawMain(PlayState* this) { TransitionFade_Draw(&this->unk_18E48, &sp218); if (gVisMonoColor.a != 0) { - sVisMono.primColor.rgba = gVisMonoColor.rgba; - VisMono_Draw(&sVisMono, &sp218); + sPlayVisMono.primColor.rgba = gVisMonoColor.rgba; + VisMono_Draw(&sPlayVisMono, &sp218); } gSPEndDisplayList(sp218++); @@ -2299,7 +2307,7 @@ void Play_Init(GameState* thisx) { TransitionFade_SetType(&this->unk_18E48, 3); TransitionFade_SetColor(&this->unk_18E48, RGBA8(160, 160, 160, 255)); TransitionFade_Start(&this->unk_18E48); - VisMono_Init(&sVisMono); + VisMono_Init(&sPlayVisMono); gVisMonoColor.a = 0; D_801F6D4C = &D_801F6D38; diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 18d483889..1b2572ea8 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -1,4 +1,5 @@ #include "global.h" +#include "sys_cfb.h" #include "z64bombers_notebook.h" #include "interface/schedule_static/schedule_static.h" #include "archives/schedule_dma_static/schedule_dma_static_yar.h" diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index 6aee18baf..a109dab17 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #define FLAGS \ diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 4b5787129..1e25aca8b 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1,4 +1,5 @@ #include "global.h" +#include "sys_cfb.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" Gfx gSetupDLs[SETUPDL_MAX][6] = { diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index b4597a5c2..2daa0ee78 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" s32 sMatAnimStep; diff --git a/src/code/z_skin.c b/src/code/z_skin.c index 0b7c5d5a0..5569c886b 100644 --- a/src/code/z_skin.c +++ b/src/code/z_skin.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64skin.h" diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 3909c7a05..778c89c14 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,4 +1,5 @@ #include "global.h" +#include "z64vimode.h" #include "ultra64/viint.h" typedef struct { diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c index 888fa19b3..1821805ee 100644 --- a/src/code/z_viscvg.c +++ b/src/code/z_viscvg.c @@ -1,4 +1,5 @@ #include "global.h" +#include "z64viscvg.h" Gfx D_801C5DD0[] = { gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | @@ -39,7 +40,7 @@ Gfx D_801C5E00[] = { gsSPBranchList(D_0E000000.fillRect), }; -void VisCvg_Init(struct_801F8010* this) { +void VisCvg_Init(VisCvg* this) { this->type = 0; this->setScissor = false; this->color.r = 255; @@ -48,10 +49,10 @@ void VisCvg_Init(struct_801F8010* this) { this->color.a = 255; } -void VisCvg_Destroy(struct_801F8010* this) { +void VisCvg_Destroy(VisCvg* this) { } -void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) { +void VisCvg_Draw(VisCvg* this, Gfx** gfxp) { Gfx* gfx = *gfxp; gDPPipeSync(gfx++); diff --git a/src/code/z_vismono.c b/src/code/z_vismono.c index b28ed2aa6..86937c315 100644 --- a/src/code/z_vismono.c +++ b/src/code/z_vismono.c @@ -4,6 +4,7 @@ */ #include "global.h" +#include "z64vismono.h" #include "system_malloc.h" // Height of the fragments the color frame buffer (CFB) is split into. diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c index cf603f324..17c734cb0 100644 --- a/src/code/z_viszbuf.c +++ b/src/code/z_viszbuf.c @@ -1,4 +1,7 @@ #include "global.h" +#include "z64viszbuf.h" +#include "sys_cfb.h" +#include "libc/stdbool.h" #define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES)) diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index f8649f4fd..139c1526d 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index 04c432dfd..a65b1185a 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -4,6 +4,7 @@ * Description: Igos du Ikana window - curtains and ray effects */ +#include "prevent_bss_reordering.h" #include "z_boss_06.h" #include "z64shrink_window.h" #include "overlays/actors/ovl_En_Knight/z_en_knight.h" 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 fb7df013f..53e203330 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -4,6 +4,7 @@ * Description: Keaton grass */ +#include "prevent_bss_reordering.h" #include "z_en_kusa2.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" 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 12dc134aa..2e0b17605 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,7 +4,6 @@ * Description: Kafei */ -#include "prevent_bss_reordering.h" #include "z_en_test3.h" #include "objects/object_test3/object_test3.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index 9e11df190..b34dc30d2 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -5,6 +5,7 @@ */ #include "global.h" +#include "sys_cfb.h" #include "z_fbdemo_wipe5.h" #define THIS ((TransitionWipe5*)thisx) 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 374535c3a..e864a27d7 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 @@ -4,7 +4,6 @@ * Description: Pause Menu */ -#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 2774b0ca5..562f4f42b 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -428,7 +428,7 @@ 0x8013EC10 : "z_rumble", 0x8013EE60 : "z_view", 0x80140260 : "z_vimode", - 0x80140CE0 : "code_80140CE0", + 0x80140CE0 : "z_viscvg", 0x80140E80 : "code_80140E80", 0x801418B0 : "z_vismono", 0x801420C0 : "z_viszbuf", @@ -561,7 +561,7 @@ 0x801C5CB0 : "z_skelanime", 0x801C5CD0 : "z_skin_matrix", 0x801C5D10 : "z_sub_s", - 0x801C5DD0 : "code_80140CE0", + 0x801C5DD0 : "z_viscvg", 0x801C5E30 : "z_vr_box", 0x801C5FC0 : "z_sram_NES", 0x801C6A70 : "z_message", diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6a991f1de..f452ba3af 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4014,7 +4014,7 @@ 0x801F6C18:("D_801F6C18","Input","",0x18), 0x801F6C30:("sTransitionTile","TransitionTile","",0xE0), 0x801F6D10:("gTransitionTileState","UNK_TYPE4","",0x4), - 0x801F6D18:("sVisMono","UNK_TYPE1","",0x1), + 0x801F6D18:("sPlayVisMono","VisMono","",0x18), 0x801F6D30:("gVisMonoColor","Color_RGBA8","",0x4), 0x801F6D38:("D_801F6D38","UNK_TYPE1","",0x1), 0x801F6D4C:("D_801F6D4C","UNK_TYPE4","",0x4), @@ -4025,11 +4025,11 @@ 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c), 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), - 0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x1), - 0x801F8010:("D_801F8010","struct_801F8010","",0x10), - 0x801F8020:("sVisZbuf","VisZbuf","",0x10), - 0x801F8030:("sMonoColors","VisMono","",0x18), - 0x801F8048:("D_801F8048","ViMode","",0x88), + 0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x20), + 0x801F8010:("sGameVisCvg","VisCvg","",0x10), + 0x801F8020:("sGameVisZbuf","VisZbuf","",0x10), + 0x801F8030:("sGameVisMono","VisMono","",0x18), + 0x801F8048:("sGameViMode","ViMode","",0x88), 0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc), 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), From b65577de4e8a53b20f729e5bf7628edef2785eb1 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Wed, 9 Aug 2023 23:33:08 -0300 Subject: [PATCH 053/121] document object_fr (#1339) * initial commit of object_fr documentation * fixed unused texture height * format and slight limb name changes * froglimb * removed object .h from actor .c #includes * change eye textur * sIsInitialized * named anim enum values --- assets/xml/objects/object_fr.xml | 127 +++++++++--------- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 43 +++--- src/overlays/actors/ovl_En_Fg/z_en_fg.h | 4 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 31 +++-- .../actors/ovl_En_Minifrog/z_en_minifrog.h | 4 +- 5 files changed, 104 insertions(+), 105 deletions(-) diff --git a/assets/xml/objects/object_fr.xml b/assets/xml/objects/object_fr.xml index f7fa4354b..3262c6782 100644 --- a/assets/xml/objects/object_fr.xml +++ b/assets/xml/objects/object_fr.xml @@ -1,67 +1,68 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 3fecf1861..d1da1ef8d 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -105,18 +105,18 @@ static DamageTable sDamageTable = { typedef enum { /* -1 */ BETAFROG_ANIM_NONE = -1, - /* 0 */ BETAFROG_ANIM_0, - /* 1 */ BETAFROG_ANIM_1, - /* 2 */ BETAFROG_ANIM_2, - /* 3 */ BETAFROG_ANIM_3, + /* 0 */ BETAFROG_ANIM_IDLE, + /* 1 */ BETAFROG_ANIM_IDLE_MORPH, + /* 2 */ BETAFROG_ANIM_DANCE, + /* 3 */ BETAFROG_ANIM_JUMP, /* 4 */ BETAFROG_ANIM_MAX } BetaFrogAnimation; static AnimationInfoS sAnimationInfo[BETAFROG_ANIM_MAX] = { - { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // BETAFROG_ANIM_0 - { &object_fr_Anim_001534, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_1 - { &object_fr_Anim_0011C0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_2 - { &object_fr_Anim_0007BC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // BETAFROG_ANIM_3 + { &gFrogIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // BETAFROG_ANIM_IDLE + { &gFrogIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_IDLE_MORPH + { &gFrogDanceAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // BETAFROG_ANIM_DANCE + { &gFrogJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // BETAFROG_ANIM_JUMP }; s32 EnFg_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { @@ -244,7 +244,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { default: if (DECR(this->timer) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP); - EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_3); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_JUMP); this->actor.velocity.y = 10.0f; this->timer = Rand_S16Offset(30, 30); this->actionFunc = EnFg_Jump; @@ -281,7 +281,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { case BETAFROG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); - EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_IDLE); this->actor.params = BETAFROG_BLACK; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; @@ -302,7 +302,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { } if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_IDLE); this->actionFunc = EnFg_Idle; this->actor.velocity.y = 0.0f; } else { @@ -341,9 +341,8 @@ void EnFg_Init(Actor* thisx, PlayState* play) { EnFg* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_fr_Skel_00B538, NULL, this->jointTable, this->morphTable, - OBJECT_FR_LIMB_MAX); - EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_0); + SkelAnime_InitFlex(play, &this->skelAnime, &gFrogSkel, NULL, this->jointTable, this->morphTable, FROG_LIMB_MAX); + EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_IDLE); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); @@ -385,12 +384,12 @@ void EnFg_Update(Actor* thisx, PlayState* play) { s32 EnFg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFg* this = THIS; - if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { + if ((limbIndex == FROG_LIMB_RIGHT_EYE) || (limbIndex == FROG_LIMB_LEFT_EYE)) { *dList = NULL; } if (this->actor.colChkInfo.health == 0) { - if ((limbIndex == OBJECT_FR_LIMB_05) || (limbIndex == OBJECT_FR_LIMB_09)) { + if ((limbIndex == FROG_LIMB_RIGHT_IRIS) || (limbIndex == FROG_LIMB_LEFT_IRIS)) { *dList = NULL; } } @@ -402,7 +401,7 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, s16 pad; Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; - if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { + if ((limbIndex == FROG_LIMB_RIGHT_EYE) || (limbIndex == FROG_LIMB_LEFT_EYE)) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -414,7 +413,7 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_FR_LIMB_04) { + if (limbIndex == FROG_LIMB_HEAD) { Matrix_MultVec3f(&zeroVec, &this->actor.focus.pos); } } @@ -441,8 +440,8 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, envColor[this->actor.params].r, envColor[this->actor.params].g, envColor[this->actor.params].b, envColor[this->actor.params].a); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(object_fr_Tex_0059A0)); - gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(object_fr_Tex_0059A0)); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gFrogIrisOpenTex)); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(gFrogIrisOpenTex)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFg_OverrideLimbDraw, EnFg_PostLimbDraw, &this->actor); @@ -501,7 +500,7 @@ void EnFg_DrawDust(PlayState* play, BetaFrogEffectDust* dustEffect) { if (!firstDone) { POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); + gSPDisplayList(POLY_XLU_DISP++, gFrogDustMaterialDL); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); firstDone = true; } @@ -515,7 +514,7 @@ void EnFg_DrawDust(PlayState* play, BetaFrogEffectDust* dustEffect) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); index = 0.5f * dustEffect->timer; gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338); + gSPDisplayList(POLY_XLU_DISP++, gFrogDustModelDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.h b/src/overlays/actors/ovl_En_Fg/z_en_fg.h index 4f4f84fe0..42d4936ee 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.h +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.h @@ -34,8 +34,8 @@ typedef struct EnFg { /* 0x144 */ EnFgActionFunc actionFunc; /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ ColliderCylinder collider; - /* 0x1D8 */ Vec3s jointTable[OBJECT_FR_LIMB_MAX]; - /* 0x268 */ Vec3s morphTable[OBJECT_FR_LIMB_MAX]; + /* 0x1D8 */ Vec3s jointTable[FROG_LIMB_MAX]; + /* 0x268 */ Vec3s morphTable[FROG_LIMB_MAX]; /* 0x2F8 */ s16 timer; /* 0x2FA */ s16 bounceCounter; /* 0x2FC */ BetaFrogEffectDust dustEffect[10]; 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 e6a80e00b..3ea137783 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -59,10 +59,9 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 1, 12, 14, MASS_IMMOVABLE }; -// sEyeTextures??? -static TexturePtr D_808A4D74[] = { - object_fr_Tex_0059A0, - object_fr_Tex_005BA0, +static TexturePtr sEyeTextures[] = { + gFrogIrisOpenTex, + gFrogIrisClosedTex, }; static u16 sIsFrogReturnedFlags[] = { @@ -85,14 +84,14 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_fr_Skel_00B538, &object_fr_Anim_001534, this->jointTable, - this->morphTable, OBJECT_FR_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gFrogSkel, &gFrogIdleAnim, this->jointTable, this->morphTable, + FROG_LIMB_MAX); CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (!sIsInitialized) { - for (i = 0; i < ARRAY_COUNT(D_808A4D74); i++) { - D_808A4D74[i] = Lib_SegmentedToVirtual(D_808A4D74[i]); + for (i = 0; i < ARRAY_COUNT(sEyeTextures); i++) { + sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]); } sIsInitialized = true; } @@ -172,7 +171,7 @@ EnMinifrog* EnMinifrog_GetFrog(PlayState* play) { void EnMinifrog_SetJumpState(EnMinifrog* this) { if (this->jumpState == FROG_STATE_GROUND) { this->jumpState = FROG_STATE_JUMP; - Animation_Change(&this->skelAnime, &object_fr_Anim_0007BC, 1.0f, 0.0f, 7.0f, ANIMMODE_ONCE, -5.0f); + Animation_Change(&this->skelAnime, &gFrogJumpAnim, 1.0f, 0.0f, 7.0f, ANIMMODE_ONCE, -5.0f); } } @@ -200,7 +199,7 @@ void EnMinifrog_Jump(EnMinifrog* this) { case FROG_STATE_AIR: if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->jumpState = FROG_STATE_GROUND; - Animation_MorphToLoop(&this->skelAnime, &object_fr_Anim_001534, -2.5f); + Animation_MorphToLoop(&this->skelAnime, &gFrogIdleAnim, -2.5f); SkelAnime_Update(&this->skelAnime); } break; @@ -616,11 +615,11 @@ void EnMinifrog_UpdateMissingFrog(Actor* thisx, PlayState* play) { } s32 EnMinifrog_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { - if (limbIndex == OBJECT_FR_LIMB_01) { + if (limbIndex == FROG_LIMB_LOWER_BODY) { pos->z -= 500.0f; } - if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { + if ((limbIndex == FROG_LIMB_RIGHT_EYE) || (limbIndex == FROG_LIMB_LEFT_EYE)) { *dList = NULL; } @@ -630,7 +629,7 @@ s32 EnMinifrog_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnMinifrog* this = THIS; - if ((limbIndex == OBJECT_FR_LIMB_07) || (limbIndex == OBJECT_FR_LIMB_08)) { + if ((limbIndex == FROG_LIMB_RIGHT_EYE) || (limbIndex == FROG_LIMB_LEFT_EYE)) { OPEN_DISPS(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); @@ -640,7 +639,7 @@ void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_FR_LIMB_04) { + if (limbIndex == FROG_LIMB_HEAD) { Matrix_MultZero(&this->actor.focus.pos); } } @@ -661,8 +660,8 @@ void EnMinifrog_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); envColor = &sFrogEnvColors[this->frogIndex]; - gSPSegment(POLY_OPA_DISP++, 0x08, D_808A4D74[0]); - gSPSegment(POLY_OPA_DISP++, 0x09, D_808A4D74[0]); + gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[0]); + gSPSegment(POLY_OPA_DISP++, 0x09, sEyeTextures[0]); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, envColor->a); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMinifrog_OverrideLimbDraw, EnMinifrog_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h index 5f1fd80b5..a2752c830 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h @@ -28,8 +28,8 @@ typedef enum { typedef struct EnMinifrog { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[OBJECT_FR_LIMB_MAX]; - /* 0x218 */ Vec3s morphTable[OBJECT_FR_LIMB_MAX]; + /* 0x188 */ Vec3s jointTable[FROG_LIMB_MAX]; + /* 0x218 */ Vec3s morphTable[FROG_LIMB_MAX]; /* 0x2A8 */ EnMinifrogActionFunc actionFunc; /* 0x2AC */ struct EnMinifrog* frog; /* 0x2B0 */ s16 frogIndex; From e1e30586c9d254fe958e928f1584e089c9011f65 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 10 Aug 2023 17:58:20 -0700 Subject: [PATCH 054/121] Fix first_diff and sym_info for older and new ld (#1342) * Fix map parsing for ld >= 2.40 * mapfile_parser * Paths * mapfile_parser requirement * Move tools back * Comment * Add ability to decode instructions for first_diff * import error for mapfile_parser * PR comments from OOT * ,s --- first_diff.py | 271 +++++++---------------------------------------- requirements.txt | 3 + sym_info.py | 144 +++---------------------- tools/assist.py | 12 ++- 4 files changed, 65 insertions(+), 365 deletions(-) diff --git a/first_diff.py b/first_diff.py index 7a3ea6f1d..766161153 100755 --- a/first_diff.py +++ b/first_diff.py @@ -1,255 +1,58 @@ #!/usr/bin/env python3 import argparse -import os.path -from subprocess import check_call +from pathlib import Path -parser = argparse.ArgumentParser( - description="Find the first difference(s) between the built ROM and the base ROM." -) -parser.add_argument( - "-c", - "--count", - type=int, - default=5, - help="find up to this many instruction difference(s)", -) -parser.add_argument( - "-d", - "--diff", - dest="diff_args", - nargs="?", - action="store", - default=False, - const="prompt", - help="run diff.py on the result with the provided arguments" -) -parser.add_argument( - "-m", "--make", help="run make before finding difference(s)", action="store_true" -) -args = parser.parse_args() - -diff_count = args.count - -if args.make: - check_call(["make", "-j4", "COMPARE=0"]) - -baseimg = f"baserom_uncompressed.z64" -basemap = f"expected/build/mm.map" - -myimg = f"mm.us.rev1.rom_uncompressed.z64" -mymap = f"build/mm.map" - -if not os.path.isfile(baseimg): - print(f"{baseimg} must exist.") - exit(1) -if not os.path.isfile(myimg) or not os.path.isfile(mymap): - print(f"{myimg} and {mymap} must exist.") +try: + import rabbitizer +except ImportError: + print("Missing dependency rabbitizer, install it with `python3 -m pip install 'rabbitizer>=1.0.0,<2.0.0'`") exit(1) -mybin = open(myimg, "rb").read() -basebin = open(baseimg, "rb").read() - -if len(mybin) != len(basebin): - print("Modified ROM has different size...") +try: + import mapfile_parser +except ImportError: + print("Missing dependency mapfile_parser, install it with `python3 -m pip install 'mapfile-parser>=1.2.1,<2.0.0'`") exit(1) -if mybin == basebin: - print("No differences!") - exit(0) +def decodeInstruction(bytesDiff: bytes, mapFile: mapfile_parser.MapFile) -> str: + word = (bytesDiff[0] << 24) | (bytesDiff[1] << 16) | (bytesDiff[2] << 8) | (bytesDiff[3] << 0) + instr = rabbitizer.Instruction(word) + immOverride = None -def search_rom_address(target_addr): - ram_offset = None - prev_ram = 0 - prev_rom = 0 - prev_sym = "" - cur_file = "" - prev_file = cur_file - prev_line = "" - with open(mymap) as f: - for line in f: - if "load address" in line: - # Ignore .bss sections since we're looking for a ROM address - if ".bss" in line or ".bss" in prev_line: - ram_offset = None - continue - ram = int(line[16 : 16 + 18], 0) - rom = int(line[59 : 59 + 18], 0) - ram_offset = ram - rom - continue + if instr.isJumpWithAddress(): + # Instruction is a function call (jal) - prev_line = line + # Get the embedded address of the function call + symAddress = instr.getInstrIndexAsVram() - if ( - ram_offset is None - or "=" in line - or "*fill*" in line - or " 0x" not in line - ): - continue + # Search for the address in the mapfile + symInfo = mapFile.findSymbolByVramOrVrom(symAddress) + if symInfo is not None: + # Use the symbol from the mapfile instead of a raw value + immOverride = symInfo.symbol.name - ram = int(line[16 : 16 + 18], 0) - rom = ram - ram_offset - sym = line.split()[-1] + return instr.disassemble(immOverride=immOverride, extraLJust=-20) - if "0x" in sym and "/" not in sym: - ram_offset = None - continue - if "/" in sym: - cur_file = sym - continue +def firstDiffMain(): + parser = argparse.ArgumentParser(description="Find the first difference(s) between the built ROM and the base ROM.") - if rom > target_addr: - return f"{prev_sym} (RAM 0x{prev_ram:X}, ROM 0x{prev_rom:X}, {prev_file})" + parser.add_argument("-c", "--count", type=int, default=5, help="find up to this many instruction difference(s)") + parser.add_argument("-v", "--version", help="Which version should be processed", default="us.rev1") + parser.add_argument("-a", "--add-colons", action='store_true', help="Add colon between bytes" ) - prev_ram = ram - prev_rom = rom - prev_sym = sym - prev_file = cur_file + args = parser.parse_args() - return "at end of rom?" + buildFolder = Path("build") + BUILTROM = Path(f"mm.{args.version}.rom_uncompressed.z64") + BUILTMAP = buildFolder / f"mm.map" -def parse_map(map_fname): - ram_offset = None - cur_file = "" - syms = {} - prev_sym = None - prev_line = "" - with open(map_fname) as f: - for line in f: - if "load address" in line: - ram = int(line[16 : 16 + 18], 0) - rom = int(line[59 : 59 + 18], 0) - ram_offset = ram - rom - continue + EXPECTEDROM = Path("baserom_uncompressed.z64") + EXPECTEDMAP = "expected" / BUILTMAP - prev_line = line + mapfile_parser.frontends.first_diff.doFirstDiff(BUILTMAP, EXPECTEDMAP, BUILTROM, EXPECTEDROM, args.count, mismatchSize=True, addColons=args.add_colons, bytesConverterCallback=decodeInstruction) - if ( - ram_offset is None - or "=" in line - or "*fill*" in line - or " 0x" not in line - ): - continue - - ram = int(line[16 : 16 + 18], 0) - rom = ram - ram_offset - sym = line.split()[-1] - - if "0x" in sym and "/" not in sym: - ram_offset = None - continue - elif "/" in sym: - cur_file = sym - continue - - syms[sym] = (rom, cur_file, prev_sym, ram) - prev_sym = sym - - return syms - - -def map_diff(): - map1 = parse_map(mymap) - map2 = parse_map(basemap) - min_ram = None - found = None - for sym, addr in map1.items(): - if sym not in map2: - continue - if addr[0] != map2[sym][0]: - if min_ram is None or addr[0] < min_ram: - min_ram = addr[0] - found = (sym, addr[1], addr[2]) - if min_ram is None: - return False - else: - print( - f"Map appears to have shifted just before {found[0]} ({found[1]}) -- in {found[2]}?" - ) - if found[2] is not None and found[2] not in map2: - print( - f"(Base map file {basemap} out of date due to new or renamed symbols, so result may be imprecise.)" - ) - return True - - -def hexbytes(bs): - return ":".join("{:02X}".format(c) for c in bs) - - -found_instr_diff = [] -map_search_diff = [] -diffs = 0 -shift_cap = 1000 -for i in range(24, len(mybin), 4): - # (mybin[i:i+4] != basebin[i:i+4], but that's slightly slower in CPython...) - if diffs <= shift_cap and ( - mybin[i] != basebin[i] - or mybin[i + 1] != basebin[i + 1] - or mybin[i + 2] != basebin[i + 2] - or mybin[i + 3] != basebin[i + 3] - ): - if diffs == 0: - print(f"First difference at ROM addr 0x{i:X}, {search_rom_address(i)}") - print( - f"Bytes: {hexbytes(mybin[i : i + 4])} vs {hexbytes(basebin[i : i + 4])}" - ) - diffs += 1 - if ( - len(found_instr_diff) < diff_count - and mybin[i] >> 2 != basebin[i] >> 2 - and not search_rom_address(i) in map_search_diff - ): - found_instr_diff.append(i) - map_search_diff.append(search_rom_address(i)) - -if diffs == 0: - print("No differences but ROMs differ?") - exit() - -if len(found_instr_diff) > 0: - for i in found_instr_diff: - print(f"Instruction difference at ROM addr 0x{i:X}, {search_rom_address(i)}") - print( - f"Bytes: {hexbytes(mybin[i : i + 4])} vs {hexbytes(basebin[i : i + 4])}" - ) -print() - -definite_shift = diffs > shift_cap -if definite_shift: - print(f"Over {shift_cap} differing words, must be a shifted ROM.") -else: - print(f"{diffs} differing word(s).") - -if diffs > 100: - if not os.path.isfile(basemap): - print( - f"To find ROM shifts, copy a clean .map file to {basemap} and rerun this script." - ) - elif not map_diff(): - print(f"No ROM shift{' (!?)' if definite_shift else ''}") - -if args.diff_args: - if len(found_instr_diff) < 1: - print(f"No instruction difference to run diff.py on") - exit() - - diff_sym = search_rom_address(found_instr_diff[0]).split()[0] - if args.diff_args == "prompt": - diff_args = input("Call diff.py with which arguments? ") or "--" - else: - diff_args = args.diff_args - if diff_args[0] != "-": - diff_args = "-" + diff_args - check_call( - [ - "python3", - "diff.py", - diff_args, - diff_sym, - ] - ) +if __name__ == "__main__": + firstDiffMain() diff --git a/requirements.txt b/requirements.txt index 6b391b170..4da9e11f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,3 +13,6 @@ watchdog>=0.10.2 argcomplete python-Levenshtein cxxfilt + +# map parsing +mapfile-parser>=1.2.1,<2.0.0 diff --git a/sym_info.py b/sym_info.py index 17849a953..8578b2812 100755 --- a/sym_info.py +++ b/sym_info.py @@ -1,139 +1,29 @@ #!/usr/bin/env python3 import argparse -import os.path +from pathlib import Path -parser = argparse.ArgumentParser( - description="Display various information about a symbol or address." -) -parser.add_argument( - "name", - type=str, - default="", - help="symbol name or VROM/VRAM address to lookup" -) -parser.add_argument( - "-e", - "--expected", - dest="use_expected", - action="store_true", - help="use the map file in expected/build/ instead of build/" -) -args = parser.parse_args() - -mymap = "build/mm.map" -if args.use_expected: - mymap = f"expected/{mymap}" - -if not os.path.isfile(mymap): - print(f"{mymap} must exist.") +try: + import mapfile_parser +except ImportError: + print("Missing dependency mapfile_parser, install it with `python3 -m pip install 'mapfile-parser>=1.2.1,<2.0.0'`") exit(1) -def search_address(target_addr): - is_ram = target_addr & 0x80000000 - ram_offset = None - prev_ram = 0 - prev_rom = 0 - prev_sym = "" - cur_file = "" - prev_file = cur_file - prev_line = "" - with open(mymap) as f: - for line in f: - if "load address" in line: - # Ignore .bss sections if we're looking for a ROM address - if not is_ram and (".bss" in line or ".bss" in prev_line): - ram_offset = None - continue - ram = int(line[16 : 16 + 18], 0) - rom = int(line[59 : 59 + 18], 0) - ram_offset = ram - rom - continue +def symInfoMain(): + parser = argparse.ArgumentParser(description="Display various information about a symbol or address.") + parser.add_argument("symname", help="symbol name or VROM/VRAM address to lookup") + parser.add_argument("-e", "--expected", dest="use_expected", action="store_true", help="use the map file in expected/build/ instead of build/") - prev_line = line + args = parser.parse_args() - if ( - ram_offset is None - or "=" in line - or "*fill*" in line - or " 0x" not in line - ): - continue + BUILTMAP = Path(f"build") / f"mm.map" - ram = int(line[16 : 16 + 18], 0) - rom = ram - ram_offset - sym = line.split()[-1] + mapPath = BUILTMAP + if args.use_expected: + mapPath = "expected" / BUILTMAP - if "0x" in sym and "/" not in sym: - ram_offset = None - continue - if "/" in sym: - cur_file = sym - continue + mapfile_parser.frontends.sym_info.doSymInfo(mapPath, args.symname) - if rom == target_addr or (is_ram and ram == target_addr): - return f"{sym} (VRAM 0x{ram:X}, VROM 0x{rom:X}, {cur_file})" - if rom > target_addr or (is_ram and ram > target_addr): - offset = target_addr - prev_ram if is_ram else target_addr - prev_rom - return f"at 0x{offset:X} bytes inside {prev_sym} (VRAM 0x{prev_ram:X}, VROM 0x{prev_rom:X}, {prev_file})" - - prev_ram = ram - prev_rom = rom - prev_sym = sym - prev_file = cur_file - - return "at end of rom?" - - -def search_symbol(target_sym): - ram_offset = None - cur_file = "" - prev_line = "" - with open(mymap) as f: - for line in f: - if "load address" in line: - ram = int(line[16 : 16 + 18], 0) - rom = int(line[59 : 59 + 18], 0) - ram_offset = ram - rom - continue - - prev_line = line - - if ( - ram_offset is None - or "=" in line - or "*fill*" in line - or " 0x" not in line - ): - continue - - ram = int(line[16 : 16 + 18], 0) - rom = ram - ram_offset - sym = line.split()[-1] - - if "0x" in sym and "/" not in sym: - ram_offset = None - continue - elif "/" in sym: - cur_file = sym - continue - - if sym == target_sym: - return (rom, cur_file, ram) - - return None - - -try: - target_addr = int(args.name, 0) - print(args.name, "is", search_address(target_addr)) -except ValueError: - sym_info = search_symbol(args.name) - if sym_info is not None: - sym_rom = sym_info[0] - sym_file = sym_info[1] - sym_ram = sym_info[2] - print(f"Symbol {args.name} (VRAM: 0x{sym_ram:08X}, VROM: 0x{sym_rom:06X}, {sym_file})") - else: - print(f"Symbol {args.name} not found in map file {mymap}") +if __name__ == "__main__": + symInfoMain() diff --git a/tools/assist.py b/tools/assist.py index 7a05fde67..7381c85a7 100755 --- a/tools/assist.py +++ b/tools/assist.py @@ -1,8 +1,12 @@ #!/usr/bin/env python3 -import argparse, os, sys +import argparse +import os +import sys from collections import OrderedDict +gAddressWidth = 18 # if your ld >= 2.40 change this to 10 + script_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = script_dir + "/../" asm_dir = root_dir + "asm/non_matchings/overlays" @@ -50,8 +54,8 @@ def parse_map(fname): if "noload" in line or "noload" in prev_line: ram_offset = None continue - ram = int(line[16 : 16 + 18], 0) - rom = int(line[59 : 59 + 18], 0) + ram = int(line[16 : 16 + gAddressWidth], 0) + rom = int(line[16 + gAddressWidth + 25 : 16 + gAddressWidth + 25 + gAddressWidth], 0) ram_offset = ram - rom continue prev_line = line @@ -63,7 +67,7 @@ def parse_map(fname): or " 0x" not in line ): continue - ram = int(line[16 : 16 + 18], 0) + ram = int(line[16 : 16 + gAddressWidth], 0) rom = ram - ram_offset fn = line.split()[-1] if "0x" in fn: From 2f1996a526d72d46862d70701b6d7791acb0519a Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 11 Aug 2023 11:26:29 +1000 Subject: [PATCH 055/121] Animation Cleanup: En_E* (#1331) * begin E * more cleanup * limb index * small cleanup * format * PR Review * sLimbToBodyParts * more bodypart cleanup --- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 39 +++++-- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 39 +++++-- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 49 +++++--- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 38 +++--- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 55 +++++---- .../actors/ovl_En_Bombal/z_en_bombal.c | 68 +++++------ src/overlays/actors/ovl_En_Egol/z_en_egol.c | 100 ++++++++++------ src/overlays/actors/ovl_En_Egol/z_en_egol.h | 2 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 10 +- src/overlays/actors/ovl_En_Elf/z_en_elf.h | 5 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 6 + .../actors/ovl_En_Elforg/z_en_elforg.c | 6 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 3 + .../actors/ovl_En_Encount2/z_en_encount2.c | 81 ++++++------- .../actors/ovl_En_Encount4/z_en_encount4.c | 22 ++-- .../ovl_En_Ending_Hero/z_en_ending_hero.c | 19 ++- .../ovl_En_Ending_Hero/z_en_ending_hero.h | 7 +- .../ovl_En_Ending_Hero2/z_en_ending_hero2.c | 17 ++- .../ovl_En_Ending_Hero2/z_en_ending_hero2.h | 7 +- .../ovl_En_Ending_Hero3/z_en_ending_hero3.c | 17 ++- .../ovl_En_Ending_Hero3/z_en_ending_hero3.h | 7 +- .../ovl_En_Ending_Hero4/z_en_ending_hero4.c | 17 ++- .../ovl_En_Ending_Hero4/z_en_ending_hero4.h | 7 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 19 ++- .../ovl_En_Ending_Hero5/z_en_ending_hero5.h | 7 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 109 ++++++++++++------ .../ovl_En_Ending_Hero6/z_en_ending_hero6.h | 20 +++- .../actors/ovl_En_Estone/z_en_estone.c | 2 +- tools/disasm/functions.txt | 22 ++-- tools/disasm/variables.txt | 4 +- 30 files changed, 480 insertions(+), 324 deletions(-) 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 f6e2eb5d5..937ab3749 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -124,8 +124,23 @@ static InitChainEntry sInitChain[] = { * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the * limb is not part of the bodyParts arrays. */ -static s8 sLimbIndexToBodyPartsIndex[BUBBLE_LIMB_MAX] = { - -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, 2, -1, 3, +static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { + -1, // BUBBLE_LIMB_NONE + -1, // BUBBLE_LIMB_ROOT + -1, // BUBBLE_LIMB_CRANIUM_ROOT + -1, // BUBBLE_LIMB_JAW_ROOT + 0, // BUBBLE_LIMB_JAW + -1, // BUBBLE_LIMB_LEFT_WING_ROOT + -1, // BUBBLE_LIMB_LEFT_WING_WRAPPER + -1, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT + 1, // BUBBLE_LIMB_LEFT_WING_WEBBING + -1, // BUBBLE_LIMB_LEFT_WING_BONE + -1, // BUBBLE_LIMB_RIGHT_WING_ROOT + -1, // BUBBLE_LIMB_RIGHT_WING_WRAPPER + -1, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT + 2, // BUBBLE_LIMB_RIGHT_WING_WEBBING + -1, // BUBBLE_LIMB_RIGHT_WING_BONE + 3, // BUBBLE_LIMB_CRANIUM }; /** @@ -637,32 +652,32 @@ void EnBb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, MtxF* currentMatrixState; if (this->bodyPartDrawStatus == BB_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { - if (sLimbIndexToBodyPartsIndex[limbIndex] == 0) { + if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] == 0) { Matrix_MultVecX(1000.0f, &this->bodyPartsPos[0]); - } else if (sLimbIndexToBodyPartsIndex[limbIndex] == 3) { + } else if (sLimbToBodyParts[limbIndex] == 3) { Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[3]); Matrix_MultVec3f(&sDuplicateCraniumBodyPartOffset, &this->bodyPartsPos[4]); } else { - Matrix_MultZero(&this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]]); + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } } } else if (this->bodyPartDrawStatus > BB_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { - Matrix_MultZero(&this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != -1) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == BUBBLE_LIMB_CRANIUM) { this->bodyPartDrawStatus = BB_BODY_PART_DRAW_STATUS_BROKEN; } } else { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != -1) { OPEN_DISPS(play->state.gfxCtx); currentMatrixState = Matrix_GetCurrent(); - currentMatrixState->mf[3][0] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].x; - currentMatrixState->mf[3][1] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].y; - currentMatrixState->mf[3][2] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].z; + currentMatrixState->mf[3][0] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].x; + currentMatrixState->mf[3][1] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].y; + currentMatrixState->mf[3][2] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].z; Matrix_RotateZS(thisx->world.rot.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++, this->limbDList); 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 d9fb276c5..8a9a9142f 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -153,8 +153,23 @@ static InitChainEntry sInitChain[] = { * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the * limb is not part of the bodyParts arrays. */ -static s8 sLimbIndexToBodyPartsIndex[BUBBLE_LIMB_MAX] = { - -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, 2, -1, 3, +static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { + -1, // BUBBLE_LIMB_NONE + -1, // BUBBLE_LIMB_ROOT + -1, // BUBBLE_LIMB_CRANIUM_ROOT + -1, // BUBBLE_LIMB_JAW_ROOT + 0, // BUBBLE_LIMB_JAW + -1, // BUBBLE_LIMB_LEFT_WING_ROOT + -1, // BUBBLE_LIMB_LEFT_WING_WRAPPER + -1, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT + 1, // BUBBLE_LIMB_LEFT_WING_WEBBING + -1, // BUBBLE_LIMB_LEFT_WING_BONE + -1, // BUBBLE_LIMB_RIGHT_WING_ROOT + -1, // BUBBLE_LIMB_RIGHT_WING_WRAPPER + -1, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT + 2, // BUBBLE_LIMB_RIGHT_WING_WEBBING + -1, // BUBBLE_LIMB_RIGHT_WING_BONE + 3, // BUBBLE_LIMB_CRANIUM }; /** @@ -673,32 +688,32 @@ void EnBbfall_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r MtxF* currentMatrixState; if (this->bodyPartDrawStatus == BBFALL_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { - if (sLimbIndexToBodyPartsIndex[limbIndex] == 0) { + if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] == 0) { Matrix_MultVecX(1000.0f, &this->bodyPartsPos[0]); - } else if (sLimbIndexToBodyPartsIndex[limbIndex] == 3) { + } else if (sLimbToBodyParts[limbIndex] == 3) { Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[3]); Matrix_MultVec3f(&sDuplicateCraniumBodyPartOffset, &this->bodyPartsPos[4]); } else { - Matrix_MultZero(&this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]]); + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } } } else if (this->bodyPartDrawStatus > BBFALL_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { - Matrix_MultZero(&this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != -1) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == BUBBLE_LIMB_CRANIUM) { this->bodyPartDrawStatus = BBFALL_BODY_PART_DRAW_STATUS_BROKEN; } } else { - if (sLimbIndexToBodyPartsIndex[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != -1) { OPEN_DISPS(play->state.gfxCtx); currentMatrixState = Matrix_GetCurrent(); - currentMatrixState->mf[3][0] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].x; - currentMatrixState->mf[3][1] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].y; - currentMatrixState->mf[3][2] = this->bodyPartsPos[sLimbIndexToBodyPartsIndex[limbIndex]].z; + currentMatrixState->mf[3][0] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].x; + currentMatrixState->mf[3][1] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].y; + currentMatrixState->mf[3][2] = this->bodyPartsPos[sLimbToBodyParts[limbIndex]].z; Matrix_RotateZS(thisx->world.rot.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++, this->limbDList); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 0323e29c7..49aa89d83 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -627,26 +627,47 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec return false; } +static s8 sLimbToBodyParts[BIGOKUTA_LIMB_MAX] = { + -1, // BIGOKUTA_LIMB_NONE + -1, // BIGOKUTA_LIMB_BODY + -1, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_BASE + 0, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_END + -1, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_BASE + 1, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_END + -1, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_BASE + 2, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_END + -1, // BIGOKUTA_LIMB_LEFT_BACK_ARM_BASE + 3, // BIGOKUTA_LIMB_LEFT_BACK_ARM_END + 8, // BIGOKUTA_LIMB_HEAD + 4, // BIGOKUTA_LIMB_LEFT_TENTACLE_BASE + -1, // BIGOKUTA_LIMB_LEFT_TENTACLE_TIP + 5, // BIGOKUTA_LIMB_RIGHT_TENTACLE_BASE + -1, // BIGOKUTA_LIMB_RIGHT_TENTACLE_TIP + -1, // BIGOKUTA_LIMB_LEFT_WEAK_POINT + -1, // BIGOKUTA_LIMB_RIGHT_WEAK_POINT + -1, // BIGOKUTA_LIMB_CENTER_SNOUT + 6, // BIGOKUTA_LIMB_RIGHT_SNOUT + 7, // BIGOKUTA_LIMB_LEFT_SNOUT +}; + +static Vec3f D_80AC45D0[] = { + { 0.0f, 2000.0f, 1000.0f }, { 0.0f, 2000.0f, -2000.0f }, { 1700.0f, 700.0f, -600.0f }, + { -1700.0f, 700.0f, -600.0f }, { 0.0f, 500.0f, -2500.0f }, +}; + void EnBigokuta_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { - static s8 D_80AC45BC[BIGOKUTA_LIMB_MAX] = { - -1, -1, -1, 0, -1, 1, -1, 2, -1, 3, 8, 4, -1, 5, -1, -1, -1, -1, 6, 7, - }; - static Vec3f D_80AC45D0[] = { - { 0.0f, 2000.0f, 1000.0f }, { 0.0f, 2000.0f, -2000.0f }, { 1700.0f, 700.0f, -600.0f }, - { -1700.0f, 700.0f, -600.0f }, { 0.0f, 500.0f, -2500.0f }, - }; EnBigokuta* this = THIS; s32 i; - s8 limbPosIndex = D_80AC45BC[limbIndex]; + s8 bodyPartIndex = sLimbToBodyParts[limbIndex]; - if (limbPosIndex != -1) { - if (limbPosIndex < 6) { - Matrix_MultVecX(800.0f, &this->limbPos[limbPosIndex]); - } else if (limbPosIndex < 8) { - Matrix_MultZero(&this->limbPos[limbPosIndex]); + if (bodyPartIndex != -1) { + if (bodyPartIndex < 6) { + Matrix_MultVecX(800.0f, &this->limbPos[bodyPartIndex]); + } else if (bodyPartIndex < 8) { + Matrix_MultZero(&this->limbPos[bodyPartIndex]); } else { for (i = 0; i < ARRAY_COUNT(D_80AC45D0); i++) { - Matrix_MultVec3f(&D_80AC45D0[i], &this->limbPos[limbPosIndex + i]); + Matrix_MultVec3f(&D_80AC45D0[i], &this->limbPos[bodyPartIndex + i]); } } } 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 4752db039..e4fa338ce 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -160,9 +160,17 @@ static InitChainEntry sInitChain[] = { // used in the burning death actionfunc static Vec3f D_80B6506C = { 0.0f, 3.0f, 0.0f }; -// bytes per limb, used in draw func? bit over my head -static u8 D_80B65078[BIG_POE_LIMB_MAX] = { - -1, 4, -1, 0, -1, 1, -1, 2, 5, 3, +static u8 sLimbToBodyParts[BIG_POE_LIMB_MAX] = { + -1, // BIG_POE_LIMB_NONE + 4, // BIG_POE_LIMB_FACE + -1, // BIG_POE_LIMB_LEFT_UPPER_ARM + 0, // BIG_POE_LIMB_LEFT_FOREARM + -1, // BIG_POE_LIMB_RIGHT_UPPER_ARM + 1, // BIG_POE_LIMB_RIGHT_FOREARM + -1, // BIG_POE_LIMB_RIGHT_HAND + 2, // BIG_POE_LIMB_LANTERN + 5, // BIG_POE_LIMB_HAT_AND_CLOAK + 3, // BIG_POE_LIMB_LOWER_ROBE }; // used in limbdraw @@ -1232,7 +1240,7 @@ s32 EnBigpo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnBigpo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnBigpo* this = THIS; - s8 limbByte; + s8 bodyPartIndex; Vec3f* v1ptr; // todo: figure out better names Vec3f* v2ptr; Vec3f unusedVec; @@ -1258,20 +1266,20 @@ void EnBigpo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro Matrix_Get(&this->drawMtxF); } - limbByte = D_80B65078[limbIndex]; - if (limbByte != -1) { - if (limbByte < 3) { - Matrix_MultZero(&this->limbPos[limbByte]); - } else if (limbByte == 3) { - Matrix_MultVecX(3000.0f, &this->limbPos[limbByte]); - } else if (limbByte == 4) { - Matrix_MultVecY(-2000.0f, &this->limbPos[limbByte]); + bodyPartIndex = sLimbToBodyParts[limbIndex]; + if (bodyPartIndex != -1) { + if (bodyPartIndex < 3) { + Matrix_MultZero(&this->limbPos[bodyPartIndex]); + } else if (bodyPartIndex == 3) { + Matrix_MultVecX(3000.0f, &this->limbPos[bodyPartIndex]); + } else if (bodyPartIndex == 4) { + Matrix_MultVecY(-2000.0f, &this->limbPos[bodyPartIndex]); } else { - v2ptr = &this->limbPos[limbByte + 1]; + v2ptr = &this->limbPos[bodyPartIndex + 1]; v1ptr = D_80B65084; - Matrix_MultVecX(-4000.0f, &this->limbPos[limbByte]); + Matrix_MultVecX(-4000.0f, &this->limbPos[bodyPartIndex]); - for (i = limbByte + 1; i < ARRAY_COUNT(this->limbPos); i++) { + for (i = bodyPartIndex + 1; i < ARRAY_COUNT(this->limbPos); i++) { Matrix_MultVec3f(v1ptr, v2ptr); v2ptr++; v1ptr++; 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 ff4c54559..78c5123cb 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -3033,26 +3033,37 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { EnBigslime_DrawGekko(&this->actor, play); } +static s8 sLimbToBodyParts[GEKKO_LIMB_MAX] = { + -1, // GEKKO_LIMB_NONE + -1, // GEKKO_LIMB_ROOT + 0, // GEKKO_LIMB_WAIST + -1, // GEKKO_LIMB_LEFT_THIGH + 1, // GEKKO_LIMB_LEFT_SHIN + -1, // GEKKO_LIMB_LEFT_ANKLE + 2, // GEKKO_LIMB_LEFT_FOOT + -1, // GEKKO_LIMB_RIGHT_THIGH + 3, // GEKKO_LIMB_RIGHT_SHIN + -1, // GEKKO_LIMB_RIGHT_ANKLE + 4, // GEKKO_LIMB_RIGHT_FOOT + -1, // GEKKO_LIMB_TORSO + 5, // GEKKO_LIMB_LEFT_UPPER_ARM + 6, // GEKKO_LIMB_LEFT_FOREARM + -1, // GEKKO_LIMB_LEFT_WRIST + 7, // GEKKO_LIMB_LEFT_HAND + 8, // GEKKO_LIMB_RIGHT_UPPER_ARM + 9, // GEKKO_LIMB_RIGHT_FOREARM + -1, // GEKKO_LIMB_RIGHT_WRIST + 10, // GEKKO_LIMB_RIGHT_HAND + -1, // GEKKO_LIMB_HEAD + 11, // GEKKO_LIMB_JAW + -1, // GEKKO_LIMB_LEFT_EYE + -1, // GEKKO_LIMB_RIGHT_EYE +}; + +// Some kind of offset for the position of the Gekkos right foot +static Vec3f sRightFootOffsetRef = { 1500.0f, 2200.0f, 0.0f }; + void EnBigslime_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - /* value -1: Limb Not used - * value 0: GEKKO_LIMB_WAIST - * value 1: GEKKO_LIMB_L_SHIN - * value 2: GEKKO_LIMB_L_FOOT - * value 3: GEKKO_LIMB_R_SHIN - * value 4: GEKKO_LIMB_R_FOOT - * value 5: GEKKO_LIMB_L_UPPER_ARM - * value 6: GEKKO_LIMB_L_FOREARM - * value 7: GEKKO_LIMB_L_HAND - * value 8: GEKKO_LIMB_R_UPPER_ARM - * value 9: GEKKO_LIMB_R_FOREARM - * value 10: GEKKO_LIMB_R_HAND - * value 11: GEKKO_LIMB_JAW - */ - static s8 limbPosIndex[] = { - -1, -1, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1, 5, 6, -1, 7, 8, 9, -1, 10, -1, 11, -1, -1, - }; - // Some kind of offset for the position of the Gekkos right foot - static Vec3f rightFootOffsetRef = { 1500.0f, 2200.0f, 0.0f }; EnBigslime* this = THIS; Vec3f rightFootOffset; @@ -3061,12 +3072,12 @@ void EnBigslime_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* this->actor.focus.rot.y = this->gekkoRot.y; } - if (limbPosIndex[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[limbPosIndex[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != -1) { + Matrix_MultZero(&this->limbPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == GEKKO_LIMB_RIGHT_ANKLE) { - Matrix_MultVec3f(&rightFootOffsetRef, &rightFootOffset); + Matrix_MultVec3f(&sRightFootOffsetRef, &rightFootOffset); this->gekkoCollider.dim.pos.y = rightFootOffset.y; } } 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 48a675820..a7ebc75be 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -195,24 +195,24 @@ void EnBombal_Draw(Actor* thisx, PlayState* play) { void EnBombal_InitEffects(EnBombal* this, Vec3f* pos, s16 fadeDelay) { s16 i; - EnBombalEffect* sPtr = this->effects; + EnBombalEffect* effect = this->effects; - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (!sPtr->isEnabled) { - sPtr->isEnabled = true; - sPtr->pos = *pos; - sPtr->alphaFadeDelay = fadeDelay; - sPtr->alpha = 255; + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (!effect->isEnabled) { + effect->isEnabled = true; + effect->pos = *pos; + effect->alphaFadeDelay = fadeDelay; + effect->alpha = 255; - sPtr->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->accel.z = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.z = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->velocity.x = Rand_ZeroOne() - 0.5f; - sPtr->velocity.y = Rand_ZeroOne() - 0.5f; - sPtr->velocity.z = Rand_ZeroOne() - 0.5f; + effect->velocity.x = Rand_ZeroOne() - 0.5f; + effect->velocity.y = Rand_ZeroOne() - 0.5f; + effect->velocity.z = Rand_ZeroOne() - 0.5f; - sPtr->scale = (Rand_ZeroFloat(1.0f) * 0.5f) + 2.0f; + effect->scale = (Rand_ZeroFloat(1.0f) * 0.5f) + 2.0f; return; } } @@ -220,23 +220,23 @@ void EnBombal_InitEffects(EnBombal* this, Vec3f* pos, s16 fadeDelay) { void EnBombal_UpdateEffects(EnBombal* this, PlayState* play) { s32 i; - EnBombalEffect* sPtr = this->effects; + EnBombalEffect* effect = this->effects; - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (sPtr->isEnabled) { - sPtr->pos.x += sPtr->velocity.x; - sPtr->pos.y += sPtr->velocity.y; - sPtr->pos.z += sPtr->velocity.z; - sPtr->velocity.x += sPtr->accel.x; - sPtr->velocity.y += sPtr->accel.y; - sPtr->velocity.z += sPtr->accel.z; + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isEnabled) { + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; - if (sPtr->alphaFadeDelay != 0) { - sPtr->alphaFadeDelay--; + if (effect->alphaFadeDelay != 0) { + effect->alphaFadeDelay--; } else { - sPtr->alpha -= 10; - if (sPtr->alpha < 10) { - sPtr->isEnabled = 0; + effect->alpha -= 10; + if (effect->alpha < 10) { + effect->isEnabled = 0; } } } @@ -246,17 +246,17 @@ void EnBombal_UpdateEffects(EnBombal* this, PlayState* play) { void EnBombal_DrawEffects(EnBombal* this, PlayState* play) { s16 i; GraphicsContext* gfxCtx = play->state.gfxCtx; - EnBombalEffect* sPtr = this->effects; + EnBombalEffect* effect = this->effects; OPEN_DISPS(gfxCtx); Gfx_SetupDL25_Opa(gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (sPtr->isEnabled != 0) { - Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); - Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isEnabled) { + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); @@ -267,7 +267,7 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) { gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha); + gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, effect->alpha); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY); 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 3e728826f..e349a13a3 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -41,25 +41,6 @@ typedef enum { /* 3 */ EYEGORE_EFFECT_DEBRIS } EnEgolEffectType; -typedef enum { - /* 0 */ EYEGORE_ANIM_STAND, - /* 1 */ EYEGORE_ANIM_WALK, - /* 2 */ EYEGORE_ANIM_SLAM, - /* 3 */ EYEGORE_ANIM_SLAM_WAIT, - /* 4 */ EYEGORE_ANIM_SLAM_END, - /* 5 */ EYEGORE_ANIM_DAMAGED, - /* 6 */ EYEGORE_ANIM_DEATH, - /* 7 */ EYEGORE_ANIM_LASER, - /* 8 */ EYEGORE_ANIM_LASER_END, // unused - /* 9 */ EYEGORE_ANIM_STUNNED, - /* 10 */ EYEGORE_ANIM_STUN_END, - /* 11 */ EYEGORE_ANIM_RETREAT, - /* 12 */ EYEGORE_ANIM_SIT, - /* 13 */ EYEGORE_ANIM_LEFT_PUNCH, - /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH, - /* 15 */ EYEGORE_ANIM_MAX -} EnEgolAnimation; - typedef enum { /* 0 */ EYEGORE_LASER_OFF, /* 1 */ EYEGORE_LASER_START, @@ -306,23 +287,66 @@ ActorInit En_Egol_InitVars = { (ActorFunc)EnEgol_Draw, }; -void EnEgol_ChangeAnim(EnEgol* this, s32 animation) { - static AnimationHeader* sAnimations[EYEGORE_ANIM_MAX] = { - &gEyegoreStandAnim, &gEyegoreWalkAnim, &gEyegoreSlamAnim, - &gEyegoreSlamWaitAnim, &gEyegoreSlamEndAnim, &gEyegoreDamagedAnim, - &gEyegoreDeathAnim, &gEyegoreLaserAnim, &gEyegoreUnusedLaserEndAnim, - &gEyegoreStunnedAnim, &gEyegoreStunEndAnim, &gEyegoreRetreatAnim, - &gEyegoreSitAnim, &gEyegoreLeftPunchAnim, &gEyegoreRightPunchAnim, - }; - static u8 sAnimModes[EYEGORE_ANIM_MAX] = { - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, - ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, - }; - this->animation = animation; - this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animation]); - Animation_Change(&this->skelAnime, sAnimations[this->animation], 1.0f, 0.0f, this->animEndFrame, - sAnimModes[this->animation], 0.0f); +typedef enum { + /* 0 */ EYEGORE_ANIM_STAND, + /* 1 */ EYEGORE_ANIM_WALK, + /* 2 */ EYEGORE_ANIM_SLAM, + /* 3 */ EYEGORE_ANIM_SLAM_WAIT, + /* 4 */ EYEGORE_ANIM_SLAM_END, + /* 5 */ EYEGORE_ANIM_DAMAGED, + /* 6 */ EYEGORE_ANIM_DEATH, + /* 7 */ EYEGORE_ANIM_LASER, + /* 8 */ EYEGORE_ANIM_LASER_END, // unused + /* 9 */ EYEGORE_ANIM_STUNNED, + /* 10 */ EYEGORE_ANIM_STUN_END, + /* 11 */ EYEGORE_ANIM_RETREAT, + /* 12 */ EYEGORE_ANIM_SIT, + /* 13 */ EYEGORE_ANIM_LEFT_PUNCH, + /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH, + /* 15 */ EYEGORE_ANIM_MAX +} EnEgolAnimation; + +static AnimationHeader* sAnimations[EYEGORE_ANIM_MAX] = { + &gEyegoreStandAnim, // EYEGORE_ANIM_STAND + &gEyegoreWalkAnim, // EYEGORE_ANIM_WALK + &gEyegoreSlamAnim, // EYEGORE_ANIM_SLAM + &gEyegoreSlamWaitAnim, // EYEGORE_ANIM_SLAM_WAIT + &gEyegoreSlamEndAnim, // EYEGORE_ANIM_SLAM_END + &gEyegoreDamagedAnim, // EYEGORE_ANIM_DAMAGED + &gEyegoreDeathAnim, // EYEGORE_ANIM_DEATH + &gEyegoreLaserAnim, // EYEGORE_ANIM_LASER + &gEyegoreUnusedLaserEndAnim, // EYEGORE_ANIM_LASER_END + &gEyegoreStunnedAnim, // EYEGORE_ANIM_STUNNED + &gEyegoreStunEndAnim, // EYEGORE_ANIM_STUN_END + &gEyegoreRetreatAnim, // EYEGORE_ANIM_RETREAT + &gEyegoreSitAnim, // EYEGORE_ANIM_SIT + &gEyegoreLeftPunchAnim, // EYEGORE_ANIM_LEFT_PUNCH + &gEyegoreRightPunchAnim, // EYEGORE_ANIM_RIGHT_PUNCH +}; + +static u8 sAnimationModes[EYEGORE_ANIM_MAX] = { + ANIMMODE_ONCE, // EYEGORE_ANIM_STAND + ANIMMODE_LOOP, // EYEGORE_ANIM_WALK + ANIMMODE_ONCE, // EYEGORE_ANIM_SLAM + ANIMMODE_ONCE, // EYEGORE_ANIM_SLAM_WAIT + ANIMMODE_ONCE, // EYEGORE_ANIM_SLAM_END + ANIMMODE_ONCE, // EYEGORE_ANIM_DAMAGED + ANIMMODE_ONCE, // EYEGORE_ANIM_DEATH + ANIMMODE_ONCE, // EYEGORE_ANIM_LASER + ANIMMODE_ONCE, // EYEGORE_ANIM_LASER_END + ANIMMODE_ONCE, // EYEGORE_ANIM_STUNNED + ANIMMODE_ONCE, // EYEGORE_ANIM_STUN_END + ANIMMODE_LOOP, // EYEGORE_ANIM_RETREAT + ANIMMODE_ONCE, // EYEGORE_ANIM_SIT + ANIMMODE_ONCE, // EYEGORE_ANIM_LEFT_PUNCH + ANIMMODE_ONCE, // EYEGORE_ANIM_RIGHT_PUNCH +}; + +void EnEgol_ChangeAnim(EnEgol* this, s32 animIndex) { + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], 0.0f); } void EnEgol_FootstepEffects(EnEgol* this, PlayState* play, f32 leftFootFrame, f32 rightFootFrame) { @@ -1196,10 +1220,10 @@ void EnEgol_Update(Actor* thisx, PlayState* play) { if ((ABS_ALT(angleToFacing) > 0x1888) && (ABS_ALT(angleBehind) > 0x2000) && (this->actor.xzDistToPlayer < 100.0f)) { if (angleToFacing < 0) { - if (this->animation != EYEGORE_ANIM_LEFT_PUNCH) { + if (this->animIndex != EYEGORE_ANIM_LEFT_PUNCH) { EnEgol_ChangeAnim(this, EYEGORE_ANIM_LEFT_PUNCH); } - } else if (this->animation != EYEGORE_ANIM_RIGHT_PUNCH) { + } else if (this->animIndex != EYEGORE_ANIM_RIGHT_PUNCH) { EnEgol_ChangeAnim(this, EYEGORE_ANIM_RIGHT_PUNCH); } this->chargingLaser = false; diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index e85e4b98a..faa156543 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -46,7 +46,7 @@ typedef struct EnEgol { /* 0x02C0 */ Vec3f limbPos[12]; /* 0x0350 */ s16 limbPosIndex; /* 0x0352 */ s16 pathIndex; - /* 0x0354 */ s32 animation; + /* 0x0354 */ s32 animIndex; /* 0x0358 */ u8 isRetreating; /* 0x035C */ f32 animEndFrame; /* 0x0360 */ f32 wakeupRange; 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 a69d30e38..2c3d46ffb 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -5,7 +5,6 @@ */ #include "z_en_elf.h" -#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) @@ -324,7 +323,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(thisx, sInitChain); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable, - this->morphTable, 7); + this->morphTable, FAIRY_LIMB_MAX); ActorShape_Init(&thisx->shape, 0.0f, NULL, 15.0f); thisx->shape.shadowAlpha = 255; @@ -1557,7 +1556,7 @@ s32 EnElf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p Vec3f sp34; f32 scale; - if (limbIndex == 6) { + if (limbIndex == FAIRY_LIMB_6) { scale = ((Math_SinS(this->timer * 4096) * 0.1f) + 1.0f) * 0.012f; if (this->fairyFlags & 0x200) { scale *= 2.0f; @@ -1569,8 +1568,11 @@ s32 EnElf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); } + //! @note: `limbIndex` extends past `FAIRY_LIMB_MAX`. + //! This code was copied from OoT despite the number of limbs decreasing. + //! In OoT, this was intented to not draw wings for big fairies if ((this->fairyFlags & 0x200) && - ((limbIndex == 4) || (limbIndex == 7) || (limbIndex == 11) || (limbIndex == 14))) { + ((limbIndex == FAIRY_LIMB_4) || (limbIndex == 7) || (limbIndex == 11) || (limbIndex == 14))) { *dList = NULL; } return false; diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/src/overlays/actors/ovl_En_Elf/z_en_elf.h index ae34be352..dbc1e191d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h @@ -2,6 +2,7 @@ #define Z_EN_ELF_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnElf; @@ -31,8 +32,8 @@ typedef enum { typedef struct EnElf { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[7]; - /* 0x1B2 */ Vec3s morphTable[7]; + /* 0x188 */ Vec3s jointTable[FAIRY_LIMB_MAX]; + /* 0x1B2 */ Vec3s morphTable[FAIRY_LIMB_MAX]; /* 0x1DC */ Color_RGBAf innerColor; /* 0x1EC */ Color_RGBAf outerColor; /* 0x1FC */ LightInfo lightInfoGlow; 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 719940b14..0650770ce 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -119,6 +119,9 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { this->unk_14A |= 0x10; } break; + + default: + break; } } else if (func_80A39BD0(play, this->unk_147)) { this->actionFunc = func_80A3A7FC; @@ -409,6 +412,9 @@ void func_80A3A274(EnElfgrp* this, PlayState* play) { this->actionFunc = func_80A3A210; this->unk_144 = 90; break; + + default: + break; } } } 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 2f8648316..f57f8e066 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -164,7 +164,7 @@ void EnElforg_Destroy(Actor* thisx, PlayState* play) { void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) { static Vec3f sVelocity = { 0.0f, -0.05f, 0.0f }; - static Vec3f sAcceleration = { 0.0f, -0.025f, 0.0f }; + static Vec3f sAccel = { 0.0f, -0.025f, 0.0f }; static Color_RGBA8 sPrimColors[] = { { 255, 235, 220, 255 }, { 255, 220, 220, 255 }, { 220, 255, 220, 255 }, { 220, 220, 255, 255 }, { 255, 255, 200, 255 }, @@ -182,8 +182,8 @@ void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) { index = (this->area < STRAY_FAIRY_AREA_CLOCK_TOWN || this->area >= STRAY_FAIRY_AREA_MAX) ? STRAY_FAIRY_AREA_CLOCK_TOWN : this->area; - EffectSsKirakira_SpawnDispersed(play, &pos, &sVelocity, &sAcceleration, &sPrimColors[index], &sEnvColors[index], - 1000, life); + EffectSsKirakira_SpawnDispersed(play, &pos, &sVelocity, &sAccel, &sPrimColors[index], &sEnvColors[index], 1000, + life); } void EnElforg_ApproachTargetYPosition(EnElforg* this, Vec3f* targetPos) { diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index 737ffd2d3..8405691e3 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -142,6 +142,9 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { Actor_Kill(&this->actor); } break; + + default: + break; } actorId = sActorIds[this->type]; 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 b94643338..effbb3eba 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -21,7 +21,7 @@ void EnEncount2_Draw(Actor* thisx, PlayState* play); void EnEncount2_Idle(EnEncount2* this, PlayState* play); void EnEncount2_Popped(EnEncount2* this, PlayState* play); void EnEncount2_Die(EnEncount2* this, PlayState* play); -void EnEncount2_SetIdle(EnEncount2* this); +void EnEncount2_SetupIdle(EnEncount2* this); void EnEncount2_InitEffects(EnEncount2* this, Vec3f* pos, s16 fadeDelay); void EnEncount2_UpdateEffects(EnEncount2* this, PlayState* play); void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play); @@ -121,19 +121,19 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) { this->switchFlag = -1; } - if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->dyna.actor); return; } - this->collider.elements->dim.modelSphere.radius = 0x39; + this->collider.elements->dim.modelSphere.radius = 57; this->collider.elements->dim.scale = 1.0f; this->collider.elements->dim.modelSphere.center.x = 0; this->collider.elements->dim.modelSphere.center.y = -4; this->collider.elements->dim.modelSphere.center.z = 0; this->dyna.actor.colChkInfo.damageTable = &sDamageTable; - EnEncount2_SetIdle(this); + EnEncount2_SetupIdle(this); } void EnEncount2_Destroy(Actor* thisx, PlayState* play) { @@ -143,7 +143,7 @@ void EnEncount2_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyJntSph(play, &this->collider); } -void EnEncount2_SetIdle(EnEncount2* this) { +void EnEncount2_SetupIdle(EnEncount2* this) { this->isPopped = false; this->actionFunc = EnEncount2_Idle; } @@ -152,6 +152,7 @@ void EnEncount2_Idle(EnEncount2* this, PlayState* play) { this->oscillationAngle += 1500.0f; this->dyna.actor.velocity.y = Math_SinS(this->oscillationAngle); Math_ApproachF(&this->scale, 0.1f, 0.3f, 0.01f); + if ((this->collider.base.acFlags & AC_HIT) && (this->dyna.actor.colChkInfo.damageEffect == 0xE)) { this->dyna.actor.colChkInfo.health = 0; this->isPopped = true; @@ -217,24 +218,24 @@ void EnEncount2_Draw(Actor* thisx, PlayState* play) { void EnEncount2_InitEffects(EnEncount2* this, Vec3f* pos, s16 fadeDelay) { s16 i; - EnEncount2Effect* sPtr = this->effects; + EnEncount2Effect* effect = this->effects; - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (!sPtr->isEnabled) { - sPtr->isEnabled = true; - sPtr->pos = *pos; - sPtr->alphaFadeDelay = fadeDelay; - sPtr->alpha = 255; + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (!effect->isEnabled) { + effect->isEnabled = true; + effect->pos = *pos; + effect->alphaFadeDelay = fadeDelay; + effect->alpha = 255; - sPtr->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->accel.z = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f; + effect->accel.z = (Rand_ZeroOne() - 0.5f) * 10.0f; - sPtr->velocity.x = Rand_ZeroOne() - 0.5f; - sPtr->velocity.y = Rand_ZeroOne() - 0.5f; - sPtr->velocity.z = Rand_ZeroOne() - 0.5f; + effect->velocity.x = Rand_ZeroOne() - 0.5f; + effect->velocity.y = Rand_ZeroOne() - 0.5f; + effect->velocity.z = Rand_ZeroOne() - 0.5f; - sPtr->scale = (Rand_ZeroFloat(1.0f) * 0.5f) + 2.0f; + effect->scale = (Rand_ZeroFloat(1.0f) * 0.5f) + 2.0f; return; } } @@ -242,23 +243,23 @@ void EnEncount2_InitEffects(EnEncount2* this, Vec3f* pos, s16 fadeDelay) { void EnEncount2_UpdateEffects(EnEncount2* this, PlayState* play) { s32 i; - EnEncount2Effect* sPtr = this->effects; + EnEncount2Effect* effect = this->effects; - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (sPtr->isEnabled) { - sPtr->pos.x += sPtr->velocity.x; - sPtr->pos.y += sPtr->velocity.y; - sPtr->pos.z += sPtr->velocity.z; - sPtr->velocity.x += sPtr->accel.x; - sPtr->velocity.y += sPtr->accel.y; - sPtr->velocity.z += sPtr->accel.z; + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isEnabled) { + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; - if (sPtr->alphaFadeDelay != 0) { - sPtr->alphaFadeDelay--; + if (effect->alphaFadeDelay != 0) { + effect->alphaFadeDelay--; } else { - sPtr->alpha -= 10; - if (sPtr->alpha < 10) { - sPtr->isEnabled = 0; + effect->alpha -= 10; + if (effect->alpha < 10) { + effect->isEnabled = 0; } } } @@ -267,24 +268,24 @@ void EnEncount2_UpdateEffects(EnEncount2* this, PlayState* play) { void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { s16 i; - EnEncount2Effect* sPtr; + EnEncount2Effect* effect; GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(gfxCtx); - sPtr = this->effects; + effect = this->effects; Gfx_SetupDL25_Opa(gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { - if (sPtr->isEnabled) { - Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); - Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isEnabled) { + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha); + gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, effect->alpha); Matrix_Mult(&play->billboardMtxF, 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_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 5e28850c6..913e8b7e5 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -72,11 +72,12 @@ void func_809C3FD8(EnEncount4* this, PlayState* play) { while (actor != NULL) { if (actor->id != ACTOR_EN_BSB) { actor = actor->next; - } else { - this->captainKeeta = (EnBsb*)actor; - this->actionFunc = func_809C4078; - break; + continue; } + + this->captainKeeta = (EnBsb*)actor; + this->actionFunc = func_809C4078; + break; } } } @@ -145,15 +146,16 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { if ((this->captainKeeta->actor.id != ACTOR_EN_BSB) || (captainKeeta->actor.update == NULL)) { Actor_Kill(&this->actor); } - return; - } else if (this->unk_14E >= 2) { + } + + if (this->unk_14E >= 2) { this->timer = 100; this->actionFunc = func_809C464C; - return; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40) || (this->unk_14C >= 2) || - (this->actor.xzDistToPlayer > 240.0f)) { + } + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40) || (this->unk_14C >= 2) || (this->actor.xzDistToPlayer > 240.0f)) { return; } @@ -167,7 +169,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { } pos.y = yIntersect; - yRot = (s32)Rand_ZeroFloat(512.0f) + this->actor.world.rot.y + 0x3800; + yRot = (s32)Rand_ZeroFloat(0x200) + this->actor.world.rot.y + 0x3800; if (this->unk_14C != 0) { yRot += 0x8000; } 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 6121cce9d..33b50bc2a 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 @@ -5,7 +5,6 @@ */ #include "z_en_ending_hero.h" -#include "objects/object_dt/object_dt.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -16,8 +15,8 @@ void EnEndingHero_Destroy(Actor* thisx, PlayState* play); void EnEndingHero_Update(Actor* thisx, PlayState* play); void EnEndingHero_Draw(Actor* thisx, PlayState* play); -void func_80C1E748(EnEndingHero* this); -void func_80C1E764(EnEndingHero* this, PlayState* play); +void EnEndingHero1_SetupIdle(EnEndingHero* this); +void EnEndingHero1_Idle(EnEndingHero* this, PlayState* play); ActorInit En_Ending_Hero_InitVars = { ACTOR_EN_ENDING_HERO, @@ -39,20 +38,20 @@ void EnEndingHero_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_dt_Skel_00B0CC, &object_dt_Anim_000BE0, this->jointTable, - this->morphTable, 15); + this->morphTable, OBJECT_DT_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - func_80C1E748(this); + EnEndingHero1_SetupIdle(this); } void EnEndingHero_Destroy(Actor* thisx, PlayState* play) { } -void func_80C1E748(EnEndingHero* this) { - this->unk244 = 1; - this->actionFunc = func_80C1E764; +void EnEndingHero1_SetupIdle(EnEndingHero* this) { + this->isIdle = true; + this->actionFunc = EnEndingHero1_Idle; } -void func_80C1E764(EnEndingHero* this, PlayState* play) { +void EnEndingHero1_Idle(EnEndingHero* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } @@ -60,7 +59,7 @@ void EnEndingHero_Update(Actor* thisx, PlayState* play) { EnEndingHero* this = THIS; if (this->unk240 == 0) { - this->unk242 += 1; + this->unk242++; if (this->unk242 > 2) { this->unk242 = 0; this->unk240 = (s16)Rand_ZeroFloat(60.0f) + 0x14; diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h index 6049e3449..21f5266e7 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h +++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h @@ -2,6 +2,7 @@ #define Z_EN_ENDING_HERO_H #include "global.h" +#include "objects/object_dt/object_dt.h" struct EnEndingHero; @@ -10,12 +11,12 @@ typedef void (*EnEndingHeroActionFunc)(struct EnEndingHero*, PlayState*); typedef struct EnEndingHero { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[15]; - /* 0x1E2 */ Vec3s morphTable[15]; + /* 0x188 */ Vec3s jointTable[OBJECT_DT_LIMB_MAX]; + /* 0x1E2 */ Vec3s morphTable[OBJECT_DT_LIMB_MAX]; /* 0x23C */ EnEndingHeroActionFunc actionFunc; /* 0x240 */ s16 unk240; /* 0x242 */ s16 unk242; - /* 0x244 */ u16 unk244; + /* 0x244 */ u16 isIdle; } EnEndingHero; // size = 0x248 #endif // Z_EN_ENDING_HERO_H 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 604bcd583..78c948911 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 @@ -5,7 +5,6 @@ */ #include "z_en_ending_hero2.h" -#include "objects/object_bai/object_bai.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -16,8 +15,8 @@ void EnEndingHero2_Destroy(Actor* thisx, PlayState* play); void EnEndingHero2_Update(Actor* thisx, PlayState* play); void EnEndingHero2_Draw(Actor* thisx, PlayState* play); -void func_80C232E8(EnEndingHero2* this); -void func_80C23304(EnEndingHero2* this, PlayState* play); +void EnEndingHero2_SetupIdle(EnEndingHero2* this); +void EnEndingHero2_Idle(EnEndingHero2* this, PlayState* play); ActorInit En_Ending_Hero2_InitVars = { ACTOR_EN_ENDING_HERO2, @@ -39,20 +38,20 @@ void EnEndingHero2_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_bai_Skel_007908, &object_bai_Anim_0011C0, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_BAI_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - func_80C232E8(this); + EnEndingHero2_SetupIdle(this); } void EnEndingHero2_Destroy(Actor* thisx, PlayState* play) { } -void func_80C232E8(EnEndingHero2* this) { - this->unk27C = 1; - this->actionFunc = func_80C23304; +void EnEndingHero2_SetupIdle(EnEndingHero2* this) { + this->isIdle = true; + this->actionFunc = EnEndingHero2_Idle; } -void func_80C23304(EnEndingHero2* this, PlayState* play) { +void EnEndingHero2_Idle(EnEndingHero2* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h index 2ad3b4914..4f18b8e22 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h +++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h @@ -2,6 +2,7 @@ #define Z_EN_ENDING_HERO2_H #include "global.h" +#include "objects/object_bai/object_bai.h" struct EnEndingHero2; @@ -10,10 +11,10 @@ typedef void (*EnEndingHero2ActionFunc)(struct EnEndingHero2*, PlayState*); typedef struct EnEndingHero2 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[20]; - /* 0x200 */ Vec3s morphTable[20]; + /* 0x188 */ Vec3s jointTable[OBJECT_BAI_LIMB_MAX]; + /* 0x200 */ Vec3s morphTable[OBJECT_BAI_LIMB_MAX]; /* 0x278 */ EnEndingHero2ActionFunc actionFunc; - /* 0x27C */ u16 unk27C; + /* 0x27C */ u16 isIdle; } EnEndingHero2; // size = 0x280 #endif // Z_EN_ENDING_HERO2_H 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 e95d8a6a7..b7ac5cbad 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 @@ -5,7 +5,6 @@ */ #include "z_en_ending_hero3.h" -#include "objects/object_toryo/object_toryo.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -16,8 +15,8 @@ void EnEndingHero3_Destroy(Actor* thisx, PlayState* play); void EnEndingHero3_Update(Actor* thisx, PlayState* play); void EnEndingHero3_Draw(Actor* thisx, PlayState* play); -void func_80C23518(EnEndingHero3* this); -void func_80C23534(EnEndingHero3* this, PlayState* play); +void EnEndingHero3_SetupIdle(EnEndingHero3* this); +void EnEndingHero3_Idle(EnEndingHero3* this, PlayState* play); ActorInit En_Ending_Hero3_InitVars = { ACTOR_EN_ENDING_HERO3, @@ -39,20 +38,20 @@ void EnEndingHero3_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_toryo_Skel_007150, &object_toryo_Anim_000E50, this->jointTable, - this->morphTable, 17); + this->morphTable, OBJECT_TORYO_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - func_80C23518(this); + EnEndingHero3_SetupIdle(this); } void EnEndingHero3_Destroy(Actor* thisx, PlayState* play) { } -void func_80C23518(EnEndingHero3* this) { - this->unk258 = 1; - this->actionFunc = func_80C23534; +void EnEndingHero3_SetupIdle(EnEndingHero3* this) { + this->isIdle = true; + this->actionFunc = EnEndingHero3_Idle; } -void func_80C23534(EnEndingHero3* this, PlayState* play) { +void EnEndingHero3_Idle(EnEndingHero3* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h index 0887df1ab..21aaa079e 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h +++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h @@ -2,6 +2,7 @@ #define Z_EN_ENDING_HERO3_H #include "global.h" +#include "objects/object_toryo/object_toryo.h" struct EnEndingHero3; @@ -10,10 +11,10 @@ typedef void (*EnEndingHero3ActionFunc)(struct EnEndingHero3*, PlayState*); typedef struct EnEndingHero3 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[17]; - /* 0x1EE */ Vec3s morphTable[17]; + /* 0x188 */ Vec3s jointTable[OBJECT_TORYO_LIMB_MAX]; + /* 0x1EE */ Vec3s morphTable[OBJECT_TORYO_LIMB_MAX]; /* 0x254 */ EnEndingHero3ActionFunc actionFunc; - /* 0x258 */ u16 unk258; + /* 0x258 */ u16 isIdle; } EnEndingHero3; // size = 0x25C #endif // Z_EN_ENDING_HERO3_H 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 39fd515b1..f0828f8bf 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 @@ -5,7 +5,6 @@ */ #include "z_en_ending_hero4.h" -#include "objects/object_sdn/object_sdn.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -16,8 +15,8 @@ void EnEndingHero4_Destroy(Actor* thisx, PlayState* play); void EnEndingHero4_Update(Actor* thisx, PlayState* play); void EnEndingHero4_Draw(Actor* thisx, PlayState* play); -void func_80C23748(EnEndingHero4* this); -void func_80C23764(EnEndingHero4* this, PlayState* play); +void EnEndingHero4_SetupIdle(EnEndingHero4* this); +void EnEndingHero4_Idle(EnEndingHero4* this, PlayState* play); ActorInit En_Ending_Hero4_InitVars = { ACTOR_EN_ENDING_HERO4, @@ -39,20 +38,20 @@ void EnEndingHero4_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpear, this->jointTable, - this->morphTable, 17); + this->morphTable, SOLDIER_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - func_80C23748(this); + EnEndingHero4_SetupIdle(this); } void EnEndingHero4_Destroy(Actor* thisx, PlayState* play) { } -void func_80C23748(EnEndingHero4* this) { - this->unk258 = 1; - this->actionFunc = func_80C23764; +void EnEndingHero4_SetupIdle(EnEndingHero4* this) { + this->isIdle = true; + this->actionFunc = EnEndingHero4_Idle; } -void func_80C23764(EnEndingHero4* this, PlayState* play) { +void EnEndingHero4_Idle(EnEndingHero4* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h index 4cada4183..e52b41124 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h @@ -2,6 +2,7 @@ #define Z_EN_ENDING_HERO4_H #include "global.h" +#include "objects/object_sdn/object_sdn.h" struct EnEndingHero4; @@ -10,10 +11,10 @@ typedef void (*EnEndingHero4ActionFunc)(struct EnEndingHero4*, PlayState*); typedef struct EnEndingHero4 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[17]; - /* 0x1EE */ Vec3s morphTable[17]; + /* 0x188 */ Vec3s jointTable[SOLDIER_LIMB_MAX]; + /* 0x1EE */ Vec3s morphTable[SOLDIER_LIMB_MAX]; /* 0x254 */ EnEndingHero4ActionFunc actionFunc; - /* 0x258 */ u16 unk258; + /* 0x258 */ u16 isIdle; } EnEndingHero4; // size = 0x25C #endif // Z_EN_ENDING_HERO4_H 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 dd656f903..c49121150 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 @@ -5,7 +5,6 @@ */ #include "z_en_ending_hero5.h" -#include "objects/object_daiku/object_daiku.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -16,8 +15,8 @@ void EnEndingHero5_Destroy(Actor* thisx, PlayState* play); void EnEndingHero5_Update(Actor* thisx, PlayState* play); void EnEndingHero5_Draw(Actor* thisx, PlayState* play); -void func_80C23980(EnEndingHero5* this); -void func_80C2399C(EnEndingHero5* this, PlayState* play); +void EnEndingHero5_SetupIdle(EnEndingHero5* this); +void EnEndingHero5_Idle(EnEndingHero5* this, PlayState* play); ActorInit En_Ending_Hero5_InitVars = { ACTOR_EN_ENDING_HERO5, @@ -39,21 +38,21 @@ void EnEndingHero5_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, - this->morphTable, 17); + this->morphTable, OBJECT_DAIKU_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); this->unk25C = this->actor.params; - func_80C23980(this); + EnEndingHero5_SetupIdle(this); } void EnEndingHero5_Destroy(Actor* thisx, PlayState* play) { } -void func_80C23980(EnEndingHero5* this) { - this->unk258 = 1; - this->actionFunc = func_80C2399C; +void EnEndingHero5_SetupIdle(EnEndingHero5* this) { + this->isIdle = true; + this->actionFunc = EnEndingHero5_Idle; } -void func_80C2399C(EnEndingHero5* this, PlayState* play) { +void EnEndingHero5_Idle(EnEndingHero5* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } @@ -75,7 +74,7 @@ void EnEndingHero5_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, D_80C23BF0[this->unk25C]); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h index 9e3dab09e..fec2d112a 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h @@ -2,6 +2,7 @@ #define Z_EN_ENDING_HERO5_H #include "global.h" +#include "objects/object_daiku/object_daiku.h" struct EnEndingHero5; @@ -10,10 +11,10 @@ typedef void (*EnEndingHero5ActionFunc)(struct EnEndingHero5*, PlayState*); typedef struct EnEndingHero5 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[17]; - /* 0x1EE */ Vec3s morphTable[17]; + /* 0x188 */ Vec3s jointTable[OBJECT_DAIKU_LIMB_MAX]; + /* 0x1EE */ Vec3s morphTable[OBJECT_DAIKU_LIMB_MAX]; /* 0x254 */ EnEndingHero5ActionFunc actionFunc; - /* 0x258 */ u16 unk258; + /* 0x258 */ u16 isIdle; /* 0x25C */ s32 unk25C; } EnEndingHero5; // size = 0x260 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 9c5bbf42e..2d13f126c 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 @@ -5,11 +5,6 @@ */ #include "z_en_ending_hero6.h" -#include "objects/object_dt/object_dt.h" -#include "objects/object_daiku/object_daiku.h" -#include "objects/object_bai/object_bai.h" -#include "objects/object_toryo/object_toryo.h" -#include "objects/object_sdn/object_sdn.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -20,7 +15,6 @@ void EnEndingHero6_Destroy(Actor* thisx, PlayState* play); void EnEndingHero6_Update(Actor* thisx, PlayState* play); void EnEndingHero6_Draw(Actor* thisx, PlayState* play); -void EnEndingHero6_InitSkelAnime(EnEndingHero6* this, s32 npcIndex); void EnEndingHero6_SetupIdle(EnEndingHero6* this); void EnEndingHero6_Idle(EnEndingHero6* this, PlayState* play); @@ -36,19 +30,54 @@ ActorInit En_Ending_Hero6_InitVars = { (ActorFunc)EnEndingHero6_Draw, }; -static FlexSkeletonHeader* sSkeletons[] = { - &object_dt_Skel_00B0CC, &object_bai_Skel_007908, &object_toryo_Skel_007150, &gSoldierSkel, - &object_daiku_Skel_00A850, &object_daiku_Skel_00A850, &object_daiku_Skel_00A850, &object_daiku_Skel_00A850, - &object_daiku_Skel_00A850, +typedef enum { + /* 0 */ ENDING_HERO6_TYPE_DT, + /* 1 */ ENDING_HERO6_TYPE_BAI, + /* 2 */ ENDING_HERO6_TYPE_TORYO, + /* 3 */ ENDING_HERO6_TYPE_SOLDIER, + /* 4 */ ENDING_HERO6_TYPE_DAIKU_RED, + /* 5 */ ENDING_HERO6_TYPE_DAIKU_BLUE, + /* 6 */ ENDING_HERO6_TYPE_DAIKU_GREEN, + /* 7 */ ENDING_HERO6_TYPE_DAIKU_PURPLE, + /* 8 */ ENDING_HERO6_TYPE_DAIKU_ORANGE, + /* 9 */ ENDING_HERO6_TYPE_MAX +} EndingHero6Type; + +static FlexSkeletonHeader* sSkeletons[ENDING_HERO6_TYPE_MAX] = { + &object_dt_Skel_00B0CC, // ENDING_HERO6_TYPE_DT + &object_bai_Skel_007908, // ENDING_HERO6_TYPE_BAI + &object_toryo_Skel_007150, // ENDING_HERO6_TYPE_TORYO + &gSoldierSkel, // ENDING_HERO6_TYPE_SOLDIER + &object_daiku_Skel_00A850, // ENDING_HERO6_TYPE_DAIKU_RED + &object_daiku_Skel_00A850, // ENDING_HERO6_TYPE_DAIKU_BLUE + &object_daiku_Skel_00A850, // ENDING_HERO6_TYPE_DAIKU_GREEN + &object_daiku_Skel_00A850, // ENDING_HERO6_TYPE_DAIKU_PURPLE + &object_daiku_Skel_00A850, // ENDING_HERO6_TYPE_DAIKU_ORANGE }; -static AnimationHeader* sAnimations[] = { - &object_dt_Anim_000BE0, &object_bai_Anim_0011C0, &object_toryo_Anim_000E50, - &gSoldierCheerWithSpear, &object_daiku_Anim_002FA0, &object_daiku_Anim_002FA0, - &object_daiku_Anim_002FA0, &object_daiku_Anim_002FA0, &object_daiku_Anim_002FA0, +static AnimationHeader* sAnimations[ENDING_HERO6_TYPE_MAX] = { + &object_dt_Anim_000BE0, // ENDING_HERO6_TYPE_DT + &object_bai_Anim_0011C0, // ENDING_HERO6_TYPE_BAI + &object_toryo_Anim_000E50, // ENDING_HERO6_TYPE_TORYO + &gSoldierCheerWithSpear, // ENDING_HERO6_TYPE_SOLDIER + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_RED + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_BLUE + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_GREEN + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_PURPLE + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_ORANGE }; -static s32 sLimbCounts[] = { 15, 20, 17, 17, 17, 17, 17, 17, 17 }; +static s32 sLimbCounts[ENDING_HERO6_TYPE_MAX] = { + OBJECT_DT_LIMB_MAX, // ENDING_HERO6_TYPE_DT + OBJECT_BAI_LIMB_MAX, // ENDING_HERO6_TYPE_BAI + OBJECT_TORYO_LIMB_MAX, // ENDING_HERO6_TYPE_TORYO + SOLDIER_LIMB_MAX, // ENDING_HERO6_TYPE_SOLDIER + OBJECT_DAIKU_LIMB_MAX, // ENDING_HERO6_TYPE_DAIKU_RED + OBJECT_DAIKU_LIMB_MAX, // ENDING_HERO6_TYPE_DAIKU_BLUE + OBJECT_DAIKU_LIMB_MAX, // ENDING_HERO6_TYPE_DAIKU_GREEN + OBJECT_DAIKU_LIMB_MAX, // ENDING_HERO6_TYPE_DAIKU_PURPLE + OBJECT_DAIKU_LIMB_MAX, // ENDING_HERO6_TYPE_DAIKU_ORANGE +}; void EnEndingHero6_Init(Actor* thisx, PlayState* play) { EnEndingHero6* this = THIS; @@ -57,8 +86,8 @@ void EnEndingHero6_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.targetMode = 6; this->actor.gravity = -3.0f; - SkelAnime_InitFlex(play, &this->skelAnime, sSkeletons[this->npcIndex], sAnimations[this->npcIndex], - this->jointTable, this->morphTable, sLimbCounts[this->npcIndex]); + SkelAnime_InitFlex(play, &this->skelAnime, sSkeletons[this->type], sAnimations[this->type], this->jointTable, + this->morphTable, sLimbCounts[this->type]); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); EnEndingHero6_SetupIdle(this); } @@ -66,15 +95,16 @@ void EnEndingHero6_Init(Actor* thisx, PlayState* play) { void EnEndingHero6_Destroy(Actor* thisx, PlayState* play) { } -void EnEndingHero6_InitSkelAnime(EnEndingHero6* this, s32 npcIndex) { - this->animIndex = npcIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[npcIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.f, this->frameCount, ANIMMODE_LOOP, 0.0f); +void EnEndingHero6_ChangeAnim(EnEndingHero6* this, s32 type) { + this->animIndex = type; + this->animEndFrame = Animation_GetLastFrame(sAnimations[type]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.f, this->animEndFrame, ANIMMODE_LOOP, + 0.0f); } void EnEndingHero6_SetupIdle(EnEndingHero6* this) { - EnEndingHero6_InitSkelAnime(this, this->npcIndex); - this->isIdle = 1; + EnEndingHero6_ChangeAnim(this, this->type); + this->isIdle = true; this->actionFunc = EnEndingHero6_Idle; } @@ -107,16 +137,21 @@ void EnEndingHero6_Update(Actor* thisx, PlayState* play) { } void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Gfx* D_80C2426C[] = { object_daiku_DL_0070C0, object_daiku_DL_006FB0, object_daiku_DL_006E80, - object_daiku_DL_006D70, object_daiku_DL_00A390 }; + static Gfx* D_80C2426C[] = { + object_daiku_DL_0070C0, // ENDING_HERO6_TYPE_DAIKU_RED + object_daiku_DL_006FB0, // ENDING_HERO6_TYPE_DAIKU_BLUE + object_daiku_DL_006E80, // ENDING_HERO6_TYPE_DAIKU_GREEN + object_daiku_DL_006D70, // ENDING_HERO6_TYPE_DAIKU_PURPLE + object_daiku_DL_00A390, // ENDING_HERO6_TYPE_DAIKU_ORANGE + }; EnEndingHero6* this = THIS; - s32 index; + s32 daikuIndex; OPEN_DISPS(play->state.gfxCtx); - if ((this->npcIndex >= 4) && (limbIndex == 15)) { - index = this->npcIndex - 4; - gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[index]); + if ((this->type >= ENDING_HERO6_TYPE_DAIKU_RED) && (limbIndex == OBJECT_DAIKU_LIMB_0F)) { + daikuIndex = this->type - ENDING_HERO6_TYPE_DAIKU_RED; + gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[daikuIndex]); } CLOSE_DISPS(play->state.gfxCtx); @@ -130,7 +165,7 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { EnEndingHero6* this = THIS; s32 index = 0; - if (this->isIdle == 1) { + if (this->isIdle == true) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -139,24 +174,24 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); - switch (this->npcIndex) { - case 4: + switch (this->type) { + case ENDING_HERO6_TYPE_DAIKU_RED: gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255); break; - case 5: + case ENDING_HERO6_TYPE_DAIKU_BLUE: gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255); break; - case 6: + case ENDING_HERO6_TYPE_DAIKU_GREEN: gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255); break; - case 7: + case ENDING_HERO6_TYPE_DAIKU_PURPLE: gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255); break; - case 8: + case ENDING_HERO6_TYPE_DAIKU_ORANGE: gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); break; @@ -164,7 +199,7 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { break; } - if (this->npcIndex == 0) { + if (this->type == ENDING_HERO6_TYPE_DT) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); if (this->eyeState < 3) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h index 76af1d67f..808267b7b 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h @@ -2,24 +2,36 @@ #define Z_EN_ENDING_HERO6_H #include "global.h" +#include "objects/object_dt/object_dt.h" +#include "objects/object_daiku/object_daiku.h" +#include "objects/object_bai/object_bai.h" +#include "objects/object_toryo/object_toryo.h" +#include "objects/object_sdn/object_sdn.h" struct EnEndingHero6; typedef void (*EnEndingHero6ActionFunc)(struct EnEndingHero6*, PlayState*); +#define ENDING_HERO6_LIMB_MAX \ + MAX(MAX(MAX(MAX((s32)OBJECT_DT_LIMB_MAX, \ + (s32)OBJECT_BAI_LIMB_MAX), \ + (s32)OBJECT_TORYO_LIMB_MAX), \ + (s32)SOLDIER_LIMB_MAX), \ + (s32)OBJECT_DAIKU_LIMB_MAX) + typedef struct EnEndingHero6 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[20]; - /* 0x200 */ Vec3s morphTable[20]; + /* 0x188 */ Vec3s jointTable[ENDING_HERO6_LIMB_MAX]; + /* 0x200 */ Vec3s morphTable[ENDING_HERO6_LIMB_MAX]; /* 0x278 */ EnEndingHero6ActionFunc actionFunc; /* 0x27C */ s32 animIndex; - /* 0x280 */ s32 npcIndex; + /* 0x280 */ s32 type; /* 0x284 */ s8 objectIndex; /* 0x286 */ s16 timer; /* 0x288 */ s16 blinkTimer; /* 0x28A */ s16 eyeState; - /* 0x28C */ f32 frameCount; + /* 0x28C */ f32 animEndFrame; /* 0x290 */ s16 isIdle; } EnEndingHero6; // size = 0x294 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 64bfdaecc..a40bf8718 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -75,7 +75,7 @@ void EnEstone_Init(Actor* thisx, PlayState* play) { this->scale = (Rand_ZeroFloat(1.0f) * 0.005f) + 0.005f; this->actor.velocity.y = Rand_ZeroFloat(10.0f) + 15.0f; this->actor.gravity = -2.0f; - } else { + } else { // ENESTONE_TYPE_SMALL this->actor.speed = Rand_ZeroFloat(3.0f) + 1.0f; this->scale = (Rand_ZeroFloat(1.0f) * 0.003f) + 0.003f; this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 7.0f; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4a9dd7ae1..cf6a9a7af 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6517,7 +6517,7 @@ 0x808E13FC:("DemoTreLgt_Draw",), 0x808E1560:("EnEncount2_Init",), 0x808E16B4:("EnEncount2_Destroy",), - 0x808E16FC:("EnEncount2_SetIdle",), + 0x808E16FC:("EnEncount2_SetupIdle",), 0x808E1714:("EnEncount2_Idle",), 0x808E17C4:("EnEncount2_Popped",), 0x808E18A8:("EnEncount2_Die",), @@ -16984,8 +16984,8 @@ 0x80C1E568:("EnDrs_Draw",), 0x80C1E690:("EnEndingHero_Init",), 0x80C1E738:("EnEndingHero_Destroy",), - 0x80C1E748:("func_80C1E748",), - 0x80C1E764:("func_80C1E764",), + 0x80C1E748:("EnEndingHero1_SetupIdle",), + 0x80C1E764:("EnEndingHero1_Idle",), 0x80C1E790:("EnEndingHero_Update",), 0x80C1E84C:("EnEndingHero_Draw",), 0x80C1E9E0:("DmBal_Init",), @@ -17069,26 +17069,26 @@ 0x80C23154:("EnBh_Draw",), 0x80C23230:("EnEndingHero2_Init",), 0x80C232D8:("EnEndingHero2_Destroy",), - 0x80C232E8:("func_80C232E8",), - 0x80C23304:("func_80C23304",), + 0x80C232E8:("EnEndingHero2_SetupIdle",), + 0x80C23304:("EnEndingHero2_Idle",), 0x80C23330:("EnEndingHero2_Update",), 0x80C23398:("EnEndingHero2_Draw",), 0x80C23460:("EnEndingHero3_Init",), 0x80C23508:("EnEndingHero3_Destroy",), - 0x80C23518:("func_80C23518",), - 0x80C23534:("func_80C23534",), + 0x80C23518:("EnEndingHero3_SetupIdle",), + 0x80C23534:("EnEndingHero3_Idle",), 0x80C23560:("EnEndingHero3_Update",), 0x80C235C8:("EnEndingHero3_Draw",), 0x80C23690:("EnEndingHero4_Init",), 0x80C23738:("EnEndingHero4_Destroy",), - 0x80C23748:("func_80C23748",), - 0x80C23764:("func_80C23764",), + 0x80C23748:("EnEndingHero4_SetupIdle",), + 0x80C23764:("EnEndingHero4_Idle",), 0x80C23790:("EnEndingHero4_Update",), 0x80C237F8:("EnEndingHero4_Draw",), 0x80C238C0:("EnEndingHero5_Init",), 0x80C23970:("EnEndingHero5_Destroy",), - 0x80C23980:("func_80C23980",), - 0x80C2399C:("func_80C2399C",), + 0x80C23980:("EnEndingHero5_SetupIdle",), + 0x80C2399C:("EnEndingHero5_Idle",), 0x80C239C8:("EnEndingHero5_Update",), 0x80C23A30:("EnEndingHero5_PostLimbDraw",), 0x80C23A7C:("EnEndingHero5_Draw",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f452ba3af..126d53c17 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -12771,7 +12771,7 @@ 0x80AC45B0:("D_80AC45B0","UNK_TYPE1","",0x1), 0x80AC45B4:("D_80AC45B4","UNK_TYPE1","",0x1), 0x80AC45B8:("D_80AC45B8","UNK_TYPE1","",0x1), - 0x80AC45BC:("D_80AC45BC","UNK_TYPE1","",0x1), + 0x80AC45BC:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80AC45D0:("D_80AC45D0","UNK_TYPE1","",0x1), 0x80AC460C:("D_80AC460C","UNK_TYPE1","",0x1), 0x80AC4610:("D_80AC4610","f32","",0x4), @@ -14662,7 +14662,7 @@ 0x80B65044:("D_80B65044","UNK_TYPE1","",0x1), 0x80B65064:("D_80B65064","UNK_TYPE1","",0x1), 0x80B6506C:("D_80B6506C","UNK_TYPE1","",0x1), - 0x80B65078:("D_80B65078","UNK_TYPE1","",0x1), + 0x80B65078:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80B65084:("D_80B65084","UNK_TYPE1","",0x1), 0x80B650B0:("D_80B650B0","f32","",0x4), 0x80B650B4:("D_80B650B4","f32","",0x4), From c4c7ca9f61aadf15c39e94a094dab882b32f64a7 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Sat, 12 Aug 2023 00:35:43 -0300 Subject: [PATCH 056/121] document object_dinofos (#1343) * initial commit of object_dinofos documentation * forgot to format * dinolfoslimb * eye texturs * desc position and eye tex name change * forgor the rest * removed object .h from .c #includes --- assets/xml/objects/object_dinofos.xml | 139 +++++++++--------- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 82 +++++------ .../actors/ovl_En_Dinofos/z_en_dinofos.h | 5 +- 3 files changed, 115 insertions(+), 111 deletions(-) diff --git a/assets/xml/objects/object_dinofos.xml b/assets/xml/objects/object_dinofos.xml index 435d60e95..7ed5f81f5 100644 --- a/assets/xml/objects/object_dinofos.xml +++ b/assets/xml/objects/object_dinofos.xml @@ -1,71 +1,76 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 f30bd45cd..e6602263a 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -6,7 +6,6 @@ #include "z_en_dinofos.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#include "objects/object_dinofos/object_dinofos.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) @@ -242,11 +241,11 @@ static DamageTable sDamageTable = { static CollisionCheckInfoInit sColChkInfoInit = { 4, 40, 100, 80 }; -static TexturePtr D_8089E33C[] = { - object_dinofos_Tex_008E30, - object_dinofos_Tex_009030, - object_dinofos_Tex_009230, - object_dinofos_Tex_009030, +static TexturePtr sEyeTextures[] = { + gDinolfosEyeOpenTex, + gDinolfosEyeHalfTex, + gDinolfosEyeClosedTex, + gDinolfosEyeHalfTex, }; static s16 sCsId = CS_ID_NONE; @@ -275,12 +274,12 @@ void EnDinofos_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, this->colliderJntSphElement); Collider_InitAndSetQuad(play, &this->colliderQuad, &this->actor, &sQuadInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dinofos_Skel_009570, &object_dinofos_Anim_002E40, - this->jointTable, this->morphTable, 21); + SkelAnime_InitFlex(play, &this->skelAnime, &gDinolfosSkel, &gDinolfosIdleAnim, this->jointTable, this->morphTable, + DINOLFOS_LIMB_MAX); if (D_8089E364 == 0) { - for (i = 0; i < ARRAY_COUNT(D_8089E33C); i++) { - D_8089E33C[i] = Lib_SegmentedToVirtual(D_8089E33C[i]); + for (i = 0; i < ARRAY_COUNT(sEyeTextures); i++) { + sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]); } D_8089E364 = 1; } @@ -467,9 +466,8 @@ void func_8089B100(EnDinofos* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f sp3C; - Animation_Change(&this->skelAnime, &object_dinofos_Anim_001CCC, 1.0f, - Animation_GetLastFrame(&object_dinofos_Anim_001CCC), - Animation_GetLastFrame(&object_dinofos_Anim_001CCC), ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gDinolfosJumpAnim, 1.0f, Animation_GetLastFrame(&gDinolfosJumpAnim), + Animation_GetLastFrame(&gDinolfosJumpAnim), ANIMMODE_ONCE, 0.0f); func_800BE33C(&subCam->eye, &subCam->at, &this->unk_29A, true); Math_Vec3f_Diff(&this->actor.world.pos, &player->actor.world.pos, &sp3C); this->unk_2BC.x = player->actor.world.pos.x + (0.4f * sp3C.x); @@ -534,7 +532,7 @@ void func_8089B4A4(EnDinofos* this) { if (this->unk_290 < 10) { Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS); } - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_00C974); + Animation_PlayOnce(&this->skelAnime, &gDinolfosIntroAnim); this->unk_2BC.x = (Math_SinS(this->actor.shape.rot.y + 0x200) * 123.0f) + this->actor.world.pos.x; this->unk_2BC.y = this->actor.floorHeight + 11.0f; this->unk_2BC.z = (Math_CosS(this->actor.shape.rot.y + 0x200) * 123.0f) + this->actor.world.pos.z; @@ -574,7 +572,7 @@ void func_8089B580(EnDinofos* this, PlayState* play) { } void func_8089B6E8(EnDinofos* this) { - Animation_MorphToPlayOnce(&this->skelAnime, &object_dinofos_Anim_009B70, -3.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gDinolfosCryAnim, -3.0f); this->actionFunc = func_8089B72C; } @@ -592,7 +590,7 @@ void func_8089B72C(EnDinofos* this, PlayState* play) { } void func_8089B7B0(EnDinofos* this) { - Animation_MorphToLoop(&this->skelAnime, &object_dinofos_Anim_002E40, -4.0f); + Animation_MorphToLoop(&this->skelAnime, &gDinolfosIdleAnim, -4.0f); this->unk_290 = (s32)Rand_ZeroFloat(20.0f) + 40; this->unk_292 = 30; this->actor.speed = 0.0f; @@ -620,7 +618,7 @@ void func_8089B8B0(EnDinofos* this, PlayState* play) { f32 phi_f0; if (this->actionFunc != func_8089B98C) { - Animation_MorphToLoop(&this->skelAnime, &object_dinofos_Anim_000580, -4.0f); + Animation_MorphToLoop(&this->skelAnime, &gDinolfosWalkAnim, -4.0f); if (Actor_OtherIsTargeted(play, &this->actor)) { phi_f0 = 170.0f; } else { @@ -675,7 +673,7 @@ void func_8089B98C(EnDinofos* this, PlayState* play) { void func_8089BAC0(EnDinofos* this) { if (this->actionFunc != func_8089BB60) { - Animation_MorphToLoop(&this->skelAnime, &object_dinofos_Anim_000580, -4.0f); + Animation_MorphToLoop(&this->skelAnime, &gDinolfosWalkAnim, -4.0f); this->actor.speed = 0.0f; } if (BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y) > 0) { @@ -716,8 +714,8 @@ void func_8089BBB4(EnDinofos* this, PlayState* play) { if (this->actionFunc == func_8089D1E0) { this->skelAnime.playSpeed = this->actor.speed * 0.166666671634f; } else { - Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speed * 0.166666671634f, 0.0f, - 0.0f, ANIMMODE_LOOP, -4.0f); + Animation_Change(&this->skelAnime, &gDinolfosSidestepAnim, this->actor.speed * 0.166666671634f, 0.0f, 0.0f, + ANIMMODE_LOOP, -4.0f); } this->actor.world.rot.y = BINANG_ADD(this->actor.shape.rot.y, 0x4000); @@ -796,10 +794,10 @@ void func_8089BD28(EnDinofos* this, PlayState* play) { void func_8089C024(EnDinofos* this, s32 arg1) { if (arg1 == 0) { - Animation_MorphToPlayOnce(&this->skelAnime, &object_dinofos_Anim_001CCC, 2.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gDinolfosJumpAnim, 2.0f); func_8089AD70(this); } else { - Animation_MorphToPlayOnce(&this->skelAnime, &object_dinofos_Anim_001CCC, -1.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gDinolfosJumpAnim, -1.0f); if ((arg1 == 2) || (arg1 == 3)) { this->colliderJntSph.base.acFlags &= ~AC_ON; func_8089AD70(this); @@ -863,10 +861,10 @@ void func_8089C2A8(EnDinofos* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->unk_290++; Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x1800); - if ((this->actor.velocity.y < 0.0f) && (this->skelAnime.animation == &object_dinofos_Anim_001CCC)) { + if ((this->actor.velocity.y < 0.0f) && (this->skelAnime.animation == &gDinolfosJumpAnim)) { this->colliderQuad.base.atFlags |= AT_ON; this->colliderJntSph.base.acFlags |= AC_ON; - Animation_Change(&this->skelAnime, &object_dinofos_Anim_0025B4, 1.0f, 7.0f, 13.0f, ANIMMODE_ONCE, -2.0f); + Animation_Change(&this->skelAnime, &gDinolfosAttackAnim, 1.0f, 7.0f, 13.0f, ANIMMODE_ONCE, -2.0f); } if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { @@ -877,9 +875,9 @@ void func_8089C2A8(EnDinofos* this, PlayState* play) { void func_8089C398(EnDinofos* this) { if (this->actionFunc != func_8089C2A8) { - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_000AF0); + Animation_PlayOnce(&this->skelAnime, &gDinolfosLandAnim); } else { - this->skelAnime.endFrame = Animation_GetLastFrame(&object_dinofos_Anim_0025B4); + this->skelAnime.endFrame = Animation_GetLastFrame(&gDinolfosAttackAnim); } if (this->actor.speed < 0.0f) { @@ -906,7 +904,7 @@ void func_8089C44C(EnDinofos* this, PlayState* play) { } void func_8089C4F8(EnDinofos* this) { - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_0025B4); + Animation_PlayOnce(&this->skelAnime, &gDinolfosAttackAnim); this->colliderQuad.base.atFlags &= ~AT_BOUNCED; Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_CRY); this->unk_290 = 0; @@ -937,8 +935,8 @@ void func_8089C56C(EnDinofos* this, PlayState* play) { } void func_8089C690(EnDinofos* this) { - Animation_Change(&this->skelAnime, &object_dinofos_Anim_0025B4, -1.0f, this->skelAnime.curFrame, 0.0f, - ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skelAnime, &gDinolfosAttackAnim, -1.0f, this->skelAnime.curFrame, 0.0f, ANIMMODE_ONCE, + 0.0f); this->colliderQuad.base.atFlags &= ~(AT_ON | AT_BOUNCED); if (this->actionFunc != func_8089C2A8) { this->actor.world.rot.y = this->actor.shape.rot.y; @@ -988,7 +986,7 @@ void func_8089C7B8(EnDinofos* this, PlayState* play) { } void func_8089C87C(EnDinofos* this, s32 arg1) { - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_00D21C); + Animation_PlayOnce(&this->skelAnime, &gDinolfosHitAnim); func_800BE5CC(&this->actor, &this->colliderJntSph, arg1); this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y); this->actor.speed = 10.0f; @@ -1021,7 +1019,7 @@ void func_8089C938(EnDinofos* this, PlayState* play) { } void func_8089CA14(EnDinofos* this) { - Animation_MorphToPlayOnce(&this->skelAnime, &object_dinofos_Anim_001040, -5.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gDinolfosFireStartAnim, -5.0f); this->colliderJntSph.base.acFlags |= AC_ON; this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.shape.rot.y; @@ -1042,7 +1040,7 @@ void func_8089CB10(EnDinofos* this, PlayState* play) { s32 i; Sphere16* worldSphere; - Animation_PlayLoop(&this->skelAnime, &object_dinofos_Anim_0013C0); + Animation_PlayLoop(&this->skelAnime, &gDinolfosFireLoopAnim); this->unk_290 = 20; this->actor.speed = 0.0f; this->colliderJntSph.base.atFlags |= AT_ON; @@ -1114,7 +1112,7 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { } void func_8089CF00(EnDinofos* this, PlayState* play) { - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_0017B8); + Animation_PlayOnce(&this->skelAnime, &gDinolfosFireEndAnim); this->colliderJntSph.base.atFlags &= ~AT_ON; if (play->sceneId == SCENE_MITURIN) { play->envCtx.lightSettingOverride = 255; @@ -1129,7 +1127,7 @@ void func_8089CF70(EnDinofos* this, PlayState* play) { } void func_8089CFAC(EnDinofos* this) { - Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_00ABD0); + Animation_PlayOnce(&this->skelAnime, &gDinolfosDieAnim); this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_DEAD); this->actor.speed = 0.0f; @@ -1169,7 +1167,7 @@ void func_8089D11C(EnDinofos* this, s16 arg1) { } else { this->actor.speed = 15.0f; } - Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speed * (1.0f / 7.5f), 0.0f, 0.0f, + Animation_Change(&this->skelAnime, &gDinolfosSidestepAnim, this->actor.speed * (1.0f / 7.5f), 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f); this->actor.world.rot.y = BINANG_ADD(this->actor.shape.rot.y, 0x4000); this->unk_292 = 10; @@ -1408,7 +1406,7 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { s32 func_8089DC4C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnDinofos* this = THIS; - if (limbIndex == 16) { + if (limbIndex == DINOLFOS_LIMB_HEAD) { rot->y -= this->unk_28E; } @@ -1436,7 +1434,7 @@ void func_8089DC84(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Matrix_MultZero(&this->limbPos[D_8089E3B0[limbIndex]]); } - if ((limbIndex == 14) && (this->unk_292 != this->unk_290) && + if ((limbIndex == DINOLFOS_LIMB_RIGHT_HAND) && (this->unk_292 != this->unk_290) && ((this->actionFunc == func_8089C56C) || (this->actionFunc == func_8089C2A8))) { Math_Vec3f_Copy(&sp74, &this->colliderQuad.dim.quad[0]); Math_Vec3f_Copy(&sp80, &this->colliderQuad.dim.quad[1]); @@ -1449,13 +1447,13 @@ void func_8089DC84(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto this->unk_292 = this->unk_290; } - if (limbIndex == 4) { + if (limbIndex == DINOLFOS_LIMB_LEFT_CLAWS) { Matrix_MultVecX(300.0f, &this->actor.shape.feetPos[0]); - } else if (limbIndex == 7) { + } else if (limbIndex == DINOLFOS_LIMB_RIGHT_CLAWS) { Matrix_MultVecX(300.0f, &this->actor.shape.feetPos[1]); } - if ((limbIndex == 16) && (this->actionFunc == func_8089B580)) { + if ((limbIndex == DINOLFOS_LIMB_HEAD) && (this->actionFunc == func_8089B580)) { if ((this->skelAnime.curFrame > 38.0f) && (this->skelAnime.curFrame <= 55.0f) && (this->unk_292 != this->unk_290)) { sp48 = Matrix_GetCurrent(); @@ -1480,7 +1478,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); - gSPSegment(POLY_OPA_DISP++, 0x08, D_8089E33C[this->unk_289]); + gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->unk_289]); gDPSetEnvColor(POLY_OPA_DISP++, 20, 40, 40, 255); Scene_SetRenderModeXlu(play, 0, 1); @@ -1491,7 +1489,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); - gSPSegment(POLY_XLU_DISP++, 0x08, D_8089E33C[this->unk_289]); + gSPSegment(POLY_XLU_DISP++, 0x08, sEyeTextures[this->unk_289]); gDPSetEnvColor(POLY_XLU_DISP++, 20, 40, 40, this->unk_288); Scene_SetRenderModeXlu(play, 1, 2); diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h index 4284d5595..81590268c 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h @@ -2,6 +2,7 @@ #define Z_EN_DINOFOS_H #include "global.h" +#include "objects/object_dinofos/object_dinofos.h" struct EnDinofos; @@ -10,8 +11,8 @@ typedef void (*EnDinofosActionFunc)(struct EnDinofos*, PlayState*); typedef struct EnDinofos { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[21]; - /* 0x206 */ Vec3s morphTable[21]; + /* 0x188 */ Vec3s jointTable[DINOLFOS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[DINOLFOS_LIMB_MAX]; /* 0x284 */ EnDinofosActionFunc actionFunc; /* 0x288 */ u8 unk_288; /* 0x289 */ u8 unk_289; From 93dbe1a02a75e12711f6341b450cae5d155f5739 Mon Sep 17 00:00:00 2001 From: Isghj <42048411+isghj5@users.noreply.github.com> Date: Fri, 11 Aug 2023 22:37:04 -0700 Subject: [PATCH 057/121] Tools: add assets/xml folder to rename_sym.sh directories --- tools/rename_sym.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/rename_sym.sh b/tools/rename_sym.sh index 227db4df7..ea9976997 100755 --- a/tools/rename_sym.sh +++ b/tools/rename_sym.sh @@ -10,4 +10,4 @@ fi #echo "Replace $1 with $2?" #read -grep -rl "$1" asm/**/*.s src/**/*.{c,h} include/**/*.h tools/disasm/functions.txt tools/disasm/variables.txt tools/sizes/*.csv | xargs sed -i "s/\b$1\b/$2/g" +grep -rl "$1" asm/**/*.s src/**/*.{c,h} include/**/*.h assets/xml/* tools/disasm/functions.txt tools/disasm/variables.txt tools/sizes/*.csv | xargs sed -i "s/\b$1\b/$2/g" From 138dd55662181b7de82f003c6b46ba3d0611b258 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 12 Aug 2023 00:31:46 -0700 Subject: [PATCH 058/121] Document object_tl (Snapper) (#1349) * Document object_tl (Snapper) * Rename skelAnimes/jointTables/morphTables --- assets/xml/objects/object_tl.xml | 140 +++++++++++------- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 74 ++++----- .../actors/ovl_En_Bigpamet/z_en_bigpamet.h | 12 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 101 +++++++------ src/overlays/actors/ovl_En_Kame/z_en_kame.h | 13 +- 5 files changed, 184 insertions(+), 156 deletions(-) diff --git a/assets/xml/objects/object_tl.xml b/assets/xml/objects/object_tl.xml index 7f0cfd756..3230f87f2 100644 --- a/assets/xml/objects/object_tl.xml +++ b/assets/xml/objects/object_tl.xml @@ -1,61 +1,87 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 e74c4c24e..f1bd9ae9b 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -116,10 +116,10 @@ static DamageTable sDamageTable = { }; TexturePtr D_80A29754[] = { - object_tl_Tex_0055A0, - object_tl_Tex_0057A0, - object_tl_Tex_0059A0, - object_tl_Tex_0057A0, + gSnapperEyeOpenTex, + gSnapperEyeHalfTex, + gSnapperEyeClosedTex, + gSnapperEyeHalfTex, }; static InitChainEntry sInitChain[] = { @@ -139,10 +139,10 @@ void EnBigpamet_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime2, &object_tl_Skel_007C70, &object_tl_Anim_004210, this->jointTable2, - this->morphTable2, OBJECT_TL_2_LIMB_MAX); - SkelAnime_InitFlex(play, &this->skelAnime1, &object_tl_Skel_001A50, &object_tl_Anim_000B30, this->jointTable1, - this->morphTable1, OBJECT_TL_1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->snapperSkelAnime, &gSnapperSkel, &gSnapperIdleAnim, this->snapperJointTable, + this->snapperMorphTable, SNAPPER_LIMB_MAX); + SkelAnime_InitFlex(play, &this->spikedSnapperSkelAnime, &gSpikedSnapperSkel, &gSpikedSnapperIdleAnim, + this->spikedSnapperJointTable, this->spikedSnapperMorphTable, SPIKED_SNAPPER_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 55.0f); @@ -386,7 +386,7 @@ void func_80A281DC(EnBigpamet* this, PlayState* play) { } void func_80A28274(EnBigpamet* this) { - Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_004210); + Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperIdleAnim); this->actor.draw = EnBigpamet_Draw; this->unk_29E = 20; this->actionFunc = func_80A282C8; @@ -413,14 +413,14 @@ void func_80A28378(EnBigpamet* this) { } void func_80A283A0(EnBigpamet* this, PlayState* play) { - SkelAnime_Update(&this->skelAnime2); + SkelAnime_Update(&this->snapperSkelAnime); if (this->actor.parent->params == GEKKO_ON_SNAPPER) { func_80A28E40(this); } } void func_80A283F0(EnBigpamet* this) { - Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_00823C); + Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperWalkAnim); this->actor.speed = 1.0f; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.params = ENBIGPAMET_1; @@ -428,7 +428,7 @@ void func_80A283F0(EnBigpamet* this) { } void func_80A2844C(EnBigpamet* this, PlayState* play) { - SkelAnime_Update(&this->skelAnime2); + SkelAnime_Update(&this->snapperSkelAnime); if (this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) { Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->actor.parent), @@ -442,7 +442,7 @@ void func_80A2844C(EnBigpamet* this, PlayState* play) { } void func_80A284E4(EnBigpamet* this) { - Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_001C68, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f); this->unk_29E = 0; this->unk_2A8 = 1.0f; this->unk_2A4 = 1.0f; @@ -453,13 +453,13 @@ void func_80A284E4(EnBigpamet* this) { } void func_80A2855C(EnBigpamet* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime2)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { func_80A28618(this); - } else if (this->skelAnime2.curFrame > 2.0f) { - this->unk_2A8 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.23333333f); - this->unk_2A4 = 1.5f - ((this->skelAnime2.curFrame - 2.0f) * 0.083333336f); + } else if (this->snapperSkelAnime.curFrame > 2.0f) { + this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * 0.23333333f); + this->unk_2A4 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * 0.083333336f); } else { - f32 curFrame = this->skelAnime2.curFrame; + f32 curFrame = this->snapperSkelAnime.curFrame; this->unk_2A4 = this->unk_2A8 = (0.25f * curFrame) + 1.0f; } @@ -575,7 +575,7 @@ void func_80A289C8(EnBigpamet* this, PlayState* play) { void func_80A28A28(EnBigpamet* this) { this->actor.draw = EnBigpamet_Draw; - Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_0031DC, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f); this->unk_2A8 = 0.1f; this->unk_2A4 = 1.0f; this->actor.world.rot.y = this->actor.shape.rot.y; @@ -587,7 +587,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x600); - if (SkelAnime_Update(&this->skelAnime2)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { if ((this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) || (this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER)) { func_80A283F0(this); @@ -595,7 +595,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) { func_80A284E4(this); } } else { - curFrame = this->skelAnime2.curFrame; + curFrame = this->snapperSkelAnime.curFrame; if (curFrame > 7.0f) { this->unk_2A8 = 1.5f - ((curFrame - 7.0f) * (1.0f / 6.0f)); @@ -610,7 +610,7 @@ void func_80A28A98(EnBigpamet* this, PlayState* play) { void func_80A28B98(EnBigpamet* this, PlayState* play) { Actor* collectible; - Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_000AF4); + Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim); this->collider.base.atFlags &= ~AT_ON; this->collider.info.bumper.dmgFlags = 0xF7CFFFFF; @@ -647,7 +647,7 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) { } void func_80A28D0C(EnBigpamet* this, PlayState* play) { - SkelAnime_Update(&this->skelAnime2); + SkelAnime_Update(&this->snapperSkelAnime); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND); func_80A27FE8(this, play); @@ -679,14 +679,14 @@ void func_80A28DC0(EnBigpamet* this, PlayState* play) { } void func_80A28E40(EnBigpamet* this) { - Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_000440, -2.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRearUpAnim, -2.0f); this->actor.flags |= ACTOR_FLAG_1; this->actor.speed = 0.0f; this->actionFunc = func_80A28E98; } void func_80A28E98(EnBigpamet* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime2)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { func_80A284E4(this); } } @@ -811,10 +811,10 @@ s32 EnBigpamet_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Ve EnBigpamet* this = THIS; if ((this->actionFunc == func_80A2855C) || (this->actionFunc == func_80A28A98)) { - if (limbIndex == OBJECT_TL_2_LIMB_02) { + if (limbIndex == SNAPPER_LIMB_HEAD) { Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A4, MTXMODE_APPLY); - } else if ((limbIndex == OBJECT_TL_2_LIMB_0B) || (limbIndex == OBJECT_TL_2_LIMB_09) || - (limbIndex == OBJECT_TL_2_LIMB_07) || (limbIndex == OBJECT_TL_2_LIMB_05)) { + } else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) || + (limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) { Matrix_Scale(this->unk_2A4, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY); } } @@ -824,7 +824,7 @@ s32 EnBigpamet_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnBigpamet_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnBigpamet* this = THIS; - if (limbIndex == OBJECT_TL_2_LIMB_01) { + if (limbIndex == SNAPPER_LIMB_BODY) { this->unk_2AC = Matrix_GetCurrent()->yw; } } @@ -838,8 +838,9 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]); - SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount, - EnBigpamet_OverrideLimbDraw2, EnBigpamet_PostLimbDraw2, &this->actor); + SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable, + this->snapperSkelAnime.dListCount, EnBigpamet_OverrideLimbDraw2, EnBigpamet_PostLimbDraw2, + &this->actor); func_80A292A8(this, play); CLOSE_DISPS(play->state.gfxCtx); @@ -848,7 +849,7 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) { s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBigpamet* this = THIS; - if (limbIndex == OBJECT_TL_1_LIMB_01) { + if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) { if (this->actionFunc == func_80A28D0C) { pos->y -= 2500.0f; } else { @@ -856,7 +857,7 @@ s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Ve } } - if ((this->unk_2A8 != 1.0f) && (limbIndex == OBJECT_TL_1_LIMB_03)) { + if ((this->unk_2A8 != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { Matrix_Scale(1.0f, this->unk_2A8, this->unk_2A8, MTXMODE_APPLY); } @@ -866,7 +867,7 @@ s32 EnBigpamet_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnBigpamet* this = THIS; - if (limbIndex == OBJECT_TL_1_LIMB_01) { + if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) { this->unk_2AC = Matrix_GetCurrent()->yw; } } @@ -875,7 +876,8 @@ void func_80A2966C(Actor* thisx, PlayState* play) { EnBigpamet* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); - SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount, - EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor); + SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable, + this->spikedSnapperSkelAnime.dListCount, EnBigpamet_OverrideLimbDraw1, + EnBigpamet_PostLimbDraw1, &this->actor); func_80A292A8(this, play); } diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h index a3561c33b..eeb97566e 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h @@ -22,12 +22,12 @@ typedef struct { typedef struct EnBigpamet { /* 0x000 */ Actor actor; - /* 0x144 */ SkelAnime skelAnime2; - /* 0x188 */ Vec3s jointTable2[OBJECT_TL_2_LIMB_MAX]; - /* 0x1D6 */ Vec3s morphTable2[OBJECT_TL_2_LIMB_MAX]; - /* 0x224 */ SkelAnime skelAnime1; - /* 0x268 */ Vec3s jointTable1[OBJECT_TL_1_LIMB_MAX]; - /* 0x280 */ Vec3s morphTable1[OBJECT_TL_1_LIMB_MAX]; + /* 0x144 */ SkelAnime snapperSkelAnime; + /* 0x188 */ Vec3s snapperJointTable[SNAPPER_LIMB_MAX]; + /* 0x1D6 */ Vec3s snapperMorphTable[SNAPPER_LIMB_MAX]; + /* 0x224 */ SkelAnime spikedSnapperSkelAnime; + /* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX]; + /* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x298 */ EnBigpametActionFunc actionFunc; /* 0x29C */ u8 unk_29C; /* 0x29E */ s16 unk_29E; 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 c46e97750..49b3e4452 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -6,7 +6,6 @@ #include "z_en_kame.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#include "objects/object_tl/object_tl.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -111,8 +110,7 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -static TexturePtr D_80AD8E34[] = { object_tl_Tex_0055A0, object_tl_Tex_0057A0, object_tl_Tex_0059A0, - object_tl_Tex_0057A0 }; +static TexturePtr D_80AD8E34[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex }; static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_SNAPPER, ICHAIN_CONTINUE), @@ -126,10 +124,10 @@ void EnKame_Init(Actor* thisx, PlayState* play) { EnKame* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime1, &object_tl_Skel_007C70, &object_tl_Anim_004210, this->jointTable1, - this->morphTable1, 13); - SkelAnime_InitFlex(play, &this->skelAnime2, &object_tl_Skel_001A50, &object_tl_Anim_000B30, this->jointTable2, - this->morphTable2, 4); + SkelAnime_InitFlex(play, &this->snapperSkelAnime, &gSnapperSkel, &gSnapperIdleAnim, this->snapperJointTable, + this->snapperMorphTable, SNAPPER_LIMB_MAX); + SkelAnime_InitFlex(play, &this->spikedSnapperSkelAnime, &gSpikedSnapperSkel, &gSpikedSnapperIdleAnim, + this->spikedSnapperJointTable, this->spikedSnapperMorphTable, SPIKED_SNAPPER_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 55.0f); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -185,7 +183,7 @@ void func_80AD7018(EnKame* this, PlayState* play) { } void func_80AD70A0(EnKame* this) { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_004210, -5.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperIdleAnim, -5.0f); this->actor.speed = 0.0f; this->actionFunc = func_80AD70EC; } @@ -193,7 +191,7 @@ void func_80AD70A0(EnKame* this) { void func_80AD70EC(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (Animation_OnFrame(&this->skelAnime1, 10.0f)) { + if (Animation_OnFrame(&this->snapperSkelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE); this->unk_2A0 = 40; } @@ -201,15 +199,15 @@ void func_80AD70EC(EnKame* this, PlayState* play) { if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.xzDistToPlayer < 240.0f)) { func_80AD73A8(this); - } else if (SkelAnime_Update(&this->skelAnime1)) { + } else if (SkelAnime_Update(&this->snapperSkelAnime)) { func_80AD71B4(this); } } void func_80AD71B4(EnKame* this) { - Animation_MorphToLoop(&this->skelAnime1, &object_tl_Anim_00823C, -5.0f); + Animation_MorphToLoop(&this->snapperSkelAnime, &gSnapperWalkAnim, -5.0f); this->actor.speed = 0.5f; - this->unk_29E = Animation_GetLastFrame(&object_tl_Anim_00823C) * ((s32)Rand_ZeroFloat(5.0f) + 3); + this->unk_29E = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3); this->unk_2A4 = this->actor.shape.rot.y; this->collider.base.acFlags |= (AC_HARD | AC_ON); this->collider.base.colType = COLTYPE_HARD; @@ -225,7 +223,7 @@ void func_80AD7254(EnKame* this, PlayState* play) { return; } - SkelAnime_Update(&this->skelAnime1); + SkelAnime_Update(&this->snapperSkelAnime); if (this->unk_2A4 != this->actor.shape.rot.y) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100); @@ -237,13 +235,13 @@ void func_80AD7254(EnKame* this, PlayState* play) { this->unk_29E--; if (this->unk_29E == 0) { func_80AD70A0(this); - } else if (Animation_OnFrame(&this->skelAnime1, 0.0f) || Animation_OnFrame(&this->skelAnime1, 15.0f)) { + } else if (Animation_OnFrame(&this->snapperSkelAnime, 0.0f) || Animation_OnFrame(&this->snapperSkelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK); } } void func_80AD73A8(EnKame* this) { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_001C68, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f); this->unk_29E = 0; this->unk_2AC = 1.0f; this->unk_2A8 = 1.0f; @@ -257,7 +255,7 @@ void func_80AD73A8(EnKame* this) { void func_80AD7424(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && ((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) { func_80AD76CC(this); @@ -267,11 +265,11 @@ void func_80AD7424(EnKame* this, PlayState* play) { func_80AD7B18(this); } } - } else if (this->skelAnime1.curFrame > 2.0f) { - this->unk_2AC = 1.5f - ((this->skelAnime1.curFrame - 2.0f) * (7.0f / 30)); - this->unk_2A8 = 1.5f - ((this->skelAnime1.curFrame - 2.0f) * (1.0f / 12)); + } else if (this->snapperSkelAnime.curFrame > 2.0f) { + this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30)); + this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12)); } else { - f32 frame = this->skelAnime1.curFrame; + f32 frame = this->snapperSkelAnime.curFrame; this->unk_2AC = (0.25f * frame) + 1.0f; this->unk_2A8 = (0.25f * frame) + 1.0f; @@ -402,7 +400,7 @@ void func_80AD7948(EnKame* this, PlayState* play) { void func_80AD7B18(EnKame* this) { this->actor.draw = EnKame_Draw; - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0031DC, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f); this->actor.speed = 0.0f; this->unk_2AC = 0.1f; this->unk_2A8 = 1.0f; @@ -411,13 +409,13 @@ void func_80AD7B18(EnKame* this) { } void func_80AD7B90(EnKame* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { func_80AD71B4(this); - } else if (this->skelAnime1.curFrame > 7.0f) { - this->unk_2AC = 1.5f - ((this->skelAnime1.curFrame - 7.0f) * (1.0f / 6)); - this->unk_2A8 = 1.5f - ((this->skelAnime1.curFrame - 7.0f) * (1.0f / 6)); + } else if (this->snapperSkelAnime.curFrame > 7.0f) { + this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); + this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); } else { - f32 frame = this->skelAnime1.curFrame; + f32 frame = this->snapperSkelAnime.curFrame; this->unk_2AC = (0.2f * frame) + 0.1f; this->unk_2A8 = ((1.0f / 14) * frame) + 1.0f; @@ -426,11 +424,11 @@ void func_80AD7B90(EnKame* this, PlayState* play) { void func_80AD7C54(EnKame* this) { if (this->actionFunc == func_80AD7E0C) { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0035EC, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperBouncedUprightAnim, -3.0f); this->unk_29E = 1; this->collider.info.bumper.dmgFlags &= ~0x8000; } else { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0039C0, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipOverAnim, -3.0f); this->unk_29E = 0; this->collider.info.bumper.dmgFlags |= 0x8000; } @@ -447,7 +445,7 @@ void func_80AD7C54(EnKame* this) { } void func_80AD7D40(EnKame* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { if (this->unk_29E == 1) { func_80AD71B4(this); } else { @@ -458,7 +456,7 @@ void func_80AD7D40(EnKame* this, PlayState* play) { } void func_80AD7DA4(EnKame* this) { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0027D8, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim, -3.0f); this->collider.base.acFlags |= AC_ON; this->collider.base.acFlags &= ~AC_HARD; this->collider.base.colType = COLTYPE_HIT6; @@ -469,11 +467,11 @@ void func_80AD7DA4(EnKame* this) { void func_80AD7E0C(EnKame* this, PlayState* play) { if (this->unk_29E > 0) { this->unk_29E--; - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { if (Rand_ZeroOne() > 0.5f) { - Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_0027D8); + Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim); } else { - Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_002F88); + Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperFailToFlipUprightAnim); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_ROAR); } } @@ -483,16 +481,16 @@ void func_80AD7E0C(EnKame* this, PlayState* play) { } void func_80AD7EC0(EnKame* this) { - Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_002510, -3.0f); + Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipUprightAnim, -3.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP); this->actionFunc = func_80AD7F10; } void func_80AD7F10(EnKame* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; func_80AD71B4(this); - } else if (this->skelAnime1.curFrame >= 10.0f) { + } else if (this->snapperSkelAnime.curFrame >= 10.0f) { this->actor.shape.shadowDraw = NULL; this->collider.base.acFlags &= ~AC_ON; this->collider.info.bumper.dmgFlags &= ~0x8000; @@ -525,9 +523,9 @@ void func_80AD7FF8(EnKame* this, PlayState* play) { } void func_80AD8060(EnKame* this) { - s16 lastFrame = Animation_GetLastFrame(&object_tl_Anim_0008B4); + s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim); - Animation_Change(&this->skelAnime1, &object_tl_Anim_0008B4, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); + Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE); this->collider.base.acFlags &= ~AC_ON; @@ -535,13 +533,13 @@ void func_80AD8060(EnKame* this) { } void func_80AD810C(EnKame* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime1)) { + if (SkelAnime_Update(&this->snapperSkelAnime)) { func_80AD7DA4(this); } } void func_80AD8148(EnKame* this, PlayState* play) { - Animation_PlayLoop(&this->skelAnime1, &object_tl_Anim_000AF4); + Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20); this->collider.base.acFlags &= ~AC_ON; this->collider.base.atFlags &= ~AT_ON; @@ -565,7 +563,7 @@ void func_80AD8148(EnKame* this, PlayState* play) { } void func_80AD825C(EnKame* this, PlayState* play) { - SkelAnime_Update(&this->skelAnime1); + SkelAnime_Update(&this->snapperSkelAnime); if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND); func_80AD8364(this); @@ -590,7 +588,7 @@ void func_80AD8364(EnKame* this) { void func_80AD8388(EnKame* this, PlayState* play) { Vec3f sp34; - SkelAnime_Update(&this->skelAnime1); + SkelAnime_Update(&this->snapperSkelAnime); this->actor.colorFilterTimer = 100; if (this->unk_29E > 0) { this->unk_29E--; @@ -756,9 +754,10 @@ s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s EnKame* this = THIS; if ((this->actionFunc == func_80AD7424) || (this->actionFunc == func_80AD7B90)) { - if (limbIndex == 2) { + if (limbIndex == SNAPPER_LIMB_HEAD) { Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2A8, MTXMODE_APPLY); - } else if ((limbIndex == 11) || (limbIndex == 9) || (limbIndex == 7) || (limbIndex == 5)) { + } else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) || + (limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) { Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); } } @@ -777,7 +776,7 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Matrix_MultZero(&this->limbPos[D_80AD8EA4[limbIndex]]); } - if (limbIndex == 1) { + if (limbIndex == SNAPPER_LIMB_BODY) { s32 i; Vec3f* ptr; Vec3f* ptr2; @@ -810,8 +809,8 @@ void EnKame_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]); - SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount, - func_80AD8A48, func_80AD8AF8, &this->actor); + SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable, + this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); @@ -828,11 +827,11 @@ void EnKame_Draw(Actor* thisx, PlayState* play) { s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnKame* this = THIS; - if (limbIndex == 1) { + if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) { pos->y -= 700.0f; } - if ((this->unk_2AC != 1.0f) && (limbIndex == 3)) { + if ((this->unk_2AC != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { Matrix_Scale(1.0f, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); } return false; @@ -842,6 +841,6 @@ void func_80AD8D64(Actor* thisx, PlayState* play) { EnKame* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); - SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount, - Enkame_OverrideLimbDraw, NULL, &this->actor); + SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable, + this->spikedSnapperSkelAnime.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.h b/src/overlays/actors/ovl_En_Kame/z_en_kame.h index b6ebc3a23..f721e3ed8 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h @@ -2,6 +2,7 @@ #define Z_EN_KAME_H #include "global.h" +#include "objects/object_tl/object_tl.h" struct EnKame; @@ -9,12 +10,12 @@ typedef void (*EnKameActionFunc)(struct EnKame*, PlayState*); typedef struct EnKame { /* 0x000 */ Actor actor; - /* 0x144 */ SkelAnime skelAnime1; - /* 0x188 */ Vec3s jointTable1[13]; - /* 0x1D6 */ Vec3s morphTable1[13]; - /* 0x224 */ SkelAnime skelAnime2; - /* 0x268 */ Vec3s jointTable2[4]; - /* 0x280 */ Vec3s morphTable2[4]; + /* 0x144 */ SkelAnime snapperSkelAnime; + /* 0x188 */ Vec3s snapperJointTable[SNAPPER_LIMB_MAX]; + /* 0x1D6 */ Vec3s snapperMorphTable[SNAPPER_LIMB_MAX]; + /* 0x224 */ SkelAnime spikedSnapperSkelAnime; + /* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX]; + /* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x298 */ EnKameActionFunc actionFunc; /* 0x29C */ u8 unk_29C; /* 0x29D */ u8 drawDmgEffType; From 656fd08ee828024f5a0e888f293ca95b7a83cd64 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 12 Aug 2023 11:44:35 -0400 Subject: [PATCH 059/121] Gamestate table (#1354) * gamestate_table.h * move macros * bss * format --- include/macros.h | 10 ---- include/segment_symbols.h | 5 -- include/tables/gamestate_table.h | 17 +++++++ include/variables.h | 3 -- include/z64game.h | 21 ++++++++ src/code/graph.c | 30 ++++-------- src/code/z_game_dlftbls.c | 48 ++++++++++++------- .../actors/ovl_Dm_Char01/z_dm_char01.c | 2 +- 8 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 include/tables/gamestate_table.h diff --git a/include/macros.h b/include/macros.h index f28315815..b03d01b3e 100644 --- a/include/macros.h +++ b/include/macros.h @@ -53,21 +53,11 @@ // 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.saveInfo.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER) -#define CONTROLLER1(gameState) (&(gameState)->input[0]) -#define CONTROLLER2(gameState) (&(gameState)->input[1]) -#define CONTROLLER3(gameState) (&(gameState)->input[2]) -#define CONTROLLER4(gameState) (&(gameState)->input[3]) - #define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0) #define CHECK_BTN_ANY(state, combo) (((state) & (combo)) != 0) #define CHECK_FLAG_ALL(flags, mask) (((flags) & (mask)) == (mask)) -#define ALIGN8(val) (((val) + 7) & ~7) -#define ALIGN16(val) (((val) + 0xF) & ~0xF) -#define ALIGN64(val) (((val) + 0x3F) & ~0x3F) -#define ALIGN256(val) (((val) + 0xFF) & ~0xFF) - #define BIT_FLAG_TO_SHIFT(flag) \ ((flag & 0x80) ? 7 : \ (flag & 0x40) ? 6 : \ diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 214970933..6bf163379 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -71,11 +71,6 @@ DECLARE_SEGMENT(code) DECLARE_ROM_SEGMENT(code) DECLARE_BSS_SEGMENT(code) -DECLARE_OVERLAY_SEGMENT(title) -DECLARE_OVERLAY_SEGMENT(select) -DECLARE_OVERLAY_SEGMENT(opening) -DECLARE_OVERLAY_SEGMENT(file_choose) -DECLARE_OVERLAY_SEGMENT(daytelop) DECLARE_OVERLAY_SEGMENT(kaleido_scope) DECLARE_OVERLAY_SEGMENT(player_actor) diff --git a/include/tables/gamestate_table.h b/include/tables/gamestate_table.h new file mode 100644 index 000000000..958e2fa4a --- /dev/null +++ b/include/tables/gamestate_table.h @@ -0,0 +1,17 @@ +/** + * Gamestate Table + * + * DEFINE_GAMESTATE should be used for gamestates with code loaded from an overlay + * - Argument 0: Gamestate type name (without State suffix, also used for Init and Destroy function names) + * - Argument 1: Gamestate id enum name + * - Argument 2: Gamestate overlay segment name without the `ovl_` prefix + * + * DEFINE_GAMESTATE_INTERNAL should be used for gamestates that aren't an overlay, the first two arguments are the same as for DEFINE_GAMESTATE + */ +/* 0x00 */ DEFINE_GAMESTATE_INTERNAL(Setup, GAMESTATE_SETUP) +/* 0x01 */ DEFINE_GAMESTATE(MapSelect, GAMESTATE_MAP_SELECT, select) +/* 0x02 */ DEFINE_GAMESTATE(ConsoleLogo, GAMESTATE_CONSOLE_LOGO, title) +/* 0x03 */ DEFINE_GAMESTATE_INTERNAL(Play, GAMESTATE_PLAY) +/* 0x04 */ DEFINE_GAMESTATE(TitleSetup, GAMESTATE_TITLE_SETUP, opening) +/* 0x05 */ DEFINE_GAMESTATE(FileSelect, GAMESTATE_FILE_SELECT, file_choose) +/* 0x06 */ DEFINE_GAMESTATE(DayTelop, GAMESTATE_DAYTELOP, daytelop) diff --git a/include/variables.h b/include/variables.h index 0afe12864..e1fa8b491 100644 --- a/include/variables.h +++ b/include/variables.h @@ -226,9 +226,6 @@ extern ActorId gMaxActorId; extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[]; extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; -extern GameStateOverlay gGameStateOverlayTable[]; -extern s32 gGraphNumGameStates; - // extern UNK_TYPE4 D_801BDAC0; // extern UNK_TYPE4 D_801BDAC4; // extern UNK_TYPE4 D_801BDAC8; diff --git a/include/z64game.h b/include/z64game.h index 87dc80764..87dffe5c3 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -12,6 +12,18 @@ struct GraphicsContext; struct GameState; +#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) enumName, +#define DEFINE_GAMESTATE(typeName, enumName, name) DEFINE_GAMESTATE_INTERNAL(typeName, enumName) + +typedef enum GameStateId { +#include "tables/gamestate_table.h" + /* 0x07 */ GAMESTATE_ID_MAX +} GameStateId; + +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL + + typedef void (*GameStateFunc)(struct GameState* gameState); typedef struct { @@ -85,6 +97,15 @@ extern f32 gFramerateDivisorHalf; extern f32 gFramerateDivisorThird; +extern GameStateOverlay gGameStateOverlayTable[GAMESTATE_ID_MAX]; +extern GameStateId gGraphNumGameStates; + + +#define CONTROLLER1(gameState) (&(gameState)->input[0]) +#define CONTROLLER2(gameState) (&(gameState)->input[1]) +#define CONTROLLER3(gameState) (&(gameState)->input[2]) +#define CONTROLLER4(gameState) (&(gameState)->input[3]) + #define STOP_GAMESTATE(curState) \ do { \ GameState* state = curState; \ diff --git a/src/code/graph.c b/src/code/graph.c index 24a554dc2..fe1542f66 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -75,27 +75,17 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { GameStateOverlay* Graph_GetNextGameState(GameState* gameState) { GameStateFunc gameStateInit = GameState_GetInit(gameState); - if (gameStateInit == Setup_Init) { - return &gGameStateOverlayTable[0]; - } - if (gameStateInit == MapSelect_Init) { - return &gGameStateOverlayTable[1]; - } - if (gameStateInit == ConsoleLogo_Init) { - return &gGameStateOverlayTable[2]; - } - if (gameStateInit == Play_Init) { - return &gGameStateOverlayTable[3]; - } - if (gameStateInit == TitleSetup_Init) { - return &gGameStateOverlayTable[4]; - } - if (gameStateInit == FileSelect_Init) { - return &gGameStateOverlayTable[5]; - } - if (gameStateInit == DayTelop_Init) { - return &gGameStateOverlayTable[6]; + // Generates code to match gameStateInit to a gamestate entry and returns it if found +#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) \ + if (gameStateInit == typeName##_Init) { \ + return &gGameStateOverlayTable[enumName]; \ } +#define DEFINE_GAMESTATE(typeName, enumName, name) DEFINE_GAMESTATE_INTERNAL(typeName, enumName) + +#include "tables/gamestate_table.h" + +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL return NULL; } diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c index 7336b01f6..cb3aee317 100644 --- a/src/code/z_game_dlftbls.c +++ b/src/code/z_game_dlftbls.c @@ -6,22 +6,38 @@ #include "overlays/gamestates/ovl_title/z_title.h" #include "z_title_setup.h" -#define GAMESTATE_OVERLAY(name, init, destroy, size) \ - { \ - NULL, SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \ - SEGMENT_END(ovl_##name), 0, init, destroy, 0, 0, 0, size \ - } -#define GAMESTATE_OVERLAY_INTERNAL(init, destroy, size) \ - { NULL, 0, 0, NULL, NULL, 0, init, destroy, 0, 0, 0, size } +// Linker symbol declarations (used in the table below) +#define DEFINE_GAMESTATE(_typeName, _enumName, segmentName) DECLARE_OVERLAY_SEGMENT(segmentName) +#define DEFINE_GAMESTATE_INTERNAL(_typeName, _enumName) -GameStateOverlay gGameStateOverlayTable[] = { - GAMESTATE_OVERLAY_INTERNAL(Setup_Init, Setup_Destroy, sizeof(SetupState)), - GAMESTATE_OVERLAY(select, MapSelect_Init, MapSelect_Destroy, sizeof(MapSelectState)), - GAMESTATE_OVERLAY(title, ConsoleLogo_Init, ConsoleLogo_Destroy, sizeof(ConsoleLogoState)), - GAMESTATE_OVERLAY_INTERNAL(Play_Init, Play_Destroy, sizeof(PlayState)), - GAMESTATE_OVERLAY(opening, TitleSetup_Init, TitleSetup_Destroy, sizeof(TitleSetupState)), - GAMESTATE_OVERLAY(file_choose, FileSelect_Init, FileSelect_Destroy, sizeof(FileSelectState)), - GAMESTATE_OVERLAY(daytelop, DayTelop_Init, DayTelop_Destroy, sizeof(DayTelopState)), +#include "tables/gamestate_table.h" + +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL + +// Gamestate Overlay Table definition +#define DEFINE_GAMESTATE_INTERNAL(typeName, _enumName) \ + { NULL, 0, 0, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, 0, sizeof(typeName##State) }, + +#define DEFINE_GAMESTATE(typeName, _enumName, segmentName) \ + { NULL, \ + (uintptr_t)SEGMENT_ROM_START(ovl_##segmentName), \ + (uintptr_t)SEGMENT_ROM_END(ovl_##segmentName), \ + SEGMENT_START(ovl_##segmentName), \ + SEGMENT_END(ovl_##segmentName), \ + NULL, \ + typeName##_Init, \ + typeName##_Destroy, \ + NULL, \ + NULL, \ + 0, \ + sizeof(typeName##State) }, + +GameStateOverlay gGameStateOverlayTable[GAMESTATE_ID_MAX] = { +#include "tables/gamestate_table.h" }; -s32 gGraphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable); +#undef DEFINE_GAMESTATE +#undef DEFINE_GAMESTATE_INTERNAL + +GameStateId gGraphNumGameStates = GAMESTATE_ID_MAX; 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 96941b8cc..f31b6d308 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -3,7 +3,7 @@ * Overlay: ovl_Dm_Char01 * Description: Woodfall scene objects (temple, water, walls, etc) */ -#include "prevent_bss_reordering.h" + #include "z_dm_char01.h" #include "objects/object_mtoride/object_mtoride.h" #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" From a6a94e543c58a4edd20a9a0b76e9def79dfdafdc Mon Sep 17 00:00:00 2001 From: gamestabled <55638330+gamestabled@users.noreply.github.com> Date: Sat, 12 Aug 2023 12:15:14 -0400 Subject: [PATCH 060/121] EnMnk OK and partially documented. handing off to the next ape enthusiast (#1277) * EnMnk OK and partially documented. handing off to the next ape enthusiast * run format.py * fix trailing comma warning * Monkey PR Review (#1) * PR Review * a little more * oops * Reordering Monkey, anim * cleanup, typos * More PR Suggestions * namefixer * fix master * limbIndex * PR Review --------- Co-authored-by: gamestabled Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: engineer124 --- assets/xml/objects/object_mnk.xml | 17 +- spec | 3 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 2407 +++++++++++++++++++-- src/overlays/actors/ovl_En_Mnk/z_en_mnk.h | 69 +- undefined_syms.txt | 11 - 5 files changed, 2300 insertions(+), 207 deletions(-) diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml index d585972c0..ee2d1a55e 100644 --- a/assets/xml/objects/object_mnk.xml +++ b/assets/xml/objects/object_mnk.xml @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -73,7 +73,12 @@ - + + + + + + @@ -104,14 +109,14 @@ - + - + @@ -121,6 +126,6 @@ - + diff --git a/spec b/spec index 3e7b86be0..d102c0160 100644 --- a/spec +++ b/spec @@ -3073,8 +3073,7 @@ beginseg name "ovl_En_Mnk" compress include "build/src/overlays/actors/ovl_En_Mnk/z_en_mnk.o" - include "build/data/ovl_En_Mnk/ovl_En_Mnk.data.o" - include "build/data/ovl_En_Mnk/ovl_En_Mnk.reloc.o" + include "build/src/overlays/actors/ovl_En_Mnk/ovl_En_Mnk_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index ef064969e..fef78d7cd 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -15,8 +15,34 @@ void EnMnk_Destroy(Actor* thisx, PlayState* play); void EnMnk_Update(Actor* thisx, PlayState* play); void EnMnk_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit En_Mnk_InitVars = { +// Draw funcs +void EnMnk_MonkeyTiedUp_Draw(Actor* thisx, PlayState* play); +void EnMnk_MonkeyHanging_Draw(Actor* thisx, PlayState* play); + +// Action funcs +void EnMnk_Monkey_WaitToRunAndWaitAtEachPoint(EnMnk* this, PlayState* play); +void EnMnk_MonkeyTiedUp_Wait(EnMnk* this, PlayState* play); +void EnMnk_MonkeyHanging_StruggleBeforeDunk(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitToTalkAfterRun(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitForPlayerApproach(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitToFollowPath(EnMnk* this, PlayState* play); +void EnMnk_MonkeyTiedUp_WaitUnused(EnMnk* this, PlayState* play); +void EnMnk_MonkeyTiedUp_WaitForInstrument(EnMnk* this, PlayState* play); +void EnMnk_MonkeyTiedUp_WaitForCutRope(EnMnk* this, PlayState* play); +void EnMnk_MonkeyHanging_WaitAfterDunk(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitToTalkAfterSaved(EnMnk* this, PlayState* play); + +void EnMnk_DoNothing(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitOutsideWoods(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitOutsideChamber(EnMnk* this, PlayState* play); +void EnMnk_Monkey_WaitToGuideThroughWoods(EnMnk* this, PlayState* play); +void func_80AB9084(EnMnk* this, PlayState* play); +void func_80AB92CC(EnMnk* this, PlayState* play); + +s32 EnMnk_ValidatePictograph(PlayState* play, Actor* thisx); +s32 EnMnk_AlreadyExists(EnMnk* this, PlayState* play); + +const ActorInit En_Mnk_InitVars = { ACTOR_EN_MNK, ACTORCAT_NPC, FLAGS, @@ -28,191 +54,2198 @@ ActorInit En_Mnk_InitVars = { (ActorFunc)EnMnk_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80AB9D10 = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000200, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0x01000200, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 15, 30, 0, { 0, 0, 0 } }, }; -#endif - -extern ColliderCylinderInit D_80AB9D10; - -extern UNK_TYPE D_06003584; -extern UNK_TYPE D_060082C8; -extern UNK_TYPE D_06008814; -extern UNK_TYPE D_06009CC0; -extern UNK_TYPE D_060105DC; - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4D10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4E34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4E58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4E88.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4F68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB4F8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB50B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB50D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5148.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB51C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB52E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_Init.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_Destroy.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5A64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_ValidatePictograph.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5B84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5BCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5C14.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5C74.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5CD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5F6C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB60FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB61E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6304.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB63CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB64B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB65F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB675C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6870.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6920.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB69C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6AF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6B78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6BE4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6E08.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6EB0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB6F98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7108.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7204.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB72BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7354.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB740C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7488.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7504.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB75A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7620.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB76B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB794C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7AC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7B20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7DCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB7E50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8040.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB80BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB81D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8478.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB852C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB85C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8644.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB86AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8750.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8878.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8968.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB89F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8A74.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8BD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8C60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8CFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8E4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8EF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB8FD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB9084.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB92CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB94E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_Update.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB96A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB96E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB9708.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB973C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB977C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB97B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB99D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_Draw.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB9BAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB9C4C.s") +typedef enum { + /* 0 */ MONKEY_TIEDUP_ANIM_NONE = -1, + /* 0 */ MONKEY_TIEDUP_ANIM_KICKAROUND, + /* 1 */ MONKEY_TIEDUP_ANIM_KICKUPANDDOWN, + /* 2 */ MONKEY_TIEDUP_ANIM_SHH, + /* 3 */ MONKEY_TIEDUP_ANIM_SING, + /* 4 */ MONKEY_TIEDUP_ANIM_SMALLCLAPFEET, + /* 5 */ MONKEY_TIEDUP_ANIM_LARGECLAPFEET, + /* 6 */ MONKEY_TIEDUP_ANIM_SHAKEHEAD, + /* 7 */ MONKEY_TIEDUP_ANIM_WAIT, + /* 8 */ MONKEY_TIEDUP_ANIM_CONFUSED +} MonkeyTiedUpAnim; + +typedef enum { + /* 0 */ MONKEY_HANGING_ANIM_FREEZE, + /* 1 */ MONKEY_HANGING_ANIM_RISE, + /* 2 */ MONKEY_HANGING_ANIM_STRUGGLE +} MonkeyHangingAnim; + +typedef enum { + /* 0 */ MONKEY_FOLLOWPATH_RESULT_FOLLOWING, + /* 1 */ MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_REACHEDPOINT, + /* 2 */ MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_FINISHEDPATH, + /* 3 */ MONKEY_FOLLOWPATH_RESULT_LONGRANGE_REACHEDPOINT, + /* 4 */ MONKEY_FOLLOWPATH_RESULT_LONGRANGE_FINISHEDPATH +} MonkeyFollowPathResult; + +#define MONKEY_FOLLOWPATH_FLAGS_REACHNEXTPOINT (1 << 0) +#define MONKEY_FOLLOWPATH_FLAGS_LONGRANGE (1 << 1) + +AnimationHeader* sMonkeyTiedUpAnimations[] = { + &object_mnk_Anim_00D1C8, &object_mnk_Anim_00CD4C, &object_mnk_Anim_00C23C, + &object_mnk_Anim_00F248, &object_mnk_Anim_00F9A4, &object_mnk_Anim_00FE34, + &object_mnk_Anim_00EC44, &object_mnk_Anim_010298, &object_mnk_Anim_00CAE8, +}; + +AnimationHeader* sMonkeyTiedUpPoleAnimations[] = { + &object_mnk_Anim_003584, &object_mnk_Anim_005194, &object_mnk_Anim_0052C4, + &object_mnk_Anim_003854, &object_mnk_Anim_005390, &object_mnk_Anim_005414, + &object_mnk_Anim_0037E8, &object_mnk_Anim_0054B4, &object_mnk_Anim_003504, +}; + +AnimationHeader* sMonkeyHangingAnimations[] = { + &object_mnk_Anim_0062D8, + &object_mnk_Anim_007380, + &gMonkeyHangingStruggleAnim, +}; + +AnimationHeader* sMonkeyHangingRopeAnimations[] = { + &object_mnk_Anim_01C1B8, + &object_mnk_Anim_01C1F8, + &gMonkeyHangingRopeStruggleAnim, +}; + +AnimationHeader* sMonkeyAnimations[] = { + &object_mnk_Anim_0105DC, &object_mnk_Anim_009FE0, &object_mnk_Anim_0099B0, &object_mnk_Anim_0095B4, + &object_mnk_Anim_0095B4, &object_mnk_Anim_00B864, &object_mnk_Anim_00B864, &object_mnk_Anim_009CC0, + &object_mnk_Anim_009CC0, &object_mnk_Anim_008814, &object_mnk_Anim_005A08, &object_mnk_Anim_01A4F8, + &object_mnk_Anim_01B468, &object_mnk_Anim_01BB0C, &object_mnk_Anim_01C17C, +}; + +u32 D_80AB9DD8[] = { 2, 2, 3, 4, 5, 6, 100 }; + +Color_RGBA8 sMonkeyHangingSplashPrimColor = { 255, 255, 155, 255 }; +Color_RGBA8 sMonkeyHangingSplashEnvColor = { 255, 100, 0, 255 }; + +static Vec3f sMonkeyFocusPosOffset = { 300.0f, 400.0f, 0.0f }; + +TexturePtr sMonkeyFaceTextures[] = { + object_mnk_Tex_015020, object_mnk_Tex_015920, object_mnk_Tex_016120, object_mnk_Tex_016920, + object_mnk_Tex_017120, object_mnk_Tex_017920, object_mnk_Tex_018120, +}; + +void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { + Animation_Change(&this->skelAnime, sMonkeyTiedUpAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), mode, morphFrames); + Animation_Change(&this->propSkelAnime, sMonkeyTiedUpPoleAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), mode, morphFrames); + + switch (animIndex) { + case MONKEY_TIEDUP_ANIM_KICKAROUND: + this->unk_3E0 = 5; + break; + + case MONKEY_TIEDUP_ANIM_SHAKEHEAD: + this->unk_3E0 = 4; + break; + + case MONKEY_TIEDUP_ANIM_SING: + case MONKEY_TIEDUP_ANIM_CONFUSED: + this->unk_3E0 = 6; + break; + + default: + this->unk_3E0 = 0; + break; + } + this->animIndex = animIndex; +} + +void EnMnk_MonkeyTiedUp_SetAnim(EnMnk* this, s32 animIndex) { + EnMnk_MonkeyTiedUp_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); +} + +void EnMnk_MonkeyTiedUp_SetNewAnim(EnMnk* this, s32 animIndex) { + if (this->animIndex != animIndex) { + EnMnk_MonkeyTiedUp_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); + } +} + +void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { + Animation_Change(&this->skelAnime, sMonkeyHangingAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), mode, morphFrames); + Animation_Change(&this->propSkelAnime, sMonkeyHangingRopeAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), mode, morphFrames); + this->animIndex = animIndex; +} + +void EnMnk_MonkeyHanging_SetAnim(EnMnk* this, s32 animIndex) { + EnMnk_MonkeyHanging_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); +} + +void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { + s32 pad; + + if (animIndex == 100) { + animIndex = (s32)Rand_ZeroFloat(3.99f) + 7; + } + if ((animIndex == 4) || (animIndex == 6)) { + Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], -1.0f, + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, mode, morphFrames); + } else { + Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), mode, morphFrames); + } + this->unk_3E0 = 0; + this->animIndex = animIndex; +} + +void EnMnk_Monkey_SetAnim(EnMnk* this, s32 animIndex) { + EnMnk_Monkey_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); +} + +void EnMnk_Monkey_SetupWaitToRunAndWaitAtEachPoint(EnMnk* this, PlayState* play) { + this->picto.actor.textId = 0x7D8; + this->actionFunc = EnMnk_Monkey_WaitToRunAndWaitAtEachPoint; + this->destPointIndex = 0; + this->flags |= MONKEY_FLAGS_1 | MONKEY_FLAGS_2; + this->flags &= ~MONKEY_FLAGS_40; + Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_008814); + this->picto.actor.velocity.y = 0.0f; + this->picto.actor.terminalVelocity = 0.0f; + this->picto.actor.gravity = 0.0f; +} + +void EnMnk_Monkey_StartInvisible(EnMnk* this, PlayState* play) { + this->picto.actor.draw = NULL; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->collider.dim.radius = 100; + this->flags |= MONKEY_FLAGS_8; + this->flags |= MONKEY_FLAGS_20; + if ((MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) && + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + Actor_Kill(&this->picto.actor); + return; + } +} + +void EnMnk_MonkeyTiedUp_Init(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + s16 csId; + s32 i; + + this->actionFunc = EnMnk_MonkeyTiedUp_Wait; + this->picto.actor.flags |= ACTOR_FLAG_2000000; + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkeleton, &object_mnk_Anim_003584, + this->propJointTable, this->propMorphTable, OBJECT_MNK_1_LIMB_MAX); + this->cueId = 4; + this->animIndex = MONKEY_TIEDUP_ANIM_NONE; + EnMnk_MonkeyTiedUp_ChangeAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND, ANIMMODE_ONCE, 0.0f); + this->picto.actor.draw = EnMnk_MonkeyTiedUp_Draw; + this->picto.actor.shape.shadowDraw = NULL; + this->flags |= MONKEY_FLAGS_1 | MONKEY_FLAGS_2 | MONKEY_FLAGS_20 | MONKEY_FLAGS_200; + csId = this->picto.actor.csId; + + for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { + this->csIdList[i] = csId; + if (csId != CS_ID_NONE) { + this->picto.actor.csId = csId; + csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId); + } + } + + this->csId = CS_ID_NONE; + this->picto.actor.csId = this->csIdList[0]; +} + +void EnMnk_MonkeyHanging_Init(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + func_800BC154(play, &play->actorCtx, &this->picto.actor, ACTORCAT_PROP); + this->actionFunc = EnMnk_MonkeyHanging_StruggleBeforeDunk; + this->picto.actor.textId = 0x8E8; + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkeleton, &gMonkeyHangingStruggleAnim, + this->propJointTable, this->propMorphTable, OBJECT_MNK_3_LIMB_MAX); + EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_STRUGGLE, ANIMMODE_LOOP, 0.0f); + this->unk_3E0 = 5; + this->picto.actor.draw = EnMnk_MonkeyHanging_Draw; + this->picto.actor.shape.shadowDraw = NULL; + this->flags |= MONKEY_FLAGS_1 | MONKEY_FLAGS_2 | MONKEY_FLAGS_20; + this->approachPlayerRadius = -0.3f; + this->unk_3C8 = 60; + play->envCtx.lightSettingOverride = 1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_08); +} + +void EnMnk_Init(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + s32 pad; + + Actor_SetScale(&this->picto.actor, 0.012f); + ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 12.0f); + this->actionFunc = EnMnk_DoNothing; + SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkeleton, &object_mnk_Anim_0105DC, this->jointTable, + this->morphTable, OBJECT_MNK_2_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_0105DC); + this->flags = 0; + this->unk_3D4 = 0; + this->unk_3E0 = 0; + this->unk_3CC = 0; + this->unk_3CE = 0; + this->cueId = 0; + this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; + this->picto.actor.colChkInfo.cylRadius = 40; + this->picto.actor.velocity.y = -9.0f; + this->picto.actor.terminalVelocity = -9.0f; + this->picto.actor.gravity = -1.0f; + Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + this->pathIndex = MONKEY_GET_PATH_INDEX(thisx); + this->approachPlayerRadius = 0.0f; + if (this->pathIndex == MONKEY_PATH_INDEX_NONE) { + this->pathIndex = PATH_INDEX_NONE; + } + + switch (MONKEY_GET_TYPE(thisx)) { + case MONKEY_0: + if (!Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor)) || + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor) + 1) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) { + Actor_Kill(&this->picto.actor); + return; + } + break; + + case MONKEY_OUTSIDEWOODS: + case MONKEY_OUTSIDEPALACE: + if (Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_OUTSIDECHAMBER: + if (Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_29_80)) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_TIED_UP: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_HANGING: + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_8: + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_29_80)) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_AFTER_SAVED: + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_80)) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_BY_WITCH: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_02) || CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME) || + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + Actor_Kill(thisx); + return; + } + break; + + case MONKEY_WOODS_GUIDE: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_02) || CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { + Actor_Kill(thisx); + return; + } + if (EnMnk_AlreadyExists(this, play)) { + Actor_Kill(thisx); + return; + } + break; + + default: + break; + } + + switch (MONKEY_GET_TYPE(thisx)) { + case MONKEY_0: + EnMnk_Monkey_SetupWaitToRunAndWaitAtEachPoint(this, play); + break; + + case MONKEY_OUTSIDEWOODS: + this->actionFunc = EnMnk_Monkey_WaitOutsideWoods; + CLEAR_EVENTINF(EVENTINF_25); + CLEAR_EVENTINF(EVENTINF_26); + this->picto.actor.textId = 0x7D0; + EnMnk_Monkey_StartInvisible(this, play); + break; + + case MONKEY_OUTSIDECHAMBER: + this->picto.actor.textId = 0x7D3; + this->actionFunc = EnMnk_Monkey_WaitOutsideChamber; + EnMnk_Monkey_StartInvisible(this, play); + this->collider.dim.radius = 120; + break; + + case MONKEY_BY_WITCH: + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitToFollowPath; + this->unk_3C8 = 0; + this->flags |= MONKEY_FLAGS_2; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.velocity.y = 0.0f; + this->picto.actor.terminalVelocity = 0.0f; + this->picto.actor.gravity = 0.0f; + break; + + case MONKEY_OUTSIDEPALACE: + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitToFollowPath; + this->unk_3C8 = 0; + break; + + case MONKEY_TIED_UP: + EnMnk_MonkeyTiedUp_Init(thisx, play); + break; + + case MONKEY_HANGING: + EnMnk_MonkeyHanging_Init(thisx, play); + break; + + case MONKEY_WOODS_GUIDE: + this->picto.actor.room = -1; + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitToGuideThroughWoods; + this->unk_3C8 = 0; + this->destPointIndex = 0; + + switch (this->picto.actor.home.rot.x) { + case 1: + this->picto.actor.textId = 0x7DD; + break; + + case 2: + this->picto.actor.textId = 0x7DE; + break; + + default: + this->picto.actor.textId = 0x7DC; + break; + } + break; + + case MONKEY_8: + this->actionFunc = func_80AB9084; + this->cueId = 0; + break; + + case MONKEY_AFTER_SAVED: + EnMnk_Monkey_SetAnim(this, 0); + this->unk_3C8 = 0; + this->actionFunc = EnMnk_Monkey_WaitToTalkAfterSaved; + this->picto.actor.textId = 0x8E5; + break; + + case MONKEY_10: + this->actionFunc = func_80AB92CC; + this->cueId = 0; + break; + + default: + this->actionFunc = EnMnk_DoNothing; + break; + } + + this->picto.actor.world.rot.x = this->picto.actor.world.rot.z = 0; + this->picto.actor.shape.rot.x = this->picto.actor.shape.rot.z = 0; + this->picto.validationFunc = EnMnk_ValidatePictograph; +} + +void EnMnk_Destroy(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + Collider_DestroyCylinder(play, &this->collider); + if ((MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_TIED_UP) && (this->flags & MONKEY_FLAGS_2000)) { + Item_Give(play, ITEM_SONG_SONATA); + CLEAR_EVENTINF(EVENTINF_24); + } +} + +s32 EnMnk_AlreadyExists(EnMnk* this, PlayState* play) { + Actor* thisActor = &this->picto.actor; + Actor* nextActor = NULL; + Actor* curActor; + + while (true) { + curActor = SubS_FindActor(play, nextActor, ACTORCAT_NPC, ACTOR_EN_MNK); + if ((curActor != NULL) && (curActor != thisActor)) { + if ((thisActor->home.pos.x == curActor->home.pos.x) && (thisActor->home.pos.y == curActor->home.pos.y) && + (thisActor->home.pos.z == curActor->home.pos.z)) { + return true; + } + nextActor = curActor->next; + continue; + } + + if ((curActor != NULL) && (curActor->next != NULL)) { + nextActor = curActor->next; + continue; + } + + return false; + }; +} + +s32 EnMnk_ValidatePictograph(PlayState* play, Actor* thisx) { + return Snap_ValidatePictograph(play, thisx, PICTO_VALID_MONKEY, &thisx->focus.pos, &thisx->shape.rot, 50.0f, 500.0f, + -1); +} + +void EnMnk_PlayWalkSfx(EnMnk* this) { + if (Animation_OnFrame(&this->skelAnime, 1.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_VO_WALK); + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_WALK); + } +} + +void EnMnk_PlayWaterWalkSfx(EnMnk* this) { + if (Animation_OnFrame(&this->skelAnime, 1.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_VO_WALK); + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_WALK_WATER); + } +} + +void EnMnk_SpawnWaterEffects(EnMnk* this, PlayState* play) { + Vec3f* effSpawnPos = &this->picto.actor.world.pos; + + EffectSsGRipple_Spawn(play, effSpawnPos, 150, 500, 0); + EffectSsGSplash_Spawn(play, effSpawnPos, NULL, NULL, 0, 200); +} + +void EnMnk_StartNextPath(EnMnk* this, PlayState* play) { + s32 pathIndex; + + EnMnk_Monkey_SetAnim(this, 1); + pathIndex = this->pathIndex; + this->picto.actor.speed = 0.0f; + if (pathIndex != PATH_INDEX_NONE) { + this->path = &play->setupPathList[pathIndex]; + } else { + this->path = NULL; + } +} + +s32 EnMnk_FollowPath(EnMnk* this, u16 flags) { + Path* path; + Vec3s* destPoint; + f32 dx; + f32 dz; + f32 distSq; + s16 arcTan; + + if (this->path == NULL) { + return MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_REACHEDPOINT; + } + + path = this->path; + destPoint = &((Vec3s*)Lib_SegmentedToVirtual(path->points))[this->destPointIndex]; + dx = destPoint->x - this->picto.actor.world.pos.x; + dz = destPoint->z - this->picto.actor.world.pos.z; + arcTan = Math_Atan2S_XY(dz, dx); + Math_SmoothStepToS(&this->picto.actor.world.rot.y, arcTan, 2, 0xBB8, 0xC8); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + arcTan -= this->picto.actor.world.rot.y; + + if (ABS_ALT(arcTan) < 0x3E8) { + if (this->picto.actor.speed < 7.5f) { + this->picto.actor.speed += 1.5f; + } + } else { + if (this->picto.actor.speed > 4.0f) { + this->picto.actor.speed -= 1.5f; + } else if (this->picto.actor.speed < 2.0f) { + this->picto.actor.speed += 1.5f; + } + } + + distSq = SQ(dx) + SQ(dz); + if (distSq < SQ(8.0f)) { + this->destPointIndex++; + this->picto.actor.world.pos.x = destPoint->x; + this->picto.actor.world.pos.z = destPoint->z; + if (this->destPointIndex >= path->count) { + return MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_FINISHEDPATH; + } + if (flags & MONKEY_FOLLOWPATH_FLAGS_REACHNEXTPOINT) { + return MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_REACHEDPOINT; + } + } else if ((flags & MONKEY_FOLLOWPATH_FLAGS_LONGRANGE) && (distSq < SQ(20.0f))) { + this->destPointIndex++; + if (this->destPointIndex >= path->count) { + return MONKEY_FOLLOWPATH_RESULT_LONGRANGE_FINISHEDPATH; + } + if (flags & MONKEY_FOLLOWPATH_FLAGS_REACHNEXTPOINT) { + return MONKEY_FOLLOWPATH_RESULT_LONGRANGE_REACHEDPOINT; + } + } + return MONKEY_FOLLOWPATH_RESULT_FOLLOWING; +} + +void func_80AB5F6C(EnMnk* this) { + s32 pad; + u32 animIndex; + + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + SkelAnime_Update(&this->skelAnime); + + if ((s32)this->skelAnime.curFrame == 0) { + if (this->unk_3C8 < 0) { + EnMnk_Monkey_ChangeAnim(this, 100, ANIMMODE_LOOP, 0.0f); + this->unk_3C8++; + } else if (this->unk_3C8 > 0) { + this->unk_3C8--; + } else { + + do { + animIndex = D_80AB9DD8[(s32)Rand_ZeroFloat(7.0f)]; + } while (animIndex == this->unk_3D4); + + EnMnk_Monkey_ChangeAnim(this, animIndex, ANIMMODE_LOOP, 0.0f); + + switch (animIndex) { + case 100: + this->unk_3C8 = -(s32)(Rand_ZeroFloat(6.0f) + 6.0f); + break; + + case 2: + this->unk_3C8 = Rand_ZeroFloat(6.0f) + 6.0f; + break; + + default: + this->unk_3C8 = Rand_ZeroFloat(2.0f) + 1.0f; + break; + } + + this->unk_3D4 = animIndex; + } + } +} + +void func_80AB60FC(EnMnk* this, PlayState* play) { + f32 depthInWater; + + SkelAnime_Update(&this->skelAnime); + if (EnMnk_FollowPath(this, 0) != MONKEY_FOLLOWPATH_RESULT_FOLLOWING) { + this->pathIndex = this->path->additionalPathIndex; + if (this->pathIndex == ADDITIONAL_PATH_INDEX_NONE) { + Flags_SetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor) + 1); + Actor_Kill(&this->picto.actor); + return; + } + } + + depthInWater = this->picto.actor.depthInWater; + if (depthInWater > 0.0f) { + this->picto.actor.world.pos.y += depthInWater; + if ((s32)this->skelAnime.curFrame == 0) { + EnMnk_SpawnWaterEffects(this, play); + } + EnMnk_PlayWaterWalkSfx(this); + return; + } + if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + EnMnk_PlayWalkSfx(this); + } +} + +void func_80AB61E8(EnMnk* this, PlayState* play) { + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x7D9: + Message_ContinueTextbox(play, 0x7DA); + EnMnk_Monkey_SetAnim(this, 3); + break; + + case 0x7DA: + Message_ContinueTextbox(play, 0x7DB); + EnMnk_Monkey_SetAnim(this, 2); + break; + + case 0x7DB: + Message_CloseTextbox(play); + EnMnk_StartNextPath(this, play); + this->destPointIndex = 0; + this->actionFunc = func_80AB60FC; + this->picto.actor.velocity.y = -20.0f; + this->picto.actor.terminalVelocity = -20.0f; + break; + + default: + break; + } + } + SkelAnime_Update(&this->skelAnime); +} + +void func_80AB6304(EnMnk* this, PlayState* play) { + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + this->flags |= MONKEY_FLAGS_4; + } + + SkelAnime_Update(&this->skelAnime); + if (this->flags & MONKEY_FLAGS_4) { + Message_ContinueTextbox(play, 0x7D9); + EnMnk_Monkey_SetAnim(this, 7); + this->actionFunc = func_80AB61E8; + this->flags &= ~MONKEY_FLAGS_4; + } +} + +void func_80AB63CC(EnMnk* this, PlayState* play) { + s32 pad; + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + this->flags |= MONKEY_FLAGS_4; + } + + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + + if (SkelAnime_Update(&this->skelAnime)) { + Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_008814); + this->actionFunc = func_80AB6304; + } + + if (this->picto.actor.velocity.y < 0.0f) { + this->flags &= ~MONKEY_FLAGS_2; + } + + if (Animation_OnFrame(&this->skelAnime, 5.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_VO_JOY); + } +} + +void func_80AB64B8(EnMnk* this, PlayState* play) { + if (!(this->flags & MONKEY_FLAGS_8)) { + SkelAnime_Update(&this->skelAnime); + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + } + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->picto.actor.flags &= ~ACTOR_FLAG_10000; + this->actionFunc = func_80AB63CC; + EnMnk_Monkey_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f); + this->picto.actor.velocity.y = 3.6f; + this->picto.actor.terminalVelocity = -9.0f; + this->picto.actor.gravity = -0.4f; + this->flags &= ~MONKEY_FLAGS_1; + this->flags &= ~MONKEY_FLAGS_4; + } else if (this->picto.actor.xzDistToPlayer < 100.0f) { + this->picto.actor.flags |= ACTOR_FLAG_10000; + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } else { + this->picto.actor.flags &= ~ACTOR_FLAG_10000; + } +} + +void EnMnk_Monkey_RunAndWaitAtEachPoint(EnMnk* this, PlayState* play) { + MonkeyFollowPathResult followPathResult; + + SkelAnime_Update(&this->skelAnime); + followPathResult = + EnMnk_FollowPath(this, MONKEY_FOLLOWPATH_FLAGS_REACHNEXTPOINT | MONKEY_FOLLOWPATH_FLAGS_LONGRANGE); + if (followPathResult != MONKEY_FOLLOWPATH_RESULT_FOLLOWING) { + if ((followPathResult == MONKEY_FOLLOWPATH_RESULT_SHORTRANGE_FINISHEDPATH) || + (followPathResult == MONKEY_FOLLOWPATH_RESULT_LONGRANGE_FINISHEDPATH)) { + this->pathIndex = this->path->additionalPathIndex; + if (this->pathIndex == ADDITIONAL_PATH_INDEX_NONE) { + this->pathIndex = PATH_INDEX_NONE; + } + this->path = &play->setupPathList[this->pathIndex]; + this->destPointIndex = 0; + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = func_80AB64B8; + this->picto.actor.terminalVelocity = -9.0f; + this->picto.actor.velocity.y = 0.0f; + this->picto.actor.speed = 0.0f; + this->picto.actor.gravity = -1.0f; + } else if (this->picto.actor.xzDistToPlayer > 160.0f) { + this->actionFunc = EnMnk_Monkey_WaitToRunAndWaitAtEachPoint; + this->flags |= MONKEY_FLAGS_1 | MONKEY_FLAGS_2; + this->picto.actor.speed = 0.0f; + EnMnk_Monkey_SetAnim(this, 9); + return; + } + } + + if (this->flags & MONKEY_FLAGS_40) { + EnMnk_PlayWalkSfx(this); + } else { + if ((s32)this->skelAnime.curFrame == 0) { + EnMnk_SpawnWaterEffects(this, play); + } + EnMnk_PlayWaterWalkSfx(this); + } +} + +void EnMnk_Monkey_WaitToRunAndWaitAtEachPoint(EnMnk* this, PlayState* play) { + s32 pad[2]; + + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + SkelAnime_Update(&this->skelAnime); + + if (this->picto.actor.xzDistToPlayer < 160.0f) { + this->flags |= MONKEY_FLAGS_80; + EnMnk_StartNextPath(this, play); + this->actionFunc = EnMnk_Monkey_RunAndWaitAtEachPoint; + this->flags &= ~MONKEY_FLAGS_1; + this->flags &= ~MONKEY_FLAGS_2; + } + + if (!(this->flags & MONKEY_FLAGS_40)) { + if (((s32)this->skelAnime.curFrame == 0) || Animation_OnFrame(&this->skelAnime, 14.0f)) { + EnMnk_SpawnWaterEffects(this, play); + } + } + + if (Animation_OnFrame(&this->skelAnime, 5.0f)) { + if ((this->unk_3D4 % 4) != 0) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_VO_JOY); + } + this->unk_3D4++; + } +} + +void EnMnk_Monkey_TalkAfterRun(EnMnk* this, PlayState* play) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + this->flags |= MONKEY_FLAGS_4; + Message_CloseTextbox(play); + } + + if (SkelAnime_Update(&this->skelAnime)) { + if (this->flags & MONKEY_FLAGS_4) { + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitToTalkAfterRun; + } else { + Animation_PlayOnce(&this->skelAnime, &object_mnk_Anim_009CC0); + } + } +} + +void EnMnk_Monkey_WaitToTalkAfterRun(EnMnk* this, PlayState* play) { + s32 pad[2]; + + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + SkelAnime_Update(&this->skelAnime); + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + Animation_PlayOnce(&this->skelAnime, &object_mnk_Anim_009CC0); + this->actionFunc = EnMnk_Monkey_TalkAfterRun; + this->flags &= ~MONKEY_FLAGS_4; + } else if (this->picto.actor.xzDistToPlayer < 100.0f) { + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } +} + +void EnMnk_Monkey_Run(EnMnk* this, PlayState* play) { + s32 switchFlag; + + SkelAnime_Update(&this->skelAnime); + if (EnMnk_FollowPath(this, MONKEY_FOLLOWPATH_FLAGS_LONGRANGE) != MONKEY_FOLLOWPATH_RESULT_FOLLOWING) { + EnMnk_Monkey_SetAnim(this, 0); + this->picto.actor.velocity.y = -9.0f; + this->picto.actor.terminalVelocity = -9.0f; + this->picto.actor.gravity = -1.0f; + this->picto.actor.speed = 0.0f; + if (MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDECHAMBER) { + switchFlag = MONKEY_GET_SWITCH_FLAG(&this->picto.actor); + if (switchFlag != 0x7F) { + Flags_SetSwitch(play, switchFlag + 1); + } + Actor_Kill(&this->picto.actor); + } else { + this->picto.actor.textId = 0x7D2; + this->actionFunc = EnMnk_Monkey_WaitToTalkAfterRun; + } + } + + if (this->picto.actor.depthInWater > 0.0f) { + this->picto.actor.world.pos.y += this->picto.actor.depthInWater; + if ((s32)this->skelAnime.curFrame == 0) { + EnMnk_SpawnWaterEffects(this, play); + } + EnMnk_PlayWaterWalkSfx(this); + } else if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + EnMnk_PlayWalkSfx(this); + } +} + +void EnMnk_Monkey_WaitToRun(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + if (CHECK_EVENTINF(EVENTINF_25)) { + EnMnk_StartNextPath(this, play); + this->destPointIndex = 0; + this->actionFunc = EnMnk_Monkey_Run; + this->collider.dim.radius = 15; + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + this->flags &= ~MONKEY_FLAGS_8; + } +} + +void EnMnk_Monkey_SetupRunAfterTalk(EnMnk* this, PlayState* play) { + Message_CloseTextbox(play); + EnMnk_StartNextPath(this, play); + this->destPointIndex = 0; + this->actionFunc = EnMnk_Monkey_Run; + this->collider.dim.radius = 15; + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + this->unk_3E0 = 0; + this->flags &= ~MONKEY_FLAGS_8; +} + +void EnMnk_Monkey_TalkAfterApproach(EnMnk* this, PlayState* play) { + if (SkelAnime_Update(&this->skelAnime)) { + EnMnk_Monkey_ChangeAnim(this, 100, ANIMMODE_ONCE, 0.0f); + SkelAnime_Update(&this->skelAnime); + } + + switch (Message_GetState(&play->msgCtx)) { + case TEXT_STATE_CHOICE: + if (Message_ShouldAdvance(play)) { + switch (play->msgCtx.choiceIndex) { + case 1: + Audio_PlaySfx_MessageDecide(); + EnMnk_Monkey_ChangeAnim(this, 10, ANIMMODE_ONCE, -5.0f); + Message_ContinueTextbox(play, 0x7D7); + break; + + case 0: + Audio_PlaySfx_MessageCancel(); + EnMnk_Monkey_SetAnim(this, 7); + Message_ContinueTextbox(play, 0x7D6); + this->unk_3E0 = 6; + break; + } + } + break; + + case TEXT_STATE_5: + if (Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x7D0: + EnMnk_Monkey_SetAnim(this, 3); + Message_ContinueTextbox(play, 0x7D1); + this->unk_3E0 = 5; + break; + + case 0x7D3: + case 0x7D6: + EnMnk_Monkey_SetAnim(this, 3); + Message_ContinueTextbox(play, 0x7D4); + break; + + case 0x7D1: + EnMnk_Monkey_SetAnim(this, 7); + Message_ContinueTextbox(play, 0x7D2); + this->unk_3E0 = 4; + break; + + case 0x7D4: + EnMnk_Monkey_SetAnim(this, 5); + Message_ContinueTextbox(play, 0x7D5); + this->unk_3E0 = 6; + break; + + case 0x7D2: + SET_EVENTINF(EVENTINF_25); + EnMnk_Monkey_SetupRunAfterTalk(this, play); + SET_WEEKEVENTREG(WEEKEVENTREG_79_02); + break; + + case 0x7D7: + EnMnk_Monkey_SetupRunAfterTalk(this, play); + SET_WEEKEVENTREG(WEEKEVENTREG_08_02); + break; + + default: + break; + } + } + break; + + default: + break; + } +} + +void EnMnk_Monkey_MoveRelativeToPlayer(EnMnk* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s16 angleToPlayer = Math_Atan2S_XY(player->actor.world.pos.z - this->picto.actor.home.pos.z, + player->actor.world.pos.x - this->picto.actor.home.pos.x); + + this->picto.actor.shape.rot.y = angleToPlayer; + + if (this->flags & MONKEY_FLAGS_10) { + this->picto.actor.shape.rot.y = (this->picto.actor.shape.rot.y + 0x8000) & 0xFFFF; + } + + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + this->picto.actor.world.pos.x = + (Math_SinS(angleToPlayer) * this->approachPlayerRadius) + this->picto.actor.home.pos.x; + this->picto.actor.world.pos.z = + (Math_CosS(angleToPlayer) * this->approachPlayerRadius) + this->picto.actor.home.pos.z; +} + +void EnMnk_Monkey_UnapproachPlayer(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + this->approachPlayerRadius -= 5.0f; + EnMnk_Monkey_MoveRelativeToPlayer(this, play); + if (this->approachPlayerRadius < 4.0f) { + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitForPlayerApproach; + this->flags &= ~MONKEY_FLAGS_10; + this->approachPlayerRadius = 0.0f; + } + EnMnk_PlayWalkSfx(this); + if ((MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDEWOODS) && + (MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) && + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + EnMnk_Monkey_SetAnim(this, 2); + this->actionFunc = EnMnk_Monkey_WaitToRun; + } +} + +void EnMnk_Monkey_WaitToTalkAfterApproach(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + EnMnk_Monkey_MoveRelativeToPlayer(this, play); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + if (MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDECHAMBER) { + EnMnk_Monkey_SetAnim(this, 2); + } else { + EnMnk_Monkey_SetAnim(this, 5); + } + this->unk_3E0 = 6; + this->actionFunc = EnMnk_Monkey_TalkAfterApproach; + if (MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) { + Flags_SetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor)); + } + } else if ((MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDEWOODS) && + (MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) && + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + EnMnk_Monkey_SetAnim(this, 2); + this->actionFunc = EnMnk_Monkey_WaitToRun; + } else if (this->picto.actor.xzDistToPlayer > 150.0f) { + EnMnk_Monkey_SetAnim(this, 1); + this->flags |= MONKEY_FLAGS_10; + this->actionFunc = EnMnk_Monkey_UnapproachPlayer; + } else if (this->picto.actor.xzDistToPlayer < 100.0f) { + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } +} + +void EnMnk_Monkey_ApproachPlayer(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + this->approachPlayerRadius += 5.0f; + EnMnk_Monkey_MoveRelativeToPlayer(this, play); + + if (this->approachPlayerRadius > 84.0f) { + if (MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDECHAMBER) { + EnMnk_Monkey_SetAnim(this, 7); + } else { + EnMnk_Monkey_SetAnim(this, 2); + } + this->actionFunc = EnMnk_Monkey_WaitToTalkAfterApproach; + } + + EnMnk_PlayWalkSfx(this); + + if ((MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDEWOODS) && + (MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) && + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + EnMnk_Monkey_SetAnim(this, 2); + this->actionFunc = EnMnk_Monkey_WaitToRun; + } +} + +void EnMnk_Monkey_WaitForPlayerApproach(EnMnk* this, PlayState* play) { + EnMnk_Monkey_MoveRelativeToPlayer(this, play); + SkelAnime_Update(&this->skelAnime); + + if (this->picto.actor.xzDistToPlayer < 200.0f) { + EnMnk_Monkey_SetAnim(this, 1); + this->actionFunc = EnMnk_Monkey_ApproachPlayer; + } + + if ((MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDEWOODS) && + (MONKEY_GET_SWITCH_FLAG(&this->picto.actor) != 0x7F) && + Flags_GetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor))) { + EnMnk_Monkey_SetAnim(this, 2); + this->actionFunc = EnMnk_Monkey_WaitToRun; + } +} + +void EnMnk_Monkey_Drop(EnMnk* this, PlayState* play) { + if (((this->picto.actor.world.pos.y - this->picto.actor.home.pos.y) < 40.0f) && + SkelAnime_Update(&this->skelAnime)) { + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitForPlayerApproach; + + if (MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDEWOODS) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_WALK); + } + } +} + +void EnMnk_Monkey_SetupDrop(EnMnk* this) { + this->flags &= ~MONKEY_FLAGS_20; + this->picto.actor.world.pos.y = this->picto.actor.home.pos.y + 200.0f; + this->actionFunc = EnMnk_Monkey_Drop; + this->picto.actor.velocity.y = -10.0f; + this->picto.actor.terminalVelocity = -10.0f; + this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.draw = EnMnk_Draw; + Animation_Change(&this->skelAnime, &object_mnk_Anim_008814, 1.0f, 10.0f, + Animation_GetLastFrame(&object_mnk_Anim_008814), ANIMMODE_ONCE, 0.0f); +} + +void EnMnk_Monkey_WaitOutsideWoods(EnMnk* this, PlayState* play) { + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + + if (((this->picto.actor.xzDistToPlayer < 200.0f) && CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) || + CHECK_EVENTINF(EVENTINF_26)) { + SET_EVENTINF(EVENTINF_26); + EnMnk_Monkey_SetupDrop(this); + } +} + +void EnMnk_Monkey_WaitOutsideChamber(EnMnk* this, PlayState* play) { + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + if ((this->picto.actor.xzDistToPlayer < 200.0f) && + ((CHECK_WEEKEVENTREG(WEEKEVENTREG_18_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_88_01)) && (play->curSpawn != 0))) { + EnMnk_Monkey_SetupDrop(this); + } +} + +void EnMnk_Monkey_FollowPathAndWait(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + if (EnMnk_FollowPath(this, MONKEY_FOLLOWPATH_FLAGS_LONGRANGE) != MONKEY_FOLLOWPATH_RESULT_FOLLOWING) { + this->pathIndex = this->path->additionalPathIndex; + if (this->pathIndex == ADDITIONAL_PATH_INDEX_NONE) { + Flags_SetSwitch(play, MONKEY_GET_SWITCH_FLAG(&this->picto.actor)); + Actor_Kill(&this->picto.actor); + return; + } + EnMnk_Monkey_SetAnim(this, 0); + this->actionFunc = EnMnk_Monkey_WaitToFollowPath; + this->picto.actor.speed = 0.0f; + } + EnMnk_PlayWalkSfx(this); +} + +void EnMnk_Monkey_WaitToFollowPath(EnMnk* this, PlayState* play) { + if ((this->picto.actor.playerHeightRel > -10.0f) && (this->picto.actor.xzDistToPlayer < 160.0f)) { + EnMnk_StartNextPath(this, play); + this->destPointIndex = 0; + this->actionFunc = EnMnk_Monkey_FollowPathAndWait; + } else { + func_80AB5F6C(this); + } +} + +s32 EnMnk_PlayerIsInTalkRange(EnMnk* this, PlayState* play) { + s32 absYawTowardsPlayer; + + if ((this->picto.actor.xzDistToPlayer < 100.0f) && (this->picto.actor.xzDistToPlayer > 20.0f)) { + absYawTowardsPlayer = ABS_ALT(this->picto.actor.yawTowardsPlayer); + if ((absYawTowardsPlayer > 0x4000) && Player_IsFacingActor(&this->picto.actor, 0x3000, play)) { + return true; + } + } + return false; +} + +void EnMnk_MonkeyTiedUp_TeachSong(EnMnk* this, PlayState* play) { + s32 pad; + + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + switch (play->msgCtx.currentTextId) { + case 0x8D9: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + break; + + case 0x8DC: + case 0x8DF: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND); + break; + + case 0x8DD: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_SMALLCLAPFEET); + this->unk_3E0 = 5; + break; + + case 0x8DE: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + break; + + case 0x8E0: + case 0x1B66: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_LARGECLAPFEET); + break; + + case 0x8E1: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + break; + + case 0x1B5C: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_SING); + break; + + case 0x8E2: + EnMnk_MonkeyTiedUp_SetNewAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND); + this->unk_3E0 = 0; + break; + + default: + break; + } + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && !(this->flags & MONKEY_FLAGS_4000) && + Message_ShouldAdvance(play)) { + + switch (play->msgCtx.choiceIndex) { + case 1: + this->picto.actor.csId = this->csIdList[5]; + this->csId = 5; + SET_WEEKEVENTREG(WEEKEVENTREG_09_80); + this->flags |= MONKEY_FLAGS_2000; + Audio_PlaySfx_MessageDecide(); + break; + + case 0: + Audio_PlaySfx_MessageCancel(); + this->picto.actor.csId = this->csIdList[4]; + this->csId = 4; + break; + + default: + break; + } + this->flags |= MONKEY_FLAGS_4000; + } + + if (this->picto.actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->picto.actor.csId)) { + this->flags &= ~MONKEY_FLAGS_4000; + CutsceneManager_StartWithPlayerCs(this->picto.actor.csId, &this->picto.actor); + + switch (this->csId) { + case 2: + this->csId = 3; + break; + + case 4: + this->csId = 3; + break; + + case 5: + this->csId = 6; + break; + + default: + this->picto.actor.csId = CS_ID_NONE; + return; + } + this->picto.actor.csId = this->csIdList[this->csId]; + } else { + CutsceneManager_Queue(this->picto.actor.csId); + } + } +} + +void EnMnk_MonkeyTiedUp_ReactToWrongInstrument(EnMnk* this, PlayState* play) { + Actor* actor = &this->picto.actor; + + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x8D4: + case 0x8DA: + case 0x8DB: + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument; + play->msgCtx.ocarinaMode = 4; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT); + if (this->csId != CS_ID_NONE) { + CutsceneManager_Stop(this->csId); + this->picto.actor.csId = this->csIdList[0]; + this->csId = CS_ID_NONE; + return; + } + break; + + case 0x8D5: + Message_ContinueTextbox(play, 0x8DA); + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + break; + + case 0x8D6: + Message_ContinueTextbox(play, 0x8DB); + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + break; + + default: + break; + } + } + + if (actor->csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(actor->csId)) { + CutsceneManager_Start(actor->csId, actor); + + this->csId = actor->csId; + actor->csId = (actor->csId == this->csIdList[0]) ? this->csIdList[1] : CS_ID_NONE; + } else { + CutsceneManager_Queue(actor->csId); + } + } +} + +void EnMnk_MonkeyTiedUp_TalkUnused(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + if (Actor_TextboxIsClosing(&this->picto.actor, play)) { + this->actionFunc = EnMnk_MonkeyTiedUp_WaitUnused; + } +} + +void EnMnk_MonkeyTiedUp_TransitionAfterTalk(EnMnk* this, PlayState* play) { + s32 pad; + + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + if (play->msgCtx.currentTextId == 0x8CD) { + if (this->skelAnime.curFrame <= 17.0f) { + this->unk_3E0 = 0; + } else { + this->unk_3E0 = 2; + } + } + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x8CA: + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + if (play->curSpawn != 1) { + Message_ContinueTextbox(play, 0x8CB); + SET_WEEKEVENTREG(WEEKEVENTREG_88_01); + } else { + Message_ContinueTextbox(play, 0x8EB); + this->flags |= MONKEY_FLAGS_1000; + } + break; + + case 0x8CB: + case 0x8EB: + case 0x8EC: + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyTiedUp_Wait; + this->cueId = 4; + EnMnk_MonkeyTiedUp_ChangeAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND, ANIMMODE_ONCE, -5.0f); + break; + + case 0x8CC: + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHH); + this->unk_3E0 = 2; + Message_ContinueTextbox(play, 0x8CD); + break; + + case 0x8CD: + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + Message_ContinueTextbox(play, 0x8CE); + break; + + case 0x8CE: + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + Message_ContinueTextbox(play, 0x8CF); + break; + + case 0x8CF: + case 0x8D0: + case 0x8D1: + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyTiedUp_WaitForCutRope; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + break; + + case 0x8D3: + if ((gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) || + (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT); + } else { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + Message_ContinueTextbox(play, 0x8D7); + } + break; + + case 0x8D2: + case 0x8D7: + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT); + break; + + default: + break; + } + } +} + +void EnMnk_MonkeyTiedUp_WaitUnused(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_MonkeyTiedUp_TalkUnused; + this->unk_3E0 = 0; + } else if (EnMnk_PlayerIsInTalkRange(this, play)) { + this->picto.actor.textId = 0x8E2; + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } +} + +void EnMnk_MonkeyTiedUp_WaitForInstrument(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (func_800B8718(&this->picto.actor, &play->state)) { + switch (gSaveContext.save.playerForm) { + case PLAYER_FORM_HUMAN: + case PLAYER_FORM_FIERCE_DEITY: + this->picto.actor.textId = 0x8D4; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + break; + + case PLAYER_FORM_GORON: + this->picto.actor.textId = 0x8D5; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + break; + + case PLAYER_FORM_ZORA: + this->picto.actor.textId = 0x8D6; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + break; + + case PLAYER_FORM_DEKU: + this->picto.actor.textId = 0x8D8; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + this->actionFunc = EnMnk_MonkeyTiedUp_TeachSong; + this->csId = 2; + SET_EVENTINF(EVENTINF_24); + this->picto.actor.csId = this->csIdList[2]; + play->msgCtx.ocarinaMode = 4; + CutsceneManager_Queue(this->csIdList[2]); + return; + + default: + this->picto.actor.textId = 0x8D4; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + break; + } + this->actionFunc = EnMnk_MonkeyTiedUp_ReactToWrongInstrument; + this->picto.actor.csId = this->csIdList[0]; + Message_StartTextbox(play, this->picto.actor.textId, NULL); + CutsceneManager_Queue(this->picto.actor.csId); + } else if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_MonkeyTiedUp_TransitionAfterTalk; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND); + } else if (EnMnk_PlayerIsInTalkRange(this, play)) { + this->picto.actor.textId = 0x8D3; + Actor_OfferTalk(&this->picto.actor, play, 100.0f); + func_800B874C(&this->picto.actor, play, 100.0f, 100.0f); + } +} + +void EnMnk_MonkeyTiedUp_TalkAfterCutRope(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_MonkeyTiedUp_TransitionAfterTalk; + this->picto.actor.flags &= ~ACTOR_FLAG_10000; + } else { + Actor_OfferTalk(&this->picto.actor, play, 150.0f); + } +} + +void EnMnk_MonkeyTiedUp_WaitForCutRope(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) || + (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHH); + this->unk_3E0 = 5; + } else { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_CONFUSED); + } + this->actionFunc = EnMnk_MonkeyTiedUp_TransitionAfterTalk; + } else if (this->collider.base.acFlags & AC_HIT) { + this->actionFunc = EnMnk_MonkeyTiedUp_TalkAfterCutRope; + this->picto.actor.textId = 0x8D2; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + this->picto.actor.flags |= ACTOR_FLAG_10000; + } else if (EnMnk_PlayerIsInTalkRange(this, play)) { + if ((gSaveContext.save.playerForm != PLAYER_FORM_FIERCE_DEITY) && + (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN)) { + this->picto.actor.textId = 0x8D1; + } else { + this->picto.actor.textId = 0x8D0; + } + Actor_OfferTalk(&this->picto.actor, play, 100.0f); + } +} + +void EnMnk_MonkeyTiedUp_Wait(EnMnk* this, PlayState* play) { + s32 pad; + + SkelAnime_Update(&this->skelAnime); + if (SkelAnime_Update(&this->propSkelAnime)) { + this->cueId--; + if (this->cueId < 0) { + this->cueId = 4; + EnMnk_MonkeyTiedUp_ChangeAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND, ANIMMODE_ONCE, -5.0f); + } else if (this->cueId == 0) { + EnMnk_MonkeyTiedUp_ChangeAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD, ANIMMODE_ONCE, -5.0f); + } else { + EnMnk_MonkeyTiedUp_ChangeAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND, ANIMMODE_ONCE, 0.0f); + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + } + } + if (func_800B8718(&this->picto.actor, &play->state)) { + this->picto.actor.textId = 0x8D8; + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + this->actionFunc = EnMnk_MonkeyTiedUp_TeachSong; + this->csId = 2; + SET_EVENTINF(EVENTINF_24); + this->picto.actor.csId = this->csIdList[2]; + play->msgCtx.ocarinaMode = 4; + CutsceneManager_Queue(this->csIdList[2]); + } else if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (this->picto.actor.textId == 0x8EC) { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_SHAKEHEAD); + } else { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKAROUND); + } + } else { + EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_KICKUPANDDOWN); + } + this->actionFunc = EnMnk_MonkeyTiedUp_TransitionAfterTalk; + } else if (EnMnk_PlayerIsInTalkRange(this, play)) { + if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if (this->flags & MONKEY_FLAGS_1000) { + this->picto.actor.textId = 0x8EC; + } else { + this->picto.actor.textId = 0x8CA; + } + func_800B874C(&this->picto.actor, play, 100.0f, 100.0f); + } else { + this->picto.actor.textId = 0x8CC; + } + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } else if ((play->curSpawn != 1) && (this->picto.actor.xzDistToPlayer < 140.0f) && + Player_IsFacingActor(&this->picto.actor, 0x3000, play)) { + this->picto.actor.textId = 0x8CA; + Actor_OfferTalk(&this->picto.actor, play, 140.0f); + } +} + +void EnMnk_MonkeyHanging_WaitForTextboxAfterDunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + if (this->flags & MONKEY_FLAGS_800) { + this->flags &= ~MONKEY_FLAGS_800; + CutsceneManager_Stop(this->picto.actor.csId); + } + Message_CloseTextbox(play); + this->actionFunc = EnMnk_MonkeyHanging_WaitAfterDunk; + func_800B7298(play, NULL, PLAYER_CSMODE_END); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_08); + } +} + +void EnMnk_MonkeyHanging_RaiseFromDunk2(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (this->unk_3C8 > 0) { + this->unk_3D0 -= 0x320; + this->approachPlayerRadius -= 0.01f; + this->unk_3C8--; + } else { + this->unk_3C8 = 240; + this->actionFunc = EnMnk_MonkeyHanging_WaitForTextboxAfterDunk; + EnMnk_MonkeyHanging_SetAnim(this, MONKEY_HANGING_ANIM_FREEZE); + Message_ContinueTextbox(play, 0x8EA); + } +} + +void EnMnk_MonkeyHanging_PauseDuringDunk2(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + if (this->unk_3C8 > 0) { + this->unk_3C8--; + } else { + this->unk_3C8 = 60; + this->actionFunc = EnMnk_MonkeyHanging_RaiseFromDunk2; + EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_RISE, ANIMMODE_ONCE, -5.0f); + this->unk_3E0 = 3; + } +} + +void EnMnk_MonkeyHanging_MakeSplash(EnMnk* this, PlayState* play) { + Vec3f effSpawnPos; + + Math_Vec3f_Copy(&effSpawnPos, &this->picto.actor.focus.pos); + effSpawnPos.y += 20.0f; + EffectSsGSplash_Spawn(play, &effSpawnPos, &sMonkeyHangingSplashPrimColor, &sMonkeyHangingSplashEnvColor, 0, 300); +} + +void EnMnk_MonkeyHanging_Dunk2(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (this->unk_3C8 > 0) { + this->unk_3D0 += 0x320; + this->approachPlayerRadius += 0.01f; + this->unk_3C8--; + if (this->unk_3C8 == 0xA) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_BOMB_DROP_WATER); + EnMnk_MonkeyHanging_MakeSplash(this, play); + } + } else { + this->unk_3C8 = 20; + this->actionFunc = EnMnk_MonkeyHanging_PauseDuringDunk2; + } +} + +void EnMnk_MonkeyHanging_Plead(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x8E8: + Message_ContinueTextbox(play, 0x8E9); + break; + + case 0x8E9: + this->actionFunc = EnMnk_MonkeyHanging_Dunk2; + Message_CloseTextbox(play); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_WAIT); + this->unk_3C8 = 60; + break; + + default: + break; + } + } + if (!(this->flags & MONKEY_FLAGS_800)) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + CutsceneManager_Queue(this->picto.actor.csId); + } else if (CutsceneManager_IsNext(this->picto.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->picto.actor.csId, &this->picto.actor); + this->flags |= MONKEY_FLAGS_800; + } else { + CutsceneManager_Queue(this->picto.actor.csId); + } + } +} + +void EnMnk_MonkeyHanging_WaitAfterDunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_MonkeyHanging_Plead; + CutsceneManager_Queue(this->picto.actor.csId); + SET_WEEKEVENTREG(WEEKEVENTREG_83_08); + EnMnk_MonkeyHanging_SetAnim(this, MONKEY_HANGING_ANIM_STRUGGLE); + this->unk_3E0 = 5; + } else if (this->unk_3C8 > 0) { + this->unk_3C8--; + if (this->picto.actor.isTargeted && (this->picto.actor.csId != CS_ID_NONE)) { + Actor_OfferTalk(&this->picto.actor, play, 1000.0f); + } + } else { + this->unk_3C8 = 240; + this->actionFunc = EnMnk_MonkeyHanging_StruggleBeforeDunk; + EnMnk_MonkeyHanging_SetAnim(this, MONKEY_HANGING_ANIM_STRUGGLE); + this->unk_3E0 = 5; + } +} + +void EnMnk_MonkeyHanging_RaiseFromDunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (this->unk_3C8 > 0) { + this->unk_3D0 -= 0x320; + this->approachPlayerRadius -= 0.01f; + this->unk_3C8--; + } else { + this->unk_3C8 = 240; + this->actionFunc = EnMnk_MonkeyHanging_WaitAfterDunk; + EnMnk_MonkeyHanging_SetAnim(this, MONKEY_HANGING_ANIM_FREEZE); + } +} + +void EnMnk_MonkeyHanging_PauseDuringDunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (this->unk_3C8 > 0) { + this->unk_3C8--; + } else { + this->unk_3C8 = 60; + this->actionFunc = EnMnk_MonkeyHanging_RaiseFromDunk; + EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_RISE, ANIMMODE_ONCE, -5.0f); + this->unk_3E0 = 3; + } +} + +void EnMnk_MonkeyHanging_Dunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (this->unk_3C8 > 0) { + this->unk_3D0 += 0x320; + this->approachPlayerRadius += 0.01f; + this->unk_3C8--; + if (this->unk_3C8 == 0xA) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_BOMB_DROP_WATER); + EnMnk_MonkeyHanging_MakeSplash(this, play); + } + } else { + this->unk_3C8 = 20; + this->actionFunc = EnMnk_MonkeyHanging_PauseDuringDunk; + } +} + +void EnMnk_MonkeyHanging_StruggleBeforeDunk(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + SkelAnime_Update(&this->propSkelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_MonkeyHanging_Plead; + CutsceneManager_Queue(this->picto.actor.csId); + SET_WEEKEVENTREG(WEEKEVENTREG_83_08); + } else if (this->unk_3C8 > 0) { + this->unk_3C8--; + if (this->picto.actor.isTargeted) { + Actor_OfferTalk(&this->picto.actor, play, 1000.0f); + } + } else { + this->unk_3C8 = 60; + this->actionFunc = EnMnk_MonkeyHanging_Dunk; + } +} + +void EnMnk_Monkey_GuideThroughWoods(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + + if (EnMnk_FollowPath(this, 0) != MONKEY_FOLLOWPATH_RESULT_FOLLOWING) { + this->pathIndex = this->path->additionalPathIndex; + if (this->pathIndex == ADDITIONAL_PATH_INDEX_NONE) { + Actor_Kill(&this->picto.actor); + return; + } + this->path = &play->setupPathList[this->pathIndex]; + this->destPointIndex = 0; + } + EnMnk_PlayWalkSfx(this); +} + +void EnMnk_Monkey_TalkBeforeGuideThroughWoods(EnMnk* this, PlayState* play) { + Math_SmoothStepToS(&this->picto.actor.world.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0xBB8, 0xC8); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0xBB8, 0xC8); + SkelAnime_Update(&this->skelAnime); + + if (Actor_TextboxIsClosing(&this->picto.actor, play)) { + EnMnk_StartNextPath(this, play); + this->actionFunc = EnMnk_Monkey_GuideThroughWoods; + this->flags |= MONKEY_FLAGS_8000; + } +} + +void EnMnk_Monkey_SetupTalkBeforeGuideThroughWoods(EnMnk* this) { + switch ((u32)Rand_ZeroFloat(6.0f)) { + case 0: + EnMnk_Monkey_SetAnim(this, 3); + break; + + case 1: + EnMnk_Monkey_SetAnim(this, 4); + break; + + case 2: + EnMnk_Monkey_SetAnim(this, 5); + break; + + case 3: + EnMnk_Monkey_SetAnim(this, 6); + break; + + case 4: + EnMnk_Monkey_SetAnim(this, 2); + break; + + default: + EnMnk_Monkey_SetAnim(this, 7); + break; + } + this->actionFunc = EnMnk_Monkey_TalkBeforeGuideThroughWoods; +} + +void EnMnk_Monkey_WaitToGuideThroughWoods(EnMnk* this, PlayState* play) { + func_80AB5F6C(this); + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + EnMnk_Monkey_SetupTalkBeforeGuideThroughWoods(this); + } else if (this->picto.actor.isTargeted || (this->picto.actor.xzDistToPlayer < 100.0f)) { + Actor_OfferTalk(&this->picto.actor, play, 120.0f); + } + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { + Actor_Kill(&this->picto.actor); + } +} + +void EnMnk_Monkey_TalkAfterSaved(EnMnk* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x8E5: + Message_ContinueTextbox(play, 0x8E6); + EnMnk_Monkey_SetAnim(this, 3); + break; + + case 0x8E6: + Message_ContinueTextbox(play, 0x8E7); + EnMnk_Monkey_SetAnim(this, 5); + break; + + case 0x8E7: + Message_CloseTextbox(play); + this->actionFunc = EnMnk_Monkey_WaitToTalkAfterSaved; + EnMnk_Monkey_SetAnim(this, 0); + break; + + default: + break; + } + } +} + +void EnMnk_Monkey_WaitToTalkAfterSaved(EnMnk* this, PlayState* play) { + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + SkelAnime_Update(&this->skelAnime); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->actionFunc = EnMnk_Monkey_TalkAfterSaved; + EnMnk_Monkey_SetAnim(this, 7); + } else if ((this->picto.actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->picto.actor, 0x3000, play)) { + Actor_OfferTalk(&this->picto.actor, play, 110.0f); + } +} + +void func_80AB9084(EnMnk* this, PlayState* play) { + s16 cueId = 0; + + if (SkelAnime_Update(&this->skelAnime)) { + switch (this->cueId) { + case 2: + EnMnk_Monkey_SetAnim(this, 0xD); + break; + + case 3: + EnMnk_Monkey_SetAnim(this, 0); + break; + + case 4: + EnMnk_Monkey_SetAnim(this, 0); + break; + + default: + break; + } + SkelAnime_Update(&this->skelAnime); + SET_WEEKEVENTREG(WEEKEVENTREG_29_80); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_106)) { + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_106)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_106)]->id; + } + + if ((cueId == 0) && (this->animIndex != 0)) { + EnMnk_Monkey_SetAnim(this, 0); + } else if (this->cueId != cueId) { + switch (cueId) { + case 1: + EnMnk_Monkey_ChangeAnim(this, 0, ANIMMODE_LOOP, 0.0f); + break; + + case 2: + EnMnk_Monkey_ChangeAnim(this, 12, ANIMMODE_ONCE, 0.0f); + this->unk_3E0 = 6; + break; + + case 3: + EnMnk_Monkey_ChangeAnim(this, 11, ANIMMODE_ONCE, 0.0f); + break; + + case 4: + EnMnk_Monkey_ChangeAnim(this, 14, ANIMMODE_ONCE, -5.0f); + break; + + default: + break; + } + this->cueId = cueId; + } + + if (this->animIndex == 11) { + if ((this->skelAnime.curFrame >= 8.0f) && (this->skelAnime.curFrame < 14.0f)) { + this->unk_3E0 = 2; + } else { + this->unk_3E0 = 0; + } + if (Animation_OnFrame(&this->skelAnime, 8.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MONKEY_VO_REWARD); + } + } +} + +void func_80AB92CC(EnMnk* this, PlayState* play) { + s16 cueId = 0; + + if (SkelAnime_Update(&this->skelAnime)) { + switch (this->cueId) { + case 2: + EnMnk_Monkey_SetAnim(this, 0xD); + break; + + case 3: + EnMnk_Monkey_SetAnim(this, 0); + break; + + case 4: + EnMnk_Monkey_SetAnim(this, 0); + break; + + default: + break; + } + SkelAnime_Update(&this->skelAnime); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_106)) { + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_106)); + cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_106)]->id; + } + + if ((cueId == 0) && (this->animIndex != 0)) { + EnMnk_Monkey_SetAnim(this, 0); + } else if (this->cueId != cueId) { + switch (cueId) { + case 1: + EnMnk_Monkey_ChangeAnim(this, 0, ANIMMODE_LOOP, 0.0f); + break; + + case 2: + EnMnk_Monkey_ChangeAnim(this, 12, ANIMMODE_ONCE, 0.0f); + this->unk_3E0 = 6; + break; + + case 3: + EnMnk_Monkey_ChangeAnim(this, 11, ANIMMODE_ONCE, 0.0f); + break; + + case 4: + EnMnk_Monkey_ChangeAnim(this, 14, ANIMMODE_ONCE, -5.0f); + break; + + default: + break; + } + this->cueId = cueId; + } + if (this->animIndex == 11) { + if ((this->skelAnime.curFrame >= 8.0f) && (this->skelAnime.curFrame < 14.0f)) { + this->unk_3E0 = 2; + } else { + this->unk_3E0 = 0; + } + } +} + +void EnMnk_DoNothing(EnMnk* this, PlayState* play) { +} + +void EnMnk_Update(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + if (!(this->flags & MONKEY_FLAGS_1)) { + Actor_MoveWithGravity(&this->picto.actor); + } + if (!(this->flags & MONKEY_FLAGS_2)) { + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 20.0f, 25.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); + if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->flags |= MONKEY_FLAGS_40; + } + } + + this->actionFunc(this, play); + + if (!(this->flags & MONKEY_FLAGS_20)) { + if (!(this->flags & MONKEY_FLAGS_8)) { + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + } + if (this->flags & MONKEY_FLAGS_200) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } + + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); + } + + this->blinkFrame = this->blinkTimer; + if (this->blinkFrame >= 3) { + this->blinkFrame = 0; + } + + if (this->flags & MONKEY_FLAGS_80) { + s8 csId = this->picto.actor.csId; + + if (csId == CS_ID_NONE) { + this->flags &= ~MONKEY_FLAGS_80; + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(this->picto.actor.csId, &this->picto.actor); + this->picto.actor.csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId); + } else { + CutsceneManager_Queue(this->picto.actor.csId); + } + } +} + +s32 EnMnk_Monkey_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnMnk* this = THIS; + + if (limbIndex == OBJECT_MNK_2_LIMB_03) { + rot->x += this->unk_3CC; + rot->z += this->unk_3CE; + } + return false; +} + +s32 EnMnk_MonkeyTiedUp_PropOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + if (limbIndex == OBJECT_MNK_1_LIMB_01) { + *dList = NULL; + } + return false; +} + +s32 EnMnk_MonkeyHanging_PropOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + if ((limbIndex == OBJECT_MNK_3_LIMB_01) || (limbIndex == OBJECT_MNK_3_LIMB_02) || + (limbIndex == OBJECT_MNK_3_LIMB_03)) { + *dList = NULL; + } + return false; +} + +void EnMnk_Monkey_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnMnk* this = THIS; + + if (limbIndex == OBJECT_MNK_2_LIMB_04) { + Matrix_MultVec3f(&sMonkeyFocusPosOffset, &this->picto.actor.focus.pos); + } +} + +void EnMnk_MonkeyTiedUp_PropPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnMnk* this = THIS; + + if (limbIndex == OBJECT_MNK_1_LIMB_04) { + Matrix_Get(&this->unk_36C); + } +} + +void EnMnk_MonkeyHanging_PropPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnMnk* this = THIS; + + switch (limbIndex) { + case OBJECT_MNK_3_LIMB_01: + if (*dList != NULL) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_RotateZS(this->cueId, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, *dList); + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + break; + + case OBJECT_MNK_3_LIMB_02: + if (*dList != NULL) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Scale(this->approachPlayerRadius + 1.0f, 1.0f, 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++, *dList); + + CLOSE_DISPS(play->state.gfxCtx); + } + break; + + case OBJECT_MNK_3_LIMB_03: + if (*dList != NULL) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Scale(1.0f, 1.0f / (this->approachPlayerRadius + 1.0f), 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++, *dList); + + CLOSE_DISPS(play->state.gfxCtx); + } + Matrix_Get(&this->unk_36C); + break; + + default: + break; + } +} + +void EnMnk_Monkey_DrawFace(EnMnk* this, PlayState* play) { + s32 pad; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL37_Opa(play->state.gfxCtx); + + switch (this->unk_3E0) { + case 4: + case 5: + case 6: + if (this->blinkFrame != 2) { + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sMonkeyFaceTextures[this->unk_3E0])); + } else { + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sMonkeyFaceTextures[this->blinkFrame])); + } + return; + + case 2: + case 3: + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sMonkeyFaceTextures[this->unk_3E0])); + return; + + default: + break; + } + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sMonkeyFaceTextures[this->blinkFrame])); + + CLOSE_DISPS(play->state.gfxCtx); +} + +void EnMnk_Draw(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + EnMnk_Monkey_DrawFace(this, play); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnMnk_Monkey_OverrideLimbDraw, EnMnk_Monkey_PostLimbDraw, &this->picto.actor); +} + +void EnMnk_MonkeyTiedUp_Draw(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + SkelAnime_DrawFlexOpa(play, this->propSkelAnime.skeleton, this->propSkelAnime.jointTable, + this->propSkelAnime.dListCount, EnMnk_MonkeyTiedUp_PropOverrideLimbDraw, + EnMnk_MonkeyTiedUp_PropPostLimbDraw, &this->picto.actor); + EnMnk_Monkey_DrawFace(this, play); + Matrix_Mult(&this->unk_36C, MTXMODE_NEW); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnMnk_Monkey_OverrideLimbDraw, EnMnk_Monkey_PostLimbDraw, &this->picto.actor); +} + +void EnMnk_MonkeyHanging_Draw(Actor* thisx, PlayState* play) { + EnMnk* this = THIS; + + SkelAnime_DrawFlexOpa(play, this->propSkelAnime.skeleton, this->propSkelAnime.jointTable, + this->propSkelAnime.dListCount, EnMnk_MonkeyHanging_PropOverrideLimbDraw, + EnMnk_MonkeyHanging_PropPostLimbDraw, &this->picto.actor); + EnMnk_Monkey_DrawFace(this, play); + Matrix_Mult(&this->unk_36C, MTXMODE_NEW); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnMnk_Monkey_OverrideLimbDraw, EnMnk_Monkey_PostLimbDraw, &this->picto.actor); +} diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h index e2f739ada..a9493208f 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h @@ -2,15 +2,82 @@ #define Z_EN_MNK_H #include "global.h" +#include "objects/object_mnk/object_mnk.h" #include "z64snap.h" struct EnMnk; typedef void (*EnMnkActionFunc)(struct EnMnk*, PlayState*); +typedef void (*EnMnkFunc)(PlayState*, struct EnMnk*); + +#define MONKEY_GET_TYPE(thisx) (((thisx)->params & 0x780) >> 7) +#define MONKEY_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define MONKEY_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF800) >> 11) + +#define MONKEY_PATH_INDEX_NONE 0x1F + +typedef enum { + /* 0 */ MONKEY_0, + /* 1 */ MONKEY_OUTSIDEWOODS, + /* 2 */ MONKEY_BY_WITCH, + /* 3 */ MONKEY_OUTSIDECHAMBER, + /* 4 */ MONKEY_OUTSIDEPALACE, + /* 5 */ MONKEY_TIED_UP, + /* 6 */ MONKEY_HANGING, + /* 7 */ MONKEY_WOODS_GUIDE, + /* 8 */ MONKEY_8, + /* 9 */ MONKEY_AFTER_SAVED, + /* 10 */ MONKEY_10 +} MonkeyType; + +#define MONKEY_FLAGS_1 (1 << 0) +#define MONKEY_FLAGS_2 (1 << 1) +#define MONKEY_FLAGS_4 (1 << 2) +#define MONKEY_FLAGS_8 (1 << 3) +#define MONKEY_FLAGS_10 (1 << 4) +#define MONKEY_FLAGS_20 (1 << 5) +#define MONKEY_FLAGS_40 (1 << 6) +#define MONKEY_FLAGS_80 (1 << 7) +#define MONKEY_FLAGS_100 (1 << 8) +#define MONKEY_FLAGS_200 (1 << 9) +#define MONKEY_FLAGS_400 (1 << 10) +#define MONKEY_FLAGS_800 (1 << 11) +#define MONKEY_FLAGS_1000 (1 << 12) +#define MONKEY_FLAGS_2000 (1 << 13) +#define MONKEY_FLAGS_4000 (1 << 14) +#define MONKEY_FLAGS_8000 (1 << 15) + +#define MONKEY_PROP_LIMB_MAX MAX((s32)OBJECT_MNK_1_LIMB_MAX, (s32)OBJECT_MNK_3_LIMB_MAX) typedef struct EnMnk { /* 0x000 */ PictoActor picto; - /* 0x148 */ char unk_148[0x2A0]; + /* 0x148 */ SkelAnime skelAnime; + /* 0x18C */ Vec3s jointTable[OBJECT_MNK_2_LIMB_MAX]; + /* 0x216 */ Vec3s morphTable[OBJECT_MNK_2_LIMB_MAX]; + /* 0x2A0 */ SkelAnime propSkelAnime; + /* 0x2E4 */ Vec3s propJointTable[MONKEY_PROP_LIMB_MAX]; + /* 0x302 */ Vec3s propMorphTable[MONKEY_PROP_LIMB_MAX]; + /* 0x320 */ ColliderCylinder collider; + /* 0x36C */ MtxF unk_36C; + /* 0x3AC */ Path* path; + /* 0x3B0 */ s16 csIdList[6]; + /* 0x3BC */ s16 csId; + /* 0x3BE */ s16 animIndex; + /* 0x3C0 */ s32 destPointIndex; + /* 0x3C4 */ s32 pathIndex; + /* 0x3C8 */ s32 unk_3C8; + /* 0x3CC */ s16 unk_3CC; // beard x rot? + /* 0x3CE */ s16 unk_3CE; // beard y rot? + /* 0x3D0 */ union { + s16 cueId; // Tied monkey + s16 unk_3D0; // Hanging monkey + }; + /* 0x3D4 */ u32 unk_3D4; + /* 0x3D8 */ f32 approachPlayerRadius; + /* 0x3DC */ s16 blinkFrame; + /* 0x3DE */ s16 blinkTimer; + /* 0x3E0 */ s32 unk_3E0; + /* 0x3E4 */ u16 flags; /* 0x3E8 */ EnMnkActionFunc actionFunc; } EnMnk; // size = 0x3EC diff --git a/undefined_syms.txt b/undefined_syms.txt index b94c899ff..0234b8ba9 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -563,17 +563,6 @@ D_06021E34 = 0x06021E34; D_06022728 = 0x06022728; D_06022CAC = 0x06022CAC; -// ovl_En_Mnk - -D_06003584 = 0x06003584; -D_06005150 = 0x06005150; -D_060082C8 = 0x060082C8; -D_06008814 = 0x06008814; -D_06009CC0 = 0x06009CC0; -D_060105DC = 0x060105DC; -D_06019B88 = 0x06019B88; -D_0601D518 = 0x0601D518; - // ovl_En_Okuta D_0600044C = 0x0600044C; From 05c2221769ffdbbfd774d856bac77b6d7c2413a0 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 13 Aug 2023 02:33:58 +1000 Subject: [PATCH 061/121] Audio Load and Heap Headers (#1329) * more header splits * cleanup * adjust comments --- include/audio/effects.h | 7 + include/audio/heap.h | 111 +++++++++++++++ include/audio/load.h | 145 +++++++++++++++++++ include/audio/soundfont.h | 101 ++++++++++++++ include/functions.h | 49 ------- include/z64audio.h | 285 +------------------------------------- 6 files changed, 370 insertions(+), 328 deletions(-) create mode 100644 include/audio/heap.h create mode 100644 include/audio/load.h create mode 100644 include/audio/soundfont.h diff --git a/include/audio/effects.h b/include/audio/effects.h index 67741200f..fe71aeb3b 100644 --- a/include/audio/effects.h +++ b/include/audio/effects.h @@ -21,6 +21,13 @@ typedef enum AdsrStatus { /* 8 */ ADSR_STATUS_SUSTAIN } AdsrStatus; +// Special commands for `delay` in `EnvelopePoint` +// Any value above 0 is treated as a delay +#define ADSR_DISABLE 0 +#define ADSR_HANG -1 +#define ADSR_GOTO -2 +#define ADSR_RESTART -3 + typedef struct EnvelopePoint { /* 0x0 */ s16 delay; /* 0x2 */ s16 arg; diff --git a/include/audio/heap.h b/include/audio/heap.h new file mode 100644 index 000000000..33f3dfcd9 --- /dev/null +++ b/include/audio/heap.h @@ -0,0 +1,111 @@ +#ifndef AUDIO_HEAP_H +#define AUDIO_HEAP_H + +#include "PR/ultratypes.h" +#include "libc/stddef.h" +#include "unk.h" + +typedef struct { + /* 0x0 */ size_t heapSize; // total number of bytes allocated to the audio heap. Must be <= the size of `gAudioHeap` (ideally about the same size) + /* 0x4 */ size_t initPoolSize; // The entire audio heap is split into two pools. + /* 0x8 */ size_t permanentPoolSize; +} AudioHeapInitSizes; // size = 0xC + +/** + * Meta-data associated with a pool (contain withing the Audio Heap) + */ +typedef struct { + /* 0x0 */ u8* startAddr; // start addr of the pool + /* 0x4 */ u8* curAddr; // address of the next available memory for allocation + /* 0x8 */ size_t size; // size of the pool + /* 0xC */ s32 count; // number of entries allocated to the pool +} AudioAllocPool; // size = 0x10 + +/** + * Audio cache entry data to store a single entry containing either a sequence, soundfont, or entire sample banks + */ +typedef struct { + /* 0x0 */ u8* addr; + /* 0x4 */ size_t size; + /* 0x8 */ s16 tableType; + /* 0xA */ s16 id; +} AudioCacheEntry; // size = 0xC + +/** + * Audio cache entry data to store a single entry containing an individual sample + */ +typedef struct { + /* 0x00 */ s8 inUse; + /* 0x01 */ s8 origMedium; + /* 0x02 */ u8 sampleBankId; + /* 0x03 */ UNK_TYPE1 pad03[0x5]; + /* 0x08 */ u8* allocatedAddr; + /* 0x0C */ void* sampleAddr; + /* 0x10 */ size_t size; +} SampleCacheEntry; // size = 0x14 + +/** + * Audio cache entry data to store individual samples + */ +typedef struct { + /* 0x000 */ AudioAllocPool pool; + /* 0x010 */ SampleCacheEntry entries[128]; + /* 0xA10 */ s32 numEntries; +} AudioSampleCache; // size = 0xA14 + +typedef struct { + /* 0x00 */ u32 numEntries; + /* 0x04 */ AudioAllocPool pool; + /* 0x14 */ AudioCacheEntry entries[16]; +} AudioPersistentCache; // size = 0xD4 + +typedef struct { + /* 0x00 */ u32 nextSide; + /* 0x04 */ AudioAllocPool pool; + /* 0x14 */ AudioCacheEntry entries[2]; +} AudioTemporaryCache; // size = 0x3C + +typedef struct { + /* 0x000 */ AudioPersistentCache persistent; + /* 0x0D4 */ AudioTemporaryCache temporary; + /* 0x100 */ UNK_TYPE1 pad100[0x10]; +} AudioCache; // size = 0x110 + +typedef struct { + /* 0x0 */ size_t persistentCommonPoolSize; + /* 0x4 */ size_t temporaryCommonPoolSize; +} AudioCachePoolSplit; // size = 0x8 + +typedef struct { + /* 0x0 */ size_t seqCacheSize; + /* 0x4 */ size_t fontCacheSize; + /* 0x8 */ size_t sampleBankCacheSize; +} AudioCommonPoolSplit; // size = 0xC + +typedef struct { + /* 0x0 */ size_t miscPoolSize; + /* 0x4 */ size_t unusedSizes[2]; + /* 0xC */ size_t cachePoolSize; +} AudioSessionPoolSplit; // size = 0x10 + +void AudioHeap_DiscardFont(s32 fontId); +void* AudioHeap_WritebackDCache(void* addr, size_t size); +void* AudioHeap_AllocAttemptExternal(AudioAllocPool* pool, size_t size); +void* AudioHeap_AllocDmaMemory(AudioAllocPool* pool, size_t size); +void* AudioHeap_AllocZeroed(AudioAllocPool* pool, size_t size); +void* AudioHeap_Alloc(AudioAllocPool* pool, size_t size); +void AudioHeap_InitPool(AudioAllocPool* pool, void* addr, size_t size); +void AudioHeap_PopPersistentCache(s32 tableType); +void AudioHeap_InitMainPool(size_t initPoolSize); +void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id); +void* AudioHeap_SearchCaches(s32 tableType, s32 cache, s32 id); +void AudioHeap_LoadFilter(s16* filter, s32 lowPassCutoff, s32 highPassCutoff); +s32 AudioHeap_ResetStep(void); +void AudioHeap_Init(void); +void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id); +void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size); +void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr, s8 medium, s32 cache); +void AudioHeap_ApplySampleBankCache(s32 sampleBankId); +void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit); + +#endif diff --git a/include/audio/load.h b/include/audio/load.h new file mode 100644 index 000000000..b5bc01594 --- /dev/null +++ b/include/audio/load.h @@ -0,0 +1,145 @@ +#ifndef AUDIO_LOAD_H +#define AUDIO_LOAD_H + +#include "audio/soundfont.h" +#include "PR/ultratypes.h" +#include "libc/stddef.h" +#include "libc/stdint.h" +#include "ultra64/message.h" +#include "unk.h" +#include "os.h" + +struct Sample; + +typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction); + +typedef enum { + /* 0 */ SEQUENCE_TABLE, + /* 1 */ FONT_TABLE, + /* 2 */ SAMPLE_TABLE +} SampleBankTableType; + +typedef struct { + /* 0x0 */ uintptr_t romAddr; + /* 0x4 */ size_t size; + /* 0x8 */ s8 medium; + /* 0x9 */ s8 cachePolicy; + /* 0xA */ s16 shortData1; + /* 0xC */ s16 shortData2; + /* 0xE */ s16 shortData3; +} AudioTableEntry; // size = 0x10 + +typedef struct { + /* 0x00 */ s16 numEntries; + /* 0x02 */ s16 unkMediumParam; + /* 0x04 */ uintptr_t romAddr; + /* 0x08 */ char pad[0x8]; + /* 0x10 */ AudioTableEntry entries[1]; // (dynamic size) +} AudioTable; // size >= 0x20 + +typedef enum { + /* 0 */ LOAD_STATUS_NOT_LOADED, + /* 1 */ LOAD_STATUS_IN_PROGRESS, + /* 2 */ LOAD_STATUS_COMPLETE, + /* 3 */ LOAD_STATUS_DISCARDABLE, + /* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE, + /* 5 */ LOAD_STATUS_PERMANENT +} AudioLoadStatus; + +typedef enum { + /* 0 */ CACHE_TEMPORARY, + /* 1 */ CACHE_PERSISTENT, + /* 2 */ CACHE_EITHER, + /* 3 */ CACHE_PERMANENT +} AudioCacheType; + +typedef enum { + /* 0 */ CACHE_LOAD_PERMANENT, + /* 1 */ CACHE_LOAD_PERSISTENT, + /* 2 */ CACHE_LOAD_TEMPORARY, + /* 3 */ CACHE_LOAD_EITHER, + /* 4 */ CACHE_LOAD_EITHER_NOSYNC +} AudioCacheLoadType; + +typedef struct { + /* 0x00 */ s8 status; + /* 0x01 */ s8 delay; + /* 0x02 */ s8 medium; + /* 0x04 */ u8* ramAddr; + /* 0x08 */ uintptr_t curDevAddr; + /* 0x0C */ u8* curRamAddr; + /* 0x10 */ size_t bytesRemaining; + /* 0x14 */ size_t chunkSize; + /* 0x18 */ s32 unkMediumParam; + /* 0x1C */ u32 retMsg; + /* 0x20 */ OSMesgQueue* retQueue; + /* 0x24 */ OSMesgQueue msgQueue; + /* 0x3C */ OSMesg msg; + /* 0x40 */ OSIoMesg ioMesg; +} AudioAsyncLoad; // size = 0x58 + +typedef struct { + /* 0x00 */ u8 medium; + /* 0x01 */ u8 seqOrFontId; + /* 0x02 */ u16 instId; + /* 0x04 */ s32 unkMediumParam; + /* 0x08 */ uintptr_t curDevAddr; + /* 0x0C */ u8* curRamAddr; + /* 0x10 */ u8* ramAddr; + /* 0x14 */ s32 status; + /* 0x18 */ size_t bytesRemaining; + /* 0x1C */ s8* isDone; // TODO: rename in OoT and sync up here. This is an external status while (s32 status) is an internal status + /* 0x20 */ struct Sample sample; + /* 0x30 */ OSMesgQueue msgqueue; + /* 0x48 */ OSMesg msg; + /* 0x4C */ OSIoMesg ioMesg; +} AudioSlowLoad; // size = 0x64 + +typedef struct { + /* 0x0 */ u8* ramAddr; + /* 0x4 */ uintptr_t devAddr; + /* 0x8 */ u16 sizeUnused; + /* 0xA */ u16 size; + /* 0xC */ u8 unused; + /* 0xD */ u8 reuseIndex; // position in sSampleDmaReuseQueue1/2, if ttl == 0 + /* 0xE */ u8 ttl; // Time To Live: duration after which the DMA can be discarded +} SampleDma; // size = 0x10 + +typedef struct { + /* 0x00 */ u32 endAndMediumKey; + /* 0x04 */ struct Sample* sample; + /* 0x08 */ u8* ramAddr; + /* 0x0C */ u32 encodedInfo; + /* 0x10 */ s32 isFree; +} AudioPreloadReq; // size = 0x14 + +void AudioLoad_DecreaseSampleDmaTtls(void); +void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium); +void AudioLoad_InitSampleDmaBuffers(s32 numNotes); +s32 AudioLoad_IsFontLoadComplete(s32 fontId); +s32 AudioLoad_IsSeqLoadComplete(s32 seqId); +void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus); +void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus); +void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3); +s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId); +void AudioLoad_AsyncLoadSeq(s32 seqId, s32 arg1, s32 retData, OSMesgQueue* retQueue); +void AudioLoad_AsyncLoadSampleBank(s32 sampleBankId, s32 arg1, s32 retData, OSMesgQueue* retQueue); +void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* retQueue); +u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts); +void AudioLoad_DiscardSeqFonts(s32 seqId); +void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data); +s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2); +s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks); +void AudioLoad_ProcessLoads(s32 resetStatus); +void AudioLoad_SetDmaHandler(DmaHandler callback); +void AudioLoad_Init(void* heap, u32 heapSize); +void AudioLoad_InitSlowLoads(void); +s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone); +s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone); +void AudioLoad_InitAsyncLoads(void); +void AudioLoad_LoadPermanentSamples(void); +void AudioLoad_ScriptLoad(s32 tableType, s32 id, s8* isDone); +void AudioLoad_ProcessScriptLoads(void); +void AudioLoad_InitScriptLoads(void); + +#endif diff --git a/include/audio/soundfont.h b/include/audio/soundfont.h new file mode 100644 index 000000000..0141d9f8c --- /dev/null +++ b/include/audio/soundfont.h @@ -0,0 +1,101 @@ +#ifndef AUDIO_SOUNDFONT_H +#define AUDIO_SOUNDFONT_H + +#include "PR/ultratypes.h" + +struct EnvelopePoint; + +typedef struct AdpcmLoop { + /* 0x00 */ u32 start; + /* 0x04 */ u32 loopEnd; // numSamples position into the sample where the loop ends + /* 0x08 */ u32 count; // The number of times the loop is played before the sound completes. Setting count to -1 indicates that the loop should play indefinitely. + /* 0x0C */ u32 sampleEnd; // total number of s16-samples in the sample audio clip + /* 0x10 */ s16 predictorState[16]; // only exists if count != 0. 8-byte aligned +} AdpcmLoop; // size = 0x30 (or 0x10) + +/** + * The procedure used to design the codeBook is based on an adaptive clustering algorithm. + * The size of the codeBook is (8 * order * numPredictors) and is 8-byte aligned + */ +typedef struct AdpcmBook { + /* 0x0 */ s32 order; + /* 0x4 */ s32 numPredictors; + /* 0x8 */ s16 codeBook[1]; // a table of prediction coefficients that the coder selects from to optimize sound quality. +} AdpcmBook; // size >= 0x8 + +typedef enum SampleCodec { + /* 0 */ CODEC_ADPCM, // 16 2-byte samples (32 bytes) compressed into 4-bit samples (8 bytes) + 1 header byte + /* 1 */ CODEC_S8, // 16 2-byte samples (32 bytes) compressed into 8-bit samples (16 bytes) + /* 2 */ CODEC_S16_INMEMORY, + /* 3 */ CODEC_SMALL_ADPCM, // 16 2-byte samples (32 bytes) compressed into 2-bit samples (4 bytes) + 1 header byte + /* 4 */ CODEC_REVERB, + /* 5 */ CODEC_S16, + /* 6 */ CODEC_UNK6, + /* 7 */ CODEC_UNK7 // processed as uncompressed samples +} SampleCodec; + +typedef enum SampleMedium { + /* 0 */ MEDIUM_RAM, + /* 1 */ MEDIUM_UNK, + /* 2 */ MEDIUM_CART, + /* 3 */ MEDIUM_DISK_DRIVE, + /* 5 */ MEDIUM_RAM_UNLOADED = 5 +} SampleMedium; + +typedef struct Sample { + /* 0x0 */ u32 unk_0 : 1; + /* 0x0 */ u32 codec : 3; // The state of compression or decompression, See `SampleCodec` + /* 0x0 */ u32 medium : 2; // Medium where sample is currently stored. See `SampleMedium` + /* 0x0 */ u32 unk_bit26 : 1; + /* 0x0 */ u32 isRelocated : 1; // Has the sample header been relocated (offsets to pointers) + /* 0x1 */ u32 size : 24; // Size of the sample + /* 0x4 */ u8* sampleAddr; // Raw sample data. Offset from the start of the sample bank or absolute address to either rom or ram + /* 0x8 */ AdpcmLoop* loop; // Adpcm loop parameters used by the sample. Offset from the start of the sound font / pointer to ram + /* 0xC */ AdpcmBook* book; // Adpcm book parameters used by the sample. Offset from the start of the sound font / pointer to ram +} Sample; // size = 0x10 + +typedef struct TunedSample { + /* 0x0 */ Sample* sample; + /* 0x4 */ f32 tuning; // frequency scale factor +} TunedSample; // size = 0x8 + +/** + * Stores an entry of decompressed samples in a reverb ring buffer. + * By storing the sample in a ring buffer, the time it takes to loop + * around back to the same sample acts as a delay, leading to an echo effect. + */ +typedef struct Instrument { + /* 0x00 */ u8 isRelocated; // have the envelope and all samples been relocated (offsets to pointers) + /* 0x01 */ u8 normalRangeLo; + /* 0x02 */ u8 normalRangeHi; + /* 0x03 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable + /* 0x04 */ struct EnvelopePoint* envelope; + /* 0x08 */ TunedSample lowPitchTunedSample; + /* 0x10 */ TunedSample normalPitchTunedSample; + /* 0x18 */ TunedSample highPitchTunedSample; +} Instrument; // size = 0x20 + +typedef struct Drum { + /* 0x0 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable + /* 0x1 */ u8 pan; + /* 0x2 */ u8 isRelocated; // have tunedSample.sample and envelope been relocated (offsets to pointers) + /* 0x4 */ TunedSample tunedSample; + /* 0xC */ struct EnvelopePoint* envelope; +} Drum; // size = 0x10 + +typedef struct SoundEffect { + /* 0x0 */ TunedSample tunedSample; +} SoundEffect; // size = 0x8 + +typedef struct SoundFont { + /* 0x00 */ u8 numInstruments; + /* 0x01 */ u8 numDrums; + /* 0x02 */ u8 sampleBankId1; + /* 0x03 */ u8 sampleBankId2; + /* 0x04 */ u16 numSfx; + /* 0x08 */ Instrument** instruments; + /* 0x0C */ Drum** drums; + /* 0x10 */ SoundEffect* soundEffects; +} SoundFont; // size = 0x14 + +#endif diff --git a/include/functions.h b/include/functions.h index 92d1350e8..680003988 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1650,55 +1650,6 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32 numSamplesPerFrame); -void AudioHeap_DiscardFont(s32 fontId); -void* AudioHeap_WritebackDCache(void* addr, size_t size); -void* AudioHeap_AllocAttemptExternal(AudioAllocPool* pool, size_t size); -void* AudioHeap_AllocDmaMemory(AudioAllocPool* pool, size_t size); -void* AudioHeap_AllocZeroed(AudioAllocPool* pool, size_t size); -void* AudioHeap_Alloc(AudioAllocPool* pool, size_t size); -void AudioHeap_InitPool(AudioAllocPool* pool, void* addr, size_t size); -void AudioHeap_PopPersistentCache(s32 tableType); -void AudioHeap_InitMainPool(size_t initPoolSize); -void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id); -void* AudioHeap_SearchCaches(s32 tableType, s32 cache, s32 id); -void AudioHeap_LoadFilter(s16* filter, s32 lowPassCutoff, s32 highPassCutoff); -s32 AudioHeap_ResetStep(void); -void AudioHeap_Init(void); -void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id); -void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size); -void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr, s8 medium, s32 cache); -void AudioHeap_ApplySampleBankCache(s32 sampleBankId); -void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit); - -void AudioLoad_DecreaseSampleDmaTtls(void); -void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium); -void AudioLoad_InitSampleDmaBuffers(s32 numNotes); -s32 AudioLoad_IsFontLoadComplete(s32 fontId); -s32 AudioLoad_IsSeqLoadComplete(s32 seqId); -void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus); -void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus); -void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3); -s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId); -void AudioLoad_AsyncLoadSeq(s32 seqId, s32 arg1, s32 retData, OSMesgQueue* retQueue); -void AudioLoad_AsyncLoadSampleBank(s32 sampleBankId, s32 arg1, s32 retData, OSMesgQueue* retQueue); -void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* retQueue); -u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts); -void AudioLoad_DiscardSeqFonts(s32 seqId); -void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data); -s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2); -s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks); -void AudioLoad_ProcessLoads(s32 resetStatus); -void AudioLoad_SetDmaHandler(DmaHandler callback); -void AudioLoad_Init(void* heap, u32 heapSize); -void AudioLoad_InitSlowLoads(void); -s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone); -s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone); -void AudioLoad_InitAsyncLoads(void); -void AudioLoad_LoadPermanentSamples(void); -void AudioLoad_ScriptLoad(s32 tableType, s32 id, s8* isDone); -void AudioLoad_ProcessScriptLoads(void); -void AudioLoad_InitScriptLoads(void); - AudioTask* AudioThread_Update(void); void AudioThread_QueueCmdF32(u32 opArgs, f32 data); void AudioThread_QueueCmdS32(u32 opArgs, s32 data); diff --git a/include/z64audio.h b/include/z64audio.h index 1a813409f..e09848e7a 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -3,9 +3,14 @@ #include "PR/ultratypes.h" #include "ultra64/os_voice.h" -#include "audiothread_cmd.h" #include "libc/stddef.h" +#include "unk.h" +#include "audiothread_cmd.h" + #include "audio/effects.h" +#include "audio/heap.h" +#include "audio/load.h" +#include "audio/soundfont.h" #include "sequence.h" #define NO_LAYER ((SequenceLayer*)(-1)) @@ -47,11 +52,6 @@ typedef enum { #define AUDIO_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t)) -#define ADSR_DISABLE 0 -#define ADSR_HANG -1 -#define ADSR_GOTO -2 -#define ADSR_RESTART -3 - // size of a single sample point #define SAMPLE_SIZE sizeof(s16) @@ -113,57 +113,6 @@ typedef enum { /* 4 */ SOUNDMODE_SURROUND } SoundMode; -typedef enum { - /* 0 */ MEDIUM_RAM, - /* 1 */ MEDIUM_UNK, - /* 2 */ MEDIUM_CART, - /* 3 */ MEDIUM_DISK_DRIVE, - /* 5 */ MEDIUM_RAM_UNLOADED = 5 -} SampleMedium; - -typedef enum { - /* 0 */ CODEC_ADPCM, // 16 2-byte samples (32 bytes) compressed into 4-bit samples (8 bytes) + 1 header byte - /* 1 */ CODEC_S8, // 16 2-byte samples (32 bytes) compressed into 8-bit samples (16 bytes) - /* 2 */ CODEC_S16_INMEMORY, - /* 3 */ CODEC_SMALL_ADPCM, // 16 2-byte samples (32 bytes) compressed into 2-bit samples (4 bytes) + 1 header byte - /* 4 */ CODEC_REVERB, - /* 5 */ CODEC_S16, - /* 6 */ CODEC_UNK6, - /* 7 */ CODEC_UNK7 // processed as uncompressed samples -} SampleCodec; - -typedef enum { - /* 0 */ SEQUENCE_TABLE, - /* 1 */ FONT_TABLE, - /* 2 */ SAMPLE_TABLE -} SampleBankTableType; - -typedef enum { - /* 0 */ CACHE_LOAD_PERMANENT, - /* 1 */ CACHE_LOAD_PERSISTENT, - /* 2 */ CACHE_LOAD_TEMPORARY, - /* 3 */ CACHE_LOAD_EITHER, - /* 4 */ CACHE_LOAD_EITHER_NOSYNC -} AudioCacheLoadType; - -typedef enum { - /* 0 */ CACHE_TEMPORARY, - /* 1 */ CACHE_PERSISTENT, - /* 2 */ CACHE_EITHER, - /* 3 */ CACHE_PERMANENT -} AudioCacheType; - -typedef enum { - /* 0 */ LOAD_STATUS_NOT_LOADED, - /* 1 */ LOAD_STATUS_IN_PROGRESS, - /* 2 */ LOAD_STATUS_COMPLETE, - /* 3 */ LOAD_STATUS_DISCARDABLE, - /* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE, - /* 5 */ LOAD_STATUS_PERMANENT -} AudioLoadStatus; - -typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction); - struct Note; struct NotePool; struct SequenceChannel; @@ -193,41 +142,6 @@ typedef struct NotePool { /* 0x30 */ AudioListItem active; } NotePool; // size = 0x40 -typedef struct { - /* 0x00 */ u32 start; - /* 0x04 */ u32 loopEnd; // numSamples into the sample where the loop ends - /* 0x08 */ u32 count; - /* 0x0C */ u32 sampleEnd; // total number of s16-samples in the - /* 0x10 */ s16 predictorState[16]; // only exists if count != 0. 8-byte aligned -} AdpcmLoop; // size = 0x30 (or 0x10) - -/** - * The procedure used to design the codeBook is based on an adaptive clustering algorithm. - * The size of the codeBook is (8 * order * numPredictors) and is 8-byte aligned - */ -typedef struct { - /* 0x00 */ s32 order; - /* 0x04 */ s32 numPredictors; - /* 0x08 */ s16 codeBook[1]; // a table of prediction coefficients that the coder selects from to optimize sound quality. -} AdpcmBook; // size >= 0x8 - -typedef struct { - /* 0x00 */ u32 unk_0 : 1; - /* 0x00 */ u32 codec : 3; // The state of compression or decompression - /* 0x00 */ u32 medium : 2; // Medium where sample is currently stored - /* 0x00 */ u32 unk_bit26 : 1; - /* 0x00 */ u32 isRelocated : 1; // Has the sample header been relocated (offsets to pointers) - /* 0x01 */ u32 size : 24; // Size of the sample - /* 0x04 */ u8* sampleAddr; // Raw sample data. Offset from the start of the sample bank or absolute address to either rom or ram - /* 0x08 */ AdpcmLoop* loop; // Adpcm loop parameters used by the sample. Offset from the start of the sound font / pointer to ram - /* 0x0C */ AdpcmBook* book; // Adpcm book parameters used by the sample. Offset from the start of the sound font / pointer to ram -} Sample; // size = 0x10 - -typedef struct { - /* 0x00 */ Sample* sample; - /* 0x04 */ f32 tuning; // frequency scale factor -} TunedSample; // size = 0x8 - /** * Stores an entry of decompressed samples in a reverb ring buffer. * By storing the sample in a ring buffer, the time it takes to loop @@ -288,40 +202,6 @@ typedef struct { /* 0x2A0 */ AdpcmLoop loop; } SynthesisReverb; // size = 0x2D0 -typedef struct { - /* 0x00 */ u8 isRelocated; // have the envelope and all samples been relocated (offsets to pointers) - /* 0x01 */ u8 normalRangeLo; - /* 0x02 */ u8 normalRangeHi; - /* 0x03 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable - /* 0x04 */ EnvelopePoint* envelope; - /* 0x08 */ TunedSample lowPitchTunedSample; - /* 0x10 */ TunedSample normalPitchTunedSample; - /* 0x18 */ TunedSample highPitchTunedSample; -} Instrument; // size = 0x20 - -typedef struct { - /* 0x0 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable - /* 0x1 */ u8 pan; - /* 0x2 */ u8 isRelocated; // have tunedSample.sample and envelope been relocated (offsets to pointers) - /* 0x4 */ TunedSample tunedSample; - /* 0xC */ EnvelopePoint* envelope; -} Drum; // size = 0x10 - -typedef struct { - /* 0x0 */ TunedSample tunedSample; -} SoundEffect; // size = 0x8 - -typedef struct { - /* 0x00 */ u8 numInstruments; - /* 0x01 */ u8 numDrums; - /* 0x02 */ u8 sampleBankId1; - /* 0x03 */ u8 sampleBankId2; - /* 0x04 */ u16 numSfx; - /* 0x08 */ Instrument** instruments; - /* 0x0C */ Drum** drums; - /* 0x10 */ SoundEffect* soundEffects; -} SoundFont; // size = 0x14 - typedef struct { /* 0x00 */ u8* pc; // program counter /* 0x04 */ u8* stack[4]; @@ -698,91 +578,6 @@ typedef struct { /* 0x24 */ f32 updatesPerFrameScaled; // updatesPerFrame scaled down by a factor of 4 } AudioBufferParameters; // size = 0x28 -/** - * Meta-data associated with a pool (contain withing the Audio Heap) - */ -typedef struct { - /* 0x0 */ u8* startAddr; // start addr of the pool - /* 0x4 */ u8* curAddr; // address of the next available memory for allocation - /* 0x8 */ size_t size; // size of the pool - /* 0xC */ s32 count; // number of entries allocated to the pool -} AudioAllocPool; // size = 0x10 - -/** - * Audio cache entry data to store a single entry containing either a sequence, soundfont, or entire sample banks - */ -typedef struct { - /* 0x0 */ u8* addr; - /* 0x4 */ size_t size; - /* 0x8 */ s16 tableType; - /* 0xA */ s16 id; -} AudioCacheEntry; // size = 0xC - -/** - * Audio cache entry data to store a single entry containing an individual sample - */ -typedef struct { - /* 0x00 */ s8 inUse; - /* 0x01 */ s8 origMedium; - /* 0x02 */ u8 sampleBankId; - /* 0x03 */ char unk_03[0x5]; - /* 0x08 */ u8* allocatedAddr; - /* 0x0C */ void* sampleAddr; - /* 0x10 */ size_t size; -} SampleCacheEntry; // size = 0x14 - -/** - * Audio cache entry data to store individual samples - */ -typedef struct { - /* 0x000 */ AudioAllocPool pool; - /* 0x010 */ SampleCacheEntry entries[128]; - /* 0xA10 */ s32 numEntries; -} AudioSampleCache; // size = 0xA14 - -typedef struct { - /* 0x00 */ u32 numEntries; - /* 0x04 */ AudioAllocPool pool; - /* 0x14 */ AudioCacheEntry entries[16]; -} AudioPersistentCache; // size = 0xD4 - -typedef struct { - /* 0x00 */ u32 nextSide; - /* 0x04 */ AudioAllocPool pool; - /* 0x14 */ AudioCacheEntry entries[2]; -} AudioTemporaryCache; // size = 0x3C - -typedef struct { - /* 0x000 */ AudioPersistentCache persistent; - /* 0x0D4 */ AudioTemporaryCache temporary; - /* 0x100 */ u8 unk_100[0x10]; -} AudioCache; // size = 0x110 - -typedef struct { - /* 0x0 */ size_t persistentCommonPoolSize; - /* 0x4 */ size_t temporaryCommonPoolSize; -} AudioCachePoolSplit; // size = 0x8 - -typedef struct { - /* 0x0 */ size_t seqCacheSize; - /* 0x4 */ size_t fontCacheSize; - /* 0x8 */ size_t sampleBankCacheSize; -} AudioCommonPoolSplit; // size = 0xC - -typedef struct { - /* 0x0 */ size_t miscPoolSize; - /* 0x4 */ u32 unkSizes[2]; - /* 0xC */ size_t cachePoolSize; -} AudioSessionPoolSplit; // size = 0x10 - -typedef struct { - /* 0x00 */ u32 endAndMediumKey; - /* 0x04 */ Sample* sample; - /* 0x08 */ u8* ramAddr; - /* 0x0C */ u32 encodedInfo; - /* 0x10 */ s32 isFree; -} AudioPreloadReq; // size = 0x14 - typedef struct { union { /* 0x0 */ u32 opArgs; @@ -804,58 +599,6 @@ typedef struct { }; } AudioCmd; // size = 0x8 -typedef struct { - /* 0x00 */ s8 status; - /* 0x01 */ s8 delay; - /* 0x02 */ s8 medium; - /* 0x04 */ u8* ramAddr; - /* 0x08 */ uintptr_t curDevAddr; - /* 0x0C */ u8* curRamAddr; - /* 0x10 */ size_t bytesRemaining; - /* 0x14 */ size_t chunkSize; - /* 0x18 */ s32 unkMediumParam; - /* 0x1C */ u32 retMsg; - /* 0x20 */ OSMesgQueue* retQueue; - /* 0x24 */ OSMesgQueue msgQueue; - /* 0x3C */ OSMesg msg; - /* 0x40 */ OSIoMesg ioMesg; -} AudioAsyncLoad; // size = 0x58 - -typedef struct { - /* 0x00 */ u8 medium; - /* 0x01 */ u8 seqOrFontId; - /* 0x02 */ u16 instId; - /* 0x04 */ s32 unkMediumParam; - /* 0x08 */ uintptr_t curDevAddr; - /* 0x0C */ u8* curRamAddr; - /* 0x10 */ u8* ramAddr; - /* 0x14 */ s32 status; - /* 0x18 */ size_t bytesRemaining; - /* 0x1C */ s8* isDone; // TODO: rename in OoT and sync up here. This is an external status while (s32 status) is an internal status - /* 0x20 */ Sample sample; - /* 0x30 */ OSMesgQueue msgqueue; - /* 0x48 */ OSMesg msg; - /* 0x4C */ OSIoMesg ioMesg; -} AudioSlowLoad; // size = 0x64 - -typedef struct { - /* 0x00 */ uintptr_t romAddr; - /* 0x04 */ size_t size; - /* 0x08 */ s8 medium; - /* 0x09 */ s8 cachePolicy; - /* 0x0A */ s16 shortData1; - /* 0x0C */ s16 shortData2; - /* 0x0E */ s16 shortData3; -} AudioTableEntry; // size = 0x10 - -typedef struct { - /* 0x00 */ s16 numEntries; - /* 0x02 */ s16 unkMediumParam; - /* 0x04 */ uintptr_t romAddr; - /* 0x08 */ char pad[0x8]; - /* 0x10 */ AudioTableEntry entries[1]; // (dynamic size) -} AudioTable; // size >= 0x20 - typedef struct { /* 0x00 */ OSTask task; /* 0x40 */ OSMesgQueue* taskQueue; @@ -863,16 +606,6 @@ typedef struct { /* 0x48 */ char unk_48[0x8]; } AudioTask; // size = 0x50 -typedef struct { - /* 0x00 */ u8* ramAddr; - /* 0x04 */ uintptr_t devAddr; - /* 0x08 */ u16 sizeUnused; - /* 0x0A */ u16 size; - /* 0x0C */ u8 unused; - /* 0x0D */ u8 reuseIndex; // position in sSampleDmaReuseQueue1/2, if ttl == 0 - /* 0x0E */ u8 ttl; // Time To Live: duration after which the DMA can be discarded -} SampleDma; // size = 0x10 - typedef struct { /* 0x0000 */ char unk_0000; /* 0x0001 */ s8 numSynthesisReverbs; @@ -1016,12 +749,6 @@ typedef struct { /* 0x1A */ u16 combFilterGain; } NoteSubAttributes; // size = 0x1A -typedef struct { - /* 0x0 */ size_t heapSize; // total number of bytes allocated to the audio heap. Must be <= the size of `gAudioHeap` (ideally about the same size) - /* 0x4 */ size_t initPoolSize; // The entire audio heap is split into two pools. - /* 0x8 */ size_t permanentPoolSize; -} AudioHeapInitSizes; // size = 0xC - typedef struct { /* 0x00 */ f32 volCur; /* 0x04 */ f32 volTarget; From affb1eaf0f037858ab020e6b7fd8d105dff262f8 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 15 Aug 2023 00:08:45 +1000 Subject: [PATCH 062/121] Body Parts Docs (#1333) * body parts WIP * continue WIP * finish body parts * cleanup * missed one * Missed Enum * PR Review * next PR review * s32 cast * TRUNCF_BINANG * rm unnecessary shadow * PR Review * missed some * oops --- include/functions.h | 4 +- include/z64animation.h | 1 + include/z_en_hy_code.h | 47 ++- src/code/z_actor.c | 98 ++--- src/code/z_camera.c | 2 +- src/code/z_en_hy_code.c | 55 ++- src/code/z_sub_s.c | 2 +- .../ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 58 ++- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 2 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 52 +-- src/overlays/actors/ovl_En_Am/z_en_am.h | 19 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 14 +- src/overlays/actors/ovl_En_Bat/z_en_bat.h | 9 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 90 ++-- src/overlays/actors/ovl_En_Bb/z_en_bb.h | 13 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 12 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 90 ++-- .../actors/ovl_En_Bbfall/z_en_bbfall.h | 5 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 63 +-- .../actors/ovl_En_Bigokuta/z_en_bigokuta.h | 19 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 51 +-- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 15 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 56 +-- .../actors/ovl_En_Bigslime/z_en_bigslime.h | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 12 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 6 +- src/overlays/actors/ovl_En_Crow/z_en_crow.h | 10 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 14 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.h | 10 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 46 ++- .../actors/ovl_En_Dekunuts/z_en_dekunuts.h | 14 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 75 ++-- .../actors/ovl_En_Dinofos/z_en_dinofos.h | 18 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 89 ++-- .../actors/ovl_En_Dodongo/z_en_dodongo.h | 15 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 +- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 20 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 8 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 10 +- .../actors/ovl_En_Firefly/z_en_firefly.h | 9 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 66 +-- .../actors/ovl_En_Floormas/z_en_floormas.h | 17 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 12 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 3 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 390 ++++++++++-------- .../ovl_En_Grasshopper/z_en_grasshopper.h | 58 ++- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 26 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.h | 22 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 135 ++++-- src/overlays/actors/ovl_En_Ik/z_en_ik.h | 32 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 19 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 23 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 39 +- src/overlays/actors/ovl_En_Kame/z_en_kame.h | 16 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 20 +- .../actors/ovl_En_Karebaba/z_en_karebaba.h | 10 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 8 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 41 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h | 10 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 53 ++- .../actors/ovl_En_Pametfrog/z_en_pametfrog.h | 19 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 69 +++- .../actors/ovl_En_Peehat/z_en_peehat.h | 24 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 46 +-- .../ovl_En_Po_Sisters/z_en_po_sisters.h | 18 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 62 ++- src/overlays/actors/ovl_En_Poh/z_en_poh.h | 16 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 41 +- src/overlays/actors/ovl_En_Pp/z_en_pp.h | 37 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 12 +- src/overlays/actors/ovl_En_Pr/z_en_pr.h | 18 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 26 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.h | 22 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 8 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 23 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 10 +- src/overlays/actors/ovl_En_Rd/z_en_rd.h | 23 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 41 +- src/overlays/actors/ovl_En_Rr/z_en_rr.h | 36 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 73 +++- src/overlays/actors/ovl_En_Ru/z_en_ru.h | 21 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 4 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.h | 13 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 26 +- src/overlays/actors/ovl_En_Skb/z_en_skb.h | 22 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 33 +- src/overlays/actors/ovl_En_Slime/z_en_slime.h | 30 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 37 +- .../actors/ovl_En_Snowman/z_en_snowman.h | 15 +- src/overlays/actors/ovl_En_St/z_en_st.c | 80 ++-- src/overlays/actors/ovl_En_St/z_en_st.h | 22 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 63 +-- src/overlays/actors/ovl_En_Sw/z_en_sw.h | 24 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 4 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.h | 10 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 14 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.h | 23 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 9 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 51 ++- .../actors/ovl_En_Thiefbird/z_en_thiefbird.h | 17 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 126 ++++-- src/overlays/actors/ovl_En_Tite/z_en_tite.h | 17 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 15 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 53 ++- .../actors/ovl_En_Wallmas/z_en_wallmas.h | 17 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 36 +- src/overlays/actors/ovl_En_Wf/z_en_wf.h | 16 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 23 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 20 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 89 +++- src/overlays/actors/ovl_En_Zo/z_en_zo.h | 21 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 4 +- .../actors/ovl_Oceff_Storm/z_oceff_storm.c | 4 +- .../actors/ovl_player_actor/z_player.c | 12 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c | 4 +- .../z_eff_ss_fire_tail.c | 2 +- tools/disasm/variables.txt | 30 +- 132 files changed, 2563 insertions(+), 1243 deletions(-) diff --git a/include/functions.h b/include/functions.h index 680003988..4664fee89 100644 --- a/include/functions.h +++ b/include/functions.h @@ -657,8 +657,8 @@ void func_800BE504(Actor* actor, ColliderCylinder* collider); void func_800BE568(Actor* actor, ColliderSphere* collider); void func_800BE5CC(Actor* actor, ColliderJntSph* collider, s32 colliderIndex); s32 Actor_IsSmallChest(struct EnBox* chest); -void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale, f32 frozenSteamScale, f32 effectAlpha, u8 type); -void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb, f32 scale, f32 scaleRange); +void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s16 bodyPartsCount, f32 effectScale, f32 frozenSteamScale, f32 effectAlpha, u8 type); +void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s32 bodyPartsCount, s32 effectsPerBodyPart, f32 scale, f32 scaleRange); void ActorOverlayTable_FaultClient(void* arg0, void* arg1); uintptr_t ActorOverlayTable_FaultAddrConv(uintptr_t address, void* param); diff --git a/include/z64animation.h b/include/z64animation.h index 67c9d7641..25cbea1f2 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -12,6 +12,7 @@ struct SkelAnime; struct PlayerAnimationFrame; #define LIMB_DONE 0xFF +#define BODYPART_NONE -1 #define ANIM_FLAG_1 (1 << 0) #define ANIM_FLAG_UPDATE_Y (1 << 1) diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h index 58a34151c..192e9183c 100644 --- a/include/z_en_hy_code.h +++ b/include/z_en_hy_code.h @@ -6,7 +6,27 @@ struct EnHy; -#define ENHY_LIMB_MAX 16 +//! @note: any actor that uses the EnHy system should +//! have a skeleton that aligns with the enum below. +typedef enum EnHyLimb { + /* 0x00 */ ENHY_LIMB_NONE, + /* 0x01 */ ENHY_LIMB_PELVIS, + /* 0x02 */ ENHY_LIMB_LEFT_THIGH, + /* 0x03 */ ENHY_LIMB_LEFT_SHIN, + /* 0x04 */ ENHY_LIMB_LEFT_FOOT, + /* 0x05 */ ENHY_LIMB_RIGHT_THIGH, + /* 0x06 */ ENHY_LIMB_RIGHT_SHIN, + /* 0x07 */ ENHY_LIMB_RIGHT_FOOT, + /* 0x08 */ ENHY_LIMB_TORSO, + /* 0x09 */ ENHY_LIMB_LEFT_UPPER_ARM, + /* 0x0A */ ENHY_LIMB_LEFT_FOREARM, + /* 0x0B */ ENHY_LIMB_LEFT_HAND, + /* 0x0C */ ENHY_LIMB_RIGHT_UPPER_ARM, + /* 0x0D */ ENHY_LIMB_RIGHT_FOREARM, + /* 0x0E */ ENHY_LIMB_RIGHT_HAND, + /* 0x0F */ ENHY_LIMB_HEAD, + /* 0x10 */ ENHY_LIMB_MAX +} EnHyLimb; //! TODO: Better animaion enum names when animations are documented typedef enum { @@ -36,6 +56,25 @@ typedef enum { typedef void (*EnHyActionFunc)(struct EnHy*, PlayState*); +typedef enum EnHyBodyPart { + /* 0 */ ENHY_BODYPART_0, + /* 1 */ ENHY_BODYPART_1, + /* 2 */ ENHY_BODYPART_2, + /* 3 */ ENHY_BODYPART_3, + /* 4 */ ENHY_BODYPART_4, + /* 5 */ ENHY_BODYPART_5, + /* 6 */ ENHY_BODYPART_6, + /* 7 */ ENHY_BODYPART_7, + /* 8 */ ENHY_BODYPART_8, + /* 9 */ ENHY_BODYPART_9, + /* 10 */ ENHY_BODYPART_10, + /* 11 */ ENHY_BODYPART_11, + /* 12 */ ENHY_BODYPART_12, + /* 13 */ ENHY_BODYPART_13, + /* 14 */ ENHY_BODYPART_14, + /* 15 */ ENHY_BODYPART_MAX +} EnHyBodyPart; + typedef struct EnHy { /* 0x000 */ Actor actor; /* 0x144 */ EnHyActionFunc actionFunc; @@ -65,14 +104,14 @@ typedef struct EnHy { /* 0x2E4 */ Vec3s prevTorsoRot; /* 0x2EA */ s16 fidgetTableY[ENHY_LIMB_MAX]; /* 0x30A */ s16 fidgetTableZ[ENHY_LIMB_MAX]; - /* 0x32C */ Vec3f bodyPartsPos[15]; + /* 0x32C */ Vec3f bodyPartsPos[ENHY_BODYPART_MAX]; /* 0x3E0 */ UNK_TYPE1 unk_3E0[0x6]; /* 0x3E6 */ s16 eyeTexIndex; /* 0x3E8 */ s16 blinkTimer; } EnHy; // size = 0x3EC -extern s8 gEnHyBodyParts[]; -extern s8 gEnHyParentBodyParts[]; +extern s8 gEnHyLimbToBodyParts[]; +extern s8 gEnHyParentShadowBodyParts[]; extern u8 gEnHyShadowSizes[]; s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index ef1ca4b48..5debc583d 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4706,20 +4706,20 @@ TexturePtr sElectricSparkTextures[] = { }; /** - * Draw common damage effects applied to each limb provided in limbPos + * Draw common damage effects applied to each body part provided in bodyPartsPos */ -void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale, +void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s16 bodyPartsCount, f32 effectScale, f32 frozenSteamScale, f32 effectAlpha, u8 type) { if (effectAlpha > 0.001f) { s32 twoTexScrollParam; - s16 limbIndex; + s16 bodyPartIndex; MtxF* currentMatrix; f32 alpha; f32 frozenScale; f32 lightOrbsScale; f32 electricSparksScale; f32 steamScale; - Vec3f* limbPosStart = limbPos; + Vec3f* bodyPartsPosStart = bodyPartsPos; u32 gameplayFrames = play->gameplayFrames; f32 effectAlphaScaled; @@ -4747,7 +4747,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 case ACTOR_DRAW_DMGEFF_FROZEN_SFX: frozenScale = ((KREG(19) * 0.01f) + 2.3f) * effectScale; steamScale = ((KREG(28) * 0.0001f) + 0.035f) * frozenSteamScale; - func_800BCC68(limbPos, play); + func_800BCC68(bodyPartsPos, play); // Setup to draw ice over frozen actor @@ -4759,11 +4759,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 effectAlphaScaled = effectAlpha * 255.0f; - // Apply and draw ice over each limb of frozen actor - for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { - alpha = limbIndex & 3; + // Apply and draw ice over each body part of frozen actor + for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) { + alpha = bodyPartIndex & 3; alpha = effectAlphaScaled - (30.0f * alpha); - if (effectAlphaScaled < (30.0f * (limbIndex & 3))) { + if (effectAlphaScaled < (30.0f * (bodyPartIndex & 3))) { alpha = 0.0f; } if (alpha > 255.0f) { @@ -4772,14 +4772,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gDPSetEnvColor(POLY_XLU_DISP++, KREG(20) + 200, KREG(21) + 200, KREG(22) + 255, (u8)alpha); - Matrix_Translate(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW); + Matrix_Translate(bodyPartsPos->x, bodyPartsPos->y, bodyPartsPos->z, MTXMODE_NEW); Matrix_Scale(frozenScale, frozenScale, frozenScale, MTXMODE_APPLY); - if (limbIndex & 1) { + if (bodyPartIndex & 1) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } - if (limbIndex & 2) { + if (bodyPartIndex & 2) { Matrix_RotateZF(M_PI, MTXMODE_APPLY); } @@ -4789,7 +4789,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment2ModelDL); } - limbPos = limbPosStart; // reset limbPos + bodyPartsPos = bodyPartsPosStart; // reset bodyPartsPos // Setup to draw steam over frozen actor @@ -4804,14 +4804,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha); - // Apply and draw steam over each limb of frozen actor - for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { - twoTexScrollParam = ((limbIndex * 3) + gameplayFrames); + // Apply and draw steam over each body part of frozen actor + for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) { + twoTexScrollParam = ((bodyPartIndex * 3) + gameplayFrames); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, twoTexScrollParam * 3, twoTexScrollParam * -12, 32, 64, 1, 0, 0, 32, 32)); - Matrix_Translate(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW); + Matrix_Translate(bodyPartsPos->x, bodyPartsPos->y, bodyPartsPos->z, MTXMODE_NEW); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(steamScale, steamScale, 1.0f, MTXMODE_APPLY); @@ -4838,11 +4838,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 effectAlphaScaled = effectAlpha * 255.0f; - // Apply and draw fire on every limb - for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { - alpha = limbIndex & 3; + // Apply and draw fire on every body part + for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) { + alpha = bodyPartIndex & 3; alpha = effectAlphaScaled - 30.0f * alpha; - if (effectAlphaScaled < 30.0f * (limbIndex & 3)) { + if (effectAlphaScaled < 30.0f * (bodyPartIndex & 3)) { alpha = 0.0f; } if (alpha > 255.0f) { @@ -4856,12 +4856,12 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, - ((limbIndex * 10 + gameplayFrames) * -20) & 0x1FF, 32, 128)); + ((bodyPartIndex * 10 + gameplayFrames) * -20) & 0x1FF, 32, 128)); Matrix_RotateYF(M_PI, MTXMODE_APPLY); - currentMatrix->mf[3][0] = limbPos->x; - currentMatrix->mf[3][1] = limbPos->y; - currentMatrix->mf[3][2] = limbPos->z; + currentMatrix->mf[3][0] = bodyPartsPos->x; + currentMatrix->mf[3][1] = bodyPartsPos->y; + currentMatrix->mf[3][2] = bodyPartsPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4898,12 +4898,12 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 Matrix_Put(&play->billboardMtxF); Matrix_Scale(lightOrbsScale, lightOrbsScale, 1.0f, MTXMODE_APPLY); - // Apply and draw a light orb over each limb of frozen actor - for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { + // Apply and draw a light orb over each body part of frozen actor + for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) { Matrix_RotateZF(Rand_CenteredFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = limbPos->x; - currentMatrix->mf[3][1] = limbPos->y; - currentMatrix->mf[3][2] = limbPos->z; + currentMatrix->mf[3][0] = bodyPartsPos->x; + currentMatrix->mf[3][1] = bodyPartsPos->y; + currentMatrix->mf[3][2] = bodyPartsPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4936,14 +4936,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 Matrix_Put(&play->billboardMtxF); Matrix_Scale(electricSparksScale, electricSparksScale, electricSparksScale, MTXMODE_APPLY); - // Every limb draws two electric sparks at random orientations - for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { + // Every body part draws two electric sparks at random orientations + for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) { // first electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4953,9 +4953,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // second electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4970,11 +4970,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 } } -void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb, - f32 scale, f32 scaleRange) { - static Color_RGBA8 primColor = { 170, 255, 255, 255 }; - static Color_RGBA8 envColor = { 200, 200, 255, 255 }; - static Vec3f accel = { 0.0f, -1.0f, 0.0f }; +void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s32 bodyPartsCount, + s32 effectsPerBodyPart, f32 scale, f32 scaleRange) { + static Color_RGBA8 sPrimColor = { 170, 255, 255, 255 }; + static Color_RGBA8 sEnvColor = { 200, 200, 255, 255 }; + static Vec3f sAccel = { 0.0f, -1.0f, 0.0f }; s32 i; s32 pad; Vec3f velocity; @@ -4984,10 +4984,10 @@ void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 l SoundSource_PlaySfxAtFixedWorldPos(play, &actor->world.pos, 30, NA_SE_EV_ICE_BROKEN); - for (i = 0; i < limbPosCount; i++) { - yaw = Actor_WorldYawTowardPoint(actor, limbPos); + for (i = 0; i < bodyPartsCount; i++) { + yaw = Actor_WorldYawTowardPoint(actor, bodyPartsPos); - for (j = 0; j < effectsPerLimb; j++) { + for (j = 0; j < effectsPerBodyPart; j++) { randomYaw = ((s32)Rand_Next() >> 0x13) + yaw; velocity.z = Rand_ZeroFloat(5.0f); @@ -4996,10 +4996,10 @@ void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 l velocity.y = Rand_ZeroFloat(4.0f) + 8.0f; velocity.z *= Math_CosS(randomYaw); - EffectSsEnIce_Spawn(play, limbPos, Rand_ZeroFloat(scaleRange) + scale, &velocity, &accel, &primColor, - &envColor, 30); + EffectSsEnIce_Spawn(play, bodyPartsPos, Rand_ZeroFloat(scaleRange) + scale, &velocity, &sAccel, &sPrimColor, + &sEnvColor, 30); } - limbPos++; + bodyPartsPos++; } } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 3703eda0f..95d2e36f9 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -481,7 +481,7 @@ s32 Camera_GetFocalActorPos(Vec3f* dst, Camera* camera) { Actor* focalActor = camera->focalActor; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { - *dst = ((Player*)focalActor)->bodyPartsPos[0]; + *dst = ((Player*)focalActor)->bodyPartsPos[PLAYER_BODYPART_WAIST]; return dst; } else { Actor_GetWorldPosShapeRot(&focalPosRot, camera->focalActor); diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index b5992dec4..d59d31000 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -35,11 +35,60 @@ static AnimationInfoS sAnimationInfo[] = { { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, }; -s8 gEnHyBodyParts[] = { -1, 1, 12, 13, 14, 9, 10, 11, 0, 6, 7, 8, 3, 4, 5, 2 }; +s8 gEnHyLimbToBodyParts[ENHY_LIMB_MAX] = { + BODYPART_NONE, // ENHY_LIMB_NONE + ENHY_BODYPART_1, // ENHY_LIMB_PELVIS + ENHY_BODYPART_12, // ENHY_LIMB_LEFT_THIGH + ENHY_BODYPART_13, // ENHY_LIMB_LEFT_SHIN + ENHY_BODYPART_14, // ENHY_LIMB_LEFT_FOOT + ENHY_BODYPART_9, // ENHY_LIMB_RIGHT_THIGH + ENHY_BODYPART_10, // ENHY_LIMB_RIGHT_SHIN + ENHY_BODYPART_11, // ENHY_LIMB_RIGHT_FOOT + ENHY_BODYPART_0, // ENHY_LIMB_TORSO + ENHY_BODYPART_6, // ENHY_LIMB_LEFT_UPPER_ARM + ENHY_BODYPART_7, // ENHY_LIMB_LEFT_FOREARM + ENHY_BODYPART_8, // ENHY_LIMB_LEFT_HAND + ENHY_BODYPART_3, // ENHY_LIMB_RIGHT_UPPER_ARM + ENHY_BODYPART_4, // ENHY_LIMB_RIGHT_FOREARM + ENHY_BODYPART_5, // ENHY_LIMB_RIGHT_HAND + ENHY_BODYPART_2, // ENHY_LIMB_HEAD +}; -s8 gEnHyParentBodyParts[] = { 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13 }; +s8 gEnHyParentShadowBodyParts[ENHY_BODYPART_MAX] = { + ENHY_BODYPART_0, // ENHY_BODYPART_0 + ENHY_BODYPART_0, // ENHY_BODYPART_1 + ENHY_BODYPART_0, // ENHY_BODYPART_2 + ENHY_BODYPART_0, // ENHY_BODYPART_3 + ENHY_BODYPART_3, // ENHY_BODYPART_4 + ENHY_BODYPART_4, // ENHY_BODYPART_5 + ENHY_BODYPART_0, // ENHY_BODYPART_6 + ENHY_BODYPART_6, // ENHY_BODYPART_7 + ENHY_BODYPART_7, // ENHY_BODYPART_8 + ENHY_BODYPART_0, // ENHY_BODYPART_9 + ENHY_BODYPART_9, // ENHY_BODYPART_10 + ENHY_BODYPART_10, // ENHY_BODYPART_11 + ENHY_BODYPART_0, // ENHY_BODYPART_12 + ENHY_BODYPART_12, // ENHY_BODYPART_13 + ENHY_BODYPART_13, // ENHY_BODYPART_14 +}; -u8 gEnHyShadowSizes[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +u8 gEnHyShadowSizes[ENHY_BODYPART_MAX] = { + 0, // ENHY_BODYPART_0 + 0, // ENHY_BODYPART_1 + 0, // ENHY_BODYPART_2 + 0, // ENHY_BODYPART_3 + 0, // ENHY_BODYPART_4 + 0, // ENHY_BODYPART_5 + 0, // ENHY_BODYPART_6 + 0, // ENHY_BODYPART_7 + 0, // ENHY_BODYPART_8 + 0, // ENHY_BODYPART_9 + 0, // ENHY_BODYPART_10 + 0, // ENHY_BODYPART_11 + 0, // ENHY_BODYPART_12 + 0, // ENHY_BODYPART_13 + 0, // ENHY_BODYPART_14 +}; s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s16 frameCount; diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 4060c3361..427cc85d0 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -974,7 +974,7 @@ void SubS_GenShadowTex(Vec3f bodyPartsPos[], Vec3f* worldPos, u8* tex, f32 tween s32 startRow; for (i = 0; i < bodyPartsNum; i++) { - if (parentBodyParts[i] >= 0) { + if (parentBodyParts[i] > BODYPART_NONE) { parentBodyPart = parentBodyParts[i]; bodyPartPos = &bodyPartsPos[i]; 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 687dc3c88..b7540aa3f 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 @@ -227,7 +227,7 @@ void BgCraceMovebg_Update(Actor* thisx, PlayState* play) { } this->actionFunc(this, play); - Math_Vec3f_Copy(&this->prevPlayerPos, &player->bodyPartsPos[0]); + Math_Vec3f_Copy(&this->prevPlayerPos, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); } /** 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 2448ac73c..10f988f0b 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2196,24 +2196,42 @@ s32 Boss03_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* * Since there are two sets of ColliderJntSph, indices < 2 (ARRAY_COUNT(sHeadJntSphElementsInit)) refers to the first * collider and indices >= 2 refers to the second one */ -s8 sGyorgSphElementIndices[] = { - -1, // GYORG_LIMB_NONE, - -1, // GYORG_LIMB_ROOT, - 0, // GYORG_LIMB_HEAD, - -1, // GYORG_LIMB_BODY_ROOT, - 4, // GYORG_LIMB_UPPER_TRUNK, - 5, // GYORG_LIMB_LOWER_TRUNK, - 6, // GYORG_LIMB_TAIL, - -1, // GYORG_LIMB_RIGHT_FIN_ROOT, - 2, // GYORG_LIMB_UPPER_RIGHT_FIN, - -1, // GYORG_LIMB_LOWER_RIGHT_FIN, - -1, // GYORG_LIMB_LEFT_FIN_ROOT, - 3, // GYORG_LIMB_UPPER_LEFT_FIN, - -1, // GYORG_LIMB_LOWER_LEFT_FIN, - -1, // GYORG_LIMB_JAW_ROOT, - 1, // GYORG_LIMB_JAW, - -1, // GYORG_LIMB_MAX - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +static s8 sLimbToSphere[2][GYORG_LIMB_MAX] = { + { + -1, // GYORG_LIMB_NONE + -1, // GYORG_LIMB_ROOT + 0, // GYORG_LIMB_HEAD + -1, // GYORG_LIMB_BODY_ROOT + 4, // GYORG_LIMB_UPPER_TRUNK + 5, // GYORG_LIMB_LOWER_TRUNK + 6, // GYORG_LIMB_TAIL + -1, // GYORG_LIMB_RIGHT_FIN_ROOT + 2, // GYORG_LIMB_UPPER_RIGHT_FIN + -1, // GYORG_LIMB_LOWER_RIGHT_FIN + -1, // GYORG_LIMB_LEFT_FIN_ROOT + 3, // GYORG_LIMB_UPPER_LEFT_FIN + -1, // GYORG_LIMB_LOWER_LEFT_FIN + -1, // GYORG_LIMB_JAW_ROOT + 1, // GYORG_LIMB_JAW + }, + // unused + { + -1, // GYORG_LIMB_NONE + -1, // GYORG_LIMB_ROOT + -1, // GYORG_LIMB_HEAD + -1, // GYORG_LIMB_BODY_ROOT + -1, // GYORG_LIMB_UPPER_TRUNK + -1, // GYORG_LIMB_LOWER_TRUNK + -1, // GYORG_LIMB_TAIL + -1, // GYORG_LIMB_RIGHT_FIN_ROOT + -1, // GYORG_LIMB_UPPER_RIGHT_FIN + -1, // GYORG_LIMB_LOWER_RIGHT_FIN + -1, // GYORG_LIMB_LEFT_FIN_ROOT + -1, // GYORG_LIMB_UPPER_LEFT_FIN + -1, // GYORG_LIMB_LOWER_LEFT_FIN + -1, // GYORG_LIMB_JAW_ROOT + -1, // GYORG_LIMB_JAW + }, }; Vec3f D_809E9148 = { 600.0f, -100.0f, 0.0f }; @@ -2235,8 +2253,8 @@ void Boss03_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot Matrix_MultVec3f(&D_809E9148, &this->actor.focus.pos); } - sphereElementIndex = sGyorgSphElementIndices[limbIndex]; - if (sphereElementIndex >= 0) { + sphereElementIndex = sLimbToSphere[0][limbIndex]; + if (sphereElementIndex > -1) { Matrix_MultVec3f(&D_809E9154[sphereElementIndex], &spherePos); if (sphereElementIndex < 2) { 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 ec2de16ad..f5f88b80e 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -76,7 +76,7 @@ s32 func_80C1D4D0(DmAh* this, PlayState* play) { this->unk_290 = CLAMP(this->unk_290, -0x1C70, 0x1C70); if (this->unk_280->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_280)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_280)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_280->focus.pos); } 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 9535a0b98..5e4300084 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -137,7 +137,7 @@ s32 func_80C1C62C(DmAn* this, PlayState* play) { this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70); if (this->unk_2B4->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos); } 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 2ebe67e4c..33df49243 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -137,7 +137,7 @@ s32 func_80C2457C(DmGm* this, PlayState* play) { this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70); if (this->unk_2B4->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos); } 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 71da776ac..1ac67f889 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -255,7 +255,7 @@ void func_80BD2DC8(EnAh* this) { Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_1E4->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_1E4)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_1E4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_1E4->focus.pos); } diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index b0b8822f6..3c3625840 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -540,7 +540,7 @@ void func_80BDED20(EnAl* this) { Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_368->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_368)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_368)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_368->focus.pos); } 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 e7e367c7c..1aef0a374 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -146,23 +146,6 @@ static Color_RGBA8 D_808B1120 = { 150, 150, 150, 255 }; static Color_RGBA8 D_808B1124 = { 100, 100, 100, 150 }; -static Vec3f D_808B1128[] = { - { 4700.0f, -500.0f, 1800.0f }, { 4700.0f, -500.0f, -1800.0f }, { 2000.0f, -1500.0f, 0.0f }, - { 2000.0f, 0.0f, -1500.0f }, { 2000.0f, 0.0f, 1500.0f }, -}; - -static Vec3f D_808B1164[] = { - { 0.0f, -3000.0f, 0.0f }, - { 700.0f, -800.0f, 0.0f }, -}; - -static Vec3f D_808B117C[] = { - { 800.0f, 1000.0f, -1000.0f }, - { 800.0f, 1000.0f, 1000.0f }, - { 800.0f, -1000.0f, 1000.0f }, - { 800.0f, -1000.0f, -1000.0f }, -}; - void EnAm_Init(Actor* thisx, PlayState* play) { EnAm* this = THIS; @@ -532,6 +515,26 @@ void EnAm_Update(Actor* thisx, PlayState* play) { this->drawDmgEffScale = (this->drawDmgEffScale > 0.7f) ? 0.7f : this->drawDmgEffScale; } +static Vec3f D_808B1128[] = { + { 4700.0f, -500.0f, 1800.0f }, // ENAM_BODYPART_0 + { 4700.0f, -500.0f, -1800.0f }, // ENAM_BODYPART_1 + { 2000.0f, -1500.0f, 0.0f }, // ENAM_BODYPART_2 + { 2000.0f, 0.0f, -1500.0f }, // ENAM_BODYPART_3 + { 2000.0f, 0.0f, 1500.0f }, // ENAM_BODYPART_4 +}; + +static Vec3f D_808B1164[] = { + { 0.0f, -3000.0f, 0.0f }, // ENAM_BODYPART_5, ENAM_BODYPART_7 + { 700.0f, -800.0f, 0.0f }, // ENAM_BODYPART_6, ENAM_BODYPART_8 +}; + +static Vec3f D_808B117C[] = { + { 800.0f, 1000.0f, -1000.0f }, // ENAM_BODYPART_9 + { 800.0f, 1000.0f, 1000.0f }, // ENAM_BODYPART_10 + { 800.0f, -1000.0f, 1000.0f }, // ENAM_BODYPART_11 + { 800.0f, -1000.0f, -1000.0f }, // ENAM_BODYPART_12 +}; + void EnAm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 i; s32 phi_s3; @@ -542,17 +545,18 @@ void EnAm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, phi_s2 = 0; phi_s1 = 0; if (limbIndex == OBJECT_AM_LIMB_04) { - phi_s2 = &this->limbPos[0]; + phi_s2 = &this->bodyPartsPos[ENAM_BODYPART_0]; phi_s1 = D_808B1128; - phi_s3 = 5; + phi_s3 = ARRAY_COUNT(D_808B1128); } else if (limbIndex == OBJECT_AM_LIMB_0D) { - phi_s2 = &this->limbPos[9]; + phi_s2 = &this->bodyPartsPos[ENAM_BODYPART_9]; phi_s1 = D_808B117C; - phi_s3 = 4; + phi_s3 = ARRAY_COUNT(D_808B117C); } else if ((limbIndex == OBJECT_AM_LIMB_07) || (limbIndex == OBJECT_AM_LIMB_0A)) { - phi_s2 = (limbIndex == OBJECT_AM_LIMB_07) ? &this->limbPos[5] : &this->limbPos[7]; + phi_s2 = (limbIndex == OBJECT_AM_LIMB_07) ? &this->bodyPartsPos[ENAM_BODYPART_5] + : &this->bodyPartsPos[ENAM_BODYPART_7]; phi_s1 = D_808B1164; - phi_s3 = 2; + phi_s3 = ARRAY_COUNT(D_808B1164); } else { phi_s3 = 0; } @@ -573,7 +577,7 @@ void EnAm_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = &gfx[2]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnAm_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, 0.0f, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENAM_BODYPART_MAX, this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.h b/src/overlays/actors/ovl_En_Am/z_en_am.h index e482e2cba..4bc52d26a 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.h +++ b/src/overlays/actors/ovl_En_Am/z_en_am.h @@ -8,6 +8,23 @@ struct EnAm; typedef void (*EnAmActionFunc)(struct EnAm*, PlayState*); +typedef enum EnAmBodyPart { + /* 0 */ ENAM_BODYPART_0, + /* 1 */ ENAM_BODYPART_1, + /* 2 */ ENAM_BODYPART_2, + /* 3 */ ENAM_BODYPART_3, + /* 4 */ ENAM_BODYPART_4, + /* 5 */ ENAM_BODYPART_5, + /* 6 */ ENAM_BODYPART_6, + /* 7 */ ENAM_BODYPART_7, + /* 8 */ ENAM_BODYPART_8, + /* 9 */ ENAM_BODYPART_9, + /* 10 */ ENAM_BODYPART_10, + /* 11 */ ENAM_BODYPART_11, + /* 12 */ ENAM_BODYPART_12, + /* 13 */ ENAM_BODYPART_MAX +} EnAmBodyPart; + typedef struct EnAm { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -22,7 +39,7 @@ typedef struct EnAm { /* 0x240 */ f32 speed; // Hopping speed of Armos /* 0x244 */ f32 drawDmgEffAlpha; /* 0x248 */ f32 drawDmgEffScale; - /* 0x24C */ Vec3f limbPos[13]; + /* 0x24C */ Vec3f bodyPartsPos[ENAM_BODYPART_MAX]; /* 0x2E8 */ ColliderCylinder enemyCollider; // Collider for when Armos is Hostile /* 0x334 */ ColliderCylinder interactCollider; // Collider for when an interactable Armos is docile } EnAm; // size = 0x380 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 6bede4ab4..156d7f956 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1450,7 +1450,7 @@ void func_80A97410(EnAz* this, PlayState* play) { Math_SmoothStepToS(&this->unk_3D4, 0, 2, 0x71C, 0); } Math_Vec3f_Copy(&sp38, &player->actor.world.pos); - sp38.y = player->bodyPartsPos[7].y + 3.0f; + sp38.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; temp_v0_7 = Math_Vec3f_Pitch(&this->actor.focus.pos, &sp38); if (ABS(temp_v0_7) < 0x800) { Math_SmoothStepToS(&this->unk_3D6, temp_v0_7, 3, 0x71C, 0); 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 fe223cc71..cef624ca8 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -363,8 +363,7 @@ void EnBat_Die(EnBat* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartPoss, ARRAY_COUNT(this->bodyPartPoss), 2, 0.2f, - 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, BAD_BAT_BODYPART_MAX, 2, 0.2f, 0.2f); } func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 100, 0, 0); @@ -552,13 +551,12 @@ void EnBat_Draw(Actor* thisx, PlayState* play) { ? (this->animationFrame * (15 * (0x10000 / 360))) - (120 * (0x10000 / 360)) : 0; } - Matrix_MultZero(&this->bodyPartPoss[0]); + Matrix_MultZero(&this->bodyPartsPos[BAD_BAT_BODYPART_0]); Matrix_RotateZS(rollAngle, MTXMODE_APPLY); - Matrix_MultVecX(1700.0f, &this->bodyPartPoss[1]); + Matrix_MultVecX(1700.0f, &this->bodyPartsPos[BAD_BAT_BODYPART_1]); Matrix_RotateZS(-2 * rollAngle, MTXMODE_APPLY); - Matrix_MultVecX(-1700.0f, &this->bodyPartPoss[2]); - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartPoss, ARRAY_COUNT(this->bodyPartPoss), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, - this->drawDmgEffType); + Matrix_MultVecX(-1700.0f, &this->bodyPartsPos[BAD_BAT_BODYPART_2]); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, BAD_BAT_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } } diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.h b/src/overlays/actors/ovl_En_Bat/z_en_bat.h index 479cfa24d..927dfbef8 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.h +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.h @@ -23,6 +23,13 @@ struct EnBat; typedef void (*EnBatActionFunc)(struct EnBat*, PlayState*); +typedef enum BadBatBodyPart { + /* 0 */ BAD_BAT_BODYPART_0, + /* 1 */ BAD_BAT_BODYPART_1, + /* 2 */ BAD_BAT_BODYPART_2, + /* 3 */ BAD_BAT_BODYPART_MAX +} BadBatBodyPart; + typedef struct EnBat { /* 0x000 */ Actor actor; /* 0x144 */ EnBatActionFunc actionFunc; @@ -36,7 +43,7 @@ typedef struct EnBat { /* 0x154 */ f32 drawDmgEffScale; /* 0x158 */ f32 drawDmgEffFrozenSteamScale; /* 0x15C */ f32 drawDmgEffAlpha; - /* 0x160 */ Vec3f bodyPartPoss[3]; + /* 0x160 */ Vec3f bodyPartsPos[BAD_BAT_BODYPART_MAX]; /* 0x184 */ ColliderSphere collider; } EnBat; // size = 0x1DC 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 937ab3749..6d96d9e28 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -119,37 +119,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 10, ICHAIN_STOP), }; -/** - * This maps a given limb based on its limbIndex to its appropriate index - * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the - * limb is not part of the bodyParts arrays. - */ -static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { - -1, // BUBBLE_LIMB_NONE - -1, // BUBBLE_LIMB_ROOT - -1, // BUBBLE_LIMB_CRANIUM_ROOT - -1, // BUBBLE_LIMB_JAW_ROOT - 0, // BUBBLE_LIMB_JAW - -1, // BUBBLE_LIMB_LEFT_WING_ROOT - -1, // BUBBLE_LIMB_LEFT_WING_WRAPPER - -1, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT - 1, // BUBBLE_LIMB_LEFT_WING_WEBBING - -1, // BUBBLE_LIMB_LEFT_WING_BONE - -1, // BUBBLE_LIMB_RIGHT_WING_ROOT - -1, // BUBBLE_LIMB_RIGHT_WING_WRAPPER - -1, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT - 2, // BUBBLE_LIMB_RIGHT_WING_WEBBING - -1, // BUBBLE_LIMB_RIGHT_WING_BONE - 3, // BUBBLE_LIMB_CRANIUM -}; - -/** - * The last element of the bodyParts arrays is a duplicate of the cranium - * limb, which is then offset by a certain amount. There is no display list - * associated with this, so it is only used for effects. - */ -static Vec3f sDuplicateCraniumBodyPartOffset = { 1000.0f, -700.0f, 0.0f }; - void EnBb_Init(Actor* thisx, PlayState* play) { EnBb* this = THIS; @@ -212,7 +181,7 @@ void EnBb_Thaw(EnBb* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.2f, 0.15f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, BUBBLE_BODYPART_MAX, 2, 0.2f, 0.15f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -388,7 +357,7 @@ void EnBb_SetupDead(EnBb* this, PlayState* play) { this->actor.gravity = -1.5f; bodyPartVelocity = &this->bodyPartsVelocity[0]; - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++, bodyPartVelocity++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++, bodyPartVelocity++) { Math_Vec3f_Diff(&this->bodyPartsPos[i], &this->actor.world.pos, &posDiff); magnitude = Math3D_Vec3fMagnitude(&posDiff); if (magnitude > 1.0f) { @@ -412,14 +381,14 @@ void EnBb_Dead(EnBb* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.z, 0x4000, 4, 0x1000, 0x400); if (this->timer == 0) { - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++) { func_800B3030(play, &this->bodyPartsPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 2); SoundSource_PlaySfxAtFixedWorldPos(play, &this->bodyPartsPos[i], 11, NA_SE_EN_EXTINCT); } EnBb_SetupWaitForRevive(this); } else { - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++) { Math_Vec3f_Sum(&this->bodyPartsPos[i], &this->bodyPartsVelocity[i], &this->bodyPartsPos[i]); this->bodyPartsVelocity[i].y += this->actor.gravity; } @@ -646,24 +615,54 @@ s32 EnBb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po return false; } +/** + * This maps a given limb based on its limbIndex to its appropriate index + * in the bodyPartsPos/Velocity arrays. + */ +static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { + BODYPART_NONE, // BUBBLE_LIMB_NONE + BODYPART_NONE, // BUBBLE_LIMB_ROOT + BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT + BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT + BUBBLE_BODYPART_0, // BUBBLE_LIMB_JAW + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT + BUBBLE_BODYPART_1, // BUBBLE_LIMB_LEFT_WING_WEBBING + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT + BUBBLE_BODYPART_2, // BUBBLE_LIMB_RIGHT_WING_WEBBING + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE + BUBBLE_BODYPART_3, // BUBBLE_LIMB_CRANIUM +}; + +/** + * The last element of the bodyParts arrays is a duplicate of the cranium + * limb, which is then offset by a certain amount. There is no display list + * associated with this, so it is only used for effects. + */ +static Vec3f sEffectsBodyPartOffset = { 1000.0f, -700.0f, 0.0f }; + void EnBb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad; EnBb* this = THIS; MtxF* currentMatrixState; if (this->bodyPartDrawStatus == BB_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbToBodyParts[limbIndex] != -1) { - if (sLimbToBodyParts[limbIndex] == 0) { - Matrix_MultVecX(1000.0f, &this->bodyPartsPos[0]); - } else if (sLimbToBodyParts[limbIndex] == 3) { - Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[3]); - Matrix_MultVec3f(&sDuplicateCraniumBodyPartOffset, &this->bodyPartsPos[4]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_0) { + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_0]); + } else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_3) { + Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_3]); + Matrix_MultVec3f(&sEffectsBodyPartOffset, &this->bodyPartsPos[BUBBLE_BODYPART_EFFECTS]); } else { Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } } } else if (this->bodyPartDrawStatus > BB_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } @@ -671,7 +670,7 @@ void EnBb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->bodyPartDrawStatus = BB_BODY_PART_DRAW_STATUS_BROKEN; } } else { - if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { OPEN_DISPS(play->state.gfxCtx); currentMatrixState = Matrix_GetCurrent(); @@ -717,9 +716,8 @@ void EnBb_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL); } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, - this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, BUBBLE_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.h b/src/overlays/actors/ovl_En_Bb/z_en_bb.h index c852397d4..7c94d4b37 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.h +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.h @@ -10,6 +10,15 @@ struct EnBb; typedef void (*EnBbActionFunc)(struct EnBb*, PlayState*); +typedef enum BubbleBodyPart { + /* 0 */ BUBBLE_BODYPART_0, + /* 1 */ BUBBLE_BODYPART_1, + /* 2 */ BUBBLE_BODYPART_2, + /* 3 */ BUBBLE_BODYPART_3, + /* 4 */ BUBBLE_BODYPART_EFFECTS, + /* 5 */ BUBBLE_BODYPART_MAX +} BubbleBodyPart; + typedef struct EnBb { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -31,8 +40,8 @@ typedef struct EnBb { /* 0x26C */ f32 drawDmgEffAlpha; /* 0x270 */ f32 drawDmgEffScale; /* 0x274 */ f32 drawDmgEffFrozenSteamScale; - /* 0x278 */ Vec3f bodyPartsPos[5]; - /* 0x2B4 */ Vec3f bodyPartsVelocity[5]; + /* 0x278 */ Vec3f bodyPartsPos[BUBBLE_BODYPART_MAX]; + /* 0x2B4 */ Vec3f bodyPartsVelocity[BUBBLE_BODYPART_MAX]; /* 0x2F0 */ Gfx* limbDList; /* 0x2F4 */ ColliderSphere collider; } EnBb; // size = 0x34C 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 ebd4b5000..8226fa138 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 @@ -253,12 +253,12 @@ void EnBba01_Update(Actor* thisx, PlayState* play) { s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnBba01* this = THIS; - s8 bodyPart; + s8 bodyPartIndex; Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; - bodyPart = gEnHyBodyParts[limbIndex]; - if (bodyPart >= 0) { - Matrix_MultVec3f(&zeroVec, &this->enHy.bodyPartsPos[bodyPart]); + bodyPartIndex = gEnHyLimbToBodyParts[limbIndex]; + if (bodyPartIndex > BODYPART_NONE) { + Matrix_MultVec3f(&zeroVec, &this->enHy.bodyPartsPos[bodyPartIndex]); } if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { @@ -338,8 +338,8 @@ void EnBba01_Draw(Actor* thisx, PlayState* play) { *shadowTexIter++ = 0; } for (i = 0; i < 5; i++) { - SubS_GenShadowTex(this->enHy.bodyPartsPos, &this->enHy.actor.world.pos, shadowTex, i / 5.0f, - ARRAY_COUNT(this->enHy.bodyPartsPos), gEnHyShadowSizes, gEnHyParentBodyParts); + SubS_GenShadowTex(this->enHy.bodyPartsPos, &this->enHy.actor.world.pos, shadowTex, i / 5.0f, ENHY_BODYPART_MAX, + gEnHyShadowSizes, gEnHyParentShadowBodyParts); } SubS_DrawShadowTex(&this->enHy.actor, &play->state, shadowTex); 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 8a9a9142f..ddf379c5b 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -148,37 +148,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 10, ICHAIN_STOP), }; -/** - * This maps a given limb based on its limbIndex to its appropriate index - * in the bodyPartsPos/Velocity arrays. An index of -1 indicates that the - * limb is not part of the bodyParts arrays. - */ -static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { - -1, // BUBBLE_LIMB_NONE - -1, // BUBBLE_LIMB_ROOT - -1, // BUBBLE_LIMB_CRANIUM_ROOT - -1, // BUBBLE_LIMB_JAW_ROOT - 0, // BUBBLE_LIMB_JAW - -1, // BUBBLE_LIMB_LEFT_WING_ROOT - -1, // BUBBLE_LIMB_LEFT_WING_WRAPPER - -1, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT - 1, // BUBBLE_LIMB_LEFT_WING_WEBBING - -1, // BUBBLE_LIMB_LEFT_WING_BONE - -1, // BUBBLE_LIMB_RIGHT_WING_ROOT - -1, // BUBBLE_LIMB_RIGHT_WING_WRAPPER - -1, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT - 2, // BUBBLE_LIMB_RIGHT_WING_WEBBING - -1, // BUBBLE_LIMB_RIGHT_WING_BONE - 3, // BUBBLE_LIMB_CRANIUM -}; - -/** - * The last element of the bodyParts arrays is a duplicate of the cranium - * limb, which is then offset by a certain amount. There is no display list - * associated with this, so it is only used for effects. - */ -static Vec3f sDuplicateCraniumBodyPartOffset = { 1000.0f, -700.0f, 0.0f }; - void EnBbfall_Init(Actor* thisx, PlayState* play) { EnBbfall* this = THIS; s32 i; @@ -217,7 +186,7 @@ void EnBbfall_Thaw(EnBbfall* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.2f, 0.15f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, BUBBLE_BODYPART_MAX, 2, 0.2f, 0.15f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -455,7 +424,7 @@ void EnBbfall_SetupDead(EnBbfall* this, PlayState* play) { this->actor.gravity = -1.5f; bodyPartVelocity = &this->bodyPartsVelocity[0]; - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++, bodyPartVelocity++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++, bodyPartVelocity++) { Math_Vec3f_Diff(&this->bodyPartsPos[i], &this->actor.world.pos, &posDiff); magnitude = Math3D_Vec3fMagnitude(&posDiff); if (magnitude > 1.0f) { @@ -477,7 +446,7 @@ void EnBbfall_Dead(EnBbfall* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.z, 0x4000, 4, 0x1000, 0x400); if (this->timer == 0) { - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++) { func_800B3030(play, &this->bodyPartsPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 2); SoundSource_PlaySfxAtFixedWorldPos(play, &this->bodyPartsPos[i], 11, NA_SE_EN_EXTINCT); } @@ -486,7 +455,7 @@ void EnBbfall_Dead(EnBbfall* this, PlayState* play) { return; } - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + for (i = 0; i < BUBBLE_BODYPART_MAX; i++) { Math_Vec3f_Sum(&this->bodyPartsPos[i], &this->bodyPartsVelocity[i], &this->bodyPartsPos[i]); this->bodyPartsVelocity[i].y += this->actor.gravity; } @@ -682,24 +651,54 @@ s32 EnBbfall_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f return false; } +/** + * This maps a given limb based on its limbIndex to its appropriate index + * in the bodyPartsPos/Velocity arrays. + */ +static s8 sLimbToBodyParts[BUBBLE_LIMB_MAX] = { + BODYPART_NONE, // BUBBLE_LIMB_NONE + BODYPART_NONE, // BUBBLE_LIMB_ROOT + BODYPART_NONE, // BUBBLE_LIMB_CRANIUM_ROOT + BODYPART_NONE, // BUBBLE_LIMB_JAW_ROOT + BUBBLE_BODYPART_0, // BUBBLE_LIMB_JAW + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_ROOT + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WRAPPER + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_WEBBING_ROOT + BUBBLE_BODYPART_1, // BUBBLE_LIMB_LEFT_WING_WEBBING + BODYPART_NONE, // BUBBLE_LIMB_LEFT_WING_BONE + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_ROOT + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WRAPPER + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_WEBBING_ROOT + BUBBLE_BODYPART_2, // BUBBLE_LIMB_RIGHT_WING_WEBBING + BODYPART_NONE, // BUBBLE_LIMB_RIGHT_WING_BONE + BUBBLE_BODYPART_3, // BUBBLE_LIMB_CRANIUM +}; + +/** + * The last element of the bodyParts arrays is a duplicate of the cranium + * limb, which is then offset by a certain amount. There is no display list + * associated with this, so it is only used for effects. + */ +static Vec3f sEffectsBodyPartOffset = { 1000.0f, -700.0f, 0.0f }; + void EnBbfall_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad; EnBbfall* this = THIS; MtxF* currentMatrixState; if (this->bodyPartDrawStatus == BBFALL_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbToBodyParts[limbIndex] != -1) { - if (sLimbToBodyParts[limbIndex] == 0) { - Matrix_MultVecX(1000.0f, &this->bodyPartsPos[0]); - } else if (sLimbToBodyParts[limbIndex] == 3) { - Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[3]); - Matrix_MultVec3f(&sDuplicateCraniumBodyPartOffset, &this->bodyPartsPos[4]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_0) { + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_0]); + } else if (sLimbToBodyParts[limbIndex] == BUBBLE_BODYPART_3) { + Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[BUBBLE_BODYPART_3]); + Matrix_MultVec3f(&sEffectsBodyPartOffset, &this->bodyPartsPos[BUBBLE_BODYPART_EFFECTS]); } else { Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } } } else if (this->bodyPartDrawStatus > BBFALL_BODY_PART_DRAW_STATUS_ALIVE) { - if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } @@ -707,7 +706,7 @@ void EnBbfall_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r this->bodyPartDrawStatus = BBFALL_BODY_PART_DRAW_STATUS_BROKEN; } } else { - if (sLimbToBodyParts[limbIndex] != -1) { + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { OPEN_DISPS(play->state.gfxCtx); currentMatrixState = Matrix_GetCurrent(); @@ -771,9 +770,8 @@ void EnBbfall_Draw(Actor* thisx, PlayState* play2) { } } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, - this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, BUBBLE_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h index 19c643ea7..e65b1a8d2 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h @@ -3,6 +3,7 @@ #include "global.h" #include "objects/object_bb/object_bb.h" +#include "overlays/actors/ovl_En_Bb/z_en_bb.h" struct EnBbfall; @@ -25,8 +26,8 @@ typedef struct EnBbfall { /* 0x260 */ f32 drawDmgEffScale; /* 0x264 */ f32 drawDmgEffFrozenSteamScale; /* 0x268 */ Vec3f flamePos[6]; - /* 0x2B0 */ Vec3f bodyPartsPos[5]; - /* 0x2EC */ Vec3f bodyPartsVelocity[5]; + /* 0x2B0 */ Vec3f bodyPartsPos[BUBBLE_BODYPART_MAX]; + /* 0x2EC */ Vec3f bodyPartsVelocity[BUBBLE_BODYPART_MAX]; /* 0x328 */ Gfx* limbDList; /* 0x32C */ UNK_TYPE1 unk_32C[0x58]; /* 0x384 */ ColliderJntSph collider; diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 49aa89d83..fd3818b01 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -372,7 +372,7 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) { if (this->timer == 0) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f); + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, BIGOKUTA_BODYPART_MAX, 2, 0.5f, 0.35f); EnBigokuta_SetupDeathEffects(this); } } else if (CutsceneManager_IsNext(this->csId)) { @@ -628,31 +628,34 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec } static s8 sLimbToBodyParts[BIGOKUTA_LIMB_MAX] = { - -1, // BIGOKUTA_LIMB_NONE - -1, // BIGOKUTA_LIMB_BODY - -1, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_BASE - 0, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_END - -1, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_BASE - 1, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_END - -1, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_BASE - 2, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_END - -1, // BIGOKUTA_LIMB_LEFT_BACK_ARM_BASE - 3, // BIGOKUTA_LIMB_LEFT_BACK_ARM_END - 8, // BIGOKUTA_LIMB_HEAD - 4, // BIGOKUTA_LIMB_LEFT_TENTACLE_BASE - -1, // BIGOKUTA_LIMB_LEFT_TENTACLE_TIP - 5, // BIGOKUTA_LIMB_RIGHT_TENTACLE_BASE - -1, // BIGOKUTA_LIMB_RIGHT_TENTACLE_TIP - -1, // BIGOKUTA_LIMB_LEFT_WEAK_POINT - -1, // BIGOKUTA_LIMB_RIGHT_WEAK_POINT - -1, // BIGOKUTA_LIMB_CENTER_SNOUT - 6, // BIGOKUTA_LIMB_RIGHT_SNOUT - 7, // BIGOKUTA_LIMB_LEFT_SNOUT + BODYPART_NONE, // BIGOKUTA_LIMB_NONE + BODYPART_NONE, // BIGOKUTA_LIMB_BODY + BODYPART_NONE, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_BASE + BIGOKUTA_BODYPART_0, // BIGOKUTA_LIMB_RIGHT_FRONT_ARM_END + BODYPART_NONE, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_BASE + BIGOKUTA_BODYPART_1, // BIGOKUTA_LIMB_LEFT_FRONT_ARM_END + BODYPART_NONE, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_BASE + BIGOKUTA_BODYPART_2, // BIGOKUTA_LIMB_RIGHT_BACK_ARM_END + BODYPART_NONE, // BIGOKUTA_LIMB_LEFT_BACK_ARM_BASE + BIGOKUTA_BODYPART_3, // BIGOKUTA_LIMB_LEFT_BACK_ARM_END + BIGOKUTA_BODYPART_8, // BIGOKUTA_LIMB_HEAD + BIGOKUTA_BODYPART_4, // BIGOKUTA_LIMB_LEFT_TENTACLE_BASE + BODYPART_NONE, // BIGOKUTA_LIMB_LEFT_TENTACLE_TIP + BIGOKUTA_BODYPART_5, // BIGOKUTA_LIMB_RIGHT_TENTACLE_BASE + BODYPART_NONE, // BIGOKUTA_LIMB_RIGHT_TENTACLE_TIP + BODYPART_NONE, // BIGOKUTA_LIMB_LEFT_WEAK_POINT + BODYPART_NONE, // BIGOKUTA_LIMB_RIGHT_WEAK_POINT + BODYPART_NONE, // BIGOKUTA_LIMB_CENTER_SNOUT + BIGOKUTA_BODYPART_6, // BIGOKUTA_LIMB_RIGHT_SNOUT + BIGOKUTA_BODYPART_7, // BIGOKUTA_LIMB_LEFT_SNOUT }; static Vec3f D_80AC45D0[] = { - { 0.0f, 2000.0f, 1000.0f }, { 0.0f, 2000.0f, -2000.0f }, { 1700.0f, 700.0f, -600.0f }, - { -1700.0f, 700.0f, -600.0f }, { 0.0f, 500.0f, -2500.0f }, + { 0.0f, 2000.0f, 1000.0f }, // BIGOKUTA_BODYPART_8 + { 0.0f, 2000.0f, -2000.0f }, // BIGOKUTA_BODYPART_9 + { 1700.0f, 700.0f, -600.0f }, // BIGOKUTA_BODYPART_10 + { -1700.0f, 700.0f, -600.0f }, // BIGOKUTA_BODYPART_11 + { 0.0f, 500.0f, -2500.0f }, // BIGOKUTA_BODYPART_12 }; void EnBigokuta_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { @@ -660,14 +663,14 @@ void EnBigokuta_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* s32 i; s8 bodyPartIndex = sLimbToBodyParts[limbIndex]; - if (bodyPartIndex != -1) { - if (bodyPartIndex < 6) { - Matrix_MultVecX(800.0f, &this->limbPos[bodyPartIndex]); - } else if (bodyPartIndex < 8) { - Matrix_MultZero(&this->limbPos[bodyPartIndex]); + if (bodyPartIndex != BODYPART_NONE) { + if (bodyPartIndex <= BIGOKUTA_BODYPART_5) { + Matrix_MultVecX(800.0f, &this->bodyPartsPos[bodyPartIndex]); + } else if (bodyPartIndex <= BIGOKUTA_BODYPART_7) { + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); } else { for (i = 0; i < ARRAY_COUNT(D_80AC45D0); i++) { - Matrix_MultVec3f(&D_80AC45D0[i], &this->limbPos[bodyPartIndex + i]); + Matrix_MultVec3f(&D_80AC45D0[i], &this->bodyPartsPos[bodyPartIndex + i]); } } } @@ -698,7 +701,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { NULL, EnBigokuta_PostLimbDraw, &this->picto.actor, &gfx[2]); } - Actor_DrawDamageEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->picto.actor, this->bodyPartsPos, BIGOKUTA_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h index 41ae325e0..1fdad749b 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h @@ -9,6 +9,23 @@ struct EnBigokuta; typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*); +typedef enum BigokutaBodyPart { + /* 0 */ BIGOKUTA_BODYPART_0, + /* 1 */ BIGOKUTA_BODYPART_1, + /* 2 */ BIGOKUTA_BODYPART_2, + /* 3 */ BIGOKUTA_BODYPART_3, + /* 4 */ BIGOKUTA_BODYPART_4, + /* 5 */ BIGOKUTA_BODYPART_5, + /* 6 */ BIGOKUTA_BODYPART_6, + /* 7 */ BIGOKUTA_BODYPART_7, + /* 8 */ BIGOKUTA_BODYPART_8, + /* 9 */ BIGOKUTA_BODYPART_9, + /* 10 */ BIGOKUTA_BODYPART_10, + /* 11 */ BIGOKUTA_BODYPART_11, + /* 12 */ BIGOKUTA_BODYPART_12, + /* 13 */ BIGOKUTA_BODYPART_MAX +} BigokutaBodyPart; + typedef struct EnBigokuta { /* 0x000 */ PictoActor picto; /* 0x148 */ SkelAnime skelAnime; @@ -26,7 +43,7 @@ typedef struct EnBigokuta { /* 0x2A0 */ Vec3f playerHoldPos; /* 0x2AC */ Vec3f subCamAt; /* 0x2B8 */ Vec3f subCamEye; - /* 0x2C4 */ Vec3f limbPos[13]; + /* 0x2C4 */ Vec3f bodyPartsPos[BIGOKUTA_BODYPART_MAX]; /* 0x360 */ ColliderCylinder shellCollider; /* 0x3AC */ ColliderCylinder bodyCollider; } EnBigokuta; // size = 0x3F8 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 e4fa338ce..4e9eb8944 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -160,24 +160,24 @@ static InitChainEntry sInitChain[] = { // used in the burning death actionfunc static Vec3f D_80B6506C = { 0.0f, 3.0f, 0.0f }; -static u8 sLimbToBodyParts[BIG_POE_LIMB_MAX] = { - -1, // BIG_POE_LIMB_NONE - 4, // BIG_POE_LIMB_FACE - -1, // BIG_POE_LIMB_LEFT_UPPER_ARM - 0, // BIG_POE_LIMB_LEFT_FOREARM - -1, // BIG_POE_LIMB_RIGHT_UPPER_ARM - 1, // BIG_POE_LIMB_RIGHT_FOREARM - -1, // BIG_POE_LIMB_RIGHT_HAND - 2, // BIG_POE_LIMB_LANTERN - 5, // BIG_POE_LIMB_HAT_AND_CLOAK - 3, // BIG_POE_LIMB_LOWER_ROBE +static s8 sLimbToBodyParts[BIG_POE_LIMB_MAX] = { + BODYPART_NONE, // BIG_POE_LIMB_NONE + BIG_POE_BODYPART_4, // BIG_POE_LIMB_FACE + BODYPART_NONE, // BIG_POE_LIMB_LEFT_UPPER_ARM + BIG_POE_BODYPART_0, // BIG_POE_LIMB_LEFT_FOREARM + BODYPART_NONE, // BIG_POE_LIMB_RIGHT_UPPER_ARM + BIG_POE_BODYPART_1, // BIG_POE_LIMB_RIGHT_FOREARM + BODYPART_NONE, // BIG_POE_LIMB_RIGHT_HAND + BIG_POE_BODYPART_2, // BIG_POE_LIMB_LANTERN + BIG_POE_BODYPART_5, // BIG_POE_LIMB_HAT_AND_CLOAK + BIG_POE_BODYPART_3, // BIG_POE_LIMB_LOWER_ROBE }; // used in limbdraw static Vec3f D_80B65084[] = { - { 2000.0f, 4000.0f, 0.0f }, - { -1000.0f, 1500.0f, -2000.0f }, - { -1000.0f, 1500.0f, 2000.0f }, + { 2000.0f, 4000.0f, 0.0f }, // BIG_POE_BODYPART_6 + { -1000.0f, 1500.0f, -2000.0f }, // BIG_POE_BODYPART_7 + { -1000.0f, 1500.0f, 2000.0f }, // BIG_POE_BODYPART_8 }; void EnBigpo_Init(Actor* thisx, PlayState* play2) { @@ -1267,19 +1267,20 @@ void EnBigpo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro } bodyPartIndex = sLimbToBodyParts[limbIndex]; - if (bodyPartIndex != -1) { - if (bodyPartIndex < 3) { - Matrix_MultZero(&this->limbPos[bodyPartIndex]); - } else if (bodyPartIndex == 3) { - Matrix_MultVecX(3000.0f, &this->limbPos[bodyPartIndex]); - } else if (bodyPartIndex == 4) { - Matrix_MultVecY(-2000.0f, &this->limbPos[bodyPartIndex]); + if (bodyPartIndex != BODYPART_NONE) { + if (bodyPartIndex <= BIG_POE_BODYPART_2) { + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); + } else if (bodyPartIndex == BIG_POE_BODYPART_3) { + Matrix_MultVecX(3000.0f, &this->bodyPartsPos[bodyPartIndex]); + } else if (bodyPartIndex == BIG_POE_BODYPART_4) { + Matrix_MultVecY(-2000.0f, &this->bodyPartsPos[bodyPartIndex]); } else { - v2ptr = &this->limbPos[bodyPartIndex + 1]; + v2ptr = &this->bodyPartsPos[bodyPartIndex + 1]; v1ptr = D_80B65084; - Matrix_MultVecX(-4000.0f, &this->limbPos[bodyPartIndex]); + // BIG_POE_BODYPART_5 + Matrix_MultVecX(-4000.0f, &this->bodyPartsPos[bodyPartIndex]); - for (i = bodyPartIndex + 1; i < ARRAY_COUNT(this->limbPos); i++) { + for (i = bodyPartIndex + 1; i < BIG_POE_BODYPART_MAX; i++) { Matrix_MultVec3f(v1ptr, v2ptr); v2ptr++; v1ptr++; @@ -1318,7 +1319,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) { } // 71.428566f might be 500/7 context unknown - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, BIG_POE_BODYPART_MAX, this->actor.scale.x * 71.428566f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index d622abc0f..12b230614 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -8,6 +8,19 @@ struct EnBigpo; typedef void (*EnBigPoActionFunc)(struct EnBigpo*, PlayState*); +typedef enum BigPoeBodyPart { + /* 0 */ BIG_POE_BODYPART_0, + /* 1 */ BIG_POE_BODYPART_1, + /* 2 */ BIG_POE_BODYPART_2, + /* 3 */ BIG_POE_BODYPART_3, + /* 4 */ BIG_POE_BODYPART_4, + /* 5 */ BIG_POE_BODYPART_5, + /* 6 */ BIG_POE_BODYPART_6, + /* 7 */ BIG_POE_BODYPART_7, + /* 8 */ BIG_POE_BODYPART_8, + /* 9 */ BIG_POE_BODYPART_MAX +} BigPoeBodyPart; + typedef struct EnBigpoFireEffect { /* 0x00 */ Vec3f pos; /* 0x0C */ LightNode* light; @@ -40,7 +53,7 @@ typedef struct EnBigpo { /* 0x218 */ f32 savedHeight; // actual height while flying moves as part of bobbing /* 0x21C */ f32 drawDmgEffAlpha; /* 0x220 */ f32 drawDmgEffScale; - /* 0x224 */ Vec3f limbPos[9]; + /* 0x224 */ Vec3f bodyPartsPos[BIG_POE_BODYPART_MAX]; /* 0x290 */ Color_RGBA8 mainColor; /* 0x294 */ Color_RGBA8 lanternColor; /* 0x298 */ UNK_TYPE1 pad298[0x14]; 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 78c5123cb..f4d498a14 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -923,7 +923,7 @@ void EnBigslime_GekkoThaw(EnBigslime* this, PlayState* play) { this->gekkoCollider.base.colType = COLTYPE_HIT6; this->gekkoCollider.info.elemType = ELEMTYPE_UNK1; this->gekkoDrawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->gekkoBodyPartsPos, GEKKO_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -3034,30 +3034,30 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { } static s8 sLimbToBodyParts[GEKKO_LIMB_MAX] = { - -1, // GEKKO_LIMB_NONE - -1, // GEKKO_LIMB_ROOT - 0, // GEKKO_LIMB_WAIST - -1, // GEKKO_LIMB_LEFT_THIGH - 1, // GEKKO_LIMB_LEFT_SHIN - -1, // GEKKO_LIMB_LEFT_ANKLE - 2, // GEKKO_LIMB_LEFT_FOOT - -1, // GEKKO_LIMB_RIGHT_THIGH - 3, // GEKKO_LIMB_RIGHT_SHIN - -1, // GEKKO_LIMB_RIGHT_ANKLE - 4, // GEKKO_LIMB_RIGHT_FOOT - -1, // GEKKO_LIMB_TORSO - 5, // GEKKO_LIMB_LEFT_UPPER_ARM - 6, // GEKKO_LIMB_LEFT_FOREARM - -1, // GEKKO_LIMB_LEFT_WRIST - 7, // GEKKO_LIMB_LEFT_HAND - 8, // GEKKO_LIMB_RIGHT_UPPER_ARM - 9, // GEKKO_LIMB_RIGHT_FOREARM - -1, // GEKKO_LIMB_RIGHT_WRIST - 10, // GEKKO_LIMB_RIGHT_HAND - -1, // GEKKO_LIMB_HEAD - 11, // GEKKO_LIMB_JAW - -1, // GEKKO_LIMB_LEFT_EYE - -1, // GEKKO_LIMB_RIGHT_EYE + BODYPART_NONE, // GEKKO_LIMB_NONE + BODYPART_NONE, // GEKKO_LIMB_ROOT + GEKKO_BODYPART_WAIST, // GEKKO_LIMB_WAIST + BODYPART_NONE, // GEKKO_LIMB_LEFT_THIGH + GEKKO_BODYPART_LEFT_SHIN, // GEKKO_LIMB_LEFT_SHIN + BODYPART_NONE, // GEKKO_LIMB_LEFT_ANKLE + GEKKO_BODYPART_LEFT_FOOT, // GEKKO_LIMB_LEFT_FOOT + BODYPART_NONE, // GEKKO_LIMB_RIGHT_THIGH + GEKKO_BODYPART_RIGHT_SHIN, // GEKKO_LIMB_RIGHT_SHIN + BODYPART_NONE, // GEKKO_LIMB_RIGHT_ANKLE + GEKKO_BODYPART_RIGHT_FOOT, // GEKKO_LIMB_RIGHT_FOOT + BODYPART_NONE, // GEKKO_LIMB_TORSO + GEKKO_BODYPART_LEFT_UPPER_ARM, // GEKKO_LIMB_LEFT_UPPER_ARM + GEKKO_BODYPART_LEFT_FOREARM, // GEKKO_LIMB_LEFT_FOREARM + BODYPART_NONE, // GEKKO_LIMB_LEFT_WRIST + GEKKO_BODYPART_LEFT_HAND, // GEKKO_LIMB_LEFT_HAND + GEKKO_BODYPART_RIGHT_UPPER_ARM, // GEKKO_LIMB_RIGHT_UPPER_ARM + GEKKO_BODYPART_RIGHT_FOREARM, // GEKKO_LIMB_RIGHT_FOREARM + BODYPART_NONE, // GEKKO_LIMB_RIGHT_WRIST + GEKKO_BODYPART_RIGHT_HAND, // GEKKO_LIMB_RIGHT_HAND + BODYPART_NONE, // GEKKO_LIMB_HEAD + GEKKO_BODYPART_JAW, // GEKKO_LIMB_JAW + BODYPART_NONE, // GEKKO_LIMB_LEFT_EYE + BODYPART_NONE, // GEKKO_LIMB_RIGHT_EYE }; // Some kind of offset for the position of the Gekkos right foot @@ -3072,8 +3072,8 @@ void EnBigslime_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* this->actor.focus.rot.y = this->gekkoRot.y; } - if (sLimbToBodyParts[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[sLimbToBodyParts[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->gekkoBodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == GEKKO_LIMB_RIGHT_ANKLE) { @@ -3130,7 +3130,7 @@ void EnBigslime_DrawGekko(Actor* thisx, PlayState* play) { EnBigslime_DrawShatteringEffects(this, play); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->gekkoBodyPartsPos, GEKKO_BODYPART_MAX, this->gekkoScale * (999.99991f / 7.0f) * this->gekkoDrawDmgEffScale, this->gekkoDrawDmgEffFrozenSteamScale, this->gekkoDrawDmgEffAlpha, this->gekkoDrawDmgEffType); diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h index 2f7183e45..4f09998bc 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h @@ -106,7 +106,7 @@ typedef struct EnBigslime { Vec3f frozenPos; Vec3f subCamDistToFrog; // Used to zoom into frogs as Gekko despawns/Frog spawns }; - /* 0x02F8 */ Vec3f limbPos[12]; + /* 0x02F8 */ Vec3f gekkoBodyPartsPos[GEKKO_BODYPART_MAX]; /* 0x0388 */ f32 gekkoDrawDmgEffAlpha; /* 0x038C */ f32 gekkoDrawDmgEffScale; /* 0x0390 */ f32 gekkoDrawDmgEffFrozenSteamScale; 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 7e173bb56..2a2b8f6e8 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -423,7 +423,7 @@ void func_80868B74(EnBox* this, PlayState* play) { this->dyna.actor.world.pos.y += 1.25f; } this->unk_1A0++; - if ((this->csId1 != -1) && CutsceneManager_GetCurrentCsId() == this->csId1) { + if ((this->csId1 != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId1)) { if (this->unk_1A0 == 2) { func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_4); } else if (this->unk_1A0 == 22) { 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 6416f3325..407c6ea66 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 @@ -240,12 +240,12 @@ void EnCne01_Update(Actor* thisx, PlayState* play) { s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnCne01* this = THIS; - s8 bodyPart; + s8 bodyPartIndex; Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; - bodyPart = gEnHyBodyParts[limbIndex]; - if (bodyPart >= 0) { - Matrix_MultVec3f(&zeroVec, &this->enHy.bodyPartsPos[bodyPart]); + bodyPartIndex = gEnHyLimbToBodyParts[limbIndex]; + if (bodyPartIndex > BODYPART_NONE) { + Matrix_MultVec3f(&zeroVec, &this->enHy.bodyPartsPos[bodyPartIndex]); } if (limbIndex == CNE_LIMB_HEAD) { @@ -327,8 +327,8 @@ void EnCne01_Draw(Actor* thisx, PlayState* play) { *shadowTexIter++ = 0; } for (i = 0; i < 5; i++) { - SubS_GenShadowTex(this->enHy.bodyPartsPos, &this->enHy.actor.world.pos, shadowTex, i / 5.0f, - ARRAY_COUNT(this->enHy.bodyPartsPos), gEnHyShadowSizes, gEnHyParentBodyParts); + SubS_GenShadowTex(this->enHy.bodyPartsPos, &this->enHy.actor.world.pos, shadowTex, i / 5.0f, ENHY_BODYPART_MAX, + gEnHyShadowSizes, gEnHyParentShadowBodyParts); } SubS_DrawShadowTex(&this->enHy.actor, &play->state, shadowTex); 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 eaede93b7..021c55631 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -290,7 +290,7 @@ void EnCrow_CheckIfFrozen(EnCrow* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, 4, 2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, GUAY_BODYPART_MAX, 2, 0.2f, 0.2f); } } @@ -565,7 +565,7 @@ void EnCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot EnCrow* this = THIS; if (limbIndex == OBJECT_CROW_LIMB_BODY) { - Matrix_MultVecX(2500.0f, this->bodyPartsPos); + Matrix_MultVecX(2500.0f, &this->bodyPartsPos[GUAY_BODYPART_BODY]); } else if ((limbIndex == OBJECT_CROW_LIMB_RIGHT_WING_TIP) || (limbIndex == OBJECT_CROW_LIMB_LEFT_WING_TIP) || (limbIndex == OBJECT_CROW_LIMB_TAIL)) { Matrix_MultZero(&this->bodyPartsPos[(limbIndex >> 1) - 1]); @@ -578,7 +578,7 @@ void EnCrow_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnCrow_OverrideLimbDraw, EnCrow_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, GUAY_BODYPART_MAX, this->actor.scale.x * 100.0f * this->drawDmgEffFrozenSteamScale, this->drawDmgEffScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.h b/src/overlays/actors/ovl_En_Crow/z_en_crow.h index 527f822f6..d2ebc554a 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.h +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.h @@ -13,6 +13,14 @@ struct EnCrow; typedef void (*EnCrowActionFunc)(struct EnCrow*, PlayState*); +typedef enum GuayBodyPart { + /* 0 */ GUAY_BODYPART_BODY, + /* 1 */ GUAY_BODYPART_RIGHT_WING_TIP, + /* 2 */ GUAY_BODYPART_LEFT_WING_TIP, + /* 3 */ GUAY_BODYPART_TAIL, + /* 4 */ GUAY_BODYPART_MAX +} GuayBodyPart; + typedef struct EnCrow { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -25,7 +33,7 @@ typedef struct EnCrow { /* 0x1CA */ Vec3s morphTable[OBJECT_CROW_LIMB_MAX]; /* 0x200 */ ColliderJntSph collider; /* 0x220 */ ColliderJntSphElement colliderItems[1]; - /* 0x260 */ Vec3f bodyPartsPos[4]; + /* 0x260 */ Vec3f bodyPartsPos[GUAY_BODYPART_MAX]; /* 0x290 */ f32 drawDmgEffAlpha; /* 0x294 */ f32 drawDmgEffFrozenSteamScale; /* 0x298 */ f32 drawDmgEffScale; 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 19664a831..e9bb777c6 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -301,8 +301,8 @@ void EnDekubaba_SpawnIceEffects(EnDekubaba* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 4, - this->size * 0.3f, this->size * 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DEKUBABA_BODYPART_MAX, 4, this->size * 0.3f, + this->size * 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -1237,7 +1237,7 @@ void EnDekubaba_DrawStemRetracted(EnDekubaba* this, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStemTopDL); - for (i = 1; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + for (i = DEKUBABA_BODYPART_1; i < DEKUBABA_BODYPART_MAX; i++) { Matrix_MultZero(&this->bodyPartsPos[i]); } @@ -1293,7 +1293,7 @@ void EnDekubaba_DrawStemExtended(EnDekubaba* this, PlayState* play) { } } - Matrix_MultZero(&this->bodyPartsPos[i + 1]); + Matrix_MultZero(&this->bodyPartsPos[DEKUBABA_BODYPART_1 + i]); } CLOSE_DISPS(play->state.gfxCtx); @@ -1309,7 +1309,7 @@ void EnDekubaba_DrawStemBasePruned(EnDekubaba* this, PlayState* play) { Collider_UpdateSpheres(55, &this->collider); Collider_UpdateSpheres(56, &this->collider); - Matrix_MultZero(&this->bodyPartsPos[3]); + Matrix_MultZero(&this->bodyPartsPos[DEKUBABA_BODYPART_3]); CLOSE_DISPS(play->state.gfxCtx); } @@ -1349,7 +1349,7 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - Math_Vec3f_Copy(&this->bodyPartsPos[0], &this->actor.world.pos); + Math_Vec3f_Copy(&this->bodyPartsPos[DEKUBABA_BODYPART_0], &this->actor.world.pos); if (this->actionFunc != EnDekubaba_DeadStickDrop) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnDekubaba_PostLimbDraw, @@ -1382,7 +1382,7 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) { } CLOSE_DISPS(play->state.gfxCtx); - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, DEKUBABA_BODYPART_MAX, this->drawDmgEffScale * this->size, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h index b1c7f98bc..b29dbe8db 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h @@ -13,6 +13,14 @@ typedef enum { /* 1 */ DEKUBABA_BIG } DekuBabaType; +typedef enum DekuBabaBodyPart { + /* 0 */ DEKUBABA_BODYPART_0, + /* 1 */ DEKUBABA_BODYPART_1, + /* 2 */ DEKUBABA_BODYPART_2, + /* 3 */ DEKUBABA_BODYPART_3, + /* 4 */ DEKUBABA_BODYPART_MAX +} DekuBabaBodyPart; + typedef struct EnDekubaba { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -27,7 +35,7 @@ typedef struct EnDekubaba { /* 0x1FC */ f32 drawDmgEffAlpha; /* 0x200 */ f32 drawDmgEffScale; /* 0x204 */ f32 drawDmgEffFrozenSteamScale; - /* 0x208 */ Vec3f bodyPartsPos[4]; + /* 0x208 */ Vec3f bodyPartsPos[DEKUBABA_BODYPART_MAX]; /* 0x238 */ CollisionPoly* boundFloor; /* 0x23C */ ColliderJntSph collider; /* 0x25C */ ColliderJntSphElement colliderElements[7]; 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 6cbc3a49b..1057da6fa 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -162,7 +162,7 @@ void func_808BD3B4(EnDekunuts* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 8, 2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENDEKUNUTS_BODYPART_MAX, 2, 0.2f, 0.2f); } } @@ -700,28 +700,42 @@ s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec return false; } +static s8 sLimbToBodyParts[DEKU_SCRUB_LIMB_MAX] = { + BODYPART_NONE, // DEKU_SCRUB_LIMB_NONE + BODYPART_NONE, // DEKU_SCRUB_LIMB_BODY + BODYPART_NONE, // DEKU_SCRUB_LIMB_HEAD + ENDEKUNUTS_BODYPART_3, // DEKU_SCRUB_LIMB_HEADDRESS + BODYPART_NONE, // DEKU_SCRUB_LIMB_CREST + ENDEKUNUTS_BODYPART_0, // DEKU_SCRUB_LIMB_SNOUT + BODYPART_NONE, // DEKU_SCRUB_LIMB_LEFT_LEG + ENDEKUNUTS_BODYPART_1, // DEKU_SCRUB_LIMB_LEFT_FOOT + BODYPART_NONE, // DEKU_SCRUB_LIMB_RIGHT_LEG + ENDEKUNUTS_BODYPART_2, // DEKU_SCRUB_LIMB_RIGHT_FOOT +}; + +static Vec3f D_808BEFA4[] = { + { -1500.0f, 0.0f, -1700.0f }, // ENDEKUNUTS_BODYPART_4 + { -1500.0f, 0.0f, 1700.0f }, // ENDEKUNUTS_BODYPART_5 + { -2500.0f, -2000.0f, 0.0f }, // ENDEKUNUTS_BODYPART_6 + { -1000.0f, 1000.0f, 0.0f }, // ENDEKUNUTS_BODYPART_7 +}; + void EnDekunuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static s8 D_808BEF98[] = { - -1, -1, -1, 3, -1, 0, -1, 1, -1, 2, 0, 0, - }; - static Vec3f D_808BEFA4[] = { - { -1500.0f, 0.0f, -1700.0f }, { -1500.0f, 0.0f, 1700.0f }, { -2500.0f, -2000.0f, 0.0f }, - { -1000.0f, 1000.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, - }; EnDekunuts* this = THIS; s32 i; Vec3f* ptr1; Vec3f* ptr2; - s32 value = D_808BEF98[limbIndex]; + s32 bodyPartIndex = sLimbToBodyParts[limbIndex]; - if (value != -1) { - if (value < 3) { - Matrix_MultVecX(1000.0f, &this->limbPos[value]); + if (bodyPartIndex != BODYPART_NONE) { + if (bodyPartIndex <= ENDEKUNUTS_BODYPART_2) { + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[bodyPartIndex]); } else { - Matrix_MultZero(&this->limbPos[value]); + // ENDEKUNUTS_BODYPART_3 + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); ptr1 = &D_808BEFA4[0]; - ptr2 = &this->limbPos[value + 1]; - for (i = value + 1; i < ARRAY_COUNT(this->limbPos); i++) { + ptr2 = &this->bodyPartsPos[bodyPartIndex + 1]; + for (i = bodyPartIndex + 1; i < ENDEKUNUTS_BODYPART_MAX; i++) { Matrix_MultVec3f(ptr1, ptr2); ptr1++, ptr2++; } @@ -745,6 +759,6 @@ void EnDekunuts_Draw(Actor* thisx, PlayState* play) { func_800AE5A0(play); } Gfx_DrawDListOpa(play, gDekuScrubFlowerDL); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENDEKUNUTS_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h index 248f758ac..9580cb3e6 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h @@ -17,6 +17,18 @@ typedef enum { /* 0xFF */ ENDEKUNUTS_GET_FF00_FF = 0xFF } EnDekunutsParam; +typedef enum DekunutsBodyPart { + /* 0 */ ENDEKUNUTS_BODYPART_0, + /* 1 */ ENDEKUNUTS_BODYPART_1, + /* 2 */ ENDEKUNUTS_BODYPART_2, + /* 3 */ ENDEKUNUTS_BODYPART_3, + /* 4 */ ENDEKUNUTS_BODYPART_4, + /* 5 */ ENDEKUNUTS_BODYPART_5, + /* 6 */ ENDEKUNUTS_BODYPART_6, + /* 7 */ ENDEKUNUTS_BODYPART_7, + /* 8 */ ENDEKUNUTS_BODYPART_MAX +} DekunutsBodyPart; + typedef struct EnDekunuts { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -32,7 +44,7 @@ typedef struct EnDekunuts { /* 0x210 */ f32 drawDmgEffAlpha; /* 0x214 */ f32 drawDmgEffScale; /* 0x218 */ f32 drawDmgEffFrozenSteamScale; - /* 0x21C */ Vec3f limbPos[8]; + /* 0x21C */ Vec3f bodyPartsPos[ENDEKUNUTS_BODYPART_MAX]; /* 0x27C */ ColliderCylinder collider; } EnDekunuts; // size = 0x2C8 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 e6602263a..8779f9e6d 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -390,7 +390,7 @@ void func_8089ACEC(EnDinofos* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->colliderJntSph.base.colType = COLTYPE_HIT0; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 12, 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DINOFOS_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -1048,9 +1048,9 @@ void func_8089CB10(EnDinofos* this, PlayState* play) { for (i = 6; i < ARRAY_COUNT(this->colliderJntSphElement); i++) { worldSphere = &this->colliderJntSph.elements[i].dim.worldSphere; - worldSphere->center.x = this->limbPos[10].x; - worldSphere->center.y = this->limbPos[10].y; - worldSphere->center.z = this->limbPos[10].z; + worldSphere->center.x = this->bodyPartsPos[DINOFOS_BODYPART_JAW].x; + worldSphere->center.y = this->bodyPartsPos[DINOFOS_BODYPART_JAW].y; + worldSphere->center.z = this->bodyPartsPos[DINOFOS_BODYPART_JAW].z; } if (play->sceneId == SCENE_MITURIN) { @@ -1086,7 +1086,8 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { sp7C.y = Rand_CenteredFloat(0.6f) + 1.4f; sp7C.z = 0.9f * temp_f22; Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); - EffectSsDFire_Spawn(play, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8); + EffectSsDFire_Spawn(play, &this->bodyPartsPos[DINOFOS_BODYPART_JAW], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, + 3, 8); for (end = 6, i = 3; i > 0; i--) { if (this->unk_290 < (20 + -(i * 2))) { @@ -1099,9 +1100,11 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { dim = &this->colliderJntSph.elements[i].dim; temp_s3 = (s32)(Math_CosF((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y; - dim->worldSphere.center.x = (s32)this->limbPos[10].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z); - dim->worldSphere.center.y = (s32)this->limbPos[10].y + (s32)dim->modelSphere.center.y; - dim->worldSphere.center.z = (s32)this->limbPos[10].z + (s32)(Math_CosS(temp_s3) * dim->modelSphere.center.z); + dim->worldSphere.center.x = + (s32)this->bodyPartsPos[DINOFOS_BODYPART_JAW].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z); + dim->worldSphere.center.y = (s32)this->bodyPartsPos[DINOFOS_BODYPART_JAW].y + (s32)dim->modelSphere.center.y; + dim->worldSphere.center.z = + (s32)this->bodyPartsPos[DINOFOS_BODYPART_JAW].z + (s32)(Math_CosS(temp_s3) * dim->modelSphere.center.z); } if (this->unk_290 != 0) { @@ -1345,7 +1348,7 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnDinofos* this = THIS; s32 pad; - Vec3f sp30; + Vec3f bodyPartPos; if (this->actionFunc != func_8089C7B8) { func_8089A900(this); @@ -1362,10 +1365,11 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { 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)) { - Math_Vec3f_Copy(&sp30, &this->limbPos[1 + (play->gameplayFrames % 4)]); - sp30.y = this->actor.world.pos.y + this->actor.depthInWater; - EffectSsGRipple_Spawn(play, &sp30, 100, 320, 0); + if (((play->gameplayFrames % 4) & 1) == 0) { + Math_Vec3f_Copy(&bodyPartPos, + &this->bodyPartsPos[DINOFOS_BODYPART_LEFT_CLAWS + (play->gameplayFrames % 4)]); + bodyPartPos.y = this->actor.world.pos.y + this->actor.depthInWater; + EffectSsGRipple_Spawn(play, &bodyPartPos, 100, 320, 0); } } if (this->actionFunc != func_8089D018) { @@ -1377,7 +1381,7 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { Math_ScaledStepToS(&this->unk_28E, 0, 2000); } - Math_Vec3f_Copy(&this->actor.focus.pos, &this->limbPos[4]); + Math_Vec3f_Copy(&this->actor.focus.pos, &this->bodyPartsPos[DINOFOS_BODYPART_UPPER_BODY]); this->actor.focus.rot.y = this->actor.shape.rot.y + this->unk_28E; if (this->colliderJntSph.base.acFlags & AC_ON) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderJntSph.base); @@ -1413,13 +1417,35 @@ s32 func_8089DC4C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s return 0; } +static Vec3f D_8089E38C = { 400.0f, -3600.0f, 0.0f }; +static Vec3f D_8089E398 = { 300.0f, 500.0f, 0.0f }; +static Vec3f D_8089E3A4 = { 700.0f, 400.0f, 0.0f }; + +static s8 sLimbToBodyParts[DINOLFOS_LIMB_MAX] = { + BODYPART_NONE, // DINOLFOS_LIMB_NONE + BODYPART_NONE, // DINOLFOS_LIMB_LOWER_BODY + DINOFOS_BODYPART_LEFT_UPPER_LEG, // DINOLFOS_LIMB_LEFT_UPPER_LEG + BODYPART_NONE, // DINOLFOS_LIMB_LEFT_LOWER_LEG + DINOFOS_BODYPART_LEFT_CLAWS, // DINOLFOS_LIMB_LEFT_CLAWS + DINOFOS_BODYPART_RIGHT_UPPER_LEG, // DINOLFOS_LIMB_RIGHT_UPPER_LEG + BODYPART_NONE, // DINOLFOS_LIMB_RIGHT_LOWER_LEG + DINOFOS_BODYPART_RIGHT_CLAWS, // DINOLFOS_LIMB_RIGHT_CLAWS + DINOFOS_BODYPART_UPPER_BODY, // DINOLFOS_LIMB_UPPER_BODY + BODYPART_NONE, // DINOLFOS_LIMB_LEFT_UPPER_ARM + DINOFOS_BODYPART_LEFT_FOREARM, // DINOLFOS_LIMB_LEFT_FOREARM + DINOFOS_BODYPART_LEFT_HAND, // DINOLFOS_LIMB_LEFT_HAND + BODYPART_NONE, // DINOLFOS_LIMB_RIGHT_UPPER_ARM + DINOFOS_BODYPART_RIGHT_FOREARM, // DINOLFOS_LIMB_RIGHT_FOREARM + DINOFOS_BODYPART_RIGHT_HAND, // DINOLFOS_LIMB_RIGHT_HAND + BODYPART_NONE, // DINOLFOS_LIMB_NECK + DINOFOS_BODYPART_HEAD, // DINOLFOS_LIMB_HEAD + DINOFOS_BODYPART_JAW, // DINOLFOS_LIMB_JAW + BODYPART_NONE, // DINOLFOS_LIMB_UPPER_TAIL + DINOFOS_BODYPART_LOWER_TAIL, // DINOLFOS_LIMB_LOWER_TAIL + BODYPART_NONE, // DINOLFOS_LIMB_KNIFE +}; + void func_8089DC84(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { - static Vec3f D_8089E38C = { 400.0f, -3600.0f, 0.0f }; - static Vec3f D_8089E398 = { 300.0f, 500.0f, 0.0f }; - static Vec3f D_8089E3A4 = { 700.0f, 400.0f, 0.0f }; - static s8 D_8089E3B0[] = { - -1, -1, 0, -1, 1, 2, -1, 3, 4, -1, 5, 6, -1, 7, 8, -1, 9, 10, -1, 11, -1, - }; EnDinofos* this = THIS; Vec3f sp80; Vec3f sp74; @@ -1430,8 +1456,8 @@ void func_8089DC84(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto MtxF* sp48; Collider_UpdateSpheres(limbIndex, &this->colliderJntSph); - if (D_8089E3B0[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_8089E3B0[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if ((limbIndex == DINOLFOS_LIMB_RIGHT_HAND) && (this->unk_292 != this->unk_290) && @@ -1463,7 +1489,8 @@ void func_8089DC84(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto sp4C.x -= sp48->mf[3][0]; sp4C.y -= sp48->mf[3][1]; sp4C.z -= sp48->mf[3][2]; - EffectSsDFire_Spawn(play, &this->limbPos[10], &sp4C, &gZeroVec3f, 30, 22, 255 - (sp58 * 20), 20, 3, 8); + EffectSsDFire_Spawn(play, &this->bodyPartsPos[DINOFOS_BODYPART_JAW], &sp4C, &gZeroVec3f, 30, 22, + 255 - (sp58 * 20), 20, 3, 8); this->unk_292 = this->unk_290; } } @@ -1498,7 +1525,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { func_8089DC4C, func_8089DC84, &this->actor, POLY_XLU_DISP); } - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, DINOFOS_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h index 81590268c..dd39135ae 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h @@ -8,6 +8,22 @@ struct EnDinofos; typedef void (*EnDinofosActionFunc)(struct EnDinofos*, PlayState*); +typedef enum EnDinofosBodyPart { + /* 0 */ DINOFOS_BODYPART_LEFT_UPPER_LEG, + /* 1 */ DINOFOS_BODYPART_LEFT_CLAWS, + /* 2 */ DINOFOS_BODYPART_RIGHT_UPPER_LEG, + /* 3 */ DINOFOS_BODYPART_RIGHT_CLAWS, + /* 4 */ DINOFOS_BODYPART_UPPER_BODY, + /* 5 */ DINOFOS_BODYPART_LEFT_FOREARM, + /* 6 */ DINOFOS_BODYPART_LEFT_HAND, + /* 7 */ DINOFOS_BODYPART_RIGHT_FOREARM, + /* 8 */ DINOFOS_BODYPART_RIGHT_HAND, + /* 9 */ DINOFOS_BODYPART_HEAD, + /* 10 */ DINOFOS_BODYPART_JAW, + /* 11 */ DINOFOS_BODYPART_LOWER_TAIL, + /* 12 */ DINOFOS_BODYPART_MAX +} EnDinofosBodyPart; + typedef struct EnDinofos { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -34,7 +50,7 @@ typedef struct EnDinofos { /* 0x2B8 */ f32 drawDmgEffFrozenSteamScale; /* 0x2BC */ Vec3f unk_2BC; /* 0x2C8 */ Vec3f unk_2C8; - /* 0x2D4 */ Vec3f limbPos[12]; + /* 0x2D4 */ Vec3f bodyPartsPos[DINOFOS_BODYPART_MAX]; /* 0x364 */ ColliderJntSph colliderJntSph; /* 0x384 */ ColliderJntSphElement colliderJntSphElement[9]; /* 0x5C4 */ ColliderQuad colliderQuad; 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 ae6d05c07..0f0025a4a 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -432,7 +432,8 @@ void func_80876D28(EnDodongo* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider1.base.colType = COLTYPE_HIT0; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, &this->limbPos[0], 9, 2, this->unk_334 * 0.3f, this->unk_334 * 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DODONGO_BODYPART_MAX, 2, this->unk_334 * 0.3f, + this->unk_334 * 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -448,7 +449,7 @@ void func_80876DC4(EnDodongo* this, PlayState* play) { f32 temp_f22; f32 temp_f20; - Math_Vec3f_Copy(&sp68, &this->limbPos[0]); + Math_Vec3f_Copy(&sp68, &this->bodyPartsPos[DODONGO_BODYPART_0]); sp66 = ((s32)Rand_Next() >> 0x12) + this->actor.shape.rot.y; temp_f20 = Math_CosS(sp66); temp_f22 = Math_SinS(sp66); @@ -496,8 +497,8 @@ void func_80876DC4(EnDodongo* this, PlayState* play) { sp74.z = (Rand_ZeroFloat(0.1f) + 0.15f) * -temp_f22 * this->unk_334; func_800B0EB0(play, &sp68, &sp80, &sp74, &this->unk_32C, &this->unk_330, sp64, sp62, 0x14); - sp68.x = this->limbPos[0].x + (temp_f20 * 6.0f * this->unk_334); - sp68.z = this->limbPos[0].z - (temp_f22 * 6.0f * this->unk_334); + sp68.x = this->bodyPartsPos[DODONGO_BODYPART_0].x + (temp_f20 * 6.0f * this->unk_334); + sp68.z = this->bodyPartsPos[DODONGO_BODYPART_0].z - (temp_f22 * 6.0f * this->unk_334); sp80.x *= -1.0f; sp80.z = sp80.z * -1.0f; sp74.x = (Rand_ZeroFloat(0.1f) + 0.15f) * -temp_f20 * this->unk_334; @@ -623,9 +624,9 @@ void func_808777A8(EnDodongo* this) { for (i = 0; i < ARRAY_COUNT(this->collider3Elements); i++) { sph = &this->collider3.elements[i].dim.worldSphere; - sph->center.x = this->limbPos[0].x; - sph->center.y = this->limbPos[0].y; - sph->center.z = this->limbPos[0].z; + sph->center.x = this->bodyPartsPos[DODONGO_BODYPART_0].x; + sph->center.y = this->bodyPartsPos[DODONGO_BODYPART_0].y; + sph->center.z = this->bodyPartsPos[DODONGO_BODYPART_0].z; sph->radius = 0; } @@ -659,10 +660,12 @@ void func_8087784C(EnDodongo* this, PlayState* play) { temp_f12 = Math_CosS(this->actor.shape.rot.y) * this->unk_334; for (i = 0; i < end; i++, element++) { - element->dim.worldSphere.center.x = this->limbPos[0].x + (element->dim.modelSphere.center.z * temp_f2); + element->dim.worldSphere.center.x = + this->bodyPartsPos[DODONGO_BODYPART_0].x + (element->dim.modelSphere.center.z * temp_f2); element->dim.worldSphere.center.y = - this->limbPos[0].y + (element->dim.modelSphere.center.y * this->unk_334); - element->dim.worldSphere.center.z = this->limbPos[0].z + (element->dim.modelSphere.center.z * temp_f12); + this->bodyPartsPos[DODONGO_BODYPART_0].y + (element->dim.modelSphere.center.y * this->unk_334); + element->dim.worldSphere.center.z = + this->bodyPartsPos[DODONGO_BODYPART_0].z + (element->dim.modelSphere.center.z * temp_f12); element->dim.worldSphere.radius = element->dim.modelSphere.radius; } @@ -670,8 +673,8 @@ void func_8087784C(EnDodongo* this, PlayState* play) { D_80879348.x = 2.5f * temp_f2; D_80879348.y = this->unk_334 * 1.4f; D_80879348.z = 2.5f * temp_f12; - EffectSsDFire_Spawn(play, &this->limbPos[0], &D_80879354, &D_80879348, this->unk_334 * 100.0f, - this->unk_334 * 35.0f, 0xFF - (frame * 10), 5, 0, 8); + EffectSsDFire_Spawn(play, &this->bodyPartsPos[DODONGO_BODYPART_0], &D_80879354, &D_80879348, + this->unk_334 * 100.0f, this->unk_334 * 35.0f, 0xFF - (frame * 10), 5, 0, 8); } else if ((this->skelAnime.curFrame >= 2.0f) && (this->skelAnime.curFrame <= 20.0f)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_DODO_J_BREATH - SFX_FLAG); } @@ -773,13 +776,13 @@ void func_80877E60(EnDodongo* this, PlayState* play) { } else { sp5E = this->unk_334 * 50.0f; sp5C = this->unk_334 * 5.0f; - Math_Vec3f_Copy(&sp64, &this->limbPos[0]); + Math_Vec3f_Copy(&sp64, &this->bodyPartsPos[DODONGO_BODYPART_0]); func_800B0DE0(play, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C); sp64.x -= Math_CosS(this->actor.shape.rot.y) * 6.0f * this->unk_334; sp64.z += Math_SinS(this->actor.shape.rot.y) * 6.0f * this->unk_334; func_800B0DE0(play, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C); - sp64.x = (2.0f * this->limbPos[0].x) - sp64.x; - sp64.z = (2.0f * this->limbPos[0].z) - sp64.z; + sp64.x = (2.0f * this->bodyPartsPos[DODONGO_BODYPART_0].x) - sp64.x; + sp64.z = (2.0f * this->bodyPartsPos[DODONGO_BODYPART_0].z) - sp64.z; func_800B0DE0(play, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C); } } @@ -1072,32 +1075,64 @@ s32 EnDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 return false; } +static Vec3f D_80879370 = { 1800.0f, 1200.0f, 0.0f }; +static Vec3f D_8087937C = { 1500.0f, 300.0f, 0.0f }; + +static s8 sLimbToBodyParts[OBJECT_DODONGO_LIMB_MAX] = { + BODYPART_NONE, // OBJECT_DODONGO_LIMB_NONE + BODYPART_NONE, // OBJECT_DODONGO_LIMB_01 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_02 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_03 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_04 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_05 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_06 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_07 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_08 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_09 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_0A + BODYPART_NONE, // OBJECT_DODONGO_LIMB_0B + BODYPART_NONE, // OBJECT_DODONGO_LIMB_0C + DODONGO_BODYPART_2, // OBJECT_DODONGO_LIMB_0D + DODONGO_BODYPART_3, // OBJECT_DODONGO_LIMB_0E + DODONGO_BODYPART_4, // OBJECT_DODONGO_LIMB_0F + BODYPART_NONE, // OBJECT_DODONGO_LIMB_10 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_11 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_12 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_13 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_14 + DODONGO_BODYPART_5, // OBJECT_DODONGO_LIMB_15 + DODONGO_BODYPART_6, // OBJECT_DODONGO_LIMB_16 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_17 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_18 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_19 + BODYPART_NONE, // OBJECT_DODONGO_LIMB_1A + BODYPART_NONE, // OBJECT_DODONGO_LIMB_1B + DODONGO_BODYPART_7, // OBJECT_DODONGO_LIMB_1C + DODONGO_BODYPART_8, // OBJECT_DODONGO_LIMB_1D + BODYPART_NONE, // OBJECT_DODONGO_LIMB_1E +}; + void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Vec3f D_80879370 = { 1800.0f, 1200.0f, 0.0f }; - static Vec3f D_8087937C = { 1500.0f, 300.0f, 0.0f }; - static s8 D_80879388[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, - -1, -1, -1, -1, -1, 5, 6, -1, -1, -1, -1, -1, 7, 8, -1, 0, - }; EnDodongo* this = THIS; Collider_UpdateSpheres(limbIndex, &this->collider1); Collider_UpdateSpheres(limbIndex, &this->collider2); - if (D_80879388[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_80879388[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == 7) { Matrix_MultVec3f(&D_80879370, &this->unk_308); - Matrix_MultVec3f(&D_8087937C, &this->limbPos[0]); + Matrix_MultVec3f(&D_8087937C, &this->bodyPartsPos[DODONGO_BODYPART_0]); Matrix_MultZero(&this->actor.focus.pos); - Matrix_MultVecY(-200.0f, &this->limbPos[1]); + Matrix_MultVecY(-200.0f, &this->bodyPartsPos[DODONGO_BODYPART_1]); } else if (limbIndex == 13) { Matrix_MultVecX(1600.0f, &this->unk_320); } if ((limbIndex == 30) && (this->actionFunc == func_80878424) && (this->timer != this->unk_304)) { - EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->limbPos[4]); + EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, + &this->bodyPartsPos[DODONGO_BODYPART_4]); this->unk_304 = this->timer; } } @@ -1108,7 +1143,7 @@ void EnDodongo_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDodongo_OverrideLimbDraw, EnDodongo_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, DODONGO_BODYPART_MAX, this->drawDmgEffScale * this->unk_334, this->drawDmgEffFrozenSteamScale * this->unk_334, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h index 3cc80b0d1..be3095410 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h @@ -7,6 +7,19 @@ struct EnDodongo; typedef void (*EnDodongoActionFunc)(struct EnDodongo*, PlayState*); +typedef enum DodongoBodyPart { + /* 0 */ DODONGO_BODYPART_0, + /* 1 */ DODONGO_BODYPART_1, + /* 2 */ DODONGO_BODYPART_2, + /* 3 */ DODONGO_BODYPART_3, + /* 4 */ DODONGO_BODYPART_4, + /* 5 */ DODONGO_BODYPART_5, + /* 6 */ DODONGO_BODYPART_6, + /* 7 */ DODONGO_BODYPART_7, + /* 8 */ DODONGO_BODYPART_8, + /* 9 */ DODONGO_BODYPART_MAX +} DodongoBodyPart; + typedef struct EnDodongo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -27,7 +40,7 @@ typedef struct EnDodongo { /* 0x33C */ f32 drawDmgEffAlpha; /* 0x340 */ f32 drawDmgEffScale; /* 0x344 */ f32 drawDmgEffFrozenSteamScale; - /* 0x348 */ Vec3f limbPos[9]; + /* 0x348 */ Vec3f bodyPartsPos[DODONGO_BODYPART_MAX]; /* 0x3B4 */ ColliderJntSph collider1; /* 0x3D4 */ ColliderJntSphElement collider1Elements[10]; /* 0x654 */ ColliderJntSph collider2; 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 e349a13a3..d690fd585 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1460,10 +1460,10 @@ void EnEgol_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot (limbIndex == EYEGORE_LIMB_RIGHT_HAND) || (limbIndex == EYEGORE_LIMB_UPPER_EYELID) || (limbIndex == EYEGORE_LIMB_LOWER_EYELID) || (limbIndex == EYEGORE_LIMB_HIPS) || (limbIndex == EYEGORE_LIMB_LEFT_SHIN) || (limbIndex == EYEGORE_LIMB_RIGHT_SHIN)) { - Matrix_MultZero(&this->limbPos[this->limbPosIndex]); - this->limbPosIndex++; - if (this->limbPosIndex >= ARRAY_COUNT(this->limbPos)) { - this->limbPosIndex = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= EYEGORE_BODYPART_MAX) { + this->bodyPartIndex = 0; } } Collider_UpdateSpheres(limbIndex, &this->bodyCollider); @@ -1486,7 +1486,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { if (this->dmgEffectTimer != 0) { f32 drawDmgEffAlpha = 0.05f * this->dmgEffectTimer; - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0.8f, 0.8f, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EYEGORE_BODYPART_MAX, 0.8f, 0.8f, drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); } if (this->laserState >= EYEGORE_LASER_FIRE) { diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index faa156543..35d232d51 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -29,6 +29,22 @@ typedef struct { /* 0x38 */ f32 scale; } EnEgolEffect; // size = 0x3C +typedef enum EyegoreBodyPart { + /* 0 */ EYEGORE_BODYPART_0, + /* 1 */ EYEGORE_BODYPART_1, + /* 2 */ EYEGORE_BODYPART_2, + /* 3 */ EYEGORE_BODYPART_3, + /* 4 */ EYEGORE_BODYPART_4, + /* 5 */ EYEGORE_BODYPART_5, + /* 6 */ EYEGORE_BODYPART_6, + /* 7 */ EYEGORE_BODYPART_7, + /* 8 */ EYEGORE_BODYPART_8, + /* 9 */ EYEGORE_BODYPART_9, + /* 10 */ EYEGORE_BODYPART_10, + /* 11 */ EYEGORE_BODYPART_11, + /* 12 */ EYEGORE_BODYPART_MAX +} EyegoreBodyPart; + typedef struct EnEgol { /* 0x0000 */ Actor actor; /* 0x0144 */ SkelAnime skelAnime; @@ -43,8 +59,8 @@ typedef struct EnEgol { /* 0x02B4 */ s16 headRot; /* 0x02BA */ s16 switchFlag; /* 0x02BC */ s16 dmgEffectTimer; - /* 0x02C0 */ Vec3f limbPos[12]; - /* 0x0350 */ s16 limbPosIndex; + /* 0x02C0 */ Vec3f bodyPartsPos[EYEGORE_BODYPART_MAX]; + /* 0x0350 */ s16 bodyPartIndex; /* 0x0352 */ s16 pathIndex; /* 0x0354 */ s32 animIndex; /* 0x0358 */ u8 isRetreating; 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 2c3d46ffb..023c73f7c 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -654,7 +654,7 @@ void func_8088DD34(EnElf* this, PlayState* play) { func_8088CBAC(this, play); if (this->fairyFlags & 0x800) { - this->unk_224.y = player->bodyPartsPos[0].y; + this->unk_224.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; } func_8088D8D0(this, &this->unk_224); diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index 8405691e3..cadbe6047 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -38,10 +38,10 @@ static s16 sActorIds[] = { }; static s16 sActorParams[] = { - EN_GRASSHOPPER_PARAMS(EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED), // EN_ENCOUNT1_GRASSHOPPER - WALLMASTER_PARAMS(WALLMASTER_TYPE_TIMER_ONLY, 0, false), // EN_ENCOUNT1_WALLMASTER - ENPR2_PARAMS(1, 0), // EN_ENCOUNT1_SKULLFISH - ENPR2_PARAMS(3, 0) // EN_ENCOUNT1_SKULLFISH_2 + DRAGONFLY_PARAMS(DRAGONFLY_TYPE_GROWS_WHEN_SPAWNED), // EN_ENCOUNT1_GRASSHOPPER + WALLMASTER_PARAMS(WALLMASTER_TYPE_TIMER_ONLY, 0, false), // EN_ENCOUNT1_WALLMASTER + ENPR2_PARAMS(1, 0), // EN_ENCOUNT1_SKULLFISH + ENPR2_PARAMS(3, 0) // EN_ENCOUNT1_SKULLFISH_2 }; void EnEncount1_Init(Actor* thisx, PlayState* play) { 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 c5e4b5434..150fafc60 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -180,7 +180,7 @@ void EnFirefly_SpawnIceEffects(EnFirefly* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, &this->limbPos[0], 3, 2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, KEESE_BODYPART_MAX, 2, 0.2f, 0.2f); } } @@ -807,11 +807,11 @@ void EnFirefly_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* } if (limbIndex == FIRE_KEESE_LIMB_LEFT_WING_END) { - Matrix_MultZero(&this->limbPos[0]); + Matrix_MultZero(&this->bodyPartsPos[KEESE_BODYPART_LEFT_WING_END]); } else if (limbIndex == FIRE_KEESE_LIMB_RIGHT_WING_END_ROOT) { - Matrix_MultZero(&this->limbPos[1]); + Matrix_MultZero(&this->bodyPartsPos[KEESE_BODYPART_RIGHT_WING_END_ROOT]); } else if (limbIndex == FIRE_KEESE_LIMB_BODY) { - Matrix_MultZero(&this->limbPos[2]); + Matrix_MultZero(&this->bodyPartsPos[KEESE_BODYPART_BODY]); } } @@ -844,7 +844,7 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = gfx; } - Actor_DrawDamageEffects(play, NULL, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, NULL, this->bodyPartsPos, KEESE_BODYPART_MAX, this->drawDmgEffScale * this->actor.scale.y * 200.0f, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); this->lastDrawnFrame = play->gameplayFrames; diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h index 429cec7c3..6174c2e87 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h @@ -18,6 +18,13 @@ typedef enum { #define KEESE_INVISIBLE (1 << 0xF) #define KEESE_GET_MAIN_TYPE(thisx) ((thisx)->params & 0x7FFF) +typedef enum KeeseBodyPart { + /* 0 */ KEESE_BODYPART_LEFT_WING_END, + /* 1 */ KEESE_BODYPART_RIGHT_WING_END_ROOT, + /* 2 */ KEESE_BODYPART_BODY, + /* 3 */ KEESE_BODYPART_MAX +} KeeseBodyPart; + typedef struct EnFirefly { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -35,7 +42,7 @@ typedef struct EnFirefly { /* 0x2E8 */ f32 drawDmgEffScale; /* 0x2E8 */ f32 drawDmgEffFrozenSteamScale; /* 0x2F4 */ u32 lastDrawnFrame; - /* 0x2F8 */ Vec3f limbPos[3]; + /* 0x2F8 */ Vec3f bodyPartsPos[KEESE_BODYPART_MAX]; /* 0x31C */ ColliderSphere collider; } EnFirefly; // size = 0x374 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 57466a251..ffe28b2b3 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -237,7 +237,7 @@ void func_808D0A48(EnFloormas* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT0; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENFLOORMAS_BODYPART_MAX, 2, this->actor.scale.x * 30.000002f, this->actor.scale.x * 20.0f); if (this->actor.scale.x > 0.009f) { this->actor.flags |= ACTOR_FLAG_400; @@ -1157,44 +1157,44 @@ s32 EnFloormas_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec return false; } -static s8 D_808D393C[WALLMASTER_LIMB_MAX] = { - -1, // WALLMASTER_LIMB_NONE - -1, // WALLMASTER_LIMB_ROOT - -1, // WALLMASTER_LIMB_HAND - -1, // WALLMASTER_LIMB_INDEX_FINGER_ROOT - 0, // WALLMASTER_LIMB_INDEX_FINGER_PROXIMAL - -1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL_ROOT - -1, // WALLMASTER_LIMB_INDEX_FINGER_MIDDLE - 1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL - -1, // WALLMASTER_LIMB_RING_FINGER_ROOT - 2, // WALLMASTER_LIMB_RING_FINGER_PROXIMAL - -1, // WALLMASTER_LIMB_RING_FINGER_DISTAL_ROOT - -1, // WALLMASTER_LIMB_RING_FINGER_MIDDLE - 3, // WALLMASTER_LIMB_RING_FINGER_DISTAL - -1, // WALLMASTER_LIMB_MIDDLE_FINGER_ROOT - 4, // WALLMASTER_LIMB_MIDDLE_FINGER_PROXIMAL - -1, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL_ROOT - -1, // WALLMASTER_LIMB_MIDDLE_FINGER_MIDDLE - 5, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL - -1, // WALLMASTER_LIMB_WRIST_ROOT - -1, // WALLMASTER_LIMB_WRIST - -1, // WALLMASTER_LIMB_THUMB_ROOT - 6, // WALLMASTER_LIMB_THUMB_PROXIMAL - 7, // WALLMASTER_LIMB_THUMB_DISTAL_ROOT - -1, // WALLMASTER_LIMB_THUMB_MIDDLE - 8, // WALLMASTER_LIMB_THUMB_DISTAL +static s8 sLimbToBodyParts[WALLMASTER_LIMB_MAX] = { + BODYPART_NONE, // WALLMASTER_LIMB_NONE + BODYPART_NONE, // WALLMASTER_LIMB_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_HAND + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_ROOT + ENFLOORMAS_BODYPART_0, // WALLMASTER_LIMB_INDEX_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_MIDDLE + ENFLOORMAS_BODYPART_1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_ROOT + ENFLOORMAS_BODYPART_2, // WALLMASTER_LIMB_RING_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_MIDDLE + ENFLOORMAS_BODYPART_3, // WALLMASTER_LIMB_RING_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_ROOT + ENFLOORMAS_BODYPART_4, // WALLMASTER_LIMB_MIDDLE_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_MIDDLE + ENFLOORMAS_BODYPART_5, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_WRIST_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_WRIST + BODYPART_NONE, // WALLMASTER_LIMB_THUMB_ROOT + ENFLOORMAS_BODYPART_6, // WALLMASTER_LIMB_THUMB_PROXIMAL + ENFLOORMAS_BODYPART_7, // WALLMASTER_LIMB_THUMB_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_THUMB_MIDDLE + ENFLOORMAS_BODYPART_8, // WALLMASTER_LIMB_THUMB_DISTAL }; void EnFloormas_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnFloormas* this = THIS; - if (D_808D393C[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_808D393C[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == WALLMASTER_LIMB_WRIST) { - Matrix_MultVecX(1000.0f, &this->limbPos[9]); - Matrix_MultVecX(-1000.0f, &this->limbPos[10]); + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[ENFLOORMAS_BODYPART_9]); + Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[ENFLOORMAS_BODYPART_10]); } else if (limbIndex == WALLMASTER_LIMB_HAND) { Matrix_Push(); Matrix_Translate(1600.0f, -700.0f, -1700.0f, MTXMODE_APPLY); @@ -1230,7 +1230,7 @@ void EnFloormas_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENFLOORMAS_BODYPART_MAX, 100.0f * (this->drawDmgEffScale * this->actor.scale.x), 100.0f * (this->drawDmgEffFrozenSteamScale * this->actor.scale.x), this->drawDmgEffAlpha, this->drawDmgEffType); @@ -1255,7 +1255,7 @@ void func_808D3754(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENFLOORMAS_BODYPART_MAX, this->drawDmgEffScale * this->actor.scale.x * 100.0f, this->drawDmgEffFrozenSteamScale * this->actor.scale.x * 100.0f, this->drawDmgEffAlpha, this->drawDmgEffType); diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h index 628cad4f6..ac9b1954e 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h @@ -18,6 +18,21 @@ typedef enum { /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40 } EnFloormasParam; +typedef enum EnFloormasBodyPart { + /* 0 */ ENFLOORMAS_BODYPART_0, + /* 1 */ ENFLOORMAS_BODYPART_1, + /* 2 */ ENFLOORMAS_BODYPART_2, + /* 3 */ ENFLOORMAS_BODYPART_3, + /* 4 */ ENFLOORMAS_BODYPART_4, + /* 5 */ ENFLOORMAS_BODYPART_5, + /* 6 */ ENFLOORMAS_BODYPART_6, + /* 7 */ ENFLOORMAS_BODYPART_7, + /* 8 */ ENFLOORMAS_BODYPART_8, + /* 9 */ ENFLOORMAS_BODYPART_9, + /* 10 */ ENFLOORMAS_BODYPART_10, + /* 11 */ ENFLOORMAS_BODYPART_MAX +} EnFloormasBodyPart; + typedef struct EnFloormas { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -32,7 +47,7 @@ typedef struct EnFloormas { /* 0x2C4 */ f32 drawDmgEffAlpha; /* 0x2C8 */ f32 drawDmgEffScale; /* 0x2CC */ f32 drawDmgEffFrozenSteamScale; - /* 0x2D0 */ Vec3f limbPos[11]; + /* 0x2D0 */ Vec3f bodyPartsPos[ENFLOORMAS_BODYPART_MAX]; /* 0x354 */ ColliderCylinder collider; } EnFloormas; // size = 0x3A0 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 0a78bdab8..d56a8f9bf 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -863,14 +863,14 @@ void EnFz_Draw(Actor* thisx, PlayState* play) { if (this->drawDmgEffTimer > 0) { s32 pad2[6]; - Vec3f limbPos[2]; + Vec3f bodyPartsPos[2]; s32 pad3; - limbPos[0] = this->actor.world.pos; - limbPos[1] = this->actor.world.pos; - limbPos[0].y += 20.0f; - limbPos[1].y += 40.0f; - Actor_DrawDamageEffects(play, NULL, limbPos, ARRAY_COUNT(limbPos), this->drawDmgEffScale * 4.0f, 0.5f, + bodyPartsPos[0] = this->actor.world.pos; + bodyPartsPos[1] = this->actor.world.pos; + bodyPartsPos[0].y += 20.0f; + bodyPartsPos[1].y += 40.0f; + Actor_DrawDamageEffects(play, NULL, bodyPartsPos, ARRAY_COUNT(bodyPartsPos), this->drawDmgEffScale * 4.0f, 0.5f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); } 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 be5d4f58f..0ed4cac86 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -185,7 +185,8 @@ s32 EnGe2_LookForPlayer(PlayState* play, Actor* actor, Vec3f* pos, s16 yaw, s16 return false; } - if (BgCheck_AnyLineTest1(&play->colCtx, pos, &player->bodyPartsPos[7], &posResult, &outPoly, false)) { + if (BgCheck_AnyLineTest1(&play->colCtx, pos, &player->bodyPartsPos[PLAYER_BODYPART_HEAD], &posResult, &outPoly, + false)) { return false; } else { return true; 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 f4abc9e91..82b4bfce7 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -821,7 +821,7 @@ void func_8094F0E0(EnGm* this) { Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_268->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_268)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_268)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_268->focus.pos); } 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 cb13f9504..212065a31 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1174,7 +1174,7 @@ s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play) { Math_Vec3f_Copy(&thisPos, &this->actor.focus.pos); if (this->attentionTarget->id == ACTOR_PLAYER) { - targetPos.y = ((Player*)this->attentionTarget)->bodyPartsPos[7].y + 3.0f; + targetPos.y = ((Player*)this->attentionTarget)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&targetPos, &this->attentionTarget->focus.pos); } 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 d96fcf7fe..949e50142 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -43,99 +43,170 @@ void EnGrasshopper_UpdateEffects(EnGrasshopper* this, PlayState* play); void EnGrasshopper_DrawEffects(EnGrasshopper* this, PlayState* play); typedef enum { - /* 0 */ EN_GRASSHOPPER_ACTION_FLY, - /* 1 */ EN_GRASSHOPPER_ACTION_ROAM_IN_CIRCLES, - /* 2 */ EN_GRASSHOPPER_ACTION_BANK, - /* 3 */ EN_GRASSHOPPER_ACTION_BOUNCED, - /* 4 */ EN_GRASSHOPPER_ACTION_DECIDE_ACTION, - /* 5 */ EN_GRASSHOPPER_ACTION_APPROACH_PLAYER, - /* 6 */ EN_GRASSHOPPER_ACTION_ATTACK, - /* 7 */ EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK, - /* 8 */ EN_GRASSHOPPER_ACTION_DAMAGED, - /* 9 */ EN_GRASSHOPPER_ACTION_DEAD, - /* 10 */ EN_GRASSHOPPER_ACTION_FALL + /* 0 */ DRAGONFLY_ACTION_FLY, + /* 1 */ DRAGONFLY_ACTION_ROAM_IN_CIRCLES, + /* 2 */ DRAGONFLY_ACTION_BANK, + /* 3 */ DRAGONFLY_ACTION_BOUNCED, + /* 4 */ DRAGONFLY_ACTION_DECIDE_ACTION, + /* 5 */ DRAGONFLY_ACTION_APPROACH_PLAYER, + /* 6 */ DRAGONFLY_ACTION_ATTACK, + /* 7 */ DRAGONFLY_ACTION_WAIT_AFTER_ATTACK, + /* 8 */ DRAGONFLY_ACTION_DAMAGED, + /* 9 */ DRAGONFLY_ACTION_DEAD, + /* 10 */ DRAGONFLY_ACTION_FALL } EnGrasshopperAction; typedef enum { - /* 0 */ EN_GRASSHOPPER_DECISION_ATTACK, - /* 1 */ EN_GRASSHOPPER_DECISION_FLY, - /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES // Never used in the final game + /* 0 */ DRAGONFLY_DECISION_ATTACK, + /* 1 */ DRAGONFLY_DECISION_FLY, + /* 2 */ DRAGONFLY_DECISION_ROAM_IN_CIRCLES // Never used in the final game } EnGrasshopperNextAction; typedef enum { - /* 0 */ EN_GRASSHOPPER_BANK_STATE_BANKING, - /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE + /* 0 */ DRAGONFLY_BANK_STATE_BANKING, + /* 1 */ DRAGONFLY_BANK_STATE_DONE } EnGrasshopperBankState; typedef enum { - /* 0 */ EN_GRASSHOPPER_ANIM_RAISE_TAIL, - /* 1 */ EN_GRASSHOPPER_ANIM_LOWER_TAIL, - /* 2 */ EN_GRASSHOPPER_ANIM_FLY, - /* 3 */ EN_GRASSHOPPER_ANIM_ATTACK, - /* 4 */ EN_GRASSHOPPER_ANIM_HOVER, - /* 5 */ EN_GRASSHOPPER_ANIM_DAMAGE, - /* 6 */ EN_GRASSHOPPER_ANIM_DEAD, - /* 7 */ EN_GRASSHOPPER_ANIM_FALL + /* 0 */ DRAGONFLY_ANIM_RAISE_TAIL, + /* 1 */ DRAGONFLY_ANIM_LOWER_TAIL, + /* 2 */ DRAGONFLY_ANIM_FLY, + /* 3 */ DRAGONFLY_ANIM_ATTACK, + /* 4 */ DRAGONFLY_ANIM_HOVER, + /* 5 */ DRAGONFLY_ANIM_DAMAGE, + /* 6 */ DRAGONFLY_ANIM_DEAD, + /* 7 */ DRAGONFLY_ANIM_FALL } EnGrasshopperAnim; static s32 sOccupiedIndices[] = { false, false, false, false, false, }; -static s8 sLimbIndexToShadowBodyPartsIndex[DRAGONFLY_LIMB_MAX] = { - -1, -1, 0, 1, 2, 3, 4, 5, -1, -1, 6, 7, -1, 8, 9, -1, 10, 11, -1, 12, 13, -1, -1, -1, +static s8 sLimbToShadowBodyParts[DRAGONFLY_LIMB_MAX] = { + BODYPART_NONE, // DRAGONFLY_LIMB_NONE + BODYPART_NONE, // DRAGONFLY_LIMB_ROOT + DRAGONFLY_SHADOW_BODYPART_0, // DRAGONFLY_LIMB_TAIL_SEGMENT_1 + DRAGONFLY_SHADOW_BODYPART_1, // DRAGONFLY_LIMB_TAIL_SEGMENT_2 + DRAGONFLY_SHADOW_BODYPART_2, // DRAGONFLY_LIMB_TAIL_SEGMENT_3 + DRAGONFLY_SHADOW_BODYPART_3, // DRAGONFLY_LIMB_TAIL_SEGMENT_4 + DRAGONFLY_SHADOW_BODYPART_4, // DRAGONFLY_LIMB_TAIL_TIP + DRAGONFLY_SHADOW_BODYPART_5, // DRAGONFLY_LIMB_THORAX + BODYPART_NONE, // DRAGONFLY_LIMB_LEFT_WING + BODYPART_NONE, // DRAGONFLY_LIMB_RIGHT_WING + DRAGONFLY_SHADOW_BODYPART_6, // DRAGONFLY_LIMB_BACK_LEFT_UPPER_LEG + DRAGONFLY_SHADOW_BODYPART_7, // DRAGONFLY_LIMB_BACK_LEFT_LOWER_LEG + BODYPART_NONE, // DRAGONFLY_LIMB_BACK_LEFT_FOOT + DRAGONFLY_SHADOW_BODYPART_8, // DRAGONFLY_LIMB_BACK_RIGHT_UPPER_LEG + DRAGONFLY_SHADOW_BODYPART_9, // DRAGONFLY_LIMB_BACK_RIGHT_LOWER_LEG + BODYPART_NONE, // DRAGONFLY_LIMB_BACK_RIGHT_FOOT + DRAGONFLY_SHADOW_BODYPART_10, // DRAGONFLY_LIMB_FRONT_LEFT_UPPER_LEG + DRAGONFLY_SHADOW_BODYPART_11, // DRAGONFLY_LIMB_FRONT_LEFT_LOWER_LEG + BODYPART_NONE, // DRAGONFLY_LIMB_FRONT_LEFT_FOOT + DRAGONFLY_SHADOW_BODYPART_12, // DRAGONFLY_LIMB_FRONT_RIGHT_UPPER_LEG + DRAGONFLY_SHADOW_BODYPART_13, // DRAGONFLY_LIMB_FRONT_RIGHT_LOWER_LEG + BODYPART_NONE, // DRAGONFLY_LIMB_FRONT_RIGHT_FOOT + BODYPART_NONE, // DRAGONFLY_LIMB_HEAD + BODYPART_NONE, // DRAGONFLY_LIMB_JAW }; -static s8 sParentBodyParts[DRAGONFLY_LIMB_MAX] = { - -1, -1, -1, 0, 1, 2, 3, -1, -1, -1, -1, 6, -1, -1, 8, -1, -1, 10, -1, -1, 12, -1, -1, -1, +// Should be `DRAGONFLY_SHADOW_BODYPART_MAX` +static s8 sParentShadowBodyParts[DRAGONFLY_LIMB_MAX] = { + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_0 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_1 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_2 + DRAGONFLY_SHADOW_BODYPART_0, // DRAGONFLY_SHADOW_BODYPART_3 + DRAGONFLY_SHADOW_BODYPART_1, // DRAGONFLY_SHADOW_BODYPART_4 + DRAGONFLY_SHADOW_BODYPART_2, // DRAGONFLY_SHADOW_BODYPART_5 + DRAGONFLY_SHADOW_BODYPART_3, // DRAGONFLY_SHADOW_BODYPART_6 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_7 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_8 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_9 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_10 + DRAGONFLY_SHADOW_BODYPART_6, // DRAGONFLY_SHADOW_BODYPART_11 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_12 + BODYPART_NONE, // DRAGONFLY_SHADOW_BODYPART_13 + DRAGONFLY_SHADOW_BODYPART_8, // + BODYPART_NONE, // + BODYPART_NONE, // + DRAGONFLY_SHADOW_BODYPART_10, // + BODYPART_NONE, // + BODYPART_NONE, // + DRAGONFLY_SHADOW_BODYPART_12, // + BODYPART_NONE, // + BODYPART_NONE, // + BODYPART_NONE, // }; +// Should be `DRAGONFLY_SHADOW_BODYPART_MAX` static u8 sShadowSizes[DRAGONFLY_LIMB_MAX] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, // DRAGONFLY_SHADOW_BODYPART_0 + 0, // DRAGONFLY_SHADOW_BODYPART_1 + 0, // DRAGONFLY_SHADOW_BODYPART_2 + 0, // DRAGONFLY_SHADOW_BODYPART_3 + 0, // DRAGONFLY_SHADOW_BODYPART_4 + 0, // DRAGONFLY_SHADOW_BODYPART_5 + 0, // DRAGONFLY_SHADOW_BODYPART_6 + 0, // DRAGONFLY_SHADOW_BODYPART_7 + 0, // DRAGONFLY_SHADOW_BODYPART_8 + 0, // DRAGONFLY_SHADOW_BODYPART_9 + 0, // DRAGONFLY_SHADOW_BODYPART_10 + 0, // DRAGONFLY_SHADOW_BODYPART_11 + 0, // DRAGONFLY_SHADOW_BODYPART_12 + 0, // DRAGONFLY_SHADOW_BODYPART_13 + 0, // + 0, // + 0, // + 0, // + 0, // + 0, // + 0, // + 0, // + 0, // + 0, // }; typedef enum { - /* 0x0 */ EN_GRASSHOPPER_DMGEFF_IMMUNE, // Deals no damage - /* 0x2 */ EN_GRASSHOPPER_DMGEFF_FIRE = 0x2, // Damages and sets the Dragonfly on fire - /* 0x3 */ EN_GRASSHOPPER_DMGEFF_FREEZE, // Damages and freezes the Dragonfly in ice - /* 0x4 */ EN_GRASSHOPPER_DMGEFF_LIGHT_ORB, // Damages and surrounds the Dragonfly with light orbs - /* 0xE */ EN_GRASSHOPPER_DMGEFF_HOOK = 0xE, // If hit by the Hookshot, it pulls the Dragonfly towards the player - /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE // Deals regular damage with no extra effect + /* 0x0 */ DRAGONFLY_DMGEFF_IMMUNE, // Deals no damage + /* 0x2 */ DRAGONFLY_DMGEFF_FIRE = 0x2, // Damages and sets the Dragonfly on fire + /* 0x3 */ DRAGONFLY_DMGEFF_FREEZE, // Damages and freezes the Dragonfly in ice + /* 0x4 */ DRAGONFLY_DMGEFF_LIGHT_ORB, // Damages and surrounds the Dragonfly with light orbs + /* 0xE */ DRAGONFLY_DMGEFF_HOOK = 0xE, // If hit by the Hookshot, it pulls the Dragonfly towards the player + /* 0xF */ DRAGONFLY_DMGEFF_NONE // Deals regular damage with no extra effect } EnDragonflyDamageEffect; static DamageTable sDamageTable = { - /* Deku Nut */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Deku Stick */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Horse trample */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Explosives */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Zora boomerang */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Normal arrow */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Hookshot */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_HOOK), - /* Goron punch */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Sword */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Goron pound */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_NONE), - /* Fire arrow */ DMG_ENTRY(2, EN_GRASSHOPPER_DMGEFF_FIRE), - /* Ice arrow */ DMG_ENTRY(2, EN_GRASSHOPPER_DMGEFF_FREEZE), - /* Light arrow */ DMG_ENTRY(2, EN_GRASSHOPPER_DMGEFF_LIGHT_ORB), - /* Goron spikes */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Deku spin */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Deku bubble */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Deku launch */ DMG_ENTRY(2, EN_GRASSHOPPER_DMGEFF_NONE), - /* UNK_DMG_0x12 */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Zora barrier */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Normal shield */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Light ray */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Thrown object */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Zora punch */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Spin attack */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_NONE), - /* Sword beam */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Normal Roll */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Unblockable */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_GRASSHOPPER_DMGEFF_IMMUNE), - /* Powder Keg */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_HOOK), + /* Deku Nut */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Deku Stick */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Explosives */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Zora boomerang */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Hookshot */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_HOOK), + /* Goron punch */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Sword */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_NONE), + /* Fire arrow */ DMG_ENTRY(2, DRAGONFLY_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(2, DRAGONFLY_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, DRAGONFLY_DMGEFF_LIGHT_ORB), + /* Goron spikes */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Deku spin */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Deku bubble */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(2, DRAGONFLY_DMGEFF_NONE), + /* UNK_DMG_0x12 */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Zora barrier */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Normal shield */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Light ray */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Thrown object */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Normal Roll */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Unblockable */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, DRAGONFLY_DMGEFF_IMMUNE), + /* Powder Keg */ DMG_ENTRY(1, DRAGONFLY_DMGEFF_HOOK), }; ActorInit En_Grasshopper_InitVars = { @@ -211,7 +282,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 1.0f); this->actor.colChkInfo.damageTable = &sDamageTable; Math_Vec3f_Copy(&this->flyingHomePos, &this->actor.home.pos); - this->action = EN_GRASSHOPPER_ACTION_FLY; + this->action = DRAGONFLY_ACTION_FLY; this->index = -1; for (i = 0; i < ARRAY_COUNT(sOccupiedIndices); i++) { @@ -229,12 +300,12 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { SkelAnime_Init(play, &this->skelAnime, &gDragonflySkel, &gDragonflyFlyAnim, this->jointTable, this->morphTable, DRAGONFLY_LIMB_MAX); - this->type = EN_GRASSHOPPER_GET_TYPE(&this->actor); - if (this->type < EN_GRASSHOPPER_TYPE_UNUSED_NORMAL) { - this->type = EN_GRASSHOPPER_TYPE_NORMAL; + this->type = DRAGONFLY_GET_TYPE(&this->actor); + if (this->type < DRAGONFLY_TYPE_UNUSED_NORMAL) { + this->type = DRAGONFLY_TYPE_NORMAL; } - if (this->type != EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED) { + if (this->type != DRAGONFLY_TYPE_GROWS_WHEN_SPAWNED) { this->dragonflyScale = 0.01f; } else { this->dragonflyScale = 0.0f; @@ -263,25 +334,25 @@ void EnGrasshopper_Destroy(Actor* thisx, PlayState* play) { } static AnimationHeader* sAnimations[] = { - &gDragonflyRaiseTailAnim, // EN_GRASSHOPPER_ANIM_RAISE_TAIL - &gDragonflyLowerTailAnim, // EN_GRASSHOPPER_ANIM_LOWER_TAIL - &gDragonflyFlyAnim, // EN_GRASSHOPPER_ANIM_FLY - &gDragonflyAttackAnim, // EN_GRASSHOPPER_ANIM_ATTACK - &gDragonflyHoverAnim, // EN_GRASSHOPPER_ANIM_HOVER - &gDragonflyDamageAnim, // EN_GRASSHOPPER_ANIM_DAMAGE - &gDragonflyDeadAnim, // EN_GRASSHOPPER_ANIM_DEAD - &gDragonflyFallAnim, // EN_GRASSHOPPER_ANIM_FALL + &gDragonflyRaiseTailAnim, // DRAGONFLY_ANIM_RAISE_TAIL + &gDragonflyLowerTailAnim, // DRAGONFLY_ANIM_LOWER_TAIL + &gDragonflyFlyAnim, // DRAGONFLY_ANIM_FLY + &gDragonflyAttackAnim, // DRAGONFLY_ANIM_ATTACK + &gDragonflyHoverAnim, // DRAGONFLY_ANIM_HOVER + &gDragonflyDamageAnim, // DRAGONFLY_ANIM_DAMAGE + &gDragonflyDeadAnim, // DRAGONFLY_ANIM_DEAD + &gDragonflyFallAnim, // DRAGONFLY_ANIM_FALL }; static u8 sAnimationModes[] = { - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_RAISE_TAIL - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_LOWER_TAIL - ANIMMODE_LOOP, // EN_GRASSHOPPER_ANIM_FLY - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_ATTACK - ANIMMODE_LOOP, // EN_GRASSHOPPER_ANIM_HOVER - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_DAMAGE - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_DEAD - ANIMMODE_ONCE, // EN_GRASSHOPPER_ANIM_FALL + ANIMMODE_ONCE, // DRAGONFLY_ANIM_RAISE_TAIL + ANIMMODE_ONCE, // DRAGONFLY_ANIM_LOWER_TAIL + ANIMMODE_LOOP, // DRAGONFLY_ANIM_FLY + ANIMMODE_ONCE, // DRAGONFLY_ANIM_ATTACK + ANIMMODE_LOOP, // DRAGONFLY_ANIM_HOVER + ANIMMODE_ONCE, // DRAGONFLY_ANIM_DAMAGE + ANIMMODE_ONCE, // DRAGONFLY_ANIM_DEAD + ANIMMODE_ONCE, // DRAGONFLY_ANIM_FALL }; void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) { @@ -289,8 +360,8 @@ void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) { this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]); morphFrames = 0.0f; - if ((animIndex == EN_GRASSHOPPER_ANIM_ATTACK) || (animIndex == EN_GRASSHOPPER_ANIM_HOVER) || - (animIndex == EN_GRASSHOPPER_ANIM_DAMAGE)) { + if ((animIndex == DRAGONFLY_ANIM_ATTACK) || (animIndex == DRAGONFLY_ANIM_HOVER) || + (animIndex == DRAGONFLY_ANIM_DAMAGE)) { morphFrames = -3.0f; } @@ -299,19 +370,19 @@ void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) { } void EnGrasshopper_RaiseTail(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_RAISE_TAIL); - if (this->decision != EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES) { - this->decision = EN_GRASSHOPPER_DECISION_FLY; + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_RAISE_TAIL); + if (this->decision != DRAGONFLY_DECISION_ROAM_IN_CIRCLES) { + this->decision = DRAGONFLY_DECISION_FLY; } - this->action = EN_GRASSHOPPER_ACTION_DECIDE_ACTION; + this->action = DRAGONFLY_ACTION_DECIDE_ACTION; this->actionFunc = EnGrasshopper_DecideAction; } void EnGrasshopper_LowerTail(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_LOWER_TAIL); - this->action = EN_GRASSHOPPER_ACTION_DECIDE_ACTION; - this->decision = EN_GRASSHOPPER_DECISION_ATTACK; + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_LOWER_TAIL); + this->action = DRAGONFLY_ACTION_DECIDE_ACTION; + this->decision = DRAGONFLY_DECISION_ATTACK; this->actionFunc = EnGrasshopper_DecideAction; } @@ -319,13 +390,13 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; if (curFrame >= this->endFrame) { - if (this->decision == EN_GRASSHOPPER_DECISION_ATTACK) { + if (this->decision == DRAGONFLY_DECISION_ATTACK) { EnGrasshopper_SetupAttack(this); } else { Math_Vec3f_Copy(&this->flyingHomePos, &this->actor.world.pos); this->flyingHomePos.y = this->actor.floorHeight + 90.0f; - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FLY); - if (this->decision != EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES) { + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_FLY); + if (this->decision != DRAGONFLY_DECISION_ROAM_IN_CIRCLES) { if (Player_GetMask(play) == PLAYER_MASK_STONE) { EnGrasshopper_SetupFly(this); } else { @@ -333,8 +404,8 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { } } else { this->timer = 0; - this->action = EN_GRASSHOPPER_ACTION_ROAM_IN_CIRCLES; - this->decision = EN_GRASSHOPPER_DECISION_ATTACK; + this->action = DRAGONFLY_ACTION_ROAM_IN_CIRCLES; + this->decision = DRAGONFLY_DECISION_ATTACK; this->waitTimer = this->timer; this->actionFunc = EnGrasshopper_RoamInCircles; } @@ -343,9 +414,9 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { } void EnGrasshopper_SetupFly(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FLY); + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_FLY); this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; - this->action = EN_GRASSHOPPER_ACTION_FLY; + this->action = DRAGONFLY_ACTION_FLY; this->actionFunc = EnGrasshopper_Fly; } @@ -358,8 +429,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG); diffX = this->flyingHomePos.x - this->actor.world.pos.x; diffZ = this->flyingHomePos.z - this->actor.world.pos.z; - if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && - (this->type != EN_GRASSHOPPER_TYPE_WOODFALL)) { + if ((this->type != DRAGONFLY_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && (this->type != DRAGONFLY_TYPE_WOODFALL)) { this->bobPhase += 0xAF0; this->targetPosY = (Math_SinS(this->bobPhase) * 10.0f) + this->baseFlyHeight; Math_ApproachF(&this->actor.world.pos.y, this->targetPosY, 0.1f, 10.0f); @@ -377,8 +447,8 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { this->shouldTurn = false; } - //! @bug Unreachable code. To get here, the type must NOT be EN_GRASSHOPPER_TYPE_WOODFALL - if (this->type == EN_GRASSHOPPER_TYPE_WOODFALL) { + //! @bug Unreachable code. To get here, the type must NOT be DRAGONFLY_TYPE_WOODFALL + if (this->type == DRAGONFLY_TYPE_WOODFALL) { if (sqrtf(SQ(this->actor.world.pos.x) + SQ(this->actor.world.pos.z)) < 600.0f) { this->shouldTurn = true; } @@ -478,8 +548,8 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) { void EnGrasshopper_SetupBank(EnGrasshopper* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG); this->targetBankRot.y = this->actor.world.rot.y + 0x8000; - this->action = EN_GRASSHOPPER_ACTION_BANK; - this->bankState = EN_GRASSHOPPER_BANK_STATE_BANKING; + this->action = DRAGONFLY_ACTION_BANK; + this->bankState = DRAGONFLY_BANK_STATE_BANKING; this->actor.speed = 2.0f; this->actionFunc = EnGrasshopper_Bank; } @@ -491,21 +561,21 @@ void EnGrasshopper_SetupBank(EnGrasshopper* this) { void EnGrasshopper_Bank(EnGrasshopper* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG); switch (this->bankState) { - case EN_GRASSHOPPER_BANK_STATE_BANKING: + case DRAGONFLY_BANK_STATE_BANKING: Math_SmoothStepToS(&this->actor.world.rot.y, this->targetBankRot.y, 0x64, 0x3E8, 0x3E8); Math_SmoothStepToS(&this->actor.world.rot.z, 0x4000, 0x64, 0x1F40, 0xBB8); if (fabsf(this->actor.world.rot.y - (f32)this->targetBankRot.y) < 10.0f) { this->postBankTimer = 100; - this->bankState = EN_GRASSHOPPER_BANK_STATE_DONE; + this->bankState = DRAGONFLY_BANK_STATE_DONE; } break; - case EN_GRASSHOPPER_BANK_STATE_DONE: + case DRAGONFLY_BANK_STATE_DONE: Math_SmoothStepToS(&this->actor.world.rot.z, 0, 0x64, 0x1F40, 0xBB8); if (this->postBankTimer == 0) { this->timer = 0; - this->action = EN_GRASSHOPPER_ACTION_ROAM_IN_CIRCLES; - this->decision = EN_GRASSHOPPER_DECISION_ATTACK; + this->action = DRAGONFLY_ACTION_ROAM_IN_CIRCLES; + this->decision = DRAGONFLY_DECISION_ATTACK; this->waitTimer = this->timer; this->actionFunc = EnGrasshopper_RoamInCircles; } @@ -520,7 +590,7 @@ void EnGrasshopper_SetupBounced(EnGrasshopper* this) { this->targetRot.y = -this->actor.yawTowardsPlayer; this->timer = Rand_S16Offset(30, 30); this->targetRot.z = (this->actor.world.rot.y - this->targetRot.y) * 0.2f; - this->action = EN_GRASSHOPPER_ACTION_BOUNCED; + this->action = DRAGONFLY_ACTION_BOUNCED; this->actionFunc = EnGrasshopper_Bounced; } @@ -540,7 +610,7 @@ void EnGrasshopper_Bounced(EnGrasshopper* this, PlayState* play) { if (this->timer == 0) { this->collider.elements[0].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD); this->timer = 0; - this->action = EN_GRASSHOPPER_ACTION_ROAM_IN_CIRCLES; + this->action = DRAGONFLY_ACTION_ROAM_IN_CIRCLES; this->waitTimer = this->timer; this->actionFunc = EnGrasshopper_RoamInCircles; } @@ -551,7 +621,7 @@ void EnGrasshopper_SetupApproachPlayer(EnGrasshopper* this, PlayState* play) { Player* player = GET_PLAYER(play); this->timer = 50; - this->action = EN_GRASSHOPPER_ACTION_APPROACH_PLAYER; + this->action = DRAGONFLY_ACTION_APPROACH_PLAYER; this->approachSpeed = 0.0f; this->targetApproachPos.x = (Math_SinS(player->actor.shape.rot.y) * 130.0f) + player->actor.world.pos.x; this->targetApproachPos.z = (Math_CosS(player->actor.shape.rot.y) * 130.0f) + player->actor.world.pos.z; @@ -602,7 +672,7 @@ void EnGrasshopper_ApproachPlayer(EnGrasshopper* this, PlayState* play) { } void EnGrasshopper_SetupAttack(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_ATTACK); + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_ATTACK); this->approachSpeed = 0.0f; Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0xA); this->actor.speed = 3.0f; @@ -610,7 +680,7 @@ void EnGrasshopper_SetupAttack(EnGrasshopper* this) { this->collider.elements[0].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD); this->collider.elements[1].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD); Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_ATTACK); - this->action = EN_GRASSHOPPER_ACTION_ATTACK; + this->action = DRAGONFLY_ACTION_ATTACK; this->actionFunc = EnGrasshopper_Attack; } @@ -671,11 +741,11 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) { } void EnGrasshopper_SetupWaitAfterAttack(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_HOVER); + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_HOVER); this->bobPhase += 0xAF0; this->targetPosY = (Math_SinS(this->bobPhase) * 10.0f) + this->baseFlyHeight; Math_ApproachF(&this->actor.world.pos.y, this->targetPosY, 0.1f, 10.0f); - this->action = EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK; + this->action = DRAGONFLY_ACTION_WAIT_AFTER_ATTACK; this->waitTimer = 20; this->actor.speed = 0.0f; this->collider.elements[1].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD); @@ -698,7 +768,7 @@ void EnGrasshopper_WaitAfterAttack(EnGrasshopper* this, PlayState* play) { void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) { Vec3f damagedVelocity; - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_DAMAGE); + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_DAMAGE); this->actor.speed = 0.0f; this->actor.flags |= ACTOR_FLAG_1; this->approachSpeed = 0.0f; @@ -709,13 +779,13 @@ void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) { if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && (this->drawDmgEffTimer != 0)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DRAGONFLY_BODYPART_MAX, 2, 0.3f, 0.2f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - this->action = EN_GRASSHOPPER_ACTION_DAMAGED; + this->action = DRAGONFLY_ACTION_DAMAGED; this->actionFunc = EnGrasshopper_Damaged; } @@ -727,7 +797,7 @@ void EnGrasshopper_Damaged(EnGrasshopper* this, PlayState* play) { } void EnGrasshopper_SetupDead(EnGrasshopper* this, PlayState* play) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_DEAD); + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.speed = 0.0f; this->approachSpeed = 0.0f; @@ -742,7 +812,7 @@ void EnGrasshopper_SetupDead(EnGrasshopper* this, PlayState* play) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25); Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_DEAD); - this->action = EN_GRASSHOPPER_ACTION_DEAD; + this->action = DRAGONFLY_ACTION_DEAD; this->actionFunc = EnGrasshopper_Dead; } @@ -756,7 +826,7 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) { if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && (this->drawDmgEffTimer < 2)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DRAGONFLY_BODYPART_MAX, 2, 0.3f, 0.2f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -768,8 +838,8 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) { } void EnGrasshopper_SetupFall(EnGrasshopper* this) { - EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FALL); - this->action = EN_GRASSHOPPER_ACTION_FALL; + EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_FALL); + this->action = DRAGONFLY_ACTION_FALL; this->actor.speed = 0.0f; this->approachSpeed = 0.0f; this->actionFunc = EnGrasshopper_Fall; @@ -811,7 +881,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX)) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && (this->drawDmgEffTimer != 0)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, DRAGONFLY_BODYPART_MAX, 2, 0.3f, 0.2f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -853,15 +923,15 @@ void EnGrasshopper_UpdateDamage(EnGrasshopper* this, PlayState* play) { if ((this->collider.elements[0].info.bumperFlags & BUMP_HIT) || (this->collider.elements[1].info.bumperFlags & BUMP_HIT)) { this->collider.base.acFlags &= ~AC_HIT; - if ((this->action != EN_GRASSHOPPER_ACTION_DAMAGED) && (this->action != EN_GRASSHOPPER_ACTION_DEAD) && - (this->action != EN_GRASSHOPPER_ACTION_FALL)) { - if (this->actor.colChkInfo.damageEffect == EN_GRASSHOPPER_DMGEFF_NONE) { + if ((this->action != DRAGONFLY_ACTION_DAMAGED) && (this->action != DRAGONFLY_ACTION_DEAD) && + (this->action != DRAGONFLY_ACTION_FALL)) { + if (this->actor.colChkInfo.damageEffect == DRAGONFLY_DMGEFF_NONE) { attackDealsDamage = true; - } else if (this->actor.colChkInfo.damageEffect == EN_GRASSHOPPER_DMGEFF_FIRE) { + } else if (this->actor.colChkInfo.damageEffect == DRAGONFLY_DMGEFF_FIRE) { this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; attackDealsDamage = true; - } else if (this->actor.colChkInfo.damageEffect == EN_GRASSHOPPER_DMGEFF_FREEZE) { + } else if (this->actor.colChkInfo.damageEffect == DRAGONFLY_DMGEFF_FREEZE) { if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_BLUE_FIRE) || (this->drawDmgEffTimer == 0)) { Actor_ApplyDamage(&this->actor); attackDealsDamage = false; @@ -875,7 +945,7 @@ void EnGrasshopper_UpdateDamage(EnGrasshopper* this, PlayState* play) { EnGrasshopper_SetupDead(this, play); return; } - } else if (this->actor.colChkInfo.damageEffect == EN_GRASSHOPPER_DMGEFF_LIGHT_ORB) { + } else if (this->actor.colChkInfo.damageEffect == DRAGONFLY_DMGEFF_LIGHT_ORB) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, 255, COLORFILTER_BUFFLAG_OPA, 25); this->drawDmgEffTimer = 20; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; @@ -920,14 +990,14 @@ void EnGrasshopper_Update(Actor* thisx, PlayState* play) { Math_ApproachZeroF(&this->damagedVelocity.x, 1.0f, 2.0f); 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)) { + if ((this->action != DRAGONFLY_ACTION_FALL) && (this->type != DRAGONFLY_TYPE_WOODFALL)) { 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; - if (this->type == EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED) { + if (this->type == DRAGONFLY_TYPE_GROWS_WHEN_SPAWNED) { f32 targetScale = this->type * 0.01f; if (targetScale >= 0.018f) { @@ -937,15 +1007,15 @@ void EnGrasshopper_Update(Actor* thisx, PlayState* play) { Math_ApproachF(&this->dragonflyScale, targetScale, 0.1f, 0.01f); } - if ((this->action != EN_GRASSHOPPER_ACTION_FALL) && (this->action != EN_GRASSHOPPER_ACTION_APPROACH_PLAYER)) { + if ((this->action != DRAGONFLY_ACTION_FALL) && (this->action != DRAGONFLY_ACTION_APPROACH_PLAYER)) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 5, 0x3E8, 5); } EnGrasshopper_UpdateEffects(this, play); - if ((this->action != EN_GRASSHOPPER_ACTION_DEAD) && (this->action != EN_GRASSHOPPER_ACTION_FALL)) { + if ((this->action != DRAGONFLY_ACTION_DEAD) && (this->action != DRAGONFLY_ACTION_FALL)) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - if ((this->action == EN_GRASSHOPPER_ACTION_APPROACH_PLAYER) || (this->action == EN_GRASSHOPPER_ACTION_ATTACK)) { + if ((this->action == DRAGONFLY_ACTION_APPROACH_PLAYER) || (this->action == DRAGONFLY_ACTION_ATTACK)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); } } @@ -958,10 +1028,9 @@ void EnGrasshopper_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec Matrix_Push(); - if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && - (this->type != EN_GRASSHOPPER_TYPE_WOODFALL)) { - if ((s8)(sLimbIndexToShadowBodyPartsIndex[limbIndex] >= 0)) { - Matrix_MultVec3f(&sZeroVec3f, &this->shadowBodyPartsPos[sLimbIndexToShadowBodyPartsIndex[limbIndex]]); + if ((this->type != DRAGONFLY_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && (this->type != DRAGONFLY_TYPE_WOODFALL)) { + if ((s8)(sLimbToShadowBodyParts[limbIndex] > BODYPART_NONE)) { + Matrix_MultVec3f(&sZeroVec3f, &this->shadowBodyPartsPos[sLimbToShadowBodyParts[limbIndex]]); } } @@ -972,6 +1041,7 @@ void EnGrasshopper_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec } Collider_UpdateSpheres(limbIndex, &this->collider); + if ((limbIndex == DRAGONFLY_LIMB_ROOT) || (limbIndex == DRAGONFLY_LIMB_TAIL_SEGMENT_2) || (limbIndex == DRAGONFLY_LIMB_TAIL_TIP) || (limbIndex == DRAGONFLY_LIMB_BACK_LEFT_UPPER_LEG) || (limbIndex == DRAGONFLY_LIMB_BACK_RIGHT_UPPER_LEG) || (limbIndex == DRAGONFLY_LIMB_FRONT_LEFT_UPPER_LEG) || @@ -983,25 +1053,20 @@ void EnGrasshopper_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec // While checking for DRAGONFLY_LIMB_ROOT twice is not a bug by itself, it causes another bug below. (limbIndex == DRAGONFLY_LIMB_ROOT)) { //! @bug: This code only works properly if all 12 elements of bodyPartsPos are updated every frame, since - //! otherwise bodyPartsPosIndex will be non-zero at the end of a frame. Despite the fact that there are 12 + //! otherwise bodyPartIndex will be non-zero at the end of a frame. Despite the fact that there are 12 //! checks in the above if-statement, only 9 of them are valid and non-duplicate, so only 9 elements of //! bodyPartsPos are updated on each frame. As a result, three elements in bodyPartsPos will either be (0, 0, 0) //! or be a value carried over from the previous frame. - Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); - this->bodyPartsPosIndex++; - if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { - this->bodyPartsPosIndex = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= DRAGONFLY_BODYPART_MAX) { + this->bodyPartIndex = 0; } } Matrix_Pop(); } -// We need to pass in 14 into SubS_GenShadowTex for the bodyPartsNum, NOT the actual size of the -// parent body parts array. This is both necessary to match and to prevent extra dots from being -// drawn with the shadow. -#define SHADOW_BODY_PARTS_NUM 14 - void EnGrasshopper_Draw(Actor* thisx, PlayState* play) { EnGrasshopper* this = THIS; s32 i; @@ -1011,17 +1076,17 @@ void EnGrasshopper_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnGrasshopper_PostLimbDraw, &this->actor); - if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && - (this->type != EN_GRASSHOPPER_TYPE_WOODFALL)) { + if ((this->type != DRAGONFLY_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && (this->type != DRAGONFLY_TYPE_WOODFALL)) { Matrix_RotateXS(0, MTXMODE_NEW); for (i = 0, shadowTexIter = shadowTex; i < SUBS_SHADOW_TEX_SIZE; i++) { - *shadowTexIter++ = 0; + *shadowTexIter = 0; + shadowTexIter++; } for (i = 0; i < 5; i++) { SubS_GenShadowTex(this->shadowBodyPartsPos, &this->actor.world.pos, shadowTex, i / 5.0f, - SHADOW_BODY_PARTS_NUM, sShadowSizes, sParentBodyParts); + DRAGONFLY_SHADOW_BODYPART_MAX, sShadowSizes, sParentShadowBodyParts); //! FAKE: Needed to fix some regs and stack //! https://decomp.me/scratch/4wJBW if ((shadowTex && shadowTex) && shadowTex) {} @@ -1046,9 +1111,8 @@ void EnGrasshopper_Draw(Actor* thisx, PlayState* play) { this->drawDmgEffFrozenSteamScale = 0.8f; } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, - this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, DRAGONFLY_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, this->drawDmgEffType); } EnGrasshopper_DrawEffects(this, play); diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index 049091393..8677bb9f2 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -4,20 +4,20 @@ #include "global.h" #include "objects/object_grasshopper/object_grasshopper.h" -#define EN_GRASSHOPPER_GET_TYPE(thisx) ((thisx)->params) +#define DRAGONFLY_GET_TYPE(thisx) ((thisx)->params) -#define EN_GRASSHOPPER_PARAMS(type) (type) +#define DRAGONFLY_PARAMS(type) (type) struct EnGrasshopper; typedef void (*EnGrasshopperActionFunc)(struct EnGrasshopper*, PlayState*); typedef enum EnGrasshopperType { - /* -1 */ EN_GRASSHOPPER_TYPE_UNUSED_NORMAL = -1, // Acts exactly like EN_GRASSHOPPER_TYPE_NORMAL - /* 0 */ EN_GRASSHOPPER_TYPE_NORMAL, - /* 1 */ EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED, // Spawned by EnEncount1 - /* 2 */ EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM, - /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL + /* -1 */ DRAGONFLY_TYPE_UNUSED_NORMAL = -1, // Acts exactly like DRAGONFLY_TYPE_NORMAL + /* 0 */ DRAGONFLY_TYPE_NORMAL, + /* 1 */ DRAGONFLY_TYPE_GROWS_WHEN_SPAWNED, // Spawned by EnEncount1 + /* 2 */ DRAGONFLY_TYPE_WOODFALL_TEMPLE_FINAL_ROOM, + /* 3 */ DRAGONFLY_TYPE_WOODFALL } EnGrasshopperType; typedef struct EnGrasshopperEffect { @@ -30,7 +30,41 @@ typedef struct EnGrasshopperEffect { /* 0x2E */ s16 lightningIndex; } EnGrasshopperEffect; // size = 0x30 -#define EN_GRASSHOPPER_EFFECT_COUNT 100 +#define DRAGONFLY_EFFECT_COUNT 100 + +typedef enum EnGrasshopperBodyPart { + /* 0 */ DRAGONFLY_BODYPART_0, + /* 1 */ DRAGONFLY_BODYPART_1, + /* 2 */ DRAGONFLY_BODYPART_2, + /* 3 */ DRAGONFLY_BODYPART_3, + /* 4 */ DRAGONFLY_BODYPART_4, + /* 5 */ DRAGONFLY_BODYPART_5, + /* 6 */ DRAGONFLY_BODYPART_6, + /* 7 */ DRAGONFLY_BODYPART_7, + /* 8 */ DRAGONFLY_BODYPART_8, + /* 9 */ DRAGONFLY_BODYPART_9, + /* 10 */ DRAGONFLY_BODYPART_10, + /* 11 */ DRAGONFLY_BODYPART_11, + /* 12 */ DRAGONFLY_BODYPART_MAX +} EnGrasshopperBodyPart; + +typedef enum EnGrasshopperShadowBodyPart { + /* 0 */ DRAGONFLY_SHADOW_BODYPART_0, + /* 1 */ DRAGONFLY_SHADOW_BODYPART_1, + /* 2 */ DRAGONFLY_SHADOW_BODYPART_2, + /* 3 */ DRAGONFLY_SHADOW_BODYPART_3, + /* 4 */ DRAGONFLY_SHADOW_BODYPART_4, + /* 5 */ DRAGONFLY_SHADOW_BODYPART_5, + /* 6 */ DRAGONFLY_SHADOW_BODYPART_6, + /* 7 */ DRAGONFLY_SHADOW_BODYPART_7, + /* 8 */ DRAGONFLY_SHADOW_BODYPART_8, + /* 9 */ DRAGONFLY_SHADOW_BODYPART_9, + /* 10 */ DRAGONFLY_SHADOW_BODYPART_10, + /* 11 */ DRAGONFLY_SHADOW_BODYPART_11, + /* 12 */ DRAGONFLY_SHADOW_BODYPART_12, + /* 13 */ DRAGONFLY_SHADOW_BODYPART_13, + /* 14 */ DRAGONFLY_SHADOW_BODYPART_MAX +} EnGrasshopperShadowBodyPart; typedef struct EnGrasshopper { /* 0x0000 */ Actor actor; @@ -48,8 +82,8 @@ typedef struct EnGrasshopper { /* 0x02B8 */ s16 drawDmgEffType; /* 0x02BC */ f32 drawDmgEffScale; /* 0x02C0 */ f32 drawDmgEffFrozenSteamScale; - /* 0x02C4 */ Vec3f bodyPartsPos[12]; - /* 0x0354 */ s16 bodyPartsPosIndex; + /* 0x02C4 */ Vec3f bodyPartsPos[DRAGONFLY_BODYPART_MAX]; + /* 0x0354 */ s16 bodyPartIndex; /* 0x0356 */ s16 splashCount; /* 0x0358 */ s16 action; /* 0x035A */ s16 index; // Has a minor effect on speed for some reason. @@ -68,13 +102,13 @@ typedef struct EnGrasshopper { /* 0x03B4 */ Vec3f targetApproachPos; /* 0x03C0 */ Vec3f tailTipPos; /* 0x03CC */ Vec3f effectBasePos; - /* 0x03D8 */ Vec3f shadowBodyPartsPos[DRAGONFLY_LIMB_MAX]; + /* 0x03D8 */ Vec3f shadowBodyPartsPos[DRAGONFLY_LIMB_MAX]; // Should be `DRAGONFLY_SHADOW_BODYPART_MAX` /* 0x04F8 */ f32 waterSurface; /* 0x04FC */ Vec3f damagedVelocity; /* 0x0508 */ Vec3s targetBankRot; /* 0x0510 */ ColliderJntSph collider; /* 0x0530 */ ColliderJntSphElement colliderElements[2]; - /* 0x0570 */ EnGrasshopperEffect effects[EN_GRASSHOPPER_EFFECT_COUNT]; + /* 0x0570 */ EnGrasshopperEffect effects[DRAGONFLY_EFFECT_COUNT]; } EnGrasshopper; // size = 0x1870 #endif // Z_EN_GRASSHOPPER_H 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 c38d6070d..cb9812390 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 @@ -783,26 +783,26 @@ void func_80C21468(EnHintSkb* this, PlayState* play) { static Color_RGBA8 D_80C21E48 = { 200, 200, 255, 255 }; static Vec3f D_80C21E4C = { 0.0f, -1.0f, 0.0f }; Vec3f sp84; - s32 phi_s4; + s32 bodyPartsCount; s16 temp_s1; s32 i; if (this->unk_3E8 & 2) { - phi_s4 = ARRAY_COUNT(this->limbPos) - 1; + bodyPartsCount = ENHINTSKB_BODYPART_MAX - 1; } else { - phi_s4 = ARRAY_COUNT(this->limbPos); + bodyPartsCount = ENHINTSKB_BODYPART_MAX; } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN); - for (i = 0; i < phi_s4; i++) { - temp_s1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]); + for (i = 0; i < bodyPartsCount; i++) { + temp_s1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bodyPartsPos[i]); sp84.x = Math_SinS(temp_s1) * 3.0f; sp84.z = Math_CosS(temp_s1) * 3.0f; sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f; - EffectSsEnIce_Spawn(play, &this->limbPos[i], 0.6f, &sp84, &D_80C21E4C, &D_80C21E44, &D_80C21E48, 30); + EffectSsEnIce_Spawn(play, &this->bodyPartsPos[i], 0.6f, &sp84, &D_80C21E4C, &D_80C21E44, &D_80C21E48, 30); } } @@ -891,11 +891,11 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) || (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) { - Matrix_MultZero(&this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } else if ((limbIndex == 11) && !(this->unk_3E8 & 2)) { - Matrix_MultVec3f(&D_80C21E70, &this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultVec3f(&D_80C21E70, &this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } } } @@ -904,13 +904,13 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnHintSkb_Draw(Actor* thisx, PlayState* play) { EnHintSkb* this = THIS; - this->limbCount = 0; + this->bodyPartsCount = 0; Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHintSkb_OverrideLimbDraw, EnHintSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f, - this->drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, this->bodyPartsCount, this->drawDmgEffScale, + 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); } if (this->unk_3E8 & 4) { diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h index 22f72084d..e263b9de0 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h @@ -9,16 +9,34 @@ typedef void (*EnHintSkbActionFunc)(struct EnHintSkb*, PlayState*); #define ENHINTSKB_GET_FF(thisx) ((thisx)->params & 0xFF) +typedef enum EnHintSkbBodyPart { + /* 0 */ ENHINTSKB_BODYPART_0, + /* 1 */ ENHINTSKB_BODYPART_1, + /* 2 */ ENHINTSKB_BODYPART_2, + /* 3 */ ENHINTSKB_BODYPART_3, + /* 4 */ ENHINTSKB_BODYPART_4, + /* 5 */ ENHINTSKB_BODYPART_5, + /* 6 */ ENHINTSKB_BODYPART_6, + /* 7 */ ENHINTSKB_BODYPART_7, + /* 8 */ ENHINTSKB_BODYPART_8, + /* 9 */ ENHINTSKB_BODYPART_9, + /* 10 */ ENHINTSKB_BODYPART_10, + /* 11 */ ENHINTSKB_BODYPART_11, + /* 12 */ ENHINTSKB_BODYPART_12, + /* 13 */ ENHINTSKB_BODYPART_13, + /* 14 */ ENHINTSKB_BODYPART_MAX +} EnHintSkbBodyPart; + typedef struct EnHintSkb { /* 0x000 */ Actor actor; /* 0x144 */ ColliderJntSph collider; /* 0x164 */ ColliderJntSphElement colliderElement[2]; /* 0x1E4 */ SkelAnime skelAnime; /* 0x228 */ EnHintSkbActionFunc actionFunc; - /* 0x22C */ Vec3f limbPos[14]; + /* 0x22C */ Vec3f bodyPartsPos[ENHINTSKB_BODYPART_MAX]; /* 0x2D4 */ f32 drawDmgEffAlpha; /* 0x2D8 */ f32 drawDmgEffScale; - /* 0x2DC */ s32 limbCount; + /* 0x2DC */ s32 bodyPartsCount; /* 0x2E0 */ Vec3s jointTable[20]; /* 0x358 */ Vec3s morphtable[20]; /* 0x3D0 */ UNK_TYPE1 unk3D0[0xC]; 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 e7473e7d3..16c19e3ec 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -286,7 +286,7 @@ void func_80BF14B0(EnIg* this) { Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_2A8->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_2A8)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_2A8)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_2A8->focus.pos); } 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 a6565d01b..636ab6bdf 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -54,14 +54,14 @@ typedef struct { /* 0x4 */ s16 unk04; } EnIkUnkStruct; // size = 0x8 -EnIkUnkStruct sIronKnuckleArmorMarkings[] = { - { gIronKnuckleHelmetMarkingDL, 0x0000 }, - { gIronKnuckleFrontTorsoArmorMarkingDL, 0x0000 }, - { gIronKnuckleRearTorsoArmorMarkingDL, 0x7FFF }, - { gIronKnuckleRivetsMarking2DL, 0x4000 }, - { gIronKnuckleRivetsMarking1DL, 0xC000 }, - { NULL, 0x4000 }, - { NULL, 0xC000 }, +EnIkUnkStruct sIronKnuckleArmorMarkings[IRON_KNUCKLE_ARMOR_BODYPART_MAX] = { + { gIronKnuckleHelmetMarkingDL, 0x0000 }, // IRON_KNUCKLE_ARMOR_BODYPART_HELMET + { gIronKnuckleFrontTorsoArmorMarkingDL, 0x0000 }, // IRON_KNUCKLE_ARMOR_BODYPART_CHEST_FRONT + { gIronKnuckleRearTorsoArmorMarkingDL, 0x7FFF }, // IRON_KNUCKLE_ARMOR_BODYPART_CHEST_BACK + { gIronKnuckleRivetsMarking2DL, 0x4000 }, // IRON_KNUCKLE_ARMOR_BODYPART_UPPER_LEFT_PAULDRON + { gIronKnuckleRivetsMarking1DL, -0x4000 }, // IRON_KNUCKLE_ARMOR_BODYPART_UPPER_RIGHT_PAULDRON + { NULL, 0x4000 }, // IRON_KNUCKLE_ARMOR_BODYPART_LOWER_LEFT_PAULDRON + { NULL, -0x4000 }, // IRON_KNUCKLE_ARMOR_BODYPART_LOWER_RIGHT_PAULDRON }; // sIronKnuckleArmorType[PARAM_VALUE][ARMOR_SECTIONS] @@ -307,7 +307,7 @@ void EnIk_Thaw(EnIk* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, IRON_KNUCKLE_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -356,7 +356,7 @@ s32 EnIk_ChooseAttack(EnIk* this) { void EnIk_CheckActions(EnIk* this, PlayState* play) { if (!EnIk_IsChangingAction(this, play) && !EnIk_ChooseAttack(this)) { - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { EnIk_SetupRun(this); } else { EnIk_SetupWalk(this); @@ -367,7 +367,7 @@ void EnIk_CheckActions(EnIk* this, PlayState* play) { void EnIk_SetupIdle(EnIk* this) { f32 frameCount = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim); - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { this->timer = 10; } else { this->timer = 0; @@ -455,7 +455,7 @@ void EnIk_SetupVerticalAttack(EnIk* this) { f32 playbackSpeed; this->actor.speed = 0.0f; - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { playbackSpeed = 1.5f; } else { playbackSpeed = 1.2f; @@ -487,7 +487,7 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) { if ((this->skelAnime.curFrame > 13.0f) && (this->skelAnime.curFrame < 23.0f)) { this->colliderQuad.base.atFlags |= AT_ON; - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { this->actor.speed = Math_SinF((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f; } } else { @@ -543,7 +543,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) { } if (((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 9.0f)) || ((this->skelAnime.curFrame > 12.0f) && (this->skelAnime.curFrame < 20.0f))) { - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x5DC); this->actor.world.rot.y = this->actor.shape.rot.y; if (this->skelAnime.curFrame > 12.0f) { @@ -567,7 +567,7 @@ void EnIk_SetupSingleHorizontalAttack(EnIk* this) { f32 playSpeed; this->actor.speed = 0.0f; - if (this->drawArmorFlags) { + if (this->drawArmorFlags != 0) { this->actor.world.rot.z = 0x1000; playSpeed = 1.3f; } else { @@ -795,7 +795,7 @@ void EnIk_UpdateDamage(EnIk* this, PlayState* play) { this->actor.colChkInfo.damageTable = &sDamageTableNoArmor; Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_ARMOR_OFF_DEMO); EnIk_SetupCutscene(this); - } else if (this->drawArmorFlags) { + } else if (this->drawArmorFlags != 0) { if (this->actor.colChkInfo.damageEffect == DMG_EFF_ICE) { EnIk_Freeze(this); EnIk_SetupFrozen(this); @@ -928,32 +928,89 @@ void EnIk_Update(Actor* thisx, PlayState* play2) { EnIk_UpdateArmor(this, play); } -s8 D_8092C1A8[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3, 5, 4, 6, 1, 2, -1, -1, 0, 0, +static s8 sLimbToArmorBodyParts[IRON_KNUCKLE_LIMB_MAX] = { + BODYPART_NONE, // IRON_KNUCKLE_LIMB_NONE + BODYPART_NONE, // IRON_KNUCKLE_LIMB_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TASSET_CENTER + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TASSET_RIGHT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_LEG + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_FOOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TASSET_LEFT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_LEG + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_FOOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UPPER_BODY_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UNK_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_HEAD_ROOT + IRON_KNUCKLE_ARMOR_BODYPART_HELMET, // IRON_KNUCKLE_LIMB_HELMET_ARMOR + BODYPART_NONE, // IRON_KNUCKLE_LIMB_HEAD + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_UPPER_ARM + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_FOREARM + BODYPART_NONE, // IRON_KNUCKLE_LIMB_AXE_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_AXE + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_HAND + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_UPPER_ARM + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_FOREARM + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_HAND + IRON_KNUCKLE_ARMOR_BODYPART_UPPER_LEFT_PAULDRON, // IRON_KNUCKLE_LIMB_UPPER_LEFT_PAULDRON + IRON_KNUCKLE_ARMOR_BODYPART_LOWER_LEFT_PAULDRON, // IRON_KNUCKLE_LIMB_LOWER_LEFT_PAULDRON + IRON_KNUCKLE_ARMOR_BODYPART_UPPER_RIGHT_PAULDRON, // IRON_KNUCKLE_LIMB_UPPER_RIGHT_PAULDRON + IRON_KNUCKLE_ARMOR_BODYPART_LOWER_RIGHT_PAULDRON, // IRON_KNUCKLE_LIMB_LOWER_RIGHT_PAULDRON + IRON_KNUCKLE_ARMOR_BODYPART_CHEST_FRONT, // IRON_KNUCKLE_LIMB_CHEST_ARMOR_FRONT + IRON_KNUCKLE_ARMOR_BODYPART_CHEST_BACK, // IRON_KNUCKLE_LIMB_CHEST_ARMOR_BACK + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TORSO + BODYPART_NONE, // IRON_KNUCKLE_LIMB_WAIST }; s32 EnIk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnIk* this = THIS; - if (this->drawArmorFlags) { - if (D_8092C1A8[limbIndex] > 0) { + if (this->drawArmorFlags != 0) { + if (sLimbToArmorBodyParts[limbIndex] >= IRON_KNUCKLE_ARMOR_BODYPART_CHEST_FRONT) { *dList = NULL; } } return false; } -void EnIk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Vec3f D_8092C1C8 = { 2000.0f, -200.0f, -5200.0f }; - static Vec3f D_8092C1D4 = { 300.0f, -200.0f, 0.0f }; - static s8 limbPosIndex[] = { - -1, -1, -1, 0, 1, 2, 3, 4, 5, -1, -1, -1, 6, -1, -1, 7, - -1, -1, 8, -1, 9, 10, -1, 11, -1, 12, -1, -1, -1, -1, 0, 0, - }; +static Vec3f D_8092C1C8 = { 2000.0f, -200.0f, -5200.0f }; +static Vec3f D_8092C1D4 = { 300.0f, -200.0f, 0.0f }; +static s8 sLimbToBodyParts[IRON_KNUCKLE_LIMB_MAX] = { + BODYPART_NONE, // IRON_KNUCKLE_LIMB_NONE + BODYPART_NONE, // IRON_KNUCKLE_LIMB_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TASSET_CENTER + IRON_KNUCKLE_BODYPART_TASSET_RIGHT, // IRON_KNUCKLE_LIMB_TASSET_RIGHT + IRON_KNUCKLE_BODYPART_RIGHT_LEG, // IRON_KNUCKLE_LIMB_RIGHT_LEG + IRON_KNUCKLE_BODYPART_RIGHT_FOOT, // IRON_KNUCKLE_LIMB_RIGHT_FOOT + IRON_KNUCKLE_BODYPART_TASSET_LEFT, // IRON_KNUCKLE_LIMB_TASSET_LEFT + IRON_KNUCKLE_BODYPART_LEFT_LEG, // IRON_KNUCKLE_LIMB_LEFT_LEG + IRON_KNUCKLE_BODYPART_LEFT_FOOT, // IRON_KNUCKLE_LIMB_LEFT_FOOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UPPER_BODY_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UNK_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_HEAD_ROOT + IRON_KNUCKLE_BODYPART_HELMET_ARMOR, // IRON_KNUCKLE_LIMB_HELMET_ARMOR + BODYPART_NONE, // IRON_KNUCKLE_LIMB_HEAD + BODYPART_NONE, // IRON_KNUCKLE_LIMB_RIGHT_UPPER_ARM + IRON_KNUCKLE_BODYPART_RIGHT_FOREARM, // IRON_KNUCKLE_LIMB_RIGHT_FOREARM + BODYPART_NONE, // IRON_KNUCKLE_LIMB_AXE_ROOT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_AXE + IRON_KNUCKLE_BODYPART_RIGHT_HAND, // IRON_KNUCKLE_LIMB_RIGHT_HAND + BODYPART_NONE, // IRON_KNUCKLE_LIMB_LEFT_UPPER_ARM + IRON_KNUCKLE_BODYPART_LEFT_FOREARM, // IRON_KNUCKLE_LIMB_LEFT_FOREARM + IRON_KNUCKLE_BODYPART_LEFT_HAND, // IRON_KNUCKLE_LIMB_LEFT_HAND + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UPPER_LEFT_PAULDRON + IRON_KNUCKLE_BODYPART_LOWER_LEFT_PAULDRON, // IRON_KNUCKLE_LIMB_LOWER_LEFT_PAULDRON + BODYPART_NONE, // IRON_KNUCKLE_LIMB_UPPER_RIGHT_PAULDRON + IRON_KNUCKLE_BODYPART_LOWER_RIGHT_PAULDRON, // IRON_KNUCKLE_LIMB_LOWER_RIGHT_PAULDRON + BODYPART_NONE, // IRON_KNUCKLE_LIMB_CHEST_ARMOR_FRONT + BODYPART_NONE, // IRON_KNUCKLE_LIMB_CHEST_ARMOR_BACK + BODYPART_NONE, // IRON_KNUCKLE_LIMB_TORSO + BODYPART_NONE, // IRON_KNUCKLE_LIMB_WAIST +}; + +void EnIk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnIk* this = THIS; - s32 index = D_8092C1A8[limbIndex]; + s32 armorBodyPart = sLimbToArmorBodyParts[limbIndex]; Gfx* xlu; IronKnuckleEffect* ikEffect; s16 sp76; @@ -964,15 +1021,16 @@ void EnIk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, MtxF* mf; if (this->drawArmorFlags == 0x1) { - if (index > 0) { - ikEffect = &this->effects[index]; + if (armorBodyPart >= IRON_KNUCKLE_ARMOR_BODYPART_CHEST_FRONT) { + ikEffect = &this->effects[armorBodyPart]; mf = Matrix_GetCurrent(); ikEffect->pos.x = mf->mf[3][0]; ikEffect->pos.y = mf->mf[3][1]; ikEffect->pos.z = mf->mf[3][2]; Matrix_MtxFToYXZRot(mf, &ikEffect->rot, false); ikEffect->enabled = true; - sp76 = sIronKnuckleArmorMarkings[index].unk04 + (((s32)Rand_Next() >> 0x13) + this->actor.shape.rot.y); + sp76 = + sIronKnuckleArmorMarkings[armorBodyPart].unk04 + (((s32)Rand_Next() >> 0x13) + this->actor.shape.rot.y); ikEffect->vel.x = Math_SinS(sp76) * 5.0f; ikEffect->vel.y = 6.0f; ikEffect->vel.z = Math_CosS(sp76) * 5.0f; @@ -1004,18 +1062,19 @@ void EnIk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->blurEffectSpawnLock = this->timer; } - if (limbPosIndex[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[limbPosIndex[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } - if ((index == 0) || - ((index != -1) && (this->drawArmorFlags == 0) && (sIronKnuckleArmorMarkings[index].unk00 != 0))) { + if ((armorBodyPart == IRON_KNUCKLE_ARMOR_BODYPART_HELMET) || + ((armorBodyPart != BODYPART_NONE) && (this->drawArmorFlags == 0) && + (sIronKnuckleArmorMarkings[armorBodyPart].unk00 != NULL))) { OPEN_DISPS(play->state.gfxCtx); xlu = POLY_XLU_DISP; gSPMatrix(&xlu[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(&xlu[1], sIronKnuckleArmorMarkings[index].unk00); + gSPDisplayList(&xlu[1], sIronKnuckleArmorMarkings[armorBodyPart].unk00); POLY_XLU_DISP = &xlu[2]; CLOSE_DISPS(play->state.gfxCtx); @@ -1095,7 +1154,7 @@ void EnIk_Draw(Actor* thisx, PlayState* play) { func_800AE5A0(play); } func_800BC620(&this->actor.focus.pos, &sScale, 255, play); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, IRON_KNUCKLE_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.h b/src/overlays/actors/ovl_En_Ik/z_en_ik.h index 3489329b1..0d1625144 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.h +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.h @@ -24,6 +24,34 @@ typedef struct { /* 0x24 */ s32 enabled; } IronKnuckleEffect; // size = 0x28 +typedef enum IronKnuckleBodyPart { + /* 0 */ IRON_KNUCKLE_BODYPART_TASSET_RIGHT, + /* 1 */ IRON_KNUCKLE_BODYPART_RIGHT_LEG, + /* 2 */ IRON_KNUCKLE_BODYPART_RIGHT_FOOT, + /* 3 */ IRON_KNUCKLE_BODYPART_TASSET_LEFT, + /* 4 */ IRON_KNUCKLE_BODYPART_LEFT_LEG, + /* 5 */ IRON_KNUCKLE_BODYPART_LEFT_FOOT, + /* 6 */ IRON_KNUCKLE_BODYPART_HELMET_ARMOR, + /* 7 */ IRON_KNUCKLE_BODYPART_RIGHT_FOREARM, + /* 8 */ IRON_KNUCKLE_BODYPART_RIGHT_HAND, + /* 9 */ IRON_KNUCKLE_BODYPART_LEFT_FOREARM, + /* 10 */ IRON_KNUCKLE_BODYPART_LEFT_HAND, + /* 11 */ IRON_KNUCKLE_BODYPART_LOWER_LEFT_PAULDRON, + /* 12 */ IRON_KNUCKLE_BODYPART_LOWER_RIGHT_PAULDRON, + /* 13 */ IRON_KNUCKLE_BODYPART_MAX +} IronKnuckleBodyPart; + +typedef enum IronKnuckleArmorBodyPart { + /* 0 */ IRON_KNUCKLE_ARMOR_BODYPART_HELMET, + /* 1 */ IRON_KNUCKLE_ARMOR_BODYPART_CHEST_FRONT, + /* 2 */ IRON_KNUCKLE_ARMOR_BODYPART_CHEST_BACK, + /* 3 */ IRON_KNUCKLE_ARMOR_BODYPART_UPPER_LEFT_PAULDRON, + /* 4 */ IRON_KNUCKLE_ARMOR_BODYPART_UPPER_RIGHT_PAULDRON, + /* 5 */ IRON_KNUCKLE_ARMOR_BODYPART_LOWER_LEFT_PAULDRON, + /* 6 */ IRON_KNUCKLE_ARMOR_BODYPART_LOWER_RIGHT_PAULDRON, + /* 7 */ IRON_KNUCKLE_ARMOR_BODYPART_MAX +} IronKnuckleArmorBodyPart; + typedef struct EnIk { /* 0x0000 */ Actor actor; /* 0x0144 */ SkelAnime skelAnime; @@ -40,12 +68,12 @@ typedef struct EnIk { /* 0x0304 */ f32 drawDmgEffAlpha; /* 0x0308 */ f32 drawDmgEffScale; /* 0x030C */ f32 drawDmgEffFrozenSteamScale; - /* 0x0310 */ Vec3f limbPos[13]; + /* 0x0310 */ Vec3f bodyPartsPos[IRON_KNUCKLE_BODYPART_MAX]; /* 0x03AC */ ColliderCylinder colliderCylinder; /* 0x03F8 */ ColliderQuad colliderQuad; /* 0x0478 */ ColliderTris colliderTris; /* 0x0498 */ ColliderTrisElement shieldColliderItems[2]; - /* 0x0550 */ IronKnuckleEffect effects[7]; + /* 0x0550 */ IronKnuckleEffect effects[IRON_KNUCKLE_ARMOR_BODYPART_MAX]; } EnIk; // size = 0x668 #endif // Z_EN_IK_H 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 30e75cca1..e54b7ff26 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1611,8 +1611,7 @@ void func_80B89280(EnKaizoku* this, PlayState* play) { if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { - Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, - 0.7f, 0.4f); + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, KAIZOKU_BODYPART_MAX, 2, 0.7f, 0.4f); this->unk_2B8 = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->picto.actor.flags |= ACTOR_FLAG_400; @@ -1634,8 +1633,7 @@ void func_80B893CC(EnKaizoku* this, PlayState* play) { if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && (this->unk_2B8 != 0)) { - Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, - 0.4f); + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, KAIZOKU_BODYPART_MAX, 2, 0.7f, 0.4f); this->unk_2B8 = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->picto.actor.flags |= ACTOR_FLAG_400; @@ -1714,8 +1712,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { if (this->unk_2B8 == 0) { return; } - Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, - 0.4f); + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, KAIZOKU_BODYPART_MAX, 2, 0.7f, 0.4f); this->unk_2B8 = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -2117,11 +2114,11 @@ void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* (limbIndex == KAIZOKU_LIMB_0D) || (limbIndex == KAIZOKU_LIMB_0F) || (limbIndex == KAIZOKU_LIMB_11) || (limbIndex == KAIZOKU_LIMB_12) || (limbIndex == KAIZOKU_LIMB_L_FOOT) || (limbIndex == KAIZOKU_LIMB_14) || (limbIndex == KAIZOKU_LIMB_15) || (limbIndex == KAIZOKU_LIMB_R_FOOT) || (limbIndex == KAIZOKU_LIMB_17)) { - Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); - this->bodyPartsPosIndex++; - if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { - this->bodyPartsPosIndex = 0; + this->bodyPartIndex++; + if (this->bodyPartIndex >= KAIZOKU_BODYPART_MAX) { + this->bodyPartIndex = 0; } } } @@ -2167,7 +2164,7 @@ void EnKaizoku_Draw(Actor* thisx, PlayState* play) { this->drawDmgEffFrozenSteamScale = 0.8f; } - Actor_DrawDamageEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), + Actor_DrawDamageEffects(play, &this->picto.actor, this->bodyPartsPos, KAIZOKU_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index 6366c4f7f..e2c53d34b 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -35,6 +35,25 @@ typedef enum EnKaizokuAnimation { /* 19 */ EN_KAIZOKU_ANIM_MAX } EnKaizokuAnimation; +typedef enum EnKaizokuBodyPart { + /* 0 */ KAIZOKU_BODYPART_0, + /* 1 */ KAIZOKU_BODYPART_1, + /* 2 */ KAIZOKU_BODYPART_2, + /* 3 */ KAIZOKU_BODYPART_3, + /* 4 */ KAIZOKU_BODYPART_4, + /* 5 */ KAIZOKU_BODYPART_5, + /* 6 */ KAIZOKU_BODYPART_6, + /* 7 */ KAIZOKU_BODYPART_7, + /* 8 */ KAIZOKU_BODYPART_8, + /* 9 */ KAIZOKU_BODYPART_9, + /* 10 */ KAIZOKU_BODYPART_10, + /* 11 */ KAIZOKU_BODYPART_11, + /* 12 */ KAIZOKU_BODYPART_12, + /* 13 */ KAIZOKU_BODYPART_13, + /* 14 */ KAIZOKU_BODYPART_14, + /* 15 */ KAIZOKU_BODYPART_MAX +} EnKaizokuBodyPart; + typedef struct EnKaizoku { /* 0x000 */ PictoActor picto; /* 0x148 */ SkelAnime skelAnime; @@ -64,13 +83,13 @@ typedef struct EnKaizoku { /* 0x2DC */ f32 frameCount; /* 0x2E0 */ f32 unk_2E0; /* 0x2E4 */ EnKaizokuAnimation animIndex; - /* 0x2E8 */ s32 bodyPartsPosIndex; + /* 0x2E8 */ s32 bodyPartIndex; /* 0x2EC */ s32 unk_2EC; /* 0x2F0 */ f32 unk_2F0; /* 0x2F4 */ s16 unk_2F4; /* 0x2F8 */ Vec3f unk_2F8; /* 0x304 */ Vec3f unk_304; - /* 0x310 */ Vec3f bodyPartsPos[15]; + /* 0x310 */ Vec3f bodyPartsPos[KAIZOKU_BODYPART_MAX]; /* 0x3C4 */ Vec3f unk_3C4; /* 0x3D0 */ s32 blureIndex; /* 0x3D4 */ ColliderCylinder bodyCollider; 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 49b3e4452..91c4ac9d4 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -177,7 +177,7 @@ void func_80AD7018(EnKame* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 10, 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, SNAPPER_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -764,16 +764,35 @@ s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s return false; } +static Vec3f D_80AD8E68[] = { + { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_5 + { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_6 + { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_7 + { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_8 + { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_9 +}; + +static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = { + BODYPART_NONE, // SNAPPER_LIMB_NONE + BODYPART_NONE, // SNAPPER_LIMB_BODY + BODYPART_NONE, // SNAPPER_LIMB_HEAD + SNAPPER_BODYPART_JAW, // SNAPPER_LIMB_JAW + BODYPART_NONE, // SNAPPER_LIMB_EYES + BODYPART_NONE, // SNAPPER_LIMB_FRONT_LEFT_LEG + SNAPPER_BODYPART_FRONT_LEFT_FOOT, // SNAPPER_LIMB_FRONT_LEFT_FOOT + BODYPART_NONE, // SNAPPER_LIMB_FRONT_RIGHT_LEG + SNAPPER_BODYPART_FRONT_RIGHT_FOOT, // SNAPPER_LIMB_FRONT_RIGHT_FOOT + BODYPART_NONE, // SNAPPER_LIMB_BACK_LEFT_LEG + SNAPPER_BODYPART_BACK_LEFT_FOOT, // SNAPPER_LIMB_BACK_LEFT_FOOT + BODYPART_NONE, // SNAPPER_LIMB_BACK_RIGHT_LEG + SNAPPER_BODYPART_BACK_RIGHT_FOOT, // SNAPPER_LIMB_BACK_RIGHT_FOOT +}; + void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Vec3f D_80AD8E68[] = { - { 1500.0f, 0.0f, -2000.0f }, { 1500.0f, 0.0f, 2000.0f }, { 1500.0f, 2000.0f, 0.0f }, - { 1500.0f, -2000.0f, 0.0f }, { 2500.0f, 0.0f, 0.0f }, - }; - static s8 D_80AD8EA4[] = { -1, -1, -1, 0, -1, -1, 1, -1, 2, -1, 3, -1, 4 }; EnKame* this = THIS; - if (D_80AD8EA4[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_80AD8EA4[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == SNAPPER_LIMB_BODY) { @@ -786,7 +805,7 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto } ptr2 = D_80AD8E68; - ptr = &this->limbPos[5]; + ptr = &this->bodyPartsPos[SNAPPER_BODYPART_5]; for (i = 0; i < ARRAY_COUNT(D_80AD8E68); i++) { Matrix_MultVec3f(ptr2, ptr); ptr2++; @@ -811,7 +830,7 @@ void EnKame_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable, this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, SNAPPER_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); if (this->actor.shape.shadowDraw == NULL) { diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.h b/src/overlays/actors/ovl_En_Kame/z_en_kame.h index f721e3ed8..31095bf22 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h @@ -8,6 +8,20 @@ struct EnKame; typedef void (*EnKameActionFunc)(struct EnKame*, PlayState*); +typedef enum SnapperBodyPart { + /* 0 */ SNAPPER_BODYPART_JAW, + /* 1 */ SNAPPER_BODYPART_FRONT_LEFT_FOOT, + /* 2 */ SNAPPER_BODYPART_FRONT_RIGHT_FOOT, + /* 3 */ SNAPPER_BODYPART_BACK_LEFT_FOOT, + /* 4 */ SNAPPER_BODYPART_BACK_RIGHT_FOOT, + /* 5 */ SNAPPER_BODYPART_5, + /* 6 */ SNAPPER_BODYPART_6, + /* 7 */ SNAPPER_BODYPART_7, + /* 8 */ SNAPPER_BODYPART_8, + /* 9 */ SNAPPER_BODYPART_9, + /* 10 */ SNAPPER_BODYPART_MAX +} SnapperBodyPart; + typedef struct EnKame { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime snapperSkelAnime; @@ -30,7 +44,7 @@ typedef struct EnKame { /* 0x2B4 */ f32 drawDmgEffScale; /* 0x2B8 */ f32 drawDmgEffFrozenSteamScale; /* 0x2BC */ Vec3f unk_2BC; - /* 0x2C8 */ Vec3f limbPos[10]; + /* 0x2C8 */ Vec3f bodyPartsPos[SNAPPER_BODYPART_MAX]; /* 0x340 */ ColliderCylinder collider; } EnKame; // size = 0x38C 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 00c3291d7..8c234e1ae 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -177,18 +177,18 @@ void EnKarebaba_Destroy(Actor* thisx, PlayState* play) { } void EnKarebaba_SpawnIceEffects(EnKarebaba* this, PlayState* play) { - s32 limbPosCount; + s32 bodyPartsCount; if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; if (this->actor.params == KAREBABA_MINI) { - limbPosCount = 1; + bodyPartsCount = 1; } else { - limbPosCount = 4; + bodyPartsCount = KAREBABA_BODYPART_MAX; } - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, limbPosCount, 4, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, bodyPartsCount, 4, 0.3f, 0.2f); } } @@ -654,7 +654,7 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) { EnKarebaba* this = THIS; s32 i; s32 stemSections; - s16 limbCount; + s16 bodyPartsCount; f32 scale = 0.01f; OPEN_DISPS(play->state.gfxCtx); @@ -694,7 +694,7 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, sStemDLists[i]); - Matrix_MultZero(&this->bodyPartsPos[1 + i]); + Matrix_MultZero(&this->bodyPartsPos[KAREBABA_BODYPART_1 + i]); if ((i == 0) && (this->actionFunc == EnKarebaba_Dying)) { Matrix_MultZero(&this->actor.focus.pos); } @@ -720,18 +720,18 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStemBaseDL); - Matrix_MultZero(&this->bodyPartsPos[3]); + Matrix_MultZero(&this->bodyPartsPos[KAREBABA_BODYPART_3]); } func_800AE5A0(play); if (this->actor.params == KAREBABA_MINI) { - limbCount = 1; + bodyPartsCount = 1; } else { - limbCount = ARRAY_COUNT(this->bodyPartsPos); + bodyPartsCount = KAREBABA_BODYPART_MAX; } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, limbCount, this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, bodyPartsCount, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); if (this->boundFloor != 0) { diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h index 045bef42a..f0edcdd0b 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h @@ -14,6 +14,14 @@ typedef enum { /* 2 */ KAREBABA_MINI } KarebabaType; +typedef enum KarebabaBodyPart { + /* 0 */ KAREBABA_BODYPART_0, + /* 1 */ KAREBABA_BODYPART_1, + /* 2 */ KAREBABA_BODYPART_2, + /* 3 */ KAREBABA_BODYPART_3, + /* 4 */ KAREBABA_BODYPART_MAX +} KarebabaBodyPart; + typedef struct EnKarebaba { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -25,7 +33,7 @@ typedef struct EnKarebaba { /* 0x1F0 */ f32 drawDmgEffAlpha; /* 0x1F4 */ f32 drawDmgEffScale; /* 0x1F8 */ f32 drawDmgEffFrozenSteamScale; - /* 0x1FC */ Vec3f bodyPartsPos[4]; + /* 0x1FC */ Vec3f bodyPartsPos[KAREBABA_BODYPART_MAX]; /* 0x22C */ CollisionPoly* boundFloor; /* 0x230 */ ColliderCylinder attackCollider; /* 0x27C */ ColliderCylinder hurtCollider; 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 3bc31cd74..d6f34a256 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 @@ -119,7 +119,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->collider.dim.yShift = -20; this->timer = 8; this->scroll = 0.0f; - this->actor.world.pos = player->bodyPartsPos[0]; + this->actor.world.pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST]; this->lightColorFrac = 0.0f; this->adjustLightsArg1 = 0.0f; this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; @@ -230,7 +230,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { Actor* child = this->actor.child; this->unk1B0 = player->unk_B08; - this->actor.world.pos = player->bodyPartsPos[0]; + this->actor.world.pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST]; this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; if (!this->isCharging && (player->unk_B08 >= 0.1f)) { @@ -380,8 +380,8 @@ void EnMThunder_Spin_Attack(EnMThunder* this, PlayState* play) { } if (this->timer > 0) { - this->actor.world.pos.x = player->bodyPartsPos[0].x; - this->actor.world.pos.z = player->bodyPartsPos[0].z; + this->actor.world.pos.x = player->bodyPartsPos[PLAYER_BODYPART_WAIST].x; + this->actor.world.pos.z = player->bodyPartsPos[PLAYER_BODYPART_WAIST].z; this->timer--; } diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 21146f379..2c5417c7d 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -455,7 +455,7 @@ void func_80BC06C4(EnNb* this) { if (this->unk_1E8->id == ACTOR_PLAYER) { player = (Player*)this->unk_1E8; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_1E8->focus.pos); } 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 755385d00..2b05945d9 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 @@ -610,29 +610,29 @@ void EnNeoReeba_UpdatePosition(EnNeoReeba* this, PlayState* play) { void EnNeoReeba_DrawFrozenEffects(EnNeoReeba* this, PlayState* play) { s32 i; - f32 limbPosScale = 10.0f; + f32 bodyPartPosScaleXZ = 10.0f; f32 phi_f2 = 20.0f; f32 drawEffectScale = 0.8f; if (EN_NEO_REEBA_IS_LARGE(&this->actor)) { - limbPosScale *= 1.5f; + bodyPartPosScaleXZ *= 1.5f; phi_f2 *= 1.5f; drawEffectScale *= 1.5f; } - for (i = 0; i < ARRAY_COUNT(this->limbPos) - 1; i++) { - this->limbPos[i] = this->actor.world.pos; + for (i = 0; i <= EN_NEO_REEBA_BODYPART_2; i++) { + this->bodyPartsPos[i] = this->actor.world.pos; - this->limbPos[i].x += limbPosScale * Math_SinS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); - this->limbPos[i].z += limbPosScale * Math_CosS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); - this->limbPos[i].y += 5.0f; + this->bodyPartsPos[i].x += bodyPartPosScaleXZ * Math_SinS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); + this->bodyPartsPos[i].z += bodyPartPosScaleXZ * Math_CosS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); + this->bodyPartsPos[i].y += 5.0f; } - this->limbPos[ARRAY_COUNT(this->limbPos) - 1] = this->actor.world.pos; - this->limbPos[ARRAY_COUNT(this->limbPos) - 1].y += phi_f2; + this->bodyPartsPos[EN_NEO_REEBA_BODYPART_3] = this->actor.world.pos; + this->bodyPartsPos[EN_NEO_REEBA_BODYPART_3].y += phi_f2; this->drawEffectScale = drawEffectScale; - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), drawEffectScale, 0.5f, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_NEO_REEBA_BODYPART_MAX, drawEffectScale, 0.5f, this->drawEffectAlpha, this->drawEffectType); } @@ -646,15 +646,15 @@ void EnNeoReeba_DrawEffects(EnNeoReeba* this, PlayState* play) { if ((this->drawEffectType == ACTOR_DRAW_DMGEFF_FIRE) || (this->drawEffectType == ACTOR_DRAW_DMGEFF_LIGHT_ORBS) || (this->drawEffectType == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL)) { - for (i = 0; i < ARRAY_COUNT(this->limbPos) - 1; i++) { - this->limbPos[i] = this->actor.world.pos; - this->limbPos[i].x += scale * Math_SinS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); - this->limbPos[i].z += scale * Math_CosS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); - this->limbPos[i].y += -20.0f; + for (i = 0; i <= EN_NEO_REEBA_BODYPART_2; i++) { + this->bodyPartsPos[i] = this->actor.world.pos; + this->bodyPartsPos[i].x += scale * Math_SinS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); + this->bodyPartsPos[i].z += scale * Math_CosS(BINANG_ADD(this->actor.shape.rot.y, i * 0x5555)); + this->bodyPartsPos[i].y += -20.0f; } - this->limbPos[ARRAY_COUNT(this->limbPos) - 1] = this->actor.world.pos; - Actor_DrawDamageEffects(play, NULL, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawEffectScale, 0.5f, + this->bodyPartsPos[EN_NEO_REEBA_BODYPART_3] = this->actor.world.pos; + Actor_DrawDamageEffects(play, NULL, this->bodyPartsPos, EN_NEO_REEBA_BODYPART_MAX, this->drawEffectScale, 0.5f, this->drawEffectAlpha, this->drawEffectType); } } @@ -672,8 +672,8 @@ void EnNeoReeba_SpawnIce(EnNeoReeba* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN); - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) { - yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]); + for (i = 0; i < EN_NEO_REEBA_BODYPART_MAX; i++) { + yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bodyPartsPos[i]); xVel = Math_SinS(yaw) * 3.0f; zVel = Math_CosS(yaw) * 3.0f; @@ -681,7 +681,8 @@ void EnNeoReeba_SpawnIce(EnNeoReeba* this, PlayState* play) { iceVel.x = (Rand_Centered() * 3.0f) + xVel; iceVel.z = (Rand_Centered() * 3.0f) + zVel; iceVel.y = (Rand_ZeroOne() * 6.0f) + 4.0f; - EffectSsEnIce_Spawn(play, &this->limbPos[i], 0.7f, &iceVel, &sIceAccel, &sIcePrimColor, &sIceEnvColor, 30); + EffectSsEnIce_Spawn(play, &this->bodyPartsPos[i], 0.7f, &iceVel, &sIceAccel, &sIcePrimColor, &sIceEnvColor, + 30); } } } diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h index 2cd24c88e..1be3d2c4a 100644 --- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h +++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h @@ -10,6 +10,14 @@ struct EnNeoReeba; typedef void (*EnNeoReebaActionFunc)(struct EnNeoReeba*, PlayState*); +typedef enum EnNeoReebaBodyPart { + /* 0 */ EN_NEO_REEBA_BODYPART_0, + /* 1 */ EN_NEO_REEBA_BODYPART_1, + /* 2 */ EN_NEO_REEBA_BODYPART_2, + /* 3 */ EN_NEO_REEBA_BODYPART_3, + /* 4 */ EN_NEO_REEBA_BODYPART_MAX +} EnNeoReebaBodyPart; + typedef struct EnNeoReeba { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -19,7 +27,7 @@ typedef struct EnNeoReeba { /* 0x2AC */ EnNeoReebaActionFunc actionFunc; /* 0x2B0 */ Vec3f targetPos; /* 0x2BC */ Vec3f velToTarget; - /* 0x2C8 */ Vec3f limbPos[4]; + /* 0x2C8 */ Vec3f bodyPartsPos[EN_NEO_REEBA_BODYPART_MAX]; /* 0x2F8 */ f32 sinkRiseRate; /* 0x2FC */ f32 rotationSpeed; /* 0x300 */ f32 drawEffectAlpha; 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 7ebe76367..88e0aea16 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -245,7 +245,7 @@ void EnPametfrog_Thaw(EnPametfrog* this, PlayState* play) { this->collider.base.colType = COLTYPE_HIT6; this->collider.elements->info.elemType = ELEMTYPE_UNK1; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, GEKKO_BODYPART_MAX, 2, 0.3f, 0.2f); } } @@ -1379,29 +1379,38 @@ void EnPametfrog_Update(Actor* thisx, PlayState* play) { } } -/* value -1: Limb Not used - * value 0: GEKKO_LIMB_WAIST - * value 1: GEKKO_LIMB_LEFT_SHIN - * value 2: GEKKO_LIMB_LEFT_FOOT - * value 3: GEKKO_LIMB_RIGHT_SHIN - * value 4: GEKKO_LIMB_RIGHT_FOOT - * value 5: GEKKO_LIMB_LEFT_UPPER_ARM - * value 6: GEKKO_LIMB_LEFT_FOREARM - * value 7: GEKKO_LIMB_LEFT_HAND - * value 8: GEKKO_LIMB_RIGHT_UPPER_ARM - * value 9: GEKKO_LIMB_RIGHT_FOREARM - * value 10: GEKKO_LIMB_RIGHT_HAND - * value 11: GEKKO_LIMB_JAW - */ -static s8 limbPosIndex[] = { - -1, -1, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1, 5, 6, -1, 7, 8, 9, -1, 10, -1, 11, -1, -1, +static s8 sLimbToBodyParts[GEKKO_LIMB_MAX] = { + BODYPART_NONE, // GEKKO_LIMB_NONE + BODYPART_NONE, // GEKKO_LIMB_ROOT + GEKKO_BODYPART_WAIST, // GEKKO_LIMB_WAIST + BODYPART_NONE, // GEKKO_LIMB_LEFT_THIGH + GEKKO_BODYPART_LEFT_SHIN, // GEKKO_LIMB_LEFT_SHIN + BODYPART_NONE, // GEKKO_LIMB_LEFT_ANKLE + GEKKO_BODYPART_LEFT_FOOT, // GEKKO_LIMB_LEFT_FOOT + BODYPART_NONE, // GEKKO_LIMB_RIGHT_THIGH + GEKKO_BODYPART_RIGHT_SHIN, // GEKKO_LIMB_RIGHT_SHIN + BODYPART_NONE, // GEKKO_LIMB_RIGHT_ANKLE + GEKKO_BODYPART_RIGHT_FOOT, // GEKKO_LIMB_RIGHT_FOOT + BODYPART_NONE, // GEKKO_LIMB_TORSO + GEKKO_BODYPART_LEFT_UPPER_ARM, // GEKKO_LIMB_LEFT_UPPER_ARM + GEKKO_BODYPART_LEFT_FOREARM, // GEKKO_LIMB_LEFT_FOREARM + BODYPART_NONE, // GEKKO_LIMB_LEFT_WRIST + GEKKO_BODYPART_LEFT_HAND, // GEKKO_LIMB_LEFT_HAND + GEKKO_BODYPART_RIGHT_UPPER_ARM, // GEKKO_LIMB_RIGHT_UPPER_ARM + GEKKO_BODYPART_RIGHT_FOREARM, // GEKKO_LIMB_RIGHT_FOREARM + BODYPART_NONE, // GEKKO_LIMB_RIGHT_WRIST + GEKKO_BODYPART_RIGHT_HAND, // GEKKO_LIMB_RIGHT_HAND + BODYPART_NONE, // GEKKO_LIMB_HEAD + GEKKO_BODYPART_JAW, // GEKKO_LIMB_JAW + BODYPART_NONE, // GEKKO_LIMB_LEFT_EYE + BODYPART_NONE, // GEKKO_LIMB_RIGHT_EYE }; void EnPametfrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnPametfrog* this = THIS; Vec3f vec; Vec3s* center; - s8 index; + s8 bodyPartIndex; if (limbIndex == GEKKO_LIMB_HEAD) { Matrix_MultZero(&this->actor.focus.pos); @@ -1417,9 +1426,9 @@ void EnPametfrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s center->z = (Math_CosS(this->actor.shape.rot.y) * 35.0f) + this->actor.focus.pos.z; } - index = limbPosIndex[limbIndex]; - if (index != -1) { - Matrix_MultZero(&this->limbPos[index]); + bodyPartIndex = sLimbToBodyParts[limbIndex]; + if (bodyPartIndex != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); } } @@ -1430,6 +1439,6 @@ void EnPametfrog_Draw(Actor* thisx, PlayState* play) { Matrix_RotateYS(this->spinYaw, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnPametfrog_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, GEKKO_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h index 31a3be14b..ac0a0b3f5 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h @@ -21,6 +21,23 @@ typedef enum { /* 9 */ GEKKO_DEFEAT } EnPametfrogState; +typedef enum GekkoBodyPart { + /* -1 */ GEKKO_BODYPART_NONE = -1, + /* 0 */ GEKKO_BODYPART_WAIST, + /* 1 */ GEKKO_BODYPART_LEFT_SHIN, + /* 2 */ GEKKO_BODYPART_LEFT_FOOT, + /* 3 */ GEKKO_BODYPART_RIGHT_SHIN, + /* 4 */ GEKKO_BODYPART_RIGHT_FOOT, + /* 5 */ GEKKO_BODYPART_LEFT_UPPER_ARM, + /* 6 */ GEKKO_BODYPART_LEFT_FOREARM, + /* 7 */ GEKKO_BODYPART_LEFT_HAND, + /* 8 */ GEKKO_BODYPART_RIGHT_UPPER_ARM, + /* 9 */ GEKKO_BODYPART_RIGHT_FOREARM, + /* 10 */ GEKKO_BODYPART_RIGHT_HAND, + /* 11 */ GEKKO_BODYPART_JAW, + /* 12 */ GEKKO_BODYPART_MAX +} GekkoBodyPart; + typedef struct EnPametfrog { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -44,7 +61,7 @@ typedef struct EnPametfrog { /* 0x2D0 */ Vec3f unk_2D0; // MtxF xz/yz/zz /* 0x2DC */ Vec3f unk_2DC; // MtxF xy/yy/zy: wallNorm/floorNorm/Base of Gekko walking??? /* 0x2E8 */ Vec3f unk_2E8; // MtxF xx/yx/zx - /* 0x2F4 */ Vec3f limbPos[12]; + /* 0x2F4 */ Vec3f bodyPartsPos[GEKKO_BODYPART_MAX]; /* 0x384 */ ColliderJntSph collider; /* 0x3A4 */ ColliderJntSphElement colElement[2]; } EnPametfrog; // size = 0x424 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 0c8944602..94936a7b1 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -243,7 +243,7 @@ void func_808971DC(EnPeehat* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->colliderSphere.base.colType = COLTYPE_HIT6; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, PEEHAT_BODYPART_MAX, 2, 0.5f, 0.35f); } } @@ -866,25 +866,50 @@ s32 EnPeehat_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f return false; } +static Vec3f D_80899570[] = { + { 1300.0f, 1200.0f, 0.0f }, // PEEHAT_BODYPART_12 + { 1300.0f, -1200.0f, 0.0f }, // PEEHAT_BODYPART_13 + { 1300.0f, 0.0f, 1200.0f }, // PEEHAT_BODYPART_14 + { 1300.0f, 0.0f, -1200.0f }, // PEEHAT_BODYPART_15 +}; + +static s8 sLimbToBodyParts[OBJECT_PH_LIMB_MAX] = { + BODYPART_NONE, // OBJECT_PH_LIMB_NONE + BODYPART_NONE, // OBJECT_PH_LIMB_01 + BODYPART_NONE, // OBJECT_PH_LIMB_02 + BODYPART_NONE, // OBJECT_PH_LIMB_03 + BODYPART_NONE, // OBJECT_PH_LIMB_04 + BODYPART_NONE, // OBJECT_PH_LIMB_05 + BODYPART_NONE, // OBJECT_PH_LIMB_06 + PEEHAT_BODYPART_0, // OBJECT_PH_LIMB_07 + BODYPART_NONE, // OBJECT_PH_LIMB_08 + BODYPART_NONE, // OBJECT_PH_LIMB_09 + PEEHAT_BODYPART_2, // OBJECT_PH_LIMB_0A + BODYPART_NONE, // OBJECT_PH_LIMB_0B + BODYPART_NONE, // OBJECT_PH_LIMB_0C + PEEHAT_BODYPART_4, // OBJECT_PH_LIMB_0D + BODYPART_NONE, // OBJECT_PH_LIMB_0E + BODYPART_NONE, // OBJECT_PH_LIMB_0F + PEEHAT_BODYPART_6, // OBJECT_PH_LIMB_10 + BODYPART_NONE, // OBJECT_PH_LIMB_11 + BODYPART_NONE, // OBJECT_PH_LIMB_12 + PEEHAT_BODYPART_8, // OBJECT_PH_LIMB_13 + BODYPART_NONE, // OBJECT_PH_LIMB_14 + BODYPART_NONE, // OBJECT_PH_LIMB_15 + PEEHAT_BODYPART_10, // OBJECT_PH_LIMB_16 + BODYPART_NONE, // OBJECT_PH_LIMB_17 +}; + void EnPeehat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static Vec3f D_80899570[] = { - { 1300.0f, 1200.0f, 0.0f }, - { 1300.0f, -1200.0f, 0.0f }, - { 1300.0f, 0.0f, 1200.0f }, - { 1300.0f, 0.0f, -1200.0f }, - }; - static s8 D_808995A0[] = { - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 2, -1, -1, 4, -1, -1, 6, -1, -1, 8, -1, -1, 10, -1, - }; PlayState* play = play2; EnPeehat* this = THIS; s32 i; - s32 index = D_808995A0[limbIndex]; + s32 bodyPartIndex = sLimbToBodyParts[limbIndex]; Gfx* gfx; - if (index != -1) { - Matrix_MultVecX(2000.0f, &this->limbPos[index]); - Matrix_MultVecX(4000.0f, &this->limbPos[index + 1]); + if (bodyPartIndex != BODYPART_NONE) { + Matrix_MultVecX(2000.0f, &this->bodyPartsPos[bodyPartIndex]); + Matrix_MultVecX(4000.0f, &this->bodyPartsPos[bodyPartIndex + 1]); } if (limbIndex == 4) { @@ -892,14 +917,14 @@ void EnPeehat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVecZ(-5500.0f, &this->unk_2D4[1]); } else if ((limbIndex == 3) && (thisx->params == 0)) { Vec3f* vec = &D_80899570[0]; - Vec3f* vec2 = &this->limbPos[12]; + Vec3f* bodyPartPosPtr = &this->bodyPartsPos[PEEHAT_BODYPART_12]; - for (i = 0; i < ARRAY_COUNT(D_80899570); i++, vec++, vec2++) { - Matrix_MultVec3f(vec, vec2); + for (i = 0; i < ARRAY_COUNT(D_80899570); i++, vec++, bodyPartPosPtr++) { + Matrix_MultVec3f(vec, bodyPartPosPtr); } - Matrix_MultVecX(3000.0f, vec2++); - Matrix_MultVecX(-400.0f, vec2); + Matrix_MultVecX(3000.0f, bodyPartPosPtr++); // PEEHAT_BODYPART_16 + Matrix_MultVecX(-400.0f, bodyPartPosPtr); // PEEHAT_BODYPART_17 OPEN_DISPS(play->state.gfxCtx); @@ -943,11 +968,11 @@ void EnPeehat_Draw(Actor* thisx, PlayState* play) { } if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) { - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) { - this->limbPos[i].y -= 50.0f; + for (i = 0; i < PEEHAT_BODYPART_MAX; i++) { + this->bodyPartsPos[i].y -= 50.0f; } } - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, PEEHAT_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h index 248599c63..c5ff88b65 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h @@ -7,6 +7,28 @@ struct EnPeehat; typedef void (*EnPeehatActionFunc)(struct EnPeehat*, PlayState*); +typedef enum PeehatBodyPart { + /* 0 */ PEEHAT_BODYPART_0, + /* 1 */ PEEHAT_BODYPART_1, + /* 2 */ PEEHAT_BODYPART_2, + /* 3 */ PEEHAT_BODYPART_3, + /* 4 */ PEEHAT_BODYPART_4, + /* 5 */ PEEHAT_BODYPART_5, + /* 6 */ PEEHAT_BODYPART_6, + /* 7 */ PEEHAT_BODYPART_7, + /* 8 */ PEEHAT_BODYPART_8, + /* 9 */ PEEHAT_BODYPART_9, + /* 10 */ PEEHAT_BODYPART_10, + /* 11 */ PEEHAT_BODYPART_11, + /* 12 */ PEEHAT_BODYPART_12, + /* 13 */ PEEHAT_BODYPART_13, + /* 14 */ PEEHAT_BODYPART_14, + /* 15 */ PEEHAT_BODYPART_15, + /* 16 */ PEEHAT_BODYPART_16, + /* 17 */ PEEHAT_BODYPART_17, + /* 18 */ PEEHAT_BODYPART_MAX +} PeehatBodyPart; + typedef struct EnPeehat { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -28,7 +50,7 @@ typedef struct EnPeehat { /* 0x2CC */ f32 drawDmgEffScale; /* 0x2D0 */ f32 drawDmgEffFrozenSteamScale; /* 0x2D4 */ Vec3f unk_2D4[2]; - /* 0x2EC */ Vec3f limbPos[18]; + /* 0x2EC */ Vec3f bodyPartsPos[PEEHAT_BODYPART_MAX]; /* 0x3C4 */ ColliderCylinder colliderCylinder; /* 0x410 */ ColliderSphere colliderSphere; /* 0x468 */ ColliderTris colliderTris; 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 b6b7c8866..715021ebe 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1076,7 +1076,7 @@ void func_80AF898C(EnPm* this) { this->unk_372 = CLAMP(this->unk_372, -0x1FFE, 0x1FFE); Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_268->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_268)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_268)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_268->focus.pos); } 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 f4e938d44..3ba0cad85 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 @@ -1122,37 +1122,37 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve return false; } -#define POE_SISTERS_LIMBPOS_INVALID -1 +static Vec3f D_80B1DAFC = { 1000.0f, -1700.0f, 0.0f }; + +static s8 sLimbToBodyParts[POE_SISTERS_LIMB_MAX] = { + BODYPART_NONE, // POE_SISTERS_LIMB_NONE + BODYPART_NONE, // POE_SISTERS_LIMB_ROOT + POE_SISTERS_BODYPART_LEFT_ARM, // POE_SISTERS_LIMB_LEFT_ARM + POE_SISTERS_BODYPART_LEFT_HAND, // POE_SISTERS_LIMB_LEFT_HAND + POE_SISTERS_BODYPART_RIGHT_UPPER_ARM, // POE_SISTERS_LIMB_RIGHT_UPPER_ARM + BODYPART_NONE, // POE_SISTERS_LIMB_RIGHT_FOREARM + POE_SISTERS_BODYPART_TORCH_ROOT, // POE_SISTERS_LIMB_TORCH_ROOT + BODYPART_NONE, // POE_SISTERS_LIMB_RIGHT_HAND + BODYPART_NONE, // POE_SISTERS_LIMB_TORCH + BODYPART_NONE, // POE_SISTERS_LIMB_MAIN_BODY + BODYPART_NONE, // POE_SISTERS_LIMB_FACE + BODYPART_NONE, // POE_SISTERS_LIMB_LOWER_BODY +}; void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { - static Vec3f D_80B1DAFC = { 1000.0f, -1700.0f, 0.0f }; - static s8 D_80B1DB08[] = { - POE_SISTERS_LIMBPOS_INVALID, - POE_SISTERS_LIMBPOS_INVALID, - 0, - 1, - 2, - POE_SISTERS_LIMBPOS_INVALID, - 3, - POE_SISTERS_LIMBPOS_INVALID, - POE_SISTERS_LIMBPOS_INVALID, - POE_SISTERS_LIMBPOS_INVALID, - POE_SISTERS_LIMBPOS_INVALID, - POE_SISTERS_LIMBPOS_INVALID, - }; EnPoSisters* this = THIS; s32 end; f32 brightness; - if (D_80B1DB08[limbIndex] != POE_SISTERS_LIMBPOS_INVALID) { - Matrix_MultZero(&this->limbPos[D_80B1DB08[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } else if (limbIndex == POE_SISTERS_LIMB_MAIN_BODY) { - Matrix_MultVecY(-2500.0f, &this->limbPos[4]); - Matrix_MultVecY(3000.0f, &this->limbPos[5]); + Matrix_MultVecY(-2500.0f, &this->bodyPartsPos[POE_SISTERS_BODYPART_MAIN_BODY_0]); + Matrix_MultVecY(3000.0f, &this->bodyPartsPos[POE_SISTERS_BODYPART_MAIN_BODY_1]); } else if (limbIndex == POE_SISTERS_LIMB_FACE) { - Matrix_MultVecY(-4000.0f, &this->limbPos[6]); + Matrix_MultVecY(-4000.0f, &this->bodyPartsPos[POE_SISTERS_BODYPART_FACE]); } else if (limbIndex == POE_SISTERS_LIMB_LOWER_BODY) { - Matrix_MultVecX(3000.0f, &this->limbPos[7]); + Matrix_MultVecX(3000.0f, &this->bodyPartsPos[POE_SISTERS_BODYPART_LOWER_BODY]); } if ((this->actionFunc == EnPoSisters_DeathStage1) && (this->deathTimer >= 8) && @@ -1265,7 +1265,7 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL); } - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, POE_SISTERS_BODYPART_MAX, this->actor.scale.x * (1.0f / 0.007f) * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h index f800788c7..510a67f36 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h @@ -19,14 +19,26 @@ typedef enum { /* 1 */ POE_SISTERS_TYPE_JO, // red /* 2 */ POE_SISTERS_TYPE_BETH, // blue /* 3 */ POE_SISTERS_TYPE_AMY // green -} EnPoSisterType; +} PoeSisterType; typedef enum { /* 0 */ POE_SISTERS_MEG_REAL, /* 1 */ POE_SISTERS_MEG_CLONE1, /* 2 */ POE_SISTERS_MEG_CLONE2, /* 3 */ POE_SISTERS_MEG_CLONE3 -} EnPoSisterMegCloneID; +} PoeSisterMegCloneId; + +typedef enum PoeSisterBodyPart { + /* 0 */ POE_SISTERS_BODYPART_LEFT_ARM, + /* 1 */ POE_SISTERS_BODYPART_LEFT_HAND, + /* 2 */ POE_SISTERS_BODYPART_RIGHT_UPPER_ARM, + /* 3 */ POE_SISTERS_BODYPART_TORCH_ROOT, + /* 4 */ POE_SISTERS_BODYPART_MAIN_BODY_0, + /* 5 */ POE_SISTERS_BODYPART_MAIN_BODY_1, + /* 6 */ POE_SISTERS_BODYPART_FACE, + /* 7 */ POE_SISTERS_BODYPART_LOWER_BODY, + /* 8 */ POE_SISTERS_BODYPART_MAX +} PoeSisterBodyPart; typedef struct EnPoSisters { /* 0x000 */ Actor actor; @@ -58,7 +70,7 @@ typedef struct EnPoSisters { /* 0x1DE */ Vec3s morphTable[POE_SISTERS_LIMB_MAX]; /* 0x226 */ Color_RGBA8 color; /* 0x22C */ Vec3f firePos[8]; - /* 0x28C */ Vec3f limbPos[8]; // passed to Actor_DrawDamageEffects + /* 0x28C */ Vec3f bodyPartsPos[POE_SISTERS_BODYPART_MAX]; /* 0x2EC */ f32 megDistToPlayer; /* 0x2F0 */ f32 drawDmgEffAlpha; /* 0x2F4 */ f32 drawDmgEffScale; 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 5571fae2a..c79e6910e 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -864,16 +864,38 @@ s32 EnPoh_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p return false; } +static s8 sLimbToBodyParts[OBJECT_PO_LIMB_MAX] = { + BODYPART_NONE, // OBJECT_PO_LIMB_NONE + BODYPART_NONE, // OBJECT_PO_LIMB_01 + BODYPART_NONE, // OBJECT_PO_LIMB_02 + BODYPART_NONE, // OBJECT_PO_LIMB_03 + ENPOH_BODYPART_4, // OBJECT_PO_LIMB_04 + ENPOH_BODYPART_5, // OBJECT_PO_LIMB_05 + BODYPART_NONE, // OBJECT_PO_LIMB_06 + BODYPART_NONE, // OBJECT_PO_LIMB_07 + BODYPART_NONE, // OBJECT_PO_LIMB_08 + ENPOH_BODYPART_0, // OBJECT_PO_LIMB_09 + ENPOH_BODYPART_1, // OBJECT_PO_LIMB_0A + BODYPART_NONE, // OBJECT_PO_LIMB_0B + BODYPART_NONE, // OBJECT_PO_LIMB_0C + BODYPART_NONE, // OBJECT_PO_LIMB_0D + BODYPART_NONE, // OBJECT_PO_LIMB_0E + BODYPART_NONE, // OBJECT_PO_LIMB_0F + ENPOH_BODYPART_2, // OBJECT_PO_LIMB_10 + BODYPART_NONE, // OBJECT_PO_LIMB_11 + BODYPART_NONE, // OBJECT_PO_LIMB_12 + ENPOH_BODYPART_3, // OBJECT_PO_LIMB_13 + BODYPART_NONE, // OBJECT_PO_LIMB_14 +}; + +static Vec3f D_80B2F734[] = { + { -600.0f, 500.0f, 1700.0f }, // ENPOH_BODYPART_7 + { -600.0f, 500.0f, -1700.0f }, // ENPOH_BODYPART_8 + { 1000.0f, 1700.0f, 0.0f }, // ENPOH_BODYPART_9 +}; + void EnPoh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { - static s8 D_80B2F71C[] = { - -1, -1, -1, -1, 4, 5, -1, -1, -1, 0, 1, -1, -1, -1, -1, -1, 2, -1, -1, 3, -1, - }; - static Vec3f D_80B2F734[] = { - { -600.0f, 500.0f, 1700.0f }, - { -600.0f, 500.0f, -1700.0f }, - { 1000.0f, 1700.0f, 0.0f }, - }; - s32 temp_s3; + s32 bodyPartIndex; Vec3f sp60; EnPoh* this = THIS; s32 pad; @@ -897,21 +919,21 @@ void EnPoh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->unk_199, this->unk_19A, this->unk_19B * (200.0f / 255.0f)); } - temp_s3 = D_80B2F71C[limbIndex]; - if (temp_s3 != -1) { - if (temp_s3 < 4) { - Matrix_MultZero(&this->limbPos[temp_s3]); - } else if (temp_s3 == 4) { - Matrix_MultVecX(2000.0f, &this->limbPos[temp_s3]); + bodyPartIndex = sLimbToBodyParts[limbIndex]; + if (bodyPartIndex != BODYPART_NONE) { + if (bodyPartIndex <= ENPOH_BODYPART_3) { + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); + } else if (bodyPartIndex == ENPOH_BODYPART_4) { + Matrix_MultVecX(2000.0f, &this->bodyPartsPos[bodyPartIndex]); } else { s32 i; - Vec3f* vec = &this->limbPos[temp_s3 + 2]; + Vec3f* vec = &this->bodyPartsPos[bodyPartIndex + 2]; Vec3f* vec2 = &D_80B2F734[0]; - Matrix_MultVecX(-2000.0f, &this->limbPos[temp_s3]); - Matrix_MultVecY(-2000.0f, &this->limbPos[temp_s3 + 1]); + Matrix_MultVecX(-2000.0f, &this->bodyPartsPos[bodyPartIndex]); // ENPOH_BODYPART_5 + Matrix_MultVecY(-2000.0f, &this->bodyPartsPos[bodyPartIndex + 1]); // ENPOH_BODYPART_6 - for (i = temp_s3 + 2; i < ARRAY_COUNT(this->limbPos); i++, vec++, vec2++) { + for (i = bodyPartIndex + 2; i < ENPOH_BODYPART_MAX; i++, vec++, vec2++) { Matrix_MultVec3f(vec2, vec); } } @@ -959,7 +981,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(&gfx[3], object_po_DL_002D28); POLY_OPA_DISP = &gfx[4]; - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENPOH_BODYPART_MAX, this->actor.scale.x * 100.0f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.h b/src/overlays/actors/ovl_En_Poh/z_en_poh.h index b07be6195..5f7439e4a 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.h +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.h @@ -7,6 +7,20 @@ struct EnPoh; typedef void (*EnPohActionFunc)(struct EnPoh*, PlayState*); +typedef enum EnPohBodyPart { + /* 0 */ ENPOH_BODYPART_0, + /* 1 */ ENPOH_BODYPART_1, + /* 2 */ ENPOH_BODYPART_2, + /* 3 */ ENPOH_BODYPART_3, + /* 4 */ ENPOH_BODYPART_4, + /* 5 */ ENPOH_BODYPART_5, + /* 6 */ ENPOH_BODYPART_6, + /* 7 */ ENPOH_BODYPART_7, + /* 8 */ ENPOH_BODYPART_8, + /* 9 */ ENPOH_BODYPART_9, + /* 10 */ ENPOH_BODYPART_MAX +} EnPohBodyPart; + typedef struct EnPoh { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -28,7 +42,7 @@ typedef struct EnPoh { /* 0x21A */ Vec3s morphTable[21]; /* 0x298 */ f32 drawDmgEffAlpha; /* 0x29C */ f32 drawDmgEffScale; - /* 0x2A0 */ Vec3f limbPos[10]; + /* 0x2A0 */ Vec3f bodyPartsPos[ENPOH_BODYPART_MAX]; /* 0x318 */ LightNode* lightNode; /* 0x31C */ LightInfo lightInfo; /* 0x32C */ ColliderCylinder colliderCylinder; 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 6dc36e9eb..48de2c4a8 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -869,8 +869,7 @@ void EnPp_StunnedOrFrozen(EnPp* this, PlayState* play) { if ((this->secondaryTimer == 0) && (this->drawDmgEffTimer == 0)) { if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, - 0.4f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_PP_BODYPART_MAX, 2, 0.7f, 0.4f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -906,7 +905,7 @@ void EnPp_SetupDamaged(EnPp* this, PlayState* play) { if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && (this->drawDmgEffTimer != 0)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, 0.4f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_PP_BODYPART_MAX, 2, 0.7f, 0.4f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -1026,7 +1025,7 @@ void EnPp_Dead(EnPp* this, PlayState* play) { return; } - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, 0.4f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_PP_BODYPART_MAX, 2, 0.7f, 0.4f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } @@ -1189,16 +1188,16 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { - this->deadBodyPartDrawDmgEffCount = 10; - for (i = 0; i < ARRAY_COUNT(this->deadBodyPartDrawDmgEffPos); i++) { - Math_Vec3f_Copy(&this->deadBodyPartDrawDmgEffPos[i], &this->deadBodyPartPos); - this->deadBodyPartDrawDmgEffPos[i].x += Math_SinS(0xCCC * i) * 15.0f; - this->deadBodyPartDrawDmgEffPos[i].y += -5.0f; - this->deadBodyPartDrawDmgEffPos[i].z += Math_CosS(0xCCC * i) * 15.0f; + this->deadBodyPartCount = EN_PP_DEAD_BODYPART_MAX; + for (i = 0; i < EN_PP_DEAD_BODYPART_MAX; i++) { + Math_Vec3f_Copy(&this->deadBodyPartsPos[i], &this->deadBodyPartPos); + this->deadBodyPartsPos[i].x += Math_SinS(0xCCC * i) * 15.0f; + this->deadBodyPartsPos[i].y += -5.0f; + this->deadBodyPartsPos[i].z += Math_CosS(0xCCC * i) * 15.0f; } } else { - Math_Vec3f_Copy(&this->deadBodyPartDrawDmgEffPos[0], &this->deadBodyPartPos); - this->deadBodyPartDrawDmgEffCount = 1; + Math_Vec3f_Copy(&this->deadBodyPartsPos[0], &this->deadBodyPartPos); + this->deadBodyPartCount = 1; this->actor.shape.rot.x += this->deadBodyPartRotationalVelocity.x; this->actor.shape.rot.z += this->deadBodyPartRotationalVelocity.z; } @@ -1541,10 +1540,10 @@ void EnPp_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, (limbIndex == HIPLOOP_LIMB_CENTER_WING_BASE) || (limbIndex == HIPLOOP_LIMB_CENTER_WING_MIDDLE) || (limbIndex == HIPLOOP_LIMB_BACK_LEFT_LOWER_LEG) || (limbIndex == HIPLOOP_LIMB_RIGHT_EYE) || (limbIndex == HIPLOOP_LIMB_LEFT_EYE)) { - Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); - this->bodyPartsPosIndex++; - if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { - this->bodyPartsPosIndex = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= EN_PP_BODYPART_MAX) { + this->bodyPartIndex = 0; } if ((this->action == EN_PP_ACTION_SPAWN_BODY_PARTS) && (this->deadBodyPartsSpawnedCount < 6) && @@ -1575,14 +1574,14 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor); - if (this->deadBodyPartDrawDmgEffCount != 0) { + if (this->deadBodyPartCount != 0) { scale = 0.4f; if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { scale = 0.6f; } - Actor_DrawDamageEffects(play, &this->actor, this->deadBodyPartDrawDmgEffPos, this->deadBodyPartDrawDmgEffCount, - scale, scale, 1.0f, ACTOR_DRAW_DMGEFF_BLUE_FIRE); + Actor_DrawDamageEffects(play, &this->actor, this->deadBodyPartsPos, this->deadBodyPartCount, scale, scale, 1.0f, + ACTOR_DRAW_DMGEFF_BLUE_FIRE); } if (this->drawDmgEffTimer != 0) { @@ -1600,8 +1599,8 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { this->drawDmgEffFrozenSteamScale = 0.8f; } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, alpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_PP_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, alpha, this->drawDmgEffType); } if (this->floorPolyForCircleShadow != NULL) { diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.h b/src/overlays/actors/ovl_En_Pp/z_en_pp.h index 2409487be..2f3c0e7b1 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h @@ -25,6 +25,35 @@ typedef enum { /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26 } EnPpType; +typedef enum EnPpBodyPart { + /* 0 */ EN_PP_BODYPART_0, + /* 1 */ EN_PP_BODYPART_1, + /* 2 */ EN_PP_BODYPART_2, + /* 3 */ EN_PP_BODYPART_3, + /* 4 */ EN_PP_BODYPART_4, + /* 5 */ EN_PP_BODYPART_5, + /* 6 */ EN_PP_BODYPART_6, + /* 7 */ EN_PP_BODYPART_7, + /* 8 */ EN_PP_BODYPART_8, + /* 9 */ EN_PP_BODYPART_9, + /* 10 */ EN_PP_BODYPART_10, + /* 11 */ EN_PP_BODYPART_MAX +} EnPpBodyPart; + +typedef enum EnPpDeadBodyPart { + /* 0 */ EN_PP_DEAD_BODYPART_0, + /* 1 */ EN_PP_DEAD_BODYPART_1, + /* 2 */ EN_PP_DEAD_BODYPART_2, + /* 3 */ EN_PP_DEAD_BODYPART_3, + /* 4 */ EN_PP_DEAD_BODYPART_4, + /* 5 */ EN_PP_DEAD_BODYPART_5, + /* 6 */ EN_PP_DEAD_BODYPART_6, + /* 7 */ EN_PP_DEAD_BODYPART_7, + /* 8 */ EN_PP_DEAD_BODYPART_8, + /* 9 */ EN_PP_DEAD_BODYPART_9, + /* 10 */ EN_PP_DEAD_BODYPART_MAX +} EnPpDeadBodyPart; + typedef struct EnPp { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -57,8 +86,8 @@ typedef struct EnPp { /* 0x34C */ Vec3f maskVelocity; /* 0x358 */ Vec3f targetPos; /* 0x364 */ Vec3f deadBodyPartPos; - /* 0x370 */ s32 deadBodyPartDrawDmgEffCount; - /* 0x374 */ Vec3f deadBodyPartDrawDmgEffPos[10]; + /* 0x370 */ s32 deadBodyPartCount; + /* 0x374 */ Vec3f deadBodyPartsPos[EN_PP_DEAD_BODYPART_MAX]; /* 0x3EC */ Vec3s deadBodyPartRotationalVelocity; /* 0x3F2 */ s16 drawDmgEffTimer; /* 0x3F4 */ s16 drawDmgEffType; @@ -66,8 +95,8 @@ typedef struct EnPp { /* 0x3FC */ f32 drawDmgEffFrozenSteamScale; /* 0x400 */ f32 attackRange; /* 0x404 */ s32 hasBeenDamaged; - /* 0x408 */ Vec3f bodyPartsPos[11]; - /* 0x48C */ s16 bodyPartsPosIndex; + /* 0x408 */ Vec3f bodyPartsPos[EN_PP_BODYPART_MAX]; + /* 0x48C */ s16 bodyPartIndex; /* 0x490 */ f32 maskAccelY; /* 0x494 */ ColliderJntSph maskCollider; /* 0x4B4 */ ColliderJntSphElement maskColliderElements[1]; 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 1869dd9cf..67ad65198 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -589,10 +589,10 @@ void EnPr_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if ((limbIndex == 0) || (limbIndex == 1) || (limbIndex == 2) || (limbIndex == 3) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || (limbIndex == 8) || (limbIndex == 9)) { - Matrix_MultZero(&this->limbPos[this->unk_228]); - this->unk_228++; - if (this->unk_228 >= ARRAY_COUNT(this->limbPos)) { - this->unk_228 = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; + if (this->bodyPartsCount >= ENPR_BODYPART_MAX) { + this->bodyPartsCount = 0; } } } @@ -627,8 +627,8 @@ void EnPr_Draw(Actor* thisx, PlayState* play) { this->unk_238 = 0.8f; this->unk_234 = 0.8f; - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0.8f, 0.8f, - drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENPR_BODYPART_MAX, 0.8f, 0.8f, drawDmgEffAlpha, + this->drawDmgEffType); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.h b/src/overlays/actors/ovl_En_Pr/z_en_pr.h index dfa3081ca..58d1e8be2 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.h +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.h @@ -12,6 +12,20 @@ typedef void (*EnPrActionFunc)(struct EnPr*, PlayState*); #define ENPR_FF00_MAX 20 #define ENPR_FF00_MIN 0 +typedef enum EnPrBodyPart { + /* 0 */ ENPR_BODYPART_0, + /* 1 */ ENPR_BODYPART_1, + /* 2 */ ENPR_BODYPART_2, + /* 3 */ ENPR_BODYPART_3, + /* 4 */ ENPR_BODYPART_4, + /* 5 */ ENPR_BODYPART_5, + /* 6 */ ENPR_BODYPART_6, + /* 7 */ ENPR_BODYPART_7, + /* 8 */ ENPR_BODYPART_8, + /* 9 */ ENPR_BODYPART_9, + /* 10 */ ENPR_BODYPART_MAX +} EnPrBodyPart; + typedef struct EnPr { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -31,13 +45,13 @@ typedef struct EnPr { /* 0x218 */ UNK_TYPE1 unk218[4]; /* 0x21C */ s32 unk_21C; /* 0x220 */ UNK_TYPE1 unk220[0x8]; - /* 0x228 */ s32 unk_228; + /* 0x228 */ s32 bodyPartsCount; /* 0x22C */ s16 unk_22C; /* 0x22E */ s16 drawDmgEffAlpha; /* 0x230 */ s16 drawDmgEffType; /* 0x234 */ f32 unk_234; /* 0x238 */ f32 unk_238; - /* 0x23C */ Vec3f limbPos[10]; + /* 0x23C */ Vec3f bodyPartsPos[ENPR_BODYPART_MAX]; /* 0x2B4 */ f32 unk_2B4; /* 0x2B8 */ f32 unk_2B8; /* 0x2BC */ f32 unk_2BC; 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 b2ada549f..a8e7d52d4 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 @@ -878,25 +878,25 @@ void func_80B726B4(EnRailSkb* this, PlayState* play) { static Vec3f D_80B734B8 = { 0.0f, -1.0f, 0.0f }; Vec3f sp84; s32 i; - s32 end; + s32 bodyPartsCount; s16 yaw; if (this->unk_402 & 2) { - end = ARRAY_COUNT(this->limbPos) - 1; + bodyPartsCount = ENRAILSKB_BODYPART_MAX - 1; } else { - end = ARRAY_COUNT(this->limbPos); + bodyPartsCount = ENRAILSKB_BODYPART_MAX; } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN); - for (i = 0; i < end; i++) { - yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]); + for (i = 0; i < bodyPartsCount; i++) { + yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bodyPartsPos[i]); sp84.x = Math_SinS(yaw) * 3.0f; sp84.z = Math_CosS(yaw) * 3.0f; sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f; - EffectSsEnIce_Spawn(play, &this->limbPos[i], 0.6f, &sp84, &D_80B734B8, &D_80B734B0, &D_80B734B4, 30); + EffectSsEnIce_Spawn(play, &this->bodyPartsPos[i], 0.6f, &sp84, &D_80B734B8, &D_80B734B0, &D_80B734B4, 30); } } @@ -1129,11 +1129,11 @@ void EnRailSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) || (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) { - Matrix_MultZero(&this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } else if ((limbIndex == 11) && !(this->unk_402 & 2)) { - Matrix_MultVec3f(&D_80B734D0, &this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultVec3f(&D_80B734D0, &this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } } } @@ -1142,13 +1142,13 @@ void EnRailSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnRailSkb_Draw(Actor* thisx, PlayState* play) { EnRailSkb* this = THIS; - this->limbCount = 0; + this->bodyPartsCount = 0; Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnRailSkb_OverrideLimbDraw, EnRailSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f, - this->drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, this->bodyPartsCount, this->drawDmgEffScale, + 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); } if ((this->unk_402 & 0x40) && !(this->unk_402 & 0x80)) { diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h index 10c2653c4..593279931 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h @@ -12,6 +12,24 @@ typedef void (*EnRailSkbUnkFunc)(struct EnRailSkb*); #define ENRAILSKB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) #define ENRAILSKB_GET_FF(thisx) ((thisx)->params & 0xFF) +typedef enum EnRailSkbBodyPart { + /* 0 */ ENRAILSKB_BODYPART_0, + /* 1 */ ENRAILSKB_BODYPART_1, + /* 2 */ ENRAILSKB_BODYPART_2, + /* 3 */ ENRAILSKB_BODYPART_3, + /* 4 */ ENRAILSKB_BODYPART_4, + /* 5 */ ENRAILSKB_BODYPART_5, + /* 6 */ ENRAILSKB_BODYPART_6, + /* 7 */ ENRAILSKB_BODYPART_7, + /* 8 */ ENRAILSKB_BODYPART_8, + /* 9 */ ENRAILSKB_BODYPART_9, + /* 10 */ ENRAILSKB_BODYPART_10, + /* 11 */ ENRAILSKB_BODYPART_11, + /* 12 */ ENRAILSKB_BODYPART_12, + /* 13 */ ENRAILSKB_BODYPART_13, + /* 14 */ ENRAILSKB_BODYPART_MAX +} EnRailSkbBodyPart; + typedef struct EnRailSkb { /* 0x000 */ Actor actor; /* 0x144 */ ColliderJntSph collider; @@ -20,8 +38,8 @@ typedef struct EnRailSkb { /* 0x228 */ EnRailSkbActionFunc actionFunc; /* 0x22C */ ObjHakaisi* unk_22C; /* 0x230 */ Vec3s* unk_230; - /* 0x234 */ Vec3f limbPos[14]; - /* 0x2DC */ s32 limbCount; + /* 0x234 */ Vec3f bodyPartsPos[ENRAILSKB_BODYPART_MAX]; + /* 0x2DC */ s32 bodyPartsCount; /* 0x2E0 */ s32 unk_2E0; /* 0x2E4 */ s32 unk_2E4; /* 0x2E8 */ s32 unk_2E8; 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 30dd6ced2..7eef8759b 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1061,8 +1061,8 @@ void EnRailgibud_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s (limbIndex == GIBDO_LIMB_LEFT_FOREARM) || (limbIndex == GIBDO_LIMB_LEFT_HAND) || (limbIndex == GIBDO_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM) || (limbIndex == GIBDO_LIMB_RIGHT_FOREARM) || (limbIndex == GIBDO_LIMB_RIGHT_HAND) || (limbIndex == GIBDO_LIMB_HEAD) || (limbIndex == GIBDO_LIMB_PELVIS))) { - Matrix_MultZero(&this->limbPos[this->limbIndex]); - this->limbIndex++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; } } @@ -1071,7 +1071,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - this->limbIndex = 0; + this->bodyPartIndex = 0; if (this->actor.shape.shadowAlpha == 255) { Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -1093,7 +1093,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { } if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENRAILGIBUD_BODYPART_MAX, this->drawDmgEffScale, 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h index f9d3922c8..42b41ed8a 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -12,13 +12,32 @@ typedef void (*EnRailgibudActionFunc)(struct EnRailgibud*, PlayState*); #define ENRAILGIBUD_IS_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x80) #define ENRAILGIBUD_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) +typedef enum EnRailgibudBodyPart { + /* 0 */ ENRAILGIBUD_BODYPART_0, + /* 1 */ ENRAILGIBUD_BODYPART_1, + /* 2 */ ENRAILGIBUD_BODYPART_2, + /* 3 */ ENRAILGIBUD_BODYPART_3, + /* 4 */ ENRAILGIBUD_BODYPART_4, + /* 5 */ ENRAILGIBUD_BODYPART_5, + /* 6 */ ENRAILGIBUD_BODYPART_6, + /* 7 */ ENRAILGIBUD_BODYPART_7, + /* 8 */ ENRAILGIBUD_BODYPART_8, + /* 9 */ ENRAILGIBUD_BODYPART_9, + /* 10 */ ENRAILGIBUD_BODYPART_10, + /* 11 */ ENRAILGIBUD_BODYPART_11, + /* 12 */ ENRAILGIBUD_BODYPART_12, + /* 13 */ ENRAILGIBUD_BODYPART_13, + /* 14 */ ENRAILGIBUD_BODYPART_14, + /* 15 */ ENRAILGIBUD_BODYPART_MAX +} EnRailgibudBodyPart; + typedef struct EnRailgibud { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnRailgibudActionFunc actionFunc; - /* 0x1D8 */ Vec3f limbPos[15]; - /* 0x28C */ s32 limbIndex; + /* 0x1D8 */ Vec3f bodyPartsPos[ENRAILGIBUD_BODYPART_MAX]; + /* 0x28C */ s32 bodyPartIndex; /* 0x290 */ UNK_TYPE1 unk290[0x4]; /* 0x294 */ Vec3s* points; /* 0x298 */ s32 currentPoint; 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 34fc41192..24bbc9e06 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -1322,8 +1322,8 @@ void EnRd_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, (limbIndex == REDEAD_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM) || (limbIndex == REDEAD_LIMB_RIGHT_FOREARM) || (limbIndex == REDEAD_LIMB_RIGHT_HAND) || (limbIndex == REDEAD_LIMB_HEAD) || (limbIndex == REDEAD_LIMB_PELVIS))) { - Matrix_MultZero(&this->limbPos[this->limbIndex]); - this->limbIndex++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; } } @@ -1335,7 +1335,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - this->limbIndex = 0; + this->bodyPartIndex = 0; if (this->alpha == 255) { Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -1363,7 +1363,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, - 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_RD_BODYPART_MAX, this->drawDmgEffScale, 0.5f, + this->drawDmgEffAlpha, this->drawDmgEffType); } } diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.h b/src/overlays/actors/ovl_En_Rd/z_en_rd.h index fced38e75..927fbf48b 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h @@ -30,14 +30,33 @@ typedef enum { /* 7 */ EN_RD_TYPE_PIROUETTE } EnRdType; +typedef enum EnRdBodyPart { + /* 0 */ EN_RD_BODYPART_0, + /* 1 */ EN_RD_BODYPART_1, + /* 2 */ EN_RD_BODYPART_2, + /* 3 */ EN_RD_BODYPART_3, + /* 4 */ EN_RD_BODYPART_4, + /* 5 */ EN_RD_BODYPART_5, + /* 6 */ EN_RD_BODYPART_6, + /* 7 */ EN_RD_BODYPART_7, + /* 8 */ EN_RD_BODYPART_8, + /* 9 */ EN_RD_BODYPART_9, + /* 10 */ EN_RD_BODYPART_10, + /* 11 */ EN_RD_BODYPART_11, + /* 12 */ EN_RD_BODYPART_12, + /* 13 */ EN_RD_BODYPART_13, + /* 14 */ EN_RD_BODYPART_14, + /* 15 */ EN_RD_BODYPART_MAX +} EnRdBodyPart; + typedef struct EnRd { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnRdActionFunc actionFunc; /* 0x18C */ EnRdSetupDanceFunc setupDanceFunc; /* 0x190 */ ColliderCylinder collider; - /* 0x1DC */ Vec3f limbPos[15]; - /* 0x290 */ s32 limbIndex; + /* 0x1DC */ Vec3f bodyPartsPos[EN_RD_BODYPART_MAX]; + /* 0x290 */ s32 bodyPartIndex; /* 0x294 */ f32 drawDmgEffAlpha; /* 0x298 */ f32 drawDmgEffScale; /* 0x29C */ Vec3s jointTable[REDEAD_LIMB_MAX]; 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 9bd181c0f..d1493583a 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -133,7 +133,7 @@ void EnRr_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); - if (this->actor.params != ENRR_3) { + if (this->actor.params != LIKE_LIKE_PARAM_3) { this->actor.scale.y = 0.015f; this->actor.scale.x = 0.019f; this->actor.scale.z = 0.019f; @@ -152,9 +152,9 @@ void EnRr_Init(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, this->actor.scale.y * 2000.0f); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if ((this->actor.params == ENRR_2) || (this->actor.params == ENRR_3)) { + if ((this->actor.params == LIKE_LIKE_PARAM_2) || (this->actor.params == LIKE_LIKE_PARAM_3)) { this->actor.colChkInfo.health = 6; - if (this->actor.params == ENRR_2) { + if (this->actor.params == LIKE_LIKE_PARAM_2) { this->actor.colChkInfo.mass = MASS_HEAVY; } } @@ -208,8 +208,8 @@ void func_808FA19C(EnRr* this, PlayState* play) { this->collider1.base.colType = COLTYPE_HIT0; this->collider1.info.elemType = ELEMTYPE_UNK1; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 20, 2, this->actor.scale.y * 23.333334f, - this->actor.scale.y * 20.000002f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, LIKE_LIKE_BODYPART_MAX, 2, + this->actor.scale.y * 23.333334f, this->actor.scale.y * 20.000002f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -318,7 +318,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { Message_StartTextbox(play, 0xF6, NULL); } - if (this->actor.params == ENRR_0) { + if (this->actor.params == LIKE_LIKE_PARAM_0) { sp38 = 8; } else { sp38 = 16; @@ -801,7 +801,7 @@ void EnRr_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->actor.params == ENRR_2) { + if (this->actor.params == LIKE_LIKE_PARAM_2) { this->actor.speed = 0.0f; } else { Math_StepToF(&this->actor.speed, 0.0f, 0.1f); @@ -878,7 +878,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnRr* this = THIS; Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Mtx)); - Vec3f* vecPtr; + Vec3f* bodyPartPos; s32 i; EnRrStruct* ptr; Vec3f spA4; @@ -897,14 +897,15 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { Matrix_Scale((1.0f + this->unk_324[0].unk_10) * this->unk_324[0].unk_08, 1.0f, (1.0f + this->unk_324[0].unk_10) * this->unk_324[0].unk_08, MTXMODE_APPLY); - vecPtr = &this->limbPos[0]; + bodyPartPos = &this->bodyPartsPos[0]; gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - Matrix_MultVecZ(1842.1053f, vecPtr++); - Matrix_MultVecZ(-1842.1053f, vecPtr++); - Matrix_MultVecX(1842.1053f, vecPtr++); - Matrix_MultVecX(-1842.1053f, vecPtr++); + // LIKE_LIKE_BODYPART_0 - LIKE_LIKE_BODYPART_3 + Matrix_MultVecZ(1842.1053f, bodyPartPos++); + Matrix_MultVecZ(-1842.1053f, bodyPartPos++); + Matrix_MultVecX(1842.1053f, bodyPartPos++); + Matrix_MultVecX(-1842.1053f, bodyPartPos++); Matrix_Pop(); for (i = 1; i < ARRAY_COUNT(this->unk_324); i++) { @@ -921,10 +922,14 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateYS(0x2000, MTXMODE_APPLY); } - Matrix_MultVecZ(1842.1053f, vecPtr++); - Matrix_MultVecZ(-1842.1053f, vecPtr++); - Matrix_MultVecX(1842.1053f, vecPtr++); - Matrix_MultVecX(-1842.1053f, vecPtr++); + // LIKE_LIKE_BODYPART_4 - LIKE_LIKE_BODYPART_7 + // LIKE_LIKE_BODYPART_8 - LIKE_LIKE_BODYPART_11 + // LIKE_LIKE_BODYPART_12 - LIKE_LIKE_BODYPART_15 + // LIKE_LIKE_BODYPART_16 - LIKE_LIKE_BODYPART_19 + Matrix_MultVecZ(1842.1053f, bodyPartPos++); + Matrix_MultVecZ(-1842.1053f, bodyPartPos++); + Matrix_MultVecX(1842.1053f, bodyPartPos++); + Matrix_MultVecX(-1842.1053f, bodyPartPos++); Matrix_Pop(); mtx++; if (i == 3) { @@ -939,7 +944,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gLikeLikeDL); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, LIKE_LIKE_BODYPART_MAX, this->actor.scale.y * 66.66667f * this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.h b/src/overlays/actors/ovl_En_Rr/z_en_rr.h index 6f4178dd9..3c2bc3964 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.h +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.h @@ -8,11 +8,35 @@ struct EnRr; typedef void (*EnRrActionFunc)(struct EnRr*, PlayState*); typedef enum { - /* 0 */ ENRR_0, - /* 1 */ ENRR_1, - /* 2 */ ENRR_2, - /* 3 */ ENRR_3 -} EnRrParam; + /* 0 */ LIKE_LIKE_PARAM_0, + /* 1 */ LIKE_LIKE_PARAM_1, + /* 2 */ LIKE_LIKE_PARAM_2, + /* 3 */ LIKE_LIKE_PARAM_3 +} LikeLikeParam; + +typedef enum LikeLikeBodyPart { + /* 0 */ LIKE_LIKE_BODYPART_0, + /* 1 */ LIKE_LIKE_BODYPART_1, + /* 2 */ LIKE_LIKE_BODYPART_2, + /* 3 */ LIKE_LIKE_BODYPART_3, + /* 4 */ LIKE_LIKE_BODYPART_4, + /* 5 */ LIKE_LIKE_BODYPART_5, + /* 6 */ LIKE_LIKE_BODYPART_6, + /* 7 */ LIKE_LIKE_BODYPART_7, + /* 8 */ LIKE_LIKE_BODYPART_8, + /* 9 */ LIKE_LIKE_BODYPART_9, + /* 10 */ LIKE_LIKE_BODYPART_10, + /* 11 */ LIKE_LIKE_BODYPART_11, + /* 12 */ LIKE_LIKE_BODYPART_12, + /* 13 */ LIKE_LIKE_BODYPART_13, + /* 14 */ LIKE_LIKE_BODYPART_14, + /* 15 */ LIKE_LIKE_BODYPART_15, + /* 16 */ LIKE_LIKE_BODYPART_16, + /* 17 */ LIKE_LIKE_BODYPART_17, + /* 18 */ LIKE_LIKE_BODYPART_18, + /* 19 */ LIKE_LIKE_BODYPART_19, + /* 20 */ LIKE_LIKE_BODYPART_MAX +} LikeLikeBodyPart; typedef struct { /* 0x00 */ f32 unk_00; @@ -58,7 +82,7 @@ typedef struct EnRr { /* 0x220 */ f32 drawDmgEffScale; /* 0x224 */ f32 drawDmgEffFrozenSteamScale; /* 0x228 */ Vec3f unk_228; - /* 0x234 */ Vec3f limbPos[20]; + /* 0x234 */ Vec3f bodyPartsPos[LIKE_LIKE_BODYPART_MAX]; /* 0x324 */ EnRrStruct unk_324[5]; } EnRr; // size = 0x3C4 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 551ed9489..4ff7b52fe 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -97,17 +97,66 @@ static AnimationInfoS sAnimationInfo[] = { { &gAdultRutoSwimmingUpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, }; -// in PostLimbdraw, converts limbIndex to bodyPartsPos index -static s8 sBodyPartPosIndices[] = { - -1, -1, 12, 13, 14, -1, 9, 10, 11, -1, 0, 6, -1, -1, 7, 8, 2, -1, -1, 3, 4, 2, 1, +static s8 sLimbToBodyParts[RU2_LIMB_MAX] = { + BODYPART_NONE, // RU2_LIMB_NONE + BODYPART_NONE, // RU2_LIMB_ROOT + RU_BODYPART_12, // RU2_LIMB_LEFT_THIGH + RU_BODYPART_13, // RU2_LIMB_LEFT_LEG + RU_BODYPART_14, // RU2_LIMB_LEFT_FOOT + BODYPART_NONE, // RU2_LIMB_LEFT_TAIL + RU_BODYPART_9, // RU2_LIMB_RIGHT_THIGH + RU_BODYPART_10, // RU2_LIMB_RIGHT_LEG + RU_BODYPART_11, // RU2_LIMB_RIGHT_FOOT + BODYPART_NONE, // RU2_LIMB_RIGHT_TAIL + RU_BODYPART_0, // RU2_LIMB_TORSO + RU_BODYPART_6, // RU2_LIMB_LEFT_UPPER_ARM + BODYPART_NONE, // RU2_LIMB_LEFT_UPPER_WING + BODYPART_NONE, // RU2_LIMB_LEFT_LOWER_WING + RU_BODYPART_7, // RU2_LIMB_LEFT_FOREARM + RU_BODYPART_8, // RU2_LIMB_LEFT_HAND + RU_BODYPART_2, // RU2_LIMB_RIGHT_UPPER_ARM + BODYPART_NONE, // RU2_LIMB_RIGHT_UPPER_WING + BODYPART_NONE, // RU2_LIMB_RIGHT_LOWER_WING + RU_BODYPART_3, // RU2_LIMB_RIGHT_FOREARM + RU_BODYPART_4, // RU2_LIMB_RIGHT_HAND + RU_BODYPART_2, // RU2_LIMB_HEAD + RU_BODYPART_1, // RU2_LIMB_WAIST }; -static s8 sRuBodyParts[RU_BODYPARTSPOS_COUNT] = { - 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13, +static s8 sParentShadowBodyParts[RU_BODYPART_MAX] = { + RU_BODYPART_0, // RU_BODYPART_0 + RU_BODYPART_0, // RU_BODYPART_1 + RU_BODYPART_0, // RU_BODYPART_2 + RU_BODYPART_0, // RU_BODYPART_3 + RU_BODYPART_3, // RU_BODYPART_4 + RU_BODYPART_4, // RU_BODYPART_5 + RU_BODYPART_0, // RU_BODYPART_6 + RU_BODYPART_6, // RU_BODYPART_7 + RU_BODYPART_7, // RU_BODYPART_8 + RU_BODYPART_0, // RU_BODYPART_9 + RU_BODYPART_9, // RU_BODYPART_10 + RU_BODYPART_10, // RU_BODYPART_11 + RU_BODYPART_0, // RU_BODYPART_12 + RU_BODYPART_12, // RU_BODYPART_13 + RU_BODYPART_13, // RU_BODYPART_14 }; -static u8 sRuShadowSizes[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static u8 sShadowSizes[RU_BODYPART_MAX] = { + 0, // RU_BODYPART_0 + 0, // RU_BODYPART_1 + 0, // RU_BODYPART_2 + 0, // RU_BODYPART_3 + 0, // RU_BODYPART_4 + 0, // RU_BODYPART_5 + 0, // RU_BODYPART_6 + 0, // RU_BODYPART_7 + 0, // RU_BODYPART_8 + 0, // RU_BODYPART_9 + 0, // RU_BODYPART_10 + 0, // RU_BODYPART_11 + 0, // RU_BODYPART_12 + 0, // RU_BODYPART_13 + 0, // RU_BODYPART_14 }; static TrackOptionsSet sTrackOptions = { @@ -202,7 +251,7 @@ void EnRu_UpdateModel(EnRu* this, PlayState* play) { Vec3f playerPos; playerPos.x = player->actor.world.pos.x; - playerPos.y = player->bodyPartsPos[7].y + 3.0f; + playerPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; playerPos.z = player->actor.world.pos.z; SubS_TrackPoint(&playerPos, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, &this->torsoRot, &sTrackOptions); @@ -286,8 +335,8 @@ void EnRu_PostLimbdraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f headFocus = { 800.0f, 0, 0 }; Vec3f bodyPartPos = { 0, 0, 0 }; - if (sBodyPartPosIndices[limbIndex] >= 0) { - Matrix_MultVec3f(&bodyPartPos, &this->bodyPartsPos[sBodyPartPosIndices[limbIndex]]); + if (sLimbToBodyParts[limbIndex] > BODYPART_NONE) { + Matrix_MultVec3f(&bodyPartPos, &this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == RU2_LIMB_HEAD) { Matrix_MultVec3f(&headFocus, &thisx->focus.pos); @@ -344,8 +393,8 @@ void EnRu_Draw(Actor* thisx, PlayState* play) { } for (i = 0; i < 5; i++) { - SubS_GenShadowTex(&this->bodyPartsPos[0], &this->actor.world.pos, shadowTex, (i / 5.0f), - (ARRAY_COUNT(sRuBodyParts)), sRuShadowSizes, sRuBodyParts); + SubS_GenShadowTex(this->bodyPartsPos, &this->actor.world.pos, shadowTex, i / 5.0f, RU_BODYPART_MAX, + sShadowSizes, sParentShadowBodyParts); } SubS_DrawShadowTex(&this->actor, &play->state, shadowTex); diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.h b/src/overlays/actors/ovl_En_Ru/z_en_ru.h index 7e7403176..83f7d8426 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h @@ -12,7 +12,24 @@ struct EnRu; typedef void (*EnRuActionFunc)(struct EnRu*, PlayState*); -#define RU_BODYPARTSPOS_COUNT 15 +typedef enum EnRuBodyPart { + /* 0 */ RU_BODYPART_0, + /* 1 */ RU_BODYPART_1, + /* 2 */ RU_BODYPART_2, + /* 3 */ RU_BODYPART_3, + /* 4 */ RU_BODYPART_4, + /* 5 */ RU_BODYPART_5, + /* 6 */ RU_BODYPART_6, + /* 7 */ RU_BODYPART_7, + /* 8 */ RU_BODYPART_8, + /* 9 */ RU_BODYPART_9, + /* 10 */ RU_BODYPART_10, + /* 11 */ RU_BODYPART_11, + /* 12 */ RU_BODYPART_12, + /* 13 */ RU_BODYPART_13, + /* 14 */ RU_BODYPART_14, + /* 15 */ RU_BODYPART_MAX +} EnruBodyPart; typedef struct EnRu { /* 0x000 */ Actor actor; @@ -34,7 +51,7 @@ typedef struct EnRu { /* 0x324 */ UNK_TYPE1 pad324[0x12]; /* 0x336 */ s16 fidgetTableY[RU2_LIMB_MAX]; /* 0x364 */ s16 fidgetTableZ[RU2_LIMB_MAX]; - /* 0x394 */ Vec3f bodyPartsPos[RU_BODYPARTSPOS_COUNT]; + /* 0x394 */ Vec3f bodyPartsPos[RU_BODYPART_MAX]; /* 0x348 */ UNK_TYPE1 padUNK[6]; /* 0x44E */ s16 eyeState; /* 0x450 */ s16 blinkTimer; 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 62db8ff6f..5359d5ece 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -222,7 +222,7 @@ void EnRuppecrow_ShatterIce(EnRuppecrow* this, PlayState* play) { if (this->currentEffect == ENRUPPECROW_EFFECT_ICE) { this->currentEffect = ENRUPPECROW_EFFECT_NONE; this->unk_2C8 = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0x2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENRUPPECROW_BODYPART_MAX, 0x2, 0.2f, 0.2f); } } @@ -640,7 +640,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) { EnRuppecrow* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - SkelAnime_InitFlex(play, &this->skelAnime, &gGuaySkel, &gGuayFlyAnim, this->joinTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gGuaySkel, &gGuayFlyAnim, this->jointTable, this->morphTable, OBJECT_CROW_LIMB_MAX); ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f); diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h index 5d591258b..f34df8375 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h @@ -9,19 +9,26 @@ #define ENRUPPECROW_PATH_INDEX_NONE 0x3F #define ENRUPPECROW_RUPEE_COUNT 20 -#define ENRUPPECROW_LIMB_POS_COUNT 4 struct EnRuppecrow; typedef void (*EnRuppecrowActionFunc)(struct EnRuppecrow*, PlayState*); +typedef enum EnRuppecrowBodyPart { + /* 0 */ ENRUPPECROW_BODYPART_0, + /* 1 */ ENRUPPECROW_BODYPART_1, + /* 2 */ ENRUPPECROW_BODYPART_2, + /* 3 */ ENRUPPECROW_BODYPART_3, + /* 4 */ ENRUPPECROW_BODYPART_MAX +} EnRuppecrowBodyPart; + typedef struct EnRuppecrow { /* 0x000 */ Actor actor; /* 0x144 */ EnItem00* rupees[ENRUPPECROW_RUPEE_COUNT]; /* 0x194 */ SkelAnime skelAnime; /* 0x1D8 */ EnRuppecrowActionFunc actionFunc; /* 0x1DC */ UNK_TYPE4 unk_1DC; // unused - /* 0x1E0 */ Vec3s joinTable[OBJECT_CROW_LIMB_MAX]; + /* 0x1E0 */ Vec3s jointTable[OBJECT_CROW_LIMB_MAX]; /* 0x216 */ Vec3s morphTable[OBJECT_CROW_LIMB_MAX]; /* 0x24C */ Path* path; /* 0x250 */ s32 currentPoint; @@ -36,7 +43,7 @@ typedef struct EnRuppecrow { /* 0x2C8 */ f32 unk_2C8; // set but not used /* 0x2CC */ f32 unk_2CC; // set but not used /* 0x2D0 */ f32 iceSfxTimer; - /* 0x2D4 */ Vec3f limbPos[ENRUPPECROW_LIMB_POS_COUNT]; + /* 0x2D4 */ Vec3f bodyPartsPos[ENRUPPECROW_BODYPART_MAX]; } EnRuppecrow; // size = 0x304 #endif // Z_EN_RUPPECROW_H diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 06491bba5..6c232e2f8 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -127,7 +127,7 @@ void func_80AE626C(EnShn* this) { this->unk_2BC = CLAMP(this->unk_2BC, -0x1FFE, 0x1FFE); Math_Vec3f_Copy(&shnPos, &this->actor.focus.pos); if (this->shnPlayerRef->actor.id == ACTOR_PLAYER) { - playerPos.y = this->shnPlayerRef->bodyPartsPos[7].y + 3.0f; + playerPos.y = this->shnPlayerRef->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&playerPos, &this->shnPlayerRef->actor.focus.pos); } 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 1df91a4f0..5057777d4 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -1008,22 +1008,22 @@ void func_80996BEC(EnSkb* this, PlayState* play) { Vec3f sp84; s32 i; s16 yaw; - s32 end; + s32 bodyPartsCount; if (this->unk_3D8 & 2) { - end = 13; + bodyPartsCount = ENSKB_BODYPART_MAX - 1; } else { - end = 14; + bodyPartsCount = ENSKB_BODYPART_MAX; } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN); - for (i = 0; i < end; i++) { - yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]); + for (i = 0; i < bodyPartsCount; i++) { + yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bodyPartsPos[i]); sp84.x = Math_SinS(yaw) * 3.0f; sp84.z = Math_CosS(yaw) * 3.0f; sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f; - EffectSsEnIce_Spawn(play, &this->limbPos[i], 0.6f, &sp84, &D_80997558, &D_80997550, &D_80997554, 30); + EffectSsEnIce_Spawn(play, &this->bodyPartsPos[i], 0.6f, &sp84, &D_80997558, &D_80997550, &D_80997554, 30); } } @@ -1118,11 +1118,11 @@ void EnSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) || (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) { - Matrix_MultZero(&this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } else if ((limbIndex == 11) && !(this->unk_3D8 & 2)) { - Matrix_MultVec3f(&D_80997564, &this->limbPos[this->limbCount]); - this->limbCount++; + Matrix_MultVec3f(&D_80997564, &this->bodyPartsPos[this->bodyPartsCount]); + this->bodyPartsCount++; } } } @@ -1130,13 +1130,13 @@ void EnSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnSkb_Draw(Actor* thisx, PlayState* play) { EnSkb* this = THIS; - this->limbCount = 0; + this->bodyPartsCount = 0; Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSkb_OverrideLimbDraw, EnSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f, - this->drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, this->bodyPartsCount, this->drawDmgEffScale, + 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); } if (this->unk_3D8 & 0x40) { diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.h b/src/overlays/actors/ovl_En_Skb/z_en_skb.h index 1970ebf8c..983e8cc5d 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.h +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.h @@ -13,6 +13,24 @@ typedef enum { /* 0 */ ENSKB_PARAM_0 } EnSkbParam; +typedef enum EnSkbBodyPart { + /* 0 */ ENSKB_BODYPART_0, + /* 1 */ ENSKB_BODYPART_1, + /* 2 */ ENSKB_BODYPART_2, + /* 3 */ ENSKB_BODYPART_3, + /* 4 */ ENSKB_BODYPART_4, + /* 5 */ ENSKB_BODYPART_5, + /* 6 */ ENSKB_BODYPART_6, + /* 7 */ ENSKB_BODYPART_7, + /* 8 */ ENSKB_BODYPART_8, + /* 9 */ ENSKB_BODYPART_9, + /* 10 */ ENSKB_BODYPART_10, + /* 11 */ ENSKB_BODYPART_11, + /* 12 */ ENSKB_BODYPART_12, + /* 13 */ ENSKB_BODYPART_13, + /* 14 */ ENSKB_BODYPART_MAX +} EnSkbBodyPart; + typedef struct EnSkb { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -21,8 +39,8 @@ typedef struct EnSkb { /* 0x228 */ EnSkbActionFunc actionFunc; /* 0x22C */ f32 drawDmgEffAlpha; /* 0x230 */ f32 drawDmgEffScale; - /* 0x234 */ Vec3f limbPos[14]; - /* 0x2DC */ s32 limbCount; + /* 0x234 */ Vec3f bodyPartsPos[ENSKB_BODYPART_MAX]; + /* 0x2DC */ s32 bodyPartsCount; /* 0x2E0 */ Vec3s jointTable[20]; /* 0x358 */ Vec3s morphTable[20]; /* 0x3D0 */ s16 unk_3D0; 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 540cf9cb2..98da2425d 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -154,22 +154,25 @@ static Color_RGBA8 sBubbleEnvColor = { 150, 150, 150, 0 }; static Vec3f sBubbleAccel = { 0.0f, -0.8f, 0.0f }; static Color_RGBA8 sPrimColors[] = { - { 255, 255, 255, 255 }, - { 255, 255, 0, 255 }, - { 255, 255, 200, 255 }, - { 225, 200, 255, 255 }, + { 255, 255, 255, 255 }, // EN_SLIME_TYPE_BLUE + { 255, 255, 0, 255 }, // EN_SLIME_TYPE_GREEN + { 255, 255, 200, 255 }, // EN_SLIME_TYPE_YELLOW + { 225, 200, 255, 255 }, // EN_SLIME_TYPE_RED }; static Color_RGBA8 sEnvColors[] = { - { 140, 255, 195, 255 }, - { 50, 255, 0, 255 }, - { 255, 180, 0, 255 }, - { 255, 50, 155, 255 }, + { 140, 255, 195, 255 }, // EN_SLIME_TYPE_BLUE + { 50, 255, 0, 255 }, // EN_SLIME_TYPE_GREEN + { 255, 180, 0, 255 }, // EN_SLIME_TYPE_YELLOW + { 255, 50, 155, 255 }, // EN_SLIME_TYPE_RED }; -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 }, +static Vec3f sBodyPartPosOffsets[EN_SLIME_BODYPART_MAX] = { + { 2000.0f, 2000.0f, 0.0f }, // EN_SLIME_BODYPART_0 + { -1500.0f, 2500.0f, -500.0f }, // EN_SLIME_BODYPART_1 + { -500.0f, 1000.0f, 2500.0f }, // EN_SLIME_BODYPART_2 + { 0.0f, 4000.0f, 0.0f }, // EN_SLIME_BODYPART_3 + { 0.0f, 2000.0f, -2000.0f }, // EN_SLIME_BODYPART_4 }; AnimatedMaterial* sSlimeTexAnim; @@ -263,7 +266,7 @@ void EnSlime_Thaw(EnSlime* this, PlayState* play) { 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); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_SLIME_BODYPART_MAX, 2, 0.2f, 0.2f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -1217,8 +1220,8 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gChuchuEyesDL); } - for (i = 0; i < EN_SLIME_LIMBPOS_COUNT; i++) { - Matrix_MultVec3f(&sLimbPosOffsets[i], &this->limbPos[i]); + for (i = 0; i < EN_SLIME_BODYPART_MAX; i++) { + Matrix_MultVec3f(&sBodyPartPosOffsets[i], &this->bodyPartsPos[i]); } if (this->actionFunc == EnSlime_Revive) { @@ -1243,7 +1246,7 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); } - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_SLIME_BODYPART_MAX, 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 130c442de..fbae533ea 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h @@ -5,14 +5,29 @@ #include "objects/object_slime/object_slime.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define EN_SLIME_LIMBPOS_COUNT 5 +struct EnSlime; + +typedef void (*EnSlimeActionFunc)(struct EnSlime*, PlayState*); + #define EN_SLIME_GET_TYPE(thisx) ((thisx)->params) #define EN_SLIME_GET_REVIVE_TIME(thisx) ((((thisx)->params) >> 8) & 0xFF) -struct EnSlime; +typedef enum EnSlimeType { + /* 0 */ EN_SLIME_TYPE_BLUE, + /* 1 */ EN_SLIME_TYPE_GREEN, + /* 2 */ EN_SLIME_TYPE_YELLOW, + /* 3 */ EN_SLIME_TYPE_RED +} EnSlimeType; -typedef void (*EnSlimeActionFunc)(struct EnSlime*, PlayState*); +typedef enum EnSlimeBodyPart { + /* 0 */ EN_SLIME_BODYPART_0, + /* 1 */ EN_SLIME_BODYPART_1, + /* 2 */ EN_SLIME_BODYPART_2, + /* 3 */ EN_SLIME_BODYPART_3, + /* 4 */ EN_SLIME_BODYPART_4, + /* 5 */ EN_SLIME_BODYPART_MAX +} EnSlimeBodyPart; typedef struct EnSlime { /* 0x000 */ Actor actor; @@ -34,15 +49,8 @@ typedef struct EnSlime { /* 0x16C */ f32 drawDmgEffFrozenSteamScale; /* 0x170 */ f32 distLimit; /* 0x174 */ Vec3f reviveScale; - /* 0x180 */ Vec3f limbPos[EN_SLIME_LIMBPOS_COUNT]; + /* 0x180 */ Vec3f bodyPartsPos[EN_SLIME_BODYPART_MAX]; /* 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/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index d289cf89d..b935b46d4 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -1125,11 +1125,21 @@ void EnSnowman_UpdateSnowball(Actor* thisx, PlayState* play) { /** * This maps a given limb based on its limbIndex to its appropriate index - * in the bodyPartsPos array. An index of -1 indicates that the limb is - * not part of the bodyPartsPos array. + * in the bodyPartsPos array. */ -static s8 sLimbIndexToBodyPartsPosIndex[] = { - -1, -1, -1, -1, -1, -1, 0, 1, -1, 2, 3, 4, +static s8 sLimbToBodyParts[EENO_LIMB_MAX] = { + BODYPART_NONE, // EENO_LIMB_NONE + BODYPART_NONE, // EENO_LIMB_ROOT + BODYPART_NONE, // EENO_LIMB_BODY_TOP + BODYPART_NONE, // EENO_LIMB_LEFT_EYE + BODYPART_NONE, // EENO_LIMB_RIGHT_EYE + BODYPART_NONE, // EENO_LIMB_LEFT_UPPER_ARM + EN_SNOWMAN_BODYPART_0, // EENO_LIMB_LEFT_FOREARM + EN_SNOWMAN_BODYPART_1, // EENO_LIMB_LEFT_HAND + BODYPART_NONE, // EENO_LIMB_RIGHT_UPPER_ARM + EN_SNOWMAN_BODYPART_2, // EENO_LIMB_RIGHT_FOREARM + EN_SNOWMAN_BODYPART_3, // EENO_LIMB_RIGHT_HAND + EN_SNOWMAN_BODYPART_4, // EENO_LIMB_BODY_BOTTOM }; /** @@ -1137,8 +1147,11 @@ static s8 sLimbIndexToBodyPartsPosIndex[] = { * bottom limb, each offset by a certain certain amount. */ static Vec3f sBodyBottomBodyPartOffsets[] = { - { 2000.0f, 3000.0f, 0.0f }, { 2000.0f, -2000.0f, 0.0f }, { 3000.0f, 0.0f, 0.0f }, - { 1000.0f, 0.0f, 3000.0f }, { 1000.0f, 0.0f, -3000.0f }, + { 2000.0f, 3000.0f, 0.0f }, // EN_SNOWMAN_BODYPART_4 + { 2000.0f, -2000.0f, 0.0f }, // EN_SNOWMAN_BODYPART_5 + { 3000.0f, 0.0f, 0.0f }, // EN_SNOWMAN_BODYPART_6 + { 1000.0f, 0.0f, 3000.0f }, // EN_SNOWMAN_BODYPART_7 + { 1000.0f, 0.0f, -3000.0f }, // EN_SNOWMAN_BODYPART_8 }; void EnSnowman_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { @@ -1147,13 +1160,13 @@ void EnSnowman_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Gfx* gfx; s32 i; - if (sLimbIndexToBodyPartsPosIndex[limbIndex] != -1) { - if (sLimbIndexToBodyPartsPosIndex[limbIndex] == 4) { - for (i = 0; i < 5; i++) { - Matrix_MultVec3f(&sBodyBottomBodyPartOffsets[i], &this->bodyPartsPos[i + 4]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + if (sLimbToBodyParts[limbIndex] == EN_SNOWMAN_BODYPART_4) { + for (i = 0; i < ARRAY_COUNT(sBodyBottomBodyPartOffsets); i++) { + Matrix_MultVec3f(&sBodyBottomBodyPartOffsets[i], &this->bodyPartsPos[EN_SNOWMAN_BODYPART_4 + i]); } } else { - Matrix_MultZero(&this->bodyPartsPos[sLimbIndexToBodyPartsPosIndex[limbIndex]]); + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } } @@ -1186,7 +1199,7 @@ void EnSnowman_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnSnowman_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_SNOWMAN_BODYPART_MAX, this->drawDmgEffScale * this->eenoScale, 0.0f, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h index 55285fec8..2533c2595 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h @@ -19,6 +19,19 @@ struct EnSnowman; typedef void (*EnSnowmanActionFunc)(struct EnSnowman*, PlayState*); +typedef enum EnSnowmanBodyPart { + /* 0 */ EN_SNOWMAN_BODYPART_0, + /* 1 */ EN_SNOWMAN_BODYPART_1, + /* 2 */ EN_SNOWMAN_BODYPART_2, + /* 3 */ EN_SNOWMAN_BODYPART_3, + /* 4 */ EN_SNOWMAN_BODYPART_4, + /* 5 */ EN_SNOWMAN_BODYPART_5, + /* 6 */ EN_SNOWMAN_BODYPART_6, + /* 7 */ EN_SNOWMAN_BODYPART_7, + /* 8 */ EN_SNOWMAN_BODYPART_8, + /* 9 */ EN_SNOWMAN_BODYPART_MAX +} EnSnowmanBodyPart; + typedef struct EnSnowman { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -50,7 +63,7 @@ typedef struct EnSnowman { /* 0x2A4 */ f32 drawDmgEffScale; /* 0x2A8 */ Vec3f combinePos; /* 0x2B4 */ Vec3f snowballPos; - /* 0x2C0 */ Vec3f bodyPartsPos[9]; + /* 0x2C0 */ Vec3f bodyPartsPos[EN_SNOWMAN_BODYPART_MAX]; /* 0x32C */ ColliderCylinder collider; } EnSnowman; // size = 0x378 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 566b074c7..dd8d21f65 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -272,7 +272,7 @@ s32 func_808A576C(EnSt* this) { s32 i; s16 phi_s2 = (s16)((s16)(Rand_ZeroOne() * 1000.0f) % 12) * 0x1555; - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++, phi_s2 += 0x1555) { + for (i = 0; i < ENST_BODYPART_MAX; i++, phi_s2 += 0x1555) { if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->unk_31C[i] = (Rand_ZeroOne() * 16.0f) + 8.0f; } else { @@ -282,46 +282,46 @@ s32 func_808A576C(EnSt* this) { this->drawDmgEffFrozenSteamScales[i] = 0.90000004f; if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE)) { - this->unk_358[i].y = ((Rand_ZeroOne() - 0.5f) * 40.0f) - 10.0f; + this->bodyPartsPos[i].y = ((Rand_ZeroOne() - 0.5f) * 40.0f) - 10.0f; } else { - this->unk_358[i].y = ((Rand_ZeroOne() - 0.5f) * 30.0f) + 10.0f; + this->bodyPartsPos[i].y = ((Rand_ZeroOne() - 0.5f) * 30.0f) + 10.0f; } - this->unk_358[i].x = Math_SinS(phi_s2) * 18.0f; - this->unk_358[i].z = Math_CosS(phi_s2) * 18.0f; + this->bodyPartsPos[i].x = Math_SinS(phi_s2) * 18.0f; + this->bodyPartsPos[i].z = Math_CosS(phi_s2) * 18.0f; } this->unk_31A = 1; return false; } -s32 func_808A5988(EnSt* this, PlayState* play, s32 arg2) { - s32 ret = false; +s32 func_808A5988(EnSt* this, PlayState* play, s32 bodyPartIndex) { + s32 ret = 0; u8 drawDmgEffType; - Vec3f limbPos[1]; + Vec3f bodyPartPos[1]; f32 drawDmgEffAlpha; - if (arg2 < this->unk_31A) { - if (this->unk_31C[arg2] != 0) { - drawDmgEffAlpha = (f32)this->unk_31C[arg2] / this->unk_334[arg2]; + if (bodyPartIndex < this->unk_31A) { + if (this->unk_31C[bodyPartIndex] != 0) { + drawDmgEffAlpha = (f32)this->unk_31C[bodyPartIndex] / this->unk_334[bodyPartIndex]; drawDmgEffType = this->drawDmgEffType; - Math_ApproachF(&this->drawDmgEffFrozenSteamScales[arg2], 0.6f, 0.3f, 0.5f); - Math_Vec3f_Copy(&limbPos[0], &this->actor.world.pos); + Math_ApproachF(&this->drawDmgEffFrozenSteamScales[bodyPartIndex], 0.6f, 0.3f, 0.5f); + Math_Vec3f_Copy(&bodyPartPos[0], &this->actor.world.pos); - limbPos[0].x += this->unk_358[arg2].x; - limbPos[0].y += this->unk_358[arg2].y; - limbPos[0].z += this->unk_358[arg2].z; + bodyPartPos[0].x += this->bodyPartsPos[bodyPartIndex].x; + bodyPartPos[0].y += this->bodyPartsPos[bodyPartIndex].y; + bodyPartPos[0].z += this->bodyPartsPos[bodyPartIndex].z; if (drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { - if ((this->unk_334[arg2] - this->unk_31C[arg2]) < 20) { + if ((this->unk_334[bodyPartIndex] - this->unk_31C[bodyPartIndex]) < 20) { drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX; } drawDmgEffAlpha = 1.0f; } - Actor_DrawDamageEffects(play, &this->actor, limbPos, ARRAY_COUNT(limbPos), 0.6f, - this->drawDmgEffFrozenSteamScales[arg2], drawDmgEffAlpha, drawDmgEffType); - ret = true; + Actor_DrawDamageEffects(play, &this->actor, bodyPartPos, ARRAY_COUNT(bodyPartPos), 0.6f, + this->drawDmgEffFrozenSteamScales[bodyPartIndex], drawDmgEffAlpha, drawDmgEffType); + ret = 1; } } return ret; @@ -331,14 +331,14 @@ void func_808A5AF8(EnSt* this, PlayState* play) { Vec3f sp54; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_358); i++) { + for (i = 0; i < ENST_BODYPART_MAX; i++) { Math_Vec3f_Copy(&sp54, &this->actor.world.pos); - sp54.x += this->unk_358[i].x; - sp54.y += this->unk_358[i].y; - sp54.z += this->unk_358[i].z; - Math_Vec3f_Copy(&this->unk_358[i], &sp54); + sp54.x += this->bodyPartsPos[i].x; + sp54.y += this->bodyPartsPos[i].y; + sp54.z += this->bodyPartsPos[i].z; + Math_Vec3f_Copy(&this->bodyPartsPos[i], &sp54); } - Actor_SpawnIceEffects(play, &this->actor, this->unk_358, 12, 3, 0.1f, 0.3f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENST_BODYPART_MAX, 3, 0.1f, 0.3f); } s16 func_808A5BEC(EnSt* this) { @@ -558,7 +558,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { if (this->collider3.base.acFlags & AC_HIT) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { // clang-format off - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { this->unk_31C[i] = 0; } + for (i = 0; i < ENST_BODYPART_MAX; i++) { this->unk_31C[i] = 0; } // clang-format on this->unk_318 = 0; @@ -581,7 +581,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { // clang-format off - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { this->unk_31C[i] = 0; } + for (i = 0; i < ENST_BODYPART_MAX; i++) { this->unk_31C[i] = 0; } // clang-format on this->unk_318 = 0; @@ -757,16 +757,16 @@ void func_808A6D84(EnSt* this, PlayState* play) { void func_808A6E24(EnSt* this, PlayState* play) { s32 i; - s32 count = 0; + s32 bodyPartsCount = 0; if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { + for (i = 0; i < ENST_BODYPART_MAX; i++) { if (DECR(this->unk_31C[i]) == 0) { - count++; + bodyPartsCount++; } } - if (count == ARRAY_COUNT(this->unk_31C)) { + if (bodyPartsCount == ENST_BODYPART_MAX) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 7); this->drawDmgEffType = ACTOR_DRAW_DMGEFF_BLUE_FIRE; this->unk_2CC = 0.0f; @@ -811,20 +811,20 @@ void func_808A6E24(EnSt* this, PlayState* play) { void func_808A701C(EnSt* this, PlayState* play) { s32 i; - s32 count = 0; + s32 bodyPartsCount = 0; if (this->unk_18C & 0x40) { if (DECR(this->unk_318) == 0) { this->unk_18C |= 0x20; } - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { + for (i = 0; i < ENST_BODYPART_MAX; i++) { if (DECR(this->unk_31C[i]) == 0) { - count++; + bodyPartsCount++; } } - if (count == ARRAY_COUNT(this->unk_31C)) { + if (bodyPartsCount == ENST_BODYPART_MAX) { Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0); Actor_Kill(&this->actor); } @@ -892,7 +892,7 @@ void EnSt_Update(Actor* thisx, PlayState* play) { s32 i; // clang-format off - for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { this->unk_31C[i] = 0; } + for (i = 0; i < ENST_BODYPART_MAX; i++) { this->unk_31C[i] = 0; } // clang-format on } } @@ -918,7 +918,7 @@ s32 EnSt_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po void func_808A7478(Actor* thisx, PlayState* play) { EnSt* this = THIS; - s32 i; + s32 bodyPartIndex; s32 count; if (!(this->unk_18C & 0x20)) { @@ -937,8 +937,8 @@ void func_808A7478(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } - for (i = 0, count = 0; i < ARRAY_COUNT(this->unk_31C); i++) { - count += func_808A5988(this, play, i); + for (bodyPartIndex = 0, count = 0; bodyPartIndex < ENST_BODYPART_MAX; bodyPartIndex++) { + count += func_808A5988(this, play, bodyPartIndex); } if (count != 0) { diff --git a/src/overlays/actors/ovl_En_St/z_en_st.h b/src/overlays/actors/ovl_En_St/z_en_st.h index 5c63a9664..0dcfb3d00 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.h +++ b/src/overlays/actors/ovl_En_St/z_en_st.h @@ -13,6 +13,22 @@ typedef void (*EnStActionFunc)(struct EnSt*, PlayState*); #define ENST_3F_63 63 #define ENST_1C0_1 1 +typedef enum EnStBodyPart { + /* 0 */ ENST_BODYPART_0, + /* 1 */ ENST_BODYPART_1, + /* 2 */ ENST_BODYPART_2, + /* 3 */ ENST_BODYPART_3, + /* 4 */ ENST_BODYPART_4, + /* 5 */ ENST_BODYPART_5, + /* 6 */ ENST_BODYPART_6, + /* 7 */ ENST_BODYPART_7, + /* 8 */ ENST_BODYPART_8, + /* 9 */ ENST_BODYPART_9, + /* 10 */ ENST_BODYPART_10, + /* 11 */ ENST_BODYPART_11, + /* 12 */ ENST_BODYPART_MAX +} EnStBodyPart; + typedef struct EnSt { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -39,11 +55,11 @@ typedef struct EnSt { /* 0x316 */ s16 unk_316; /* 0x318 */ s16 unk_318; /* 0x31A */ s16 unk_31A; - /* 0x31C */ s16 unk_31C[12]; - /* 0x334 */ s16 unk_334[12]; + /* 0x31C */ s16 unk_31C[ENST_BODYPART_MAX]; + /* 0x334 */ s16 unk_334[ENST_BODYPART_MAX]; /* 0x34C */ f32 unk_34C; /* 0x350 */ UNK_TYPE1 unk_350[0x8]; - /* 0x358 */ Vec3f unk_358[12]; + /* 0x358 */ Vec3f bodyPartsPos[ENST_BODYPART_MAX]; /* 0x3E8 */ Vec3s jointTable[30]; /* 0x49C */ Vec3s morphTable[30]; } EnSt; // size = 0x550 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 016f74dd3..3842afa88 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -173,10 +173,10 @@ void func_808D8940(EnSw* this, PlayState* play) { } s32 func_808D8B58(EnSw* this) { - s16 phi_s2 = (s16)((s16)(Rand_ZeroOne() * 1000.0f) % ARRAY_COUNT(this->unk_464)) * 0x1555; + s16 phi_s2 = (s16)(TRUNCF_BINANG(Rand_ZeroOne() * 1000.0f) % ENSW_BODYPART_MAX) * 0x1555; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_464); i++, phi_s2 += 0x1555) { + for (i = 0; i < ENSW_BODYPART_MAX; i++, phi_s2 += 0x1555) { if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->unk_464[i] = (Rand_ZeroOne() * 16.0f) + 8.0f; } else { @@ -186,41 +186,41 @@ s32 func_808D8B58(EnSw* this) { this->drawDmgEffFrozenSteamScales[i] = 0.45000002f; if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { - this->unk_380[i].y = (Rand_ZeroOne() - 0.5f) * 20.0f; + this->bodyPartsPos[i].y = (Rand_ZeroOne() - 0.5f) * 20.0f; } else { - this->unk_380[i].y = ((Rand_ZeroOne() - 0.5f) * 20.0f) + 10.0f; + this->bodyPartsPos[i].y = ((Rand_ZeroOne() - 0.5f) * 20.0f) + 10.0f; } - this->unk_380[i].x = Math_SinS(phi_s2) * 10.0f; - this->unk_380[i].z = Math_CosS(phi_s2) * 10.0f; + this->bodyPartsPos[i].x = Math_SinS(phi_s2) * 10.0f; + this->bodyPartsPos[i].z = Math_CosS(phi_s2) * 10.0f; } this->unk_462 = 1; return 0; } -s32 func_808D8D60(EnSw* this, PlayState* play, s32 arg2) { - s32 ret = false; +s32 func_808D8D60(EnSw* this, PlayState* play, s32 bodyPartIndex) { + s32 ret = 0; u8 drawDmgEffType; - Vec3f limbPos[1]; + Vec3f bodyPartsPos[1]; f32 drawDmgEffAlpha; - if (arg2 < this->unk_462) { - if (this->unk_464[arg2] != 0) { - drawDmgEffAlpha = (f32)this->unk_464[arg2] / this->unk_47C[arg2]; + if (bodyPartIndex < this->unk_462) { + if (this->unk_464[bodyPartIndex] != 0) { + drawDmgEffAlpha = (f32)this->unk_464[bodyPartIndex] / this->unk_47C[bodyPartIndex]; drawDmgEffType = this->drawDmgEffType; - Math_ApproachF(&this->drawDmgEffFrozenSteamScales[arg2], 0.3f, 0.3f, 0.5f); - Math_Vec3f_Copy(&limbPos[0], &this->actor.world.pos); - limbPos[0].x += this->unk_380[arg2].x; - limbPos[0].y += this->unk_380[arg2].y; - limbPos[0].z += this->unk_380[arg2].z; + Math_ApproachF(&this->drawDmgEffFrozenSteamScales[bodyPartIndex], 0.3f, 0.3f, 0.5f); + Math_Vec3f_Copy(&bodyPartsPos[0], &this->actor.world.pos); + bodyPartsPos[0].x += this->bodyPartsPos[bodyPartIndex].x; + bodyPartsPos[0].y += this->bodyPartsPos[bodyPartIndex].y; + bodyPartsPos[0].z += this->bodyPartsPos[bodyPartIndex].z; if (drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { - if ((this->unk_47C[arg2] - this->unk_464[arg2]) < 20) { + if ((this->unk_47C[bodyPartIndex] - this->unk_464[bodyPartIndex]) < 20) { drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX; } drawDmgEffAlpha = 1.0f; } - Actor_DrawDamageEffects(play, &this->actor, limbPos, ARRAY_COUNT(limbPos), 0.3f, - this->drawDmgEffFrozenSteamScales[arg2], drawDmgEffAlpha, drawDmgEffType); - ret = true; + Actor_DrawDamageEffects(play, &this->actor, bodyPartsPos, ARRAY_COUNT(bodyPartsPos), 0.3f, + this->drawDmgEffFrozenSteamScales[bodyPartIndex], drawDmgEffAlpha, drawDmgEffType); + ret = 1; } } return ret; @@ -230,14 +230,14 @@ void func_808D8ED0(EnSw* this, PlayState* play) { Vec3f sp54; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_380); i++) { + for (i = 0; i < ENSW_BODYPART_MAX; i++) { Math_Vec3f_Copy(&sp54, &this->actor.world.pos); - sp54.x += this->unk_380[i].x; - sp54.y += this->unk_380[i].y; - sp54.z += this->unk_380[i].z; - Math_Vec3f_Copy(&this->unk_380[i], &sp54); + sp54.x += this->bodyPartsPos[i].x; + sp54.y += this->bodyPartsPos[i].y; + sp54.z += this->bodyPartsPos[i].z; + Math_Vec3f_Copy(&this->bodyPartsPos[i], &sp54); } - Actor_SpawnIceEffects(play, &this->actor, this->unk_380, ARRAY_COUNT(this->unk_380), 3, 0.1f, 0.3f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENSW_BODYPART_MAX, 3, 0.1f, 0.3f); } void func_808D8FC4(EnSw* this, PlayState* play) { @@ -1281,6 +1281,9 @@ s32 EnSw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po case 4: *dList = object_st_DL_0043D8; break; + + default: + break; } } return false; @@ -1288,7 +1291,7 @@ s32 EnSw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po void EnSw_Draw(Actor* thisx, PlayState* play) { EnSw* this = THIS; - s32 i; + s32 bodyPartIndex; s32 count; if (this->unk_410 & 4) { @@ -1301,8 +1304,8 @@ void EnSw_Draw(Actor* thisx, PlayState* play) { &this->actor); } - for (i = 0, count = 0; i < ARRAY_COUNT(this->unk_464); i++) { - count += func_808D8D60(this, play, i); + for (bodyPartIndex = 0, count = 0; bodyPartIndex < ENSW_BODYPART_MAX; bodyPartIndex++) { + count += func_808D8D60(this, play, bodyPartIndex); } if (count != 0) { diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.h b/src/overlays/actors/ovl_En_Sw/z_en_sw.h index f77d12267..9cb68a3fa 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.h +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.h @@ -15,6 +15,22 @@ typedef void (*EnSwActionFunc)(struct EnSw*, PlayState*); #define ENSW_PATH_INDEX_NONE 0xFF +typedef enum EnSwBodyPart { + /* 0 */ ENSW_BODYPART_0, + /* 1 */ ENSW_BODYPART_1, + /* 2 */ ENSW_BODYPART_2, + /* 3 */ ENSW_BODYPART_3, + /* 4 */ ENSW_BODYPART_4, + /* 5 */ ENSW_BODYPART_5, + /* 6 */ ENSW_BODYPART_6, + /* 7 */ ENSW_BODYPART_7, + /* 8 */ ENSW_BODYPART_8, + /* 9 */ ENSW_BODYPART_9, + /* 10 */ ENSW_BODYPART_10, + /* 11 */ ENSW_BODYPART_11, + /* 12 */ ENSW_BODYPART_MAX +} EnSwBodyPart; + typedef struct EnSw { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -27,11 +43,11 @@ typedef struct EnSw { /* 0x35C */ Vec3f unk_35C; /* 0x368 */ Vec3f unk_368; /* 0x374 */ Vec3f unk_374; - /* 0x380 */ Vec3f unk_380[12]; + /* 0x380 */ Vec3f bodyPartsPos[ENSW_BODYPART_MAX]; /* 0x410 */ u16 unk_410; /* 0x412 */ u8 drawDmgEffType; /* 0x414 */ f32 unk_414; - /* 0x418 */ f32 drawDmgEffFrozenSteamScales[12]; + /* 0x418 */ f32 drawDmgEffFrozenSteamScales[ENSW_BODYPART_MAX]; /* 0x448 */ f32 unk_448; /* 0x44C */ f32 unk_44C; /* 0x450 */ f32 unk_450; @@ -43,8 +59,8 @@ typedef struct EnSw { /* 0x45E */ s16 unk_45E; /* 0x460 */ s16 unk_460; /* 0x462 */ s16 unk_462; - /* 0x464 */ s16 unk_464[12]; - /* 0x47C */ s16 unk_47C[12]; + /* 0x464 */ s16 unk_464[ENSW_BODYPART_MAX]; + /* 0x47C */ s16 unk_47C[ENSW_BODYPART_MAX]; /* 0x494 */ s16 unk_494; /* 0x496 */ s16 unk_496; /* 0x498 */ s16 unk_498; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index df20a3696..7e5cebb1c 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -307,8 +307,8 @@ void EnSyatekiCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec Vec3f* bodyPartPos; if (limbIndex == OBJECT_CROW_LIMB_BODY) { - Matrix_MultVec3f(&sBodyOffset, &this->bodyPartsPos[0]); - this->bodyPartsPos[0].y -= 20.0f; + Matrix_MultVec3f(&sBodyOffset, &this->bodyPartsPos[SG_GUAY_BODYPART_BODY]); + this->bodyPartsPos[SG_GUAY_BODYPART_BODY].y -= 20.0f; } else if ((limbIndex == OBJECT_CROW_LIMB_RIGHT_WING_TIP) || (limbIndex == OBJECT_CROW_LIMB_LEFT_WING_TIP) || (limbIndex == OBJECT_CROW_LIMB_TAIL)) { bodyPartPos = &this->bodyPartsPos[(limbIndex >> 1) - 1]; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h index 71f346645..fd9a679d8 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h @@ -13,9 +13,17 @@ struct EnSyatekiCrow; typedef void (*EnSyatekiCrowActionFunc)(struct EnSyatekiCrow*, PlayState*); +typedef enum EnSyatekiCrowBodyPart { + /* 0 */ SG_GUAY_BODYPART_BODY, + /* 1 */ SG_GUAY_BODYPART_RIGHT_WING_TIP, + /* 2 */ SG_GUAY_BODYPART_LEFT_WING_TIP, + /* 3 */ SG_GUAY_BODYPART_TAIL, + /* 4 */ SG_GUAY_BODYPART_MAX +} EnSyatekiCrowBodyPart; + typedef struct EnSyatekiCrow { /* 0x000 */ Actor actor; - /* 0x144 */ Vec3f bodyPartsPos[4]; + /* 0x144 */ Vec3f bodyPartsPos[SG_GUAY_BODYPART_MAX]; /* 0x174 */ SkelAnime skelAnime; /* 0x1B8 */ EnSyatekiCrowActionFunc actionFunc; /* 0x1BC */ s16 waitTimer; 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 47500edf0..0a324592b 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -225,7 +225,7 @@ void func_80BE07A0(EnTab* this) { Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); if (this->unk_1E0->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_1E0)->bodyPartsPos[7].y + 3.0f; + sp40.y = ((Player*)this->unk_1E0)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_1E0->focus.pos); } 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 37ab26196..fcf0d8985 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 @@ -252,8 +252,8 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->drawDmgEffAlpha = 0.0f; this->drawDmgEffScale = 0.0f; - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) { - this->limbPos[i] = gZeroVec3f; + for (i = 0; i < EN_TALK_GIBUD_BODYPART_MAX; i++) { + this->bodyPartsPos[i] = gZeroVec3f; } if (this->requestedItemIndex < EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BLUE_POTION) { @@ -1188,8 +1188,8 @@ void EnTalkGibud_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s (limbIndex == GIBDO_LIMB_LEFT_FOREARM) || (limbIndex == GIBDO_LIMB_LEFT_HAND) || (limbIndex == GIBDO_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM) || (limbIndex == GIBDO_LIMB_RIGHT_FOREARM) || (limbIndex == GIBDO_LIMB_RIGHT_HAND) || (limbIndex == GIBDO_LIMB_HEAD) || (limbIndex == GIBDO_LIMB_PELVIS))) { - Matrix_MultZero(&this->limbPos[this->limbIndex]); - this->limbIndex++; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; } } @@ -1198,7 +1198,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - this->limbIndex = 0; + this->bodyPartIndex = 0; if (this->actor.shape.shadowAlpha == 255) { Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -1220,8 +1220,8 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { } if (this->drawDmgEffTimer > 0) { - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, - 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_TALK_GIBUD_BODYPART_MAX, + this->drawDmgEffScale, 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index d887b1c0d..0819cd893 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -11,13 +11,32 @@ struct EnTalkGibud; typedef void (*EnTalkGibudActionFunc)(struct EnTalkGibud*, PlayState*); +typedef enum EnTalkGibudBodyPart { + /* 0 */ EN_TALK_GIBUD_BODYPART_0, + /* 1 */ EN_TALK_GIBUD_BODYPART_1, + /* 2 */ EN_TALK_GIBUD_BODYPART_2, + /* 3 */ EN_TALK_GIBUD_BODYPART_3, + /* 4 */ EN_TALK_GIBUD_BODYPART_4, + /* 5 */ EN_TALK_GIBUD_BODYPART_5, + /* 6 */ EN_TALK_GIBUD_BODYPART_6, + /* 7 */ EN_TALK_GIBUD_BODYPART_7, + /* 8 */ EN_TALK_GIBUD_BODYPART_8, + /* 9 */ EN_TALK_GIBUD_BODYPART_9, + /* 10 */ EN_TALK_GIBUD_BODYPART_10, + /* 11 */ EN_TALK_GIBUD_BODYPART_11, + /* 12 */ EN_TALK_GIBUD_BODYPART_12, + /* 13 */ EN_TALK_GIBUD_BODYPART_13, + /* 14 */ EN_TALK_GIBUD_BODYPART_14, + /* 15 */ EN_TALK_GIBUD_BODYPART_MAX +} EnTalkGibudBodyPart; + typedef struct EnTalkGibud { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnTalkGibudActionFunc actionFunc; - /* 0x1D8 */ Vec3f limbPos[15]; - /* 0x28C */ s32 limbIndex; + /* 0x1D8 */ Vec3f bodyPartsPos[EN_TALK_GIBUD_BODYPART_MAX]; + /* 0x28C */ s32 bodyPartIndex; /* 0x290 */ s32 requestedItemIndex; /* 0x294 */ PlayerItemAction itemAction; /* 0x298 */ s32 switchFlag; 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 2e0b17605..b5742b7d6 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1188,9 +1188,12 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL Actor* leftHandActor = this->player.heldActor; if (leftHandActor != NULL) { - leftHandActor->world.pos.x = (this->player.bodyPartsPos[15].x + this->player.leftHandWorld.pos.x) / 2.0f; - leftHandActor->world.pos.y = (this->player.bodyPartsPos[15].y + this->player.leftHandWorld.pos.y) / 2.0f; - leftHandActor->world.pos.z = (this->player.bodyPartsPos[15].z + this->player.leftHandWorld.pos.z) / 2.0f; + leftHandActor->world.pos.x = + (this->player.bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x + this->player.leftHandWorld.pos.x) / 2.0f; + leftHandActor->world.pos.y = + (this->player.bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y + this->player.leftHandWorld.pos.y) / 2.0f; + leftHandActor->world.pos.z = + (this->player.bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + this->player.leftHandWorld.pos.z) / 2.0f; } } else if (limbIndex == OBJECT_TEST3_LIMB_0B) { Actor* actor730 = this->player.targetedActor; 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 59cb9d6f0..5e2250388 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -465,7 +465,7 @@ void func_80C114C0(EnThiefbird* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 11, 2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_THIEFBIRD_BODYPART_MAX, 2, 0.2f, 0.2f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -656,8 +656,8 @@ void func_80C11DF0(EnThiefbird* this, PlayState* play) { } if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) { - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) { - func_800B3030(play, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 0x8C, 0, 0); + for (i = 0; i < EN_THIEFBIRD_BODYPART_MAX; i++) { + func_800B3030(play, &this->bodyPartsPos[i], &gZeroVec3f, &gZeroVec3f, 0x8C, 0, 0); } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT); @@ -888,10 +888,10 @@ void func_80C127F4(EnThiefbird* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, &this->unk_3EC->actor), 3, 0x2000, 0x100); } - temp_v0 = Math_Vec3f_Pitch(&this->limbPos[9], &this->unk_3EC->actor.world.pos); + temp_v0 = Math_Vec3f_Pitch(&this->bodyPartsPos[EN_THIEFBIRD_BODYPART_9], &this->unk_3EC->actor.world.pos); temp_v0 = CLAMP(temp_v0, -0x3000, 0x3000); Math_SmoothStepToS(&this->actor.shape.rot.x, temp_v0, 4, 0x800, 0x80); - temp_f0 = Actor_WorldDistXYZToPoint(&this->unk_3EC->actor, &this->limbPos[9]); + temp_f0 = Actor_WorldDistXYZToPoint(&this->unk_3EC->actor, &this->bodyPartsPos[EN_THIEFBIRD_BODYPART_9]); this->actor.speed = (0.02f * temp_f0) + 2.0f; this->actor.speed = CLAMP_MAX(this->actor.speed, 4.0f); if ((this->unk_3EC->actor.speed <= 0.0f) && (temp_f0 < 40.0f)) { @@ -1065,14 +1065,31 @@ s32 EnThiefbird_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve return false; } +static s8 sLimbToBodyParts[TAKKURI_LIMB_MAX] = { + BODYPART_NONE, // TAKKURI_LIMB_NONE + EN_THIEFBIRD_BODYPART_0, // TAKKURI_LIMB_BODY + BODYPART_NONE, // TAKKURI_LIMB_LEFT_WING_BASE + EN_THIEFBIRD_BODYPART_1, // TAKKURI_LIMB_LEFT_WING_MIDDLE + EN_THIEFBIRD_BODYPART_3, // TAKKURI_LIMB_LEFT_WING_TIP + BODYPART_NONE, // TAKKURI_LIMB_RIGHT_WING_BASE + EN_THIEFBIRD_BODYPART_2, // TAKKURI_LIMB_RIGHT_WING_MIDDLE + EN_THIEFBIRD_BODYPART_5, // TAKKURI_LIMB_RIGHT_WING_TIP + BODYPART_NONE, // TAKKURI_LIMB_NECK + BODYPART_NONE, // TAKKURI_LIMB_HEAD + EN_THIEFBIRD_BODYPART_7, // TAKKURI_LIMB_RIGHT_EAR + EN_THIEFBIRD_BODYPART_8, // TAKKURI_LIMB_LEFT_EAR + EN_THIEFBIRD_BODYPART_9, // TAKKURI_LIMB_LOWER_BEAK + BODYPART_NONE, // TAKKURI_LIMB_EYES + BODYPART_NONE, // TAKKURI_LIMB_LEGS + EN_THIEFBIRD_BODYPART_10, // TAKKURI_LIMB_FEET + BODYPART_NONE, // TAKKURI_LIMB_STOLEN_ITEM +}; + void EnThiefbird_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static s8 D_80C13698[] = { - -1, 0, -1, 1, 3, -1, 2, 5, -1, -1, 7, 8, 9, -1, -1, 10, -1, - }; EnThiefbird* this = THIS; s32 pad; Gfx* gfx; - s8 idx; + s8 bodyPartIndex; Collider_UpdateSpheres(limbIndex, &this->collider); if ((limbIndex == TAKKURI_LIMB_RIGHT_EAR) || (limbIndex == TAKKURI_LIMB_LEFT_EAR)) { @@ -1108,14 +1125,14 @@ void EnThiefbird_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s } } - idx = D_80C13698[limbIndex]; - if (idx != -1) { - if (idx == 9) { - Matrix_MultVecX(1000.0f, &this->limbPos[idx]); + bodyPartIndex = sLimbToBodyParts[limbIndex]; + if (bodyPartIndex != BODYPART_NONE) { + if (bodyPartIndex == EN_THIEFBIRD_BODYPART_9) { + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[bodyPartIndex]); } else { - Matrix_MultZero(&this->limbPos[idx]); - if ((idx == 3) || (idx == 5)) { - Matrix_MultVecX(2000.0f, &this->limbPos[idx + 1]); + Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); + if ((bodyPartIndex == EN_THIEFBIRD_BODYPART_3) || (bodyPartIndex == EN_THIEFBIRD_BODYPART_5)) { + Matrix_MultVecX(2000.0f, &this->bodyPartsPos[bodyPartIndex + 1]); } } } @@ -1163,7 +1180,7 @@ void EnThiefbird_Draw(Actor* thisx, PlayState* play) { func_800AE5A0(play); } func_80C13354(this, play); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_THIEFBIRD_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); Math_Vec3s_ToVec3f(&this->actor.focus.pos, &this->collider.elements[1].dim.worldSphere.center); } diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h index c40555299..bbe354848 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h @@ -18,6 +18,21 @@ typedef struct { /* 0x22 */ s16 unk_22; } EnThiefbirdUnkStruct; // size = 0x24 +typedef enum EnThiefbirdBodyPart { + /* 0 */ EN_THIEFBIRD_BODYPART_0, + /* 1 */ EN_THIEFBIRD_BODYPART_1, + /* 2 */ EN_THIEFBIRD_BODYPART_2, + /* 3 */ EN_THIEFBIRD_BODYPART_3, + /* 4 */ EN_THIEFBIRD_BODYPART_4, + /* 5 */ EN_THIEFBIRD_BODYPART_5, + /* 6 */ EN_THIEFBIRD_BODYPART_6, + /* 7 */ EN_THIEFBIRD_BODYPART_7, + /* 8 */ EN_THIEFBIRD_BODYPART_8, + /* 9 */ EN_THIEFBIRD_BODYPART_9, + /* 10 */ EN_THIEFBIRD_BODYPART_10, + /* 11 */ EN_THIEFBIRD_BODYPART_MAX +} EnThiefbirdBodyPart; + typedef struct EnThiefbird { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -32,7 +47,7 @@ typedef struct EnThiefbird { /* 0x208 */ Vec3s morphTable[TAKKURI_LIMB_MAX]; /* 0x270 */ ColliderJntSph collider; /* 0x290 */ ColliderJntSphElement colliderElements[3]; - /* 0x350 */ Vec3f limbPos[11]; + /* 0x350 */ Vec3f bodyPartsPos[EN_THIEFBIRD_BODYPART_MAX]; /* 0x3D4 */ f32 drawDmgEffAlpha; /* 0x3D8 */ f32 drawDmgEffScale; /* 0x3DC */ f32 drawDmgEffFrozenSteamScale; 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 b9d547fb0..dbf446aa5 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -245,18 +245,18 @@ void func_80893BCC(EnTite* this, PlayState* play) { SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); 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); + for (i = ENTITE_BODYPART_5; i < ENTITE_BODYPART_MAX; i++) { + func_800BBFB0(play, &this->bodyPartsPos[i], 1.0f, 2, 80, 15, 1); } } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) { - Vec3f* ptr; + Vec3f* bodyPartPos; - for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { + for (i = ENTITE_BODYPART_5; i < ENTITE_BODYPART_MAX; i++) { for (j = 0; j < 2; j++) { - ptr = &this->limbPos[i]; - sp7C.x = ptr->x + Rand_CenteredFloat(1.0f); - sp7C.y = ptr->y + Rand_CenteredFloat(1.0f); - sp7C.z = ptr->z + Rand_CenteredFloat(1.0f); + bodyPartPos = &this->bodyPartsPos[i]; + sp7C.x = bodyPartPos->x + Rand_CenteredFloat(1.0f); + sp7C.y = bodyPartPos->y + Rand_CenteredFloat(1.0f); + sp7C.z = bodyPartPos->z + Rand_CenteredFloat(1.0f); func_800B0DE0(play, &sp7C, &gZeroVec3f, &D_80896B64, &D_80896B3C, &D_80896B40, (s32)Rand_ZeroFloat(16.0f) + 80, 15); } @@ -282,7 +282,7 @@ void func_80893E54(EnTite* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 9, 2, 0.2f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ENTITE_BODYPART_MAX, 2, 0.2f, 0.2f); this->actor.flags |= ACTOR_FLAG_200; } } @@ -650,8 +650,8 @@ void func_80895020(EnTite* this, PlayState* play) { this->actor.speed = 0.0f; ptr = &this->unk_33C[0]; - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++, ptr++) { - Math_Vec3f_Diff(&this->limbPos[i], &this->actor.world.pos, &sp74); + for (i = 0; i < ENTITE_BODYPART_MAX; i++, ptr++) { + Math_Vec3f_Diff(&this->bodyPartsPos[i], &this->actor.world.pos, &sp74); temp_f0 = Math3D_Vec3fMagnitude(&sp74); if (temp_f0 > 1.0f) { temp_f0 = 1.2f / temp_f0; @@ -671,16 +671,16 @@ void func_808951B8(EnTite* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.z, 0x4000, 4, 0x1000, 0x400); if (this->unk_2BC == 0) { - for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) { - func_800B3030(play, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 1); - SoundSource_PlaySfxAtFixedWorldPos(play, &this->limbPos[i], 11, NA_SE_EN_EXTINCT); + for (i = 0; i < ENTITE_BODYPART_MAX; i++) { + func_800B3030(play, &this->bodyPartsPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 1); + SoundSource_PlaySfxAtFixedWorldPos(play, &this->bodyPartsPos[i], 11, NA_SE_EN_EXTINCT); } Actor_Kill(&this->actor); return; } - for (i = 0; i < ARRAY_COUNT(this->unk_33C); i++) { - Math_Vec3f_Sum(&this->limbPos[i], &this->unk_33C[i], &this->limbPos[i]); + for (i = 0; i < ENTITE_BODYPART_MAX; i++) { + Math_Vec3f_Sum(&this->bodyPartsPos[i], &this->unk_33C[i], &this->bodyPartsPos[i]); this->unk_33C[i].y += this->actor.gravity; } } @@ -1040,8 +1040,8 @@ void func_808963B4(EnTite* this, PlayState* play) { Vec3f sp48; if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { - for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { - Math_Vec3f_Copy(&sp48, &this->limbPos[i]); + for (i = ENTITE_BODYPART_5; i < ENTITE_BODYPART_MAX; i++) { + Math_Vec3f_Copy(&sp48, &this->bodyPartsPos[i]); sp48.y = this->actor.world.pos.y + this->actor.depthInWater; EffectSsGRipple_Spawn(play, &sp48, 0, 220, 0); } @@ -1049,7 +1049,7 @@ void func_808963B4(EnTite* this, PlayState* play) { s32 temp = play->gameplayFrames & 7; if (!(temp & 1) && (this->actor.depthInWater < 10.0f)) { - Math_Vec3f_Copy(&sp48, &this->limbPos[5 + (temp >> 1)]); + Math_Vec3f_Copy(&sp48, &this->bodyPartsPos[ENTITE_BODYPART_5 + (temp >> 1)]); sp48.y = this->actor.world.pos.y + this->actor.depthInWater; EffectSsGRipple_Spawn(play, &sp48, 0, 220, 0); } @@ -1114,40 +1114,90 @@ s32 EnTite_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* return false; } +static s8 sLimbToBodyParts1[OBJECT_TITE_LIMB_MAX] = { + BODYPART_NONE, // OBJECT_TITE_LIMB_NONE + BODYPART_NONE, // OBJECT_TITE_LIMB_01 + BODYPART_NONE, // OBJECT_TITE_LIMB_02 + BODYPART_NONE, // OBJECT_TITE_LIMB_03 + ENTITE_BODYPART_0, // OBJECT_TITE_LIMB_04 + BODYPART_NONE, // OBJECT_TITE_LIMB_05 + BODYPART_NONE, // OBJECT_TITE_LIMB_06 + BODYPART_NONE, // OBJECT_TITE_LIMB_07 + ENTITE_BODYPART_1, // OBJECT_TITE_LIMB_08 + BODYPART_NONE, // OBJECT_TITE_LIMB_09 + BODYPART_NONE, // OBJECT_TITE_LIMB_0A + BODYPART_NONE, // OBJECT_TITE_LIMB_0B + BODYPART_NONE, // OBJECT_TITE_LIMB_0C + ENTITE_BODYPART_2, // OBJECT_TITE_LIMB_0D + BODYPART_NONE, // OBJECT_TITE_LIMB_0E + BODYPART_NONE, // OBJECT_TITE_LIMB_0F + BODYPART_NONE, // OBJECT_TITE_LIMB_10 + BODYPART_NONE, // OBJECT_TITE_LIMB_11 + ENTITE_BODYPART_3, // OBJECT_TITE_LIMB_12 + BODYPART_NONE, // OBJECT_TITE_LIMB_13 + BODYPART_NONE, // OBJECT_TITE_LIMB_14 + BODYPART_NONE, // OBJECT_TITE_LIMB_15 + BODYPART_NONE, // OBJECT_TITE_LIMB_16 + ENTITE_BODYPART_4, // OBJECT_TITE_LIMB_17 + BODYPART_NONE, // OBJECT_TITE_LIMB_18 +}; + +static s8 sLimbToBodyParts2[OBJECT_TITE_LIMB_MAX] = { + BODYPART_NONE, // OBJECT_TITE_LIMB_NONE + BODYPART_NONE, // OBJECT_TITE_LIMB_01 + BODYPART_NONE, // OBJECT_TITE_LIMB_02 + BODYPART_NONE, // OBJECT_TITE_LIMB_03 + ENTITE_BODYPART_0, // OBJECT_TITE_LIMB_04 + BODYPART_NONE, // OBJECT_TITE_LIMB_05 + BODYPART_NONE, // OBJECT_TITE_LIMB_06 + BODYPART_NONE, // OBJECT_TITE_LIMB_07 + ENTITE_BODYPART_1, // OBJECT_TITE_LIMB_08 + ENTITE_BODYPART_5, // OBJECT_TITE_LIMB_09 + BODYPART_NONE, // OBJECT_TITE_LIMB_0A + BODYPART_NONE, // OBJECT_TITE_LIMB_0B + BODYPART_NONE, // OBJECT_TITE_LIMB_0C + ENTITE_BODYPART_2, // OBJECT_TITE_LIMB_0D + ENTITE_BODYPART_6, // OBJECT_TITE_LIMB_0E + BODYPART_NONE, // OBJECT_TITE_LIMB_0F + BODYPART_NONE, // OBJECT_TITE_LIMB_10 + BODYPART_NONE, // OBJECT_TITE_LIMB_11 + ENTITE_BODYPART_3, // OBJECT_TITE_LIMB_12 + ENTITE_BODYPART_7, // OBJECT_TITE_LIMB_13 + BODYPART_NONE, // OBJECT_TITE_LIMB_14 + BODYPART_NONE, // OBJECT_TITE_LIMB_15 + BODYPART_NONE, // OBJECT_TITE_LIMB_16 + ENTITE_BODYPART_4, // OBJECT_TITE_LIMB_17 + ENTITE_BODYPART_8, // OBJECT_TITE_LIMB_18 +}; + void EnTite_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static s8 D_80896B70[] = { - -1, -1, -1, -1, 0, -1, -1, -1, 1, -1, -1, -1, -1, 2, -1, -1, -1, -1, 3, -1, -1, -1, -1, 4, -1, - }; - static s8 D_80896B8C[] = { - -1, -1, -1, -1, 0, -1, -1, -1, 1, 5, -1, -1, -1, 2, 6, -1, -1, -1, 3, 7, -1, -1, -1, 4, 8, - }; EnTite* this = THIS; MtxF* matrix; - s8 idx; + s8 bodyPart1Index; if (this->unk_2BA == 0) { - idx = D_80896B70[limbIndex]; - if (idx != -1) { - Matrix_MultZero(&this->limbPos[idx]); - if (idx >= 1) { - Matrix_MultVecX(2500.0f, &this->limbPos[idx + 4]); + bodyPart1Index = sLimbToBodyParts1[limbIndex]; + if (bodyPart1Index != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[bodyPart1Index]); + if (bodyPart1Index >= ENTITE_BODYPART_1) { + Matrix_MultVecX(2500.0f, &this->bodyPartsPos[ENTITE_BODYPART_4 + bodyPart1Index]); } } } else if (this->unk_2BA > 0) { - if (D_80896B8C[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_80896B8C[limbIndex]]); + if (sLimbToBodyParts2[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts2[limbIndex]]); } if (limbIndex == 24) { this->unk_2BA = -1; } - } else if (D_80896B8C[limbIndex] != -1) { + } else if (sLimbToBodyParts2[limbIndex] != BODYPART_NONE) { OPEN_DISPS(play->state.gfxCtx); matrix = Matrix_GetCurrent(); - matrix->xw = this->limbPos[D_80896B8C[limbIndex]].x; - matrix->yw = this->limbPos[D_80896B8C[limbIndex]].y; - matrix->zw = this->limbPos[D_80896B8C[limbIndex]].z; + matrix->xw = this->bodyPartsPos[sLimbToBodyParts2[limbIndex]].x; + matrix->yw = this->bodyPartsPos[sLimbToBodyParts2[limbIndex]].y; + matrix->zw = this->bodyPartsPos[sLimbToBodyParts2[limbIndex]].z; Matrix_RotateZS(this->actor.world.rot.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -1181,7 +1231,7 @@ void EnTite_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnTite_OverrideLimbDraw, EnTite_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENTITE_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); CLOSE_DISPS(play->state.gfxCtx); 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 af77f4a8d..66fec66b3 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h @@ -15,6 +15,19 @@ typedef enum { /* 0 */ ENTITE_MINUS_0 } EnTiteParam; +typedef enum EnTiteBodyPart { + /* 0 */ ENTITE_BODYPART_0, + /* 1 */ ENTITE_BODYPART_1, + /* 2 */ ENTITE_BODYPART_2, + /* 3 */ ENTITE_BODYPART_3, + /* 4 */ ENTITE_BODYPART_4, + /* 5 */ ENTITE_BODYPART_5, + /* 6 */ ENTITE_BODYPART_6, + /* 7 */ ENTITE_BODYPART_7, + /* 8 */ ENTITE_BODYPART_8, + /* 9 */ ENTITE_BODYPART_MAX +} EnTiteBodyPart; + typedef struct EnTite { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -31,8 +44,8 @@ typedef struct EnTite { /* 0x2C4 */ f32 drawDmgEffAlpha; /* 0x2C8 */ f32 drawDmgEffScale; /* 0x2CC */ f32 drawDmgEffFrozenSteamScale; - /* 0x2D0 */ Vec3f limbPos[9]; - /* 0x33C */ Vec3f unk_33C[9]; + /* 0x2D0 */ Vec3f bodyPartsPos[ENTITE_BODYPART_MAX]; + /* 0x33C */ Vec3f unk_33C[ENTITE_BODYPART_MAX]; /* 0x3A8 */ Gfx* unk_3A8; /* 0x3AC */ ColliderSphere collider; } EnTite; // size = 0x404 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 7ad778659..93c494489 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -123,7 +123,7 @@ void func_80AC0A6C(EnTwig* this, PlayState* play) { void func_80AC0A7C(EnTwig* this, PlayState* play) { Player* player = GET_PLAYER(play); - Math_Vec3f_Copy(&this->unk_180, &player->bodyPartsPos[0]); + Math_Vec3f_Copy(&this->unk_180, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); this->unk_178 = 0; this->unk_17A = 0; this->actionFunc = func_80AC0AC8; @@ -146,7 +146,7 @@ void func_80AC0AC8(EnTwig* this, PlayState* play) { SubS_ConstructPlane(&this->dyna.actor.world.pos, &D_80AC10D0, &this->dyna.actor.shape.rot, &sp4C); if ((sCurrentRing == RACERING_GET_PARAM_FE0(&this->dyna.actor)) && Math3D_LineSegVsPlane(sp4C.normal.x, sp4C.normal.y, sp4C.normal.z, sp4C.originDist, &this->unk_180, - &player->bodyPartsPos[0], &sp40, 0)) { + &player->bodyPartsPos[PLAYER_BODYPART_WAIST], &sp40, 0)) { if (Math3D_Vec3fDistSq(&this->dyna.actor.world.pos, &sp40) <= SQ(this->dyna.actor.scale.x * 0.345f * 40.0f)) { func_80AC0CC4(this, play); return; @@ -162,7 +162,7 @@ void func_80AC0AC8(EnTwig* this, PlayState* play) { this->dyna.actor.world.rot.y = this->dyna.actor.yawTowardsPlayer; } } - Math_Vec3f_Copy(&this->unk_180, &player->bodyPartsPos[0]); + Math_Vec3f_Copy(&this->unk_180, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); } void func_80AC0CC4(EnTwig* this, PlayState* play) { @@ -180,9 +180,12 @@ void func_80AC0D2C(EnTwig* this, PlayState* play) { static Color_RGBA8 sColorYellow = { 255, 255, 0, 0 }; Player* player = GET_PLAYER(play); - Math_SmoothStepToF(&this->dyna.actor.world.pos.x, player->bodyPartsPos[0].x, 0.5f, 100.0f, 0.01f); - Math_SmoothStepToF(&this->dyna.actor.world.pos.y, player->bodyPartsPos[0].y, 0.5f, 100.0f, 0.01f); - Math_SmoothStepToF(&this->dyna.actor.world.pos.z, player->bodyPartsPos[0].z, 0.5f, 100.0f, 0.01f); + Math_SmoothStepToF(&this->dyna.actor.world.pos.x, player->bodyPartsPos[PLAYER_BODYPART_WAIST].x, 0.5f, 100.0f, + 0.01f); + Math_SmoothStepToF(&this->dyna.actor.world.pos.y, player->bodyPartsPos[PLAYER_BODYPART_WAIST].y, 0.5f, 100.0f, + 0.01f); + Math_SmoothStepToF(&this->dyna.actor.world.pos.z, player->bodyPartsPos[PLAYER_BODYPART_WAIST].z, 0.5f, 100.0f, + 0.01f); this->dyna.actor.shape.rot.z += (s16)this->unk_170; this->dyna.actor.scale.x -= this->unk_174; if (this->dyna.actor.scale.x < 0.0f) { 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 2e7392cfc..2d9a12b54 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -137,15 +137,6 @@ static f32 sYOffsetPerForm[PLAYER_FORM_MAX] = { 30.0f, // PLAYER_FORM_HUMAN }; -/** - * This maps a given limb based on its limbIndex to its appropriate index - * in the limbPos array. An index of -1 indicates that the limb is not part - * of the limbPos array. - */ -static s8 sLimbIndexToLimbPosIndex[] = { - -1, -1, -1, -1, 0, -1, -1, 1, -1, 2, -1, -1, 3, -1, 4, -1, -1, 5, -1, -1, -1, 6, 7, -1, 8, -}; - void EnWallmas_Init(Actor* thisx, PlayState* play) { EnWallmas* this = THIS; @@ -220,7 +211,7 @@ void EnWallmas_ThawIfFrozen(EnWallmas* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = 0; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 11, 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, WALLMASTER_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -712,17 +703,49 @@ s32 EnWallmas_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 return false; } +/** + * This maps a given limb based on its limbIndex to its appropriate index + * in the bodyPartsPos array. + */ +static s8 sLimbToBodyParts[WALLMASTER_LIMB_MAX] = { + BODYPART_NONE, // WALLMASTER_LIMB_NONE + BODYPART_NONE, // WALLMASTER_LIMB_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_HAND + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_ROOT + WALLMASTER_BODYPART_0, // WALLMASTER_LIMB_INDEX_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_INDEX_FINGER_MIDDLE + WALLMASTER_BODYPART_1, // WALLMASTER_LIMB_INDEX_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_ROOT + WALLMASTER_BODYPART_2, // WALLMASTER_LIMB_RING_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_RING_FINGER_MIDDLE + WALLMASTER_BODYPART_3, // WALLMASTER_LIMB_RING_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_ROOT + WALLMASTER_BODYPART_4, // WALLMASTER_LIMB_MIDDLE_FINGER_PROXIMAL + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_MIDDLE_FINGER_MIDDLE + WALLMASTER_BODYPART_5, // WALLMASTER_LIMB_MIDDLE_FINGER_DISTAL + BODYPART_NONE, // WALLMASTER_LIMB_WRIST_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_WRIST + BODYPART_NONE, // WALLMASTER_LIMB_THUMB_ROOT + WALLMASTER_BODYPART_6, // WALLMASTER_LIMB_THUMB_PROXIMAL + WALLMASTER_BODYPART_7, // WALLMASTER_LIMB_THUMB_DISTAL_ROOT + BODYPART_NONE, // WALLMASTER_LIMB_THUMB_MIDDLE + WALLMASTER_BODYPART_8, // WALLMASTER_LIMB_THUMB_DISTAL +}; + void EnWallmas_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnWallmas* this = THIS; Gfx* gfx; - if (sLimbIndexToLimbPosIndex[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[sLimbIndexToLimbPosIndex[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == WALLMASTER_LIMB_WRIST) { - Matrix_MultVecX(1000.0f, &this->limbPos[9]); - Matrix_MultVecX(-1000.0f, &this->limbPos[10]); + Matrix_MultVecX(1000.0f, &this->bodyPartsPos[WALLMASTER_BODYPART_9]); + Matrix_MultVecX(-1000.0f, &this->bodyPartsPos[WALLMASTER_BODYPART_10]); } else if (limbIndex == WALLMASTER_LIMB_HAND) { OPEN_DISPS(play->state.gfxCtx); @@ -752,7 +775,7 @@ void EnWallmas_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnWallmas_OverrideLimbDraw, EnWallmas_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, WALLMASTER_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h index 4d1466b95..383d6d4ca 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h @@ -36,6 +36,21 @@ struct EnWallmas; typedef void (*EnWallmasActionFunc)(struct EnWallmas*, PlayState*); +typedef enum WallmasterBodyPart { + /* 0 */ WALLMASTER_BODYPART_0, + /* 1 */ WALLMASTER_BODYPART_1, + /* 2 */ WALLMASTER_BODYPART_2, + /* 3 */ WALLMASTER_BODYPART_3, + /* 4 */ WALLMASTER_BODYPART_4, + /* 5 */ WALLMASTER_BODYPART_5, + /* 6 */ WALLMASTER_BODYPART_6, + /* 7 */ WALLMASTER_BODYPART_7, + /* 8 */ WALLMASTER_BODYPART_8, + /* 9 */ WALLMASTER_BODYPART_9, + /* 10 */ WALLMASTER_BODYPART_10, + /* 11 */ WALLMASTER_BODYPART_MAX +} WallmasterBodyPart; + typedef struct EnWallmas { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -50,7 +65,7 @@ typedef struct EnWallmas { /* 0x2C8 */ f32 drawDmgEffAlpha; /* 0x2CC */ f32 drawDmgEffScale; /* 0x2D0 */ f32 drawDmgEffFrozenSteamScale; - /* 0x2D4 */ Vec3f limbPos[11]; + /* 0x2D4 */ Vec3f bodyPartsPos[WALLMASTER_BODYPART_MAX]; /* 0x358 */ ColliderCylinder collider; } EnWallmas; // size = 0x3A4 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 4dc8d75b5..6e31192b2 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -377,7 +377,7 @@ void func_80990854(EnWf* this, PlayState* play) { this->collider2.base.colType = COLTYPE_HIT5; this->collider3.base.colType = COLTYPE_HIT5; this->drawDmgEffAlpha = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->limbPos, 10, 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, WOLFOS_BODYPART_MAX, 2, 0.3f, 0.2f); this->actor.flags |= ACTOR_FLAG_400; } } @@ -1549,17 +1549,39 @@ s32 EnWf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po return false; } +static s8 sLimbToBodyParts[WOLFOS_NORMAL_LIMB_MAX] = { + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_NONE + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_ROOT + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_LEFT_THIGH + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_LEFT_SHIN + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_LEFT_PASTERN + WOLFOS_BODYPART_BACK_LEFT_PAW, // WOLFOS_NORMAL_LIMB_BACK_LEFT_PAW + WOLFOS_BODYPART_TAIL, // WOLFOS_NORMAL_LIMB_TAIL + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_ABDOMEN + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_RIGHT_THIGH + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_RIGHT_SHIN + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_BACK_RIGHT_PASTERN + WOLFOS_BODYPART_BACK_RIGHT_PAW, // WOLFOS_NORMAL_LIMB_BACK_RIGHT_PAW + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_THORAX + WOLFOS_BODYPART_FRONT_RIGHT_UPPER_LEG, // WOLFOS_NORMAL_LIMB_FRONT_RIGHT_UPPER_LEG + WOLFOS_BODYPART_FRONT_RIGHT_LOWER_LEG, // WOLFOS_NORMAL_LIMB_FRONT_RIGHT_LOWER_LEG + WOLFOS_BODYPART_FRONT_RIGHT_CLAW, // WOLFOS_NORMAL_LIMB_FRONT_RIGHT_CLAW + WOLFOS_BODYPART_HEAD_ROOT, // WOLFOS_NORMAL_LIMB_HEAD_ROOT + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_HEAD + BODYPART_NONE, // WOLFOS_NORMAL_LIMB_EYES + WOLFOS_BODYPART_FRONT_LEFT_UPPER_LEG, // WOLFOS_NORMAL_LIMB_FRONT_LEFT_UPPER_LEG + WOLFOS_BODYPART_FRONT_LEFT_LOWER_LEG, // WOLFOS_NORMAL_LIMB_FRONT_LEFT_LOWER_LEG + WOLFOS_BODYPART_FRONT_LEFT_CLAW, // WOLFOS_NORMAL_LIMB_FRONT_LEFT_CLAW +}; + void EnWf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - static s8 D_809942FC[] = { - -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, -1, 2, -1, 3, 4, 5, 6, -1, -1, 7, 8, 9, - }; EnWf* this = THIS; Vec3f sp20; Collider_UpdateSpheres(limbIndex, &this->collider1); - if (D_809942FC[limbIndex] != -1) { - Matrix_MultZero(&this->limbPos[D_809942FC[limbIndex]]); + if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { + Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } if (limbIndex == WOLFOS_NORMAL_LIMB_TAIL) { @@ -1588,7 +1610,7 @@ void EnWf_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnWf_OverrideLimbDraw, EnWf_PostLimbDraw, &this->actor); - Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, WOLFOS_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); } } diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.h b/src/overlays/actors/ovl_En_Wf/z_en_wf.h index c8a0c7af8..6e9db0be1 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.h +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.h @@ -10,6 +10,20 @@ typedef void (*EnWfActionFunc)(struct EnWf*, PlayState*); #define ENWF_GET_80(thisx) ((thisx)->params & 0x80) +typedef enum WolfosBodyPart { + /* 0 */ WOLFOS_BODYPART_BACK_LEFT_PAW, + /* 1 */ WOLFOS_BODYPART_TAIL, + /* 2 */ WOLFOS_BODYPART_BACK_RIGHT_PAW, + /* 3 */ WOLFOS_BODYPART_FRONT_RIGHT_UPPER_LEG, + /* 4 */ WOLFOS_BODYPART_FRONT_RIGHT_LOWER_LEG, + /* 5 */ WOLFOS_BODYPART_FRONT_RIGHT_CLAW, + /* 6 */ WOLFOS_BODYPART_HEAD_ROOT, + /* 7 */ WOLFOS_BODYPART_FRONT_LEFT_UPPER_LEG, + /* 8 */ WOLFOS_BODYPART_FRONT_LEFT_LOWER_LEG, + /* 9 */ WOLFOS_BODYPART_FRONT_LEFT_CLAW, + /* 10 */ WOLFOS_BODYPART_MAX +} WolfosBodyPart; + typedef struct EnWf { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -30,7 +44,7 @@ typedef struct EnWf { /* 0x2AC */ f32 drawDmgEffAlpha; /* 0x2B0 */ f32 drawDmgEffScale; /* 0x2B4 */ f32 drawDmgEffFrozenSteamScale; - /* 0x2B8 */ Vec3f limbPos[10]; + /* 0x2B8 */ Vec3f bodyPartsPos[WOLFOS_BODYPART_MAX]; /* 0x330 */ ColliderJntSph collider1; /* 0x350 */ ColliderJntSphElement collider1Elements[4]; /* 0x450 */ ColliderCylinder collider2; 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 a9d99412a..9bd3a0bcc 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1097,7 +1097,7 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { s32 i; if ((this->drawDmgEffTimer < 50) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX)) { - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 1.0f, 0.7f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_WIZ_BODYPART_MAX, 2, 1.0f, 0.7f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->rotationalVelocity = 0x4E20; @@ -1390,10 +1390,10 @@ void EnWiz_PostLimbDrawOpa(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r (limbIndex == WIZROBE_LIMB_NECK) || (limbIndex == WIZROBE_LIMB_HEAD) || (limbIndex == WIZROBE_LIMB_JAW) || (limbIndex == WIZROBE_LIMB_LEFT_SHIN) || (limbIndex == WIZROBE_LIMB_RIGHT_SHIN) || (limbIndex == WIZROBE_LIMB_LOINCLOTH)) { - Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); - this->bodyPartsPosIndex++; - if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { - this->bodyPartsPosIndex = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= EN_WIZ_BODYPART_MAX) { + this->bodyPartIndex = 0; } } } @@ -1439,10 +1439,10 @@ void EnWiz_PostLimbDrawXlu(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r (limbIndex == WIZROBE_LIMB_NECK) || (limbIndex == WIZROBE_LIMB_HEAD) || (limbIndex == WIZROBE_LIMB_JAW) || (limbIndex == WIZROBE_LIMB_LEFT_SHIN) || (limbIndex == WIZROBE_LIMB_RIGHT_SHIN) || (limbIndex == WIZROBE_LIMB_LOINCLOTH)) { - Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); - this->bodyPartsPosIndex++; - if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { - this->bodyPartsPosIndex = 0; + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= EN_WIZ_BODYPART_MAX) { + this->bodyPartIndex = 0; } } } @@ -1487,9 +1487,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { this->drawDmgEffFrozenSteamScale = 0.8f; } - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), - this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, - this->drawDmgEffType); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_WIZ_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, this->drawDmgEffType); } if (this->platformCount > 0) { diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index 70f7a6c64..80c8be208 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -17,6 +17,22 @@ struct EnWiz; typedef void (*EnWizActionFunc)(struct EnWiz*, PlayState*); +typedef enum EnWizBodyPart { + /* 0 */ EN_WIZ_BODYPART_0, + /* 1 */ EN_WIZ_BODYPART_1, + /* 2 */ EN_WIZ_BODYPART_2, + /* 3 */ EN_WIZ_BODYPART_3, + /* 4 */ EN_WIZ_BODYPART_4, + /* 5 */ EN_WIZ_BODYPART_5, + /* 6 */ EN_WIZ_BODYPART_6, + /* 7 */ EN_WIZ_BODYPART_7, + /* 8 */ EN_WIZ_BODYPART_8, + /* 9 */ EN_WIZ_BODYPART_9, + /* 10 */ EN_WIZ_BODYPART_10, + /* 11 */ EN_WIZ_BODYPART_11, + /* 12 */ EN_WIZ_BODYPART_MAX +} EnWizBodyPart; + typedef struct EnWiz { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -68,8 +84,8 @@ typedef struct EnWiz { /* 0x754 */ s16 drawDmgEffType; /* 0x758 */ f32 drawDmgEffScale; /* 0x75C */ f32 drawDmgEffFrozenSteamScale; - /* 0x760 */ Vec3f bodyPartsPos[12]; - /* 0x7F0 */ s16 bodyPartsPosIndex; + /* 0x760 */ Vec3f bodyPartsPos[EN_WIZ_BODYPART_MAX]; + /* 0x7F0 */ s16 bodyPartIndex; /* 0x7F2 */ s16 ghostAlpha[10]; /* 0x806 */ s16 ghostNextPlatformIndex[10]; /* 0x81C */ Vec3f ghostPos[10]; 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 b892b3842..b89d6a5fb 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -98,9 +98,64 @@ static AnimationInfoS sAnimationInfo[] = { { &gZoraWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, }; -s8 sBodyParts[] = { -1, 1, 12, 13, 14, 9, 10, 11, 0, 6, 7, 8, 3, 4, 5, 2, -1, -1, -1, -1 }; -s8 sParentBodyParts[] = { 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13 }; -u8 sShadowSizes[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static s8 sLimbToBodyParts[ZORA_LIMB_MAX] = { + BODYPART_NONE, // ZORA_LIMB_NONE + ZORA_BODYPART_1, // ZORA_LIMB_PELVIS + ZORA_BODYPART_12, // ZORA_LIMB_LEFT_THIGH + ZORA_BODYPART_13, // ZORA_LIMB_LEFT_SHIN + ZORA_BODYPART_14, // ZORA_LIMB_LEFT_FOOT + ZORA_BODYPART_9, // ZORA_LIMB_RIGHT_THIGH + ZORA_BODYPART_10, // ZORA_LIMB_RIGHT_SHIN + ZORA_BODYPART_11, // ZORA_LIMB_RIGHT_FOOT + ZORA_BODYPART_0, // ZORA_LIMB_TORSO + ZORA_BODYPART_6, // ZORA_LIMB_LEFT_UPPER_ARM + ZORA_BODYPART_7, // ZORA_LIMB_LEFT_FOREARM + ZORA_BODYPART_8, // ZORA_LIMB_LEFT_HAND + ZORA_BODYPART_3, // ZORA_LIMB_RIGHT_UPPER_ARM + ZORA_BODYPART_4, // ZORA_LIMB_RIGHT_FOREARM + ZORA_BODYPART_5, // ZORA_LIMB_RIGHT_HAND + ZORA_BODYPART_2, // ZORA_LIMB_HEAD + BODYPART_NONE, // ZORA_LIMB_HEAD_TAIL_1 + BODYPART_NONE, // ZORA_LIMB_HEAD_TAIL_2 + BODYPART_NONE, // ZORA_LIMB_HEAD_TAIL_3 + BODYPART_NONE, // ZORA_LIMB_HEAD_TAIL_FIN +}; + +static s8 sParentShadowBodyParts[ZORA_BODYPART_MAX] = { + ZORA_BODYPART_0, // ZORA_BODYPART_0 + ZORA_BODYPART_0, // ZORA_BODYPART_1 + ZORA_BODYPART_0, // ZORA_BODYPART_2 + ZORA_BODYPART_0, // ZORA_BODYPART_3 + ZORA_BODYPART_3, // ZORA_BODYPART_4 + ZORA_BODYPART_4, // ZORA_BODYPART_5 + ZORA_BODYPART_0, // ZORA_BODYPART_6 + ZORA_BODYPART_6, // ZORA_BODYPART_7 + ZORA_BODYPART_7, // ZORA_BODYPART_8 + ZORA_BODYPART_0, // ZORA_BODYPART_9 + ZORA_BODYPART_9, // ZORA_BODYPART_10 + ZORA_BODYPART_10, // ZORA_BODYPART_11 + ZORA_BODYPART_0, // ZORA_BODYPART_12 + ZORA_BODYPART_12, // ZORA_BODYPART_13 + ZORA_BODYPART_13, // ZORA_BODYPART_14 +}; + +static u8 sShadowSizes[ZORA_BODYPART_MAX] = { + 0, // ZORA_BODYPART_0 + 0, // ZORA_BODYPART_1 + 0, // ZORA_BODYPART_2 + 0, // ZORA_BODYPART_3 + 0, // ZORA_BODYPART_4 + 0, // ZORA_BODYPART_5 + 0, // ZORA_BODYPART_6 + 0, // ZORA_BODYPART_7 + 0, // ZORA_BODYPART_8 + 0, // ZORA_BODYPART_9 + 0, // ZORA_BODYPART_10 + 0, // ZORA_BODYPART_11 + 0, // ZORA_BODYPART_12 + 0, // ZORA_BODYPART_13 + 0, // ZORA_BODYPART_14 +}; s32 EnZo_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s16 frameCount; @@ -142,12 +197,12 @@ s32 EnZo_PlayWalkingSound(EnZo* this, PlayState* play) { } this->isLeftFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->leftFootPos, -6.0f); - if ((this->isLeftFootGrounded) && (!leftWasGrounded) && (isFootGrounded)) { + if (this->isLeftFootGrounded && !leftWasGrounded && isFootGrounded) { Actor_PlaySfx(&this->actor, sfxId); } this->isRightFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->rightFootPos, -6.0f); - if ((this->isRightFootGrounded) && (!rightWasGrounded) && (isFootGrounded)) { + if (this->isRightFootGrounded && !rightWasGrounded && isFootGrounded) { Actor_PlaySfx(&this->actor, sfxId); } @@ -173,13 +228,14 @@ void EnZo_UpdateCollider(EnZo* this, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } +static TrackOptionsSet sTrackOptions = { + { 0xFA0, 4, 1, 3 }, + { 0x1770, 4, 1, 6 }, + { 0xFA0, 4, 1, 3 }, + { 0x1770, 4, 1, 6 }, +}; + void EnZo_LookAtPlayer(EnZo* this, PlayState* play) { - static TrackOptionsSet sTrackOptions = { - { 0xFA0, 4, 1, 3 }, - { 0x1770, 4, 1, 6 }, - { 0xFA0, 4, 1, 3 }, - { 0x1770, 4, 1, 6 }, - }; Player* player = GET_PLAYER(play); Vec3f point; @@ -316,15 +372,18 @@ void EnZo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30 = { 400.0f, 0.0f, 0.0f }; Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; - if (sBodyParts[limbIndex] >= 0) { - Matrix_MultVec3f(&zeroVec, &this->bodyPartsPos[sBodyParts[limbIndex]]); + if (sLimbToBodyParts[limbIndex] > BODYPART_NONE) { + Matrix_MultVec3f(&zeroVec, &this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } + if (limbIndex == ZORA_LIMB_HEAD) { Matrix_MultVec3f(&sp30, &this->actor.focus.pos); } + if (limbIndex == ZORA_LIMB_LEFT_FOOT) { Matrix_MultVec3f(&zeroVec, &this->leftFootPos); } + if (limbIndex == ZORA_LIMB_RIGHT_FOOT) { Matrix_MultVec3f(&zeroVec, &this->rightFootPos); } @@ -366,8 +425,8 @@ void EnZo_Draw(Actor* thisx, PlayState* play) { shadowTexIter++; } for (i = 0; i < 5; i++) { - SubS_GenShadowTex(this->bodyPartsPos, &this->actor.world.pos, shadowTex, i / 5.0f, - ARRAY_COUNT(this->bodyPartsPos), sShadowSizes, sParentBodyParts); + SubS_GenShadowTex(this->bodyPartsPos, &this->actor.world.pos, shadowTex, i / 5.0f, ZORA_BODYPART_MAX, + sShadowSizes, sParentShadowBodyParts); } SubS_DrawShadowTex(&this->actor, &play->state, shadowTex); diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.h b/src/overlays/actors/ovl_En_Zo/z_en_zo.h index 9fbbd09ff..db620def0 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.h +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.h @@ -12,6 +12,25 @@ typedef void (*EnZoActionFunc)(struct EnZo*, PlayState*); #define ENZO_PATH_INDEX_NONE 0x3F +typedef enum EnZoBodyPart { + /* 0 */ ZORA_BODYPART_0, + /* 1 */ ZORA_BODYPART_1, + /* 2 */ ZORA_BODYPART_2, + /* 3 */ ZORA_BODYPART_3, + /* 4 */ ZORA_BODYPART_4, + /* 5 */ ZORA_BODYPART_5, + /* 6 */ ZORA_BODYPART_6, + /* 7 */ ZORA_BODYPART_7, + /* 8 */ ZORA_BODYPART_8, + /* 9 */ ZORA_BODYPART_9, + /* 10 */ ZORA_BODYPART_10, + /* 11 */ ZORA_BODYPART_11, + /* 12 */ ZORA_BODYPART_12, + /* 13 */ ZORA_BODYPART_13, + /* 14 */ ZORA_BODYPART_14, + /* 15 */ ZORA_BODYPART_MAX +} EnZoBodyPart; + typedef struct EnZo { /* 0x000 */ Actor actor; /* 0x144 */ EnZoActionFunc actionFunc; @@ -32,7 +51,7 @@ typedef struct EnZo { /* 0x300 */ UNK_TYPE1 unk_300[0x12]; /* 0x312 */ s16 fidgetTableY[ZORA_LIMB_MAX]; /* 0x33A */ s16 fidgetTableZ[ZORA_LIMB_MAX]; - /* 0x364 */ Vec3f bodyPartsPos[15]; + /* 0x364 */ Vec3f bodyPartsPos[ZORA_BODYPART_MAX]; /* 0x41A */ UNK_TYPE1 unk_41A[0x6]; /* 0x41E */ s16 eyeIndex; /* 0x420 */ s16 blinkTimer; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 43717aaf5..015f1d8ae 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -62,8 +62,8 @@ void OceffSpot_Init(Actor* thisx, PlayState* play2) { this->actor.scale.y = 0.3f; this->unk16C = 0.0f; this->actor.world.pos.y = player->actor.world.pos.y; - this->actor.world.pos.x = player->bodyPartsPos[0].x; - this->actor.world.pos.z = player->bodyPartsPos[0].z; + this->actor.world.pos.x = player->bodyPartsPos[PLAYER_BODYPART_WAIST].x; + this->actor.world.pos.z = player->bodyPartsPos[PLAYER_BODYPART_WAIST].z; } void OceffSpot_Destroy(Actor* thisx, PlayState* play2) { diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c index d7af09270..5fa5d58c3 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c @@ -81,8 +81,8 @@ void OceffStorm_Init(Actor* thisx, PlayState* play) { this->actor.draw = OceffStorm_Draw2; } else { this->actor.world.pos.y = player->actor.world.pos.y; - this->actor.world.pos.x = player->bodyPartsPos[0].x; - this->actor.world.pos.z = player->bodyPartsPos[0].z; + this->actor.world.pos.x = player->bodyPartsPos[PLAYER_BODYPART_WAIST].x; + this->actor.world.pos.z = player->bodyPartsPos[PLAYER_BODYPART_WAIST].z; gSaveContext.jinxTimer = 0; if ((play->interfaceCtx.restrictions.songOfStorms == 0) && !func_8098176C(play)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_OKARINA_EFFECT, this->actor.world.pos.x, diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 20d16f817..1e594aaa0 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -12133,7 +12133,7 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, void func_80846460(Player* this) { Vec3f* pos; - Vec3f* bodyPartsPos; + Vec3f* bodyPartPosPtr; s32 i; this->actor.focus.pos.x = this->actor.world.pos.x; @@ -12141,15 +12141,15 @@ void func_80846460(Player* this) { this->actor.focus.pos.y = this->actor.world.pos.y + 24.0f; pos = &this->actor.world.pos; - bodyPartsPos = this->bodyPartsPos; - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { - Math_Vec3f_Copy(bodyPartsPos, pos); - bodyPartsPos++; + bodyPartPosPtr = this->bodyPartsPos; + for (i = 0; i < PLAYER_BODYPART_MAX; i++) { + Math_Vec3f_Copy(bodyPartPosPtr, pos); + bodyPartPosPtr++; } this->bodyPartsPos[PLAYER_BODYPART_HEAD].y = this->actor.world.pos.y + 24.0f; this->bodyPartsPos[PLAYER_BODYPART_WAIST].y = this->actor.world.pos.y + 60.0f; - Math_Vec3f_Copy(this->actor.shape.feetPos, pos); + Math_Vec3f_Copy(&this->actor.shape.feetPos[0], pos); Math_Vec3f_Copy(&this->actor.shape.feetPos[1], pos); } diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index a786327fa..d4dbbd4db 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -43,7 +43,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa this->update = EffectSsEnFire_Update; this->rUnused = -15; - if (initParams->bodyPart < 0) { + if (initParams->bodyPart <= BODYPART_NONE) { this->rYaw = Math_Vec3f_Yaw(&initParams->actor->world.pos, &initParams->pos) - initParams->actor->shape.rot.y; this->rPitch = Math_Vec3f_Pitch(&initParams->actor->world.pos, &initParams->pos) - initParams->actor->shape.rot.x; @@ -124,7 +124,7 @@ void EffectSsEnFire_Update(PlayState* play, u32 index, EffectSs* this) { if (this->actor->update != NULL) { Math_SmoothStepToS(&this->rScale, this->rScaleMax, 1, this->rScaleMax >> 3, 0); - if (this->rBodyPart < 0) { + if (this->rBodyPart <= BODYPART_NONE) { Matrix_Translate(this->actor->world.pos.x, this->actor->world.pos.y, this->actor->world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->rYaw + this->actor->shape.rot.y, MTXMODE_APPLY); 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 57ac1af69..442b779ac 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 @@ -83,7 +83,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) { if (this->actor != NULL) { this->vec = this->actor->velocity; - if (this->rBodyPart < 0) { + if (this->rBodyPart <= BODYPART_NONE) { Matrix_Translate(this->pos.x + this->actor->world.pos.x, this->pos.y + this->actor->world.pos.y, this->pos.z + this->actor->world.pos.z, MTXMODE_NEW); } else { diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 126d53c17..7cce84661 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -921,8 +921,8 @@ 0x801BC240:("gEffFootprintMaterialDL","Gfx","[9]",0x48), 0x801BC288:("gEffFootprintModelDL","Gfx","[3]",0x18), 0x801BC2A0:("D_801BC2A0","UNK_TYPE1","",0x1), - 0x801BC3F0:("gEnHyBodyParts","UNK_TYPE1","",0x1), - 0x801BC400:("gEnHyParentBodyParts","UNK_TYPE1","",0x1), + 0x801BC3F0:("gEnHyLimbToBodyParts","UNK_TYPE1","",0x1), + 0x801BC400:("gEnHyParentShadowBodyParts","UNK_TYPE1","",0x1), 0x801BC410:("gEnHyShadowSizes","s32",[],0x10), 0x801BC420:("sReactionTextIds","u16","[]",0x140A), 0x801BD830:("sGlobalCutsceneList","ActorCutscene","[8]",0x80), @@ -5669,7 +5669,7 @@ 0x8087936C:("D_8087936C","UNK_TYPE1","",0x1), 0x80879370:("D_80879370","UNK_TYPE1","",0x1), 0x8087937C:("D_8087937C","UNK_TYPE1","",0x1), - 0x80879388:("D_80879388","UNK_TYPE1","",0x1), + 0x80879388:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x8087938E:("D_8087938E","UNK_TYPE1","",0x1), 0x8087938F:("D_8087938F","UNK_TYPE1","",0x1), 0x80879394:("D_80879394","UNK_TYPE1","",0x1), @@ -6025,7 +6025,7 @@ 0x80899564:("D_80899564","f32","",0x4), 0x8089956C:("D_8089956C","f32","",0x4), 0x80899570:("D_80899570","UNK_TYPE1","",0x1), - 0x808995A0:("D_808995A0","UNK_TYPE1","",0x1), + 0x808995A0:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x808995A3:("D_808995A3","UNK_TYPE1","",0x1), 0x808995A4:("D_808995A4","UNK_TYPE1","",0x1), 0x808995C0:("D_808995C0","f32","",0x4), @@ -6093,7 +6093,7 @@ 0x8089E38C:("D_8089E38C","UNK_TYPE1","",0x1), 0x8089E398:("D_8089E398","UNK_TYPE1","",0x1), 0x8089E3A4:("D_8089E3A4","UNK_TYPE1","",0x1), - 0x8089E3B0:("D_8089E3B0","UNK_TYPE1","",0x1), + 0x8089E3B0:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x8089E3B4:("D_8089E3B4","UNK_TYPE1","",0x1), 0x8089E3B6:("D_8089E3B6","UNK_TYPE1","",0x1), 0x8089E3B7:("D_8089E3B7","UNK_TYPE1","",0x1), @@ -6457,7 +6457,7 @@ 0x808BEF84:("D_808BEF84","UNK_TYPE1","",0x1), 0x808BEF90:("D_808BEF90","UNK_TYPE1","",0x1), 0x808BEF94:("D_808BEF94","UNK_TYPE1","",0x1), - 0x808BEF98:("D_808BEF98","UNK_TYPE1","",0x1), + 0x808BEF98:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x808BEF9A:("D_808BEF9A","UNK_TYPE1","",0x1), 0x808BEFA4:("D_808BEFA4","UNK_TYPE1","",0x1), 0x808BEFE0:("D_808BEFE0","f32","",0x4), @@ -6722,7 +6722,7 @@ 0x808D38D4:("D_808D38D4","UNK_TYPE1","",0x1), 0x808D38F4:("D_808D38F4","UNK_TYPE1","",0x1), 0x808D3900:("D_808D3900","UNK_TYPE4","",0x4), - 0x808D393C:("D_808D393C","UNK_TYPE1","",0x1), + 0x808D393C:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x808D393E:("D_808D393E","UNK_TYPE1","",0x1), 0x808D394E:("D_808D394E","UNK_TYPE1","",0x1), 0x808D394F:("D_808D394F","UNK_TYPE1","",0x1), @@ -9141,7 +9141,7 @@ 0x809942E8:("D_809942E8","UNK_TYPE1","",0x1), 0x809942EC:("D_809942EC","UNK_TYPE1","",0x1), 0x809942F0:("D_809942F0","UNK_TYPE1","",0x1), - 0x809942FC:("D_809942FC","UNK_TYPE1","",0x1), + 0x809942FC:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80994302:("D_80994302","UNK_TYPE1","",0x1), 0x80994320:("D_80994320","f32","",0x4), 0x80994324:("D_80994324","f32","",0x4), @@ -9415,8 +9415,8 @@ 0x809A61E4:("D_809A61E4","f32","",0x4), 0x809A61E8:("D_809A61E8","f32","",0x4), 0x809A8C80:("sOccupiedIndices","UNK_TYPE4","",0x4), - 0x809A8C94:("sLimbIndexToShadowBodyPartsIndex","UNK_TYPE1","",0x1), - 0x809A8CAC:("sParentBodyParts","UNK_TYPE1","",0x1), + 0x809A8C94:("sLimbToBodyParts","UNK_TYPE1","",0x1), + 0x809A8CAC:("sParentShadowBodyParts","UNK_TYPE1","",0x1), 0x809A8CC4:("sShadowSizes","UNK_TYPE1","",0x1), 0x809A8CDC:("sDamageTable","UNK_TYPE1","",0x1), 0x809A8CFC:("En_Grasshopper_InitVars","UNK_TYPE1","",0x1), @@ -10129,7 +10129,7 @@ 0x809E90FC:("sGyorgDustPrimColor","UNK_TYPE1","",0x1), 0x809E9100:("sGyorgDustEnvColor","UNK_TYPE1","",0x1), 0x809E9104:("D_809E9104","UNK_TYPE1","",0x1), - 0x809E9128:("sGyorgSphElementIndices","s8","[30]",0x1E), + 0x809E9128:("sLimbToBodyParts","s8","[30]",0x1E), 0x809E9148:("D_809E9148","UNK_TYPE1","",0x1), 0x809E9154:("D_809E9154","Vec3f","[7]",0x54), 0x809E91A8:("D_809E91A8","UNK_TYPE1","",0x1), @@ -13005,7 +13005,7 @@ 0x80AD8E58:("D_80AD8E58","UNK_TYPE1","",0x1), 0x80AD8E5C:("D_80AD8E5C","UNK_TYPE1","",0x1), 0x80AD8E68:("D_80AD8E68","UNK_TYPE1","",0x1), - 0x80AD8EA4:("D_80AD8EA4","UNK_TYPE1","",0x1), + 0x80AD8EA4:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80AD8EA5:("D_80AD8EA5","UNK_TYPE1","",0x1), 0x80AD8EC0:("D_80AD8EC0","f32","",0x4), 0x80AD8EC4:("D_80AD8EC4","f32","",0x4), @@ -13770,7 +13770,7 @@ 0x80B1DADC:("D_80B1DADC","UNK_TYPE1","",0x1), 0x80B1DAEC:("D_80B1DAEC","UNK_TYPE1","",0x1), 0x80B1DAFC:("D_80B1DAFC","UNK_TYPE1","",0x1), - 0x80B1DB08:("D_80B1DB08","UNK_TYPE1","",0x1), + 0x80B1DB08:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80B1DB10:("D_80B1DB10","UNK_TYPE1","",0x1), 0x80B1DB11:("D_80B1DB11","UNK_TYPE1","",0x1), 0x80B1DB12:("D_80B1DB12","UNK_TYPE1","",0x1), @@ -13964,7 +13964,7 @@ 0x80B2F700:("D_80B2F700","UNK_TYPE1","",0x1), 0x80B2F708:("D_80B2F708","UNK_TYPE1","",0x1), 0x80B2F710:("D_80B2F710","UNK_TYPE1","",0x1), - 0x80B2F71C:("D_80B2F71C","UNK_TYPE1","",0x1), + 0x80B2F71C:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80B2F734:("D_80B2F734","UNK_TYPE1","",0x1), 0x80B2F760:("D_80B2F760","f32","",0x4), 0x80B2F764:("D_80B2F764","f32","",0x4), @@ -16343,7 +16343,7 @@ 0x80C13670:("D_80C13670","UNK_TYPE1","",0x1), 0x80C1367C:("D_80C1367C","UNK_TYPE1","",0x1), 0x80C1368C:("D_80C1368C","UNK_TYPE1","",0x1), - 0x80C13698:("D_80C13698","UNK_TYPE1","",0x1), + 0x80C13698:("sLimbToBodyParts","UNK_TYPE1","",0x1), 0x80C136B0:("D_80C136B0","f32","",0x4), 0x80C136B4:("D_80C136B4","f32","",0x4), 0x80C136B8:("D_80C136B8","f32","",0x4), From f0ca606cd236c1769589125df1a416574750cd51 Mon Sep 17 00:00:00 2001 From: Blythe Date: Mon, 14 Aug 2023 10:38:33 -0500 Subject: [PATCH 063/121] object_bal & EnBal OK and documented (#1317) * object_bal and z_en_bal initial push * Formatting, updated named audio funcs * Cleanup, labeled some week events * trying to fix merge issues * Merge, misc cleanup * Fix buildability after merge * Fixed formatting issues * static variable name fixes * Cleanup & object item renames * Formatting * Additional name cleanup * Name & comment tidying * Updated function names referenced by EnBal --- assets/xml/objects/object_bal.xml | 165 +-- include/z64save.h | 26 +- spec | 3 +- src/code/z_sram_NES.c | 9 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 81 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h | 4 +- src/overlays/actors/ovl_En_Bal/z_en_bal.c | 1123 +++++++++++++++++++-- src/overlays/actors/ovl_En_Bal/z_en_bal.h | 30 +- tools/disasm/functions.txt | 68 +- tools/disasm/variables.txt | 43 +- tools/weekeventregconvert.py | 18 +- 11 files changed, 1308 insertions(+), 262 deletions(-) diff --git a/assets/xml/objects/object_bal.xml b/assets/xml/objects/object_bal.xml index a31c0e29f..c98ffb43d 100644 --- a/assets/xml/objects/object_bal.xml +++ b/assets/xml/objects/object_bal.xml @@ -1,81 +1,94 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 01739975d..5abf105e9 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -622,7 +622,7 @@ typedef enum { #define WEEKEVENTREG_09_20 PACK_WEEKEVENTREG_FLAG(9, 0x20) #define WEEKEVENTREG_09_40 PACK_WEEKEVENTREG_FLAG(9, 0x40) #define WEEKEVENTREG_09_80 PACK_WEEKEVENTREG_FLAG(9, 0x80) -#define WEEKEVENTREG_10_01 PACK_WEEKEVENTREG_FLAG(10, 0x01) +#define WEEKEVENTREG_TALKED_TINGLE PACK_WEEKEVENTREG_FLAG(10, 0x01) #define WEEKEVENTREG_10_02 PACK_WEEKEVENTREG_FLAG(10, 0x02) #define WEEKEVENTREG_10_04 PACK_WEEKEVENTREG_FLAG(10, 0x04) #define WEEKEVENTREG_10_08 PACK_WEEKEVENTREG_FLAG(10, 0x08) @@ -888,17 +888,20 @@ typedef enum { // Cremia did Milk Run alone. Player didn't interact or didn't accept the ride #define WEEKEVENTREG_34_80 PACK_WEEKEVENTREG_FLAG(34, 0x80) -#define WEEKEVENTREG_35_01 PACK_WEEKEVENTREG_FLAG(35, 0x01) -#define WEEKEVENTREG_35_02 PACK_WEEKEVENTREG_FLAG(35, 0x02) -#define WEEKEVENTREG_35_04 PACK_WEEKEVENTREG_FLAG(35, 0x04) -#define WEEKEVENTREG_35_08 PACK_WEEKEVENTREG_FLAG(35, 0x08) -#define WEEKEVENTREG_35_10 PACK_WEEKEVENTREG_FLAG(35, 0x10) -#define WEEKEVENTREG_35_20 PACK_WEEKEVENTREG_FLAG(35, 0x20) +// Bought each possible map from Tingle +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(35, 0x01) +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL PACK_WEEKEVENTREG_FLAG(35, 0x02) +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD PACK_WEEKEVENTREG_FLAG(35, 0x04) +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH PACK_WEEKEVENTREG_FLAG(35, 0x08) +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY PACK_WEEKEVENTREG_FLAG(35, 0x10) +#define WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER PACK_WEEKEVENTREG_FLAG(35, 0x20) + #define WEEKEVENTREG_35_40 PACK_WEEKEVENTREG_FLAG(35, 0x40) // Obtained Heart Piece from Five Frogs of the Frog Choir #define WEEKEVENTREG_35_80 PACK_WEEKEVENTREG_FLAG(35, 0x80) +// Player has spoken to certain shrine gorons in the winter #define WEEKEVENTREG_36_01 PACK_WEEKEVENTREG_FLAG(36, 0x01) #define WEEKEVENTREG_36_02 PACK_WEEKEVENTREG_FLAG(36, 0x02) #define WEEKEVENTREG_36_04 PACK_WEEKEVENTREG_FLAG(36, 0x04) @@ -910,6 +913,7 @@ typedef enum { #define WEEKEVENTREG_37_01 PACK_WEEKEVENTREG_FLAG(37, 0x01) #define WEEKEVENTREG_37_02 PACK_WEEKEVENTREG_FLAG(37, 0x02) #define WEEKEVENTREG_37_04 PACK_WEEKEVENTREG_FLAG(37, 0x04) + #define WEEKEVENTREG_37_08 PACK_WEEKEVENTREG_FLAG(37, 0x08) #define WEEKEVENTREG_37_10 PACK_WEEKEVENTREG_FLAG(37, 0x10) #define WEEKEVENTREG_37_20 PACK_WEEKEVENTREG_FLAG(37, 0x20) @@ -1095,8 +1099,12 @@ typedef enum { #define WEEKEVENTREG_64_01 PACK_WEEKEVENTREG_FLAG(64, 0x01) #define WEEKEVENTREG_64_02 PACK_WEEKEVENTREG_FLAG(64, 0x02) #define WEEKEVENTREG_64_04 PACK_WEEKEVENTREG_FLAG(64, 0x04) -#define WEEKEVENTREG_64_08 PACK_WEEKEVENTREG_FLAG(64, 0x08) -#define WEEKEVENTREG_64_10 PACK_WEEKEVENTREG_FLAG(64, 0x10) + +// Two-bit field storing player form when first talked to Tingle that cycle +// 0 - Zora, 1 - Deku, 2 - Goron, 3 - Human +#define WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_LOW_BIT PACK_WEEKEVENTREG_FLAG(64, 0x08) +#define WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT PACK_WEEKEVENTREG_FLAG(64, 0x10) + #define WEEKEVENTREG_64_20 PACK_WEEKEVENTREG_FLAG(64, 0x20) #define WEEKEVENTREG_64_40 PACK_WEEKEVENTREG_FLAG(64, 0x40) #define WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1 PACK_WEEKEVENTREG_FLAG(64, 0x80) diff --git a/spec b/spec index d102c0160..17b041fe1 100644 --- a/spec +++ b/spec @@ -2810,8 +2810,7 @@ beginseg name "ovl_En_Bal" compress include "build/src/overlays/actors/ovl_En_Bal/z_en_bal.o" - include "build/data/ovl_En_Bal/ovl_En_Bal.data.o" - include "build/data/ovl_En_Bal/ovl_En_Bal.reloc.o" + include "build/src/overlays/actors/ovl_En_Bal/ovl_En_Bal_reloc.o" endseg beginseg diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 247e19d33..768314490 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -117,9 +117,12 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 33 */ 0, /* 34 */ 0, /* 35 */ - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_02) | - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_08) | - PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_20) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_80), /* 36 */ 0, /* 37 */ 0, 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 98d827868..baeba3ce5 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -30,40 +30,41 @@ ActorInit Dm_Bal_InitVars = { (ActorFunc)DmBal_Draw, }; +// These animations are the same and in the same order as in the main NPC actor EnBal typedef enum { - /* -1 */ DMBAL_ANIM_NONE = -1, - /* 0x0 */ DMBAL_ANIM_0, - /* 0x1 */ DMBAL_ANIM_1, - /* 0x2 */ DMBAL_ANIM_2, - /* 0x3 */ DMBAL_ANIM_3, - /* 0x4 */ DMBAL_ANIM_4, - /* 0x5 */ DMBAL_ANIM_5, - /* 0x6 */ DMBAL_ANIM_6, - /* 0x7 */ DMBAL_ANIM_7, - /* 0x8 */ DMBAL_ANIM_8, - /* 0x9 */ DMBAL_ANIM_9, - /* 0xA */ DMBAL_ANIM_10, - /* 0xB */ DMBAL_ANIM_11, - /* 0xC */ DMBAL_ANIM_12, - /* 0xD */ DMBAL_ANIM_13, - /* 0xE */ DMBAL_ANIM_MAX -} DmBalAnimation; + /* -1 */ TINGLE_CS_ANIM_NONE = -1, + /* 0x0 */ TINGLE_CS_ANIM_FLOAT_IDLE, + /* 0x1 */ TINGLE_CS_ANIM_FALL_LOOP, + /* 0x2 */ TINGLE_CS_ANIM_FALL_ONCE, + /* 0x3 */ TINGLE_CS_ANIM_LAND, + /* 0x4 */ TINGLE_CS_ANIM_TWIST, + /* 0x5 */ TINGLE_CS_ANIM_TALK, + /* 0x6 */ TINGLE_CS_ANIM_MAGIC, + /* 0x7 */ TINGLE_CS_ANIM_HAPPY_DANCE_LOOP, + /* 0x8 */ TINGLE_CS_ANIM_HAPPY_DANCE_ONCE, + /* 0x9 */ TINGLE_CS_ANIM_MAGIC_REVERSE, + /* 0xA */ TINGLE_CS_ANIM_IDLE, + /* 0xB */ TINGLE_CS_ANIM_SPIN, + /* 0xC */ TINGLE_CS_ANIM_HIDE_FACE, + /* 0xD */ TINGLE_CS_ANIM_CONFETTI, + /* 0xE */ TINGLE_CS_ANIM_MAX +} TingleCsAnimation; -static AnimationInfo sAnimationInfo[DMBAL_ANIM_MAX] = { - { &object_bal_Anim_0005FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_0 - { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_1 - { &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_2 - { &object_bal_Anim_00A7DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_3 - { &object_bal_Anim_00B1E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_4 - { &object_bal_Anim_00B604, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_5 - { &object_bal_Anim_00C498, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_6 - { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_7 - { &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_8 - { &object_bal_Anim_00C498, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_9 - { &object_bal_Anim_00D530, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_10 - { &object_bal_Anim_000C78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_11 - { &object_bal_Anim_00CB78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_12 - { &object_bal_Anim_001804, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_13 +static AnimationInfo sAnimationInfo[TINGLE_CS_ANIM_MAX] = { + { &gTingleFloatIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_FLOAT_IDLE + { &gTingleFallAnim, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_FALL_LOOP + { &gTingleFallAnim, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // TINGLE_CS_ANIM_FALL_ONCE + { &gTingleLandAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // TINGLE_CS_ANIM_LAND + { &gTingleTwistAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_TWIST + { &gTingleTalkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_TALK + { &gTingleThrowConfettiAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_CS_ANIM_MAGIC + { &gTingleHappyDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_HAPPY_DANCE_LOOP + { &gTingleHappyDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_CS_ANIM_HAPPY_DANCE_ONCE + { &gTingleThrowConfettiAnim, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_CS_ANIM_MAGIC_REVERSE + { &gTingleIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_CS_ANIM_IDLE + { &gTingleSpinAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_CS_ANIM_SPIN + { &gTingleFloatHideFaceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_CS_ANIM_HIDE_FACE + { &gTingleFloatThrowConfettiAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_CS_ANIM_CONFETTI }; void DmBal_Init(Actor* thisx, PlayState* play) { @@ -73,8 +74,8 @@ void DmBal_Init(Actor* thisx, PlayState* play) { this->actor.uncullZoneForward = 3000.0f; Actor_SetScale(&this->actor, 0.02f); 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); + SkelAnime_InitFlex(play, &this->skelAnime, &gTingleSkel, &gTingleFloatIdleAnim, this->jointTable, this->morphTable, + TINGLE_LIMB_MAX); Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->timer = 60; this->eyeIndex = 0; @@ -105,16 +106,16 @@ void DmBal_HandleCutscene(DmBal* this, PlayState* play) { case 1: this->keepEyesShut = false; this->eyeIndex = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_CS_ANIM_FLOAT_IDLE); break; case 2: this->keepEyesShut = true; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_12); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_CS_ANIM_HIDE_FACE); break; case 3: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_13); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_CS_ANIM_CONFETTI); break; default: @@ -176,7 +177,7 @@ void DmBal_Update(Actor* thisx, PlayState* play) { DmBal* this = THIS; // Throw confetti - if (Animation_OnFrame(&this->skelAnime, 29.0f) && (this->skelAnime.animation == &object_bal_Anim_001804)) { + if (Animation_OnFrame(&this->skelAnime, 29.0f) && (this->skelAnime.animation == &gTingleFloatThrowConfettiAnim)) { Vec3f pos = this->actor.world.pos; Vec3f vel = { 0.0f, 9.0f, 0.0f }; @@ -199,7 +200,7 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p DmBal* this = THIS; Vec3s rots; - if (limbIndex == OBJECT_BAL_LIMB_06) { + if (limbIndex == TINGLE_LIMB_BALLOON) { rots.x = Math_SinS(this->unk_33A) * (0x10000 / 18); rots.z = Math_CosS(this->unk_33A) * (0x10000 / 18); Matrix_RotateZYX(rots.x, 0, rots.z, MTXMODE_APPLY); @@ -213,7 +214,7 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void DmBal_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { } -static TexturePtr sEyeTextures[] = { object_bal_Tex_006050, object_bal_Tex_0094D0 }; +static TexturePtr sEyeTextures[] = { gTingleEyeOpenTex, gTingleEyeClosedTex }; void DmBal_Draw(Actor* thisx, PlayState* play) { DmBal* this = THIS; diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h index 01f10d4c9..fa2e85639 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h @@ -14,8 +14,8 @@ typedef struct DmBal { /* 0x188 */ DmBalActionFunc actionFunc; /* 0x18C */ Vec3f scale; /* 0x198 */ s32 eyeIndex; - /* 0x262 */ Vec3s jointTable[OBJECT_BAL_LIMB_MAX]; - /* 0x19C */ Vec3s morphTable[OBJECT_BAL_LIMB_MAX]; + /* 0x262 */ Vec3s jointTable[TINGLE_LIMB_MAX]; + /* 0x19C */ Vec3s morphTable[TINGLE_LIMB_MAX]; /* 0x328 */ UNK_TYPE1 pad_328[12]; /* 0x334 */ s16 timer; /* 0x336 */ s16 keepEyesShut; diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.c b/src/overlays/actors/ovl_En_Bal/z_en_bal.c index 779373a9d..303baccf6 100644 --- a/src/overlays/actors/ovl_En_Bal/z_en_bal.c +++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.c @@ -5,6 +5,7 @@ */ #include "z_en_bal.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) @@ -15,7 +16,80 @@ void EnBal_Destroy(Actor* thisx, PlayState* play); void EnBal_Update(Actor* thisx, PlayState* play); void EnBal_Draw(Actor* thisx, PlayState* play); -#if 0 +typedef enum { + /* 0 */ TINGLE_EYETEX_OPEN, + /* 1 */ TINGLE_EYETEX_CLOSED +} TingleEyeTexture; + +typedef enum { + /* -1 */ TINGLE_ANIM_NONE = -1, + /* 0 */ TINGLE_ANIM_FLOAT_IDLE, + /* 1 */ TINGLE_ANIM_FALL_LOOP, + /* 2 */ TINGLE_ANIM_FALL_ONCE, + /* 3 */ TINGLE_ANIM_LAND, + /* 4 */ TINGLE_ANIM_TWIST, + /* 5 */ TINGLE_ANIM_TALK, + /* 6 */ TINGLE_ANIM_MAGIC, + /* 7 */ TINGLE_ANIM_HAPPY_DANCE_LOOP, + /* 8 */ TINGLE_ANIM_HAPPY_DANCE_ONCE, + /* 9 */ TINGLE_ANIM_MAGIC_REVERSE, + /* 10 */ TINGLE_ANIM_IDLE, + /* 11 */ TINGLE_ANIM_SPIN, + /* 12 */ TINGLE_ANIM_HIDE_FACE, + /* 13 */ TINGLE_ANIM_CONFETTI, + /* 14 */ TINGLE_ANIM_MAX +} TingleAnimation; + +typedef enum { + /* 0 */ TINGLE_MAPCHOICE_PROXIMAL, + /* 1 */ TINGLE_MAPCHOICE_DISTAL, + /* 2 */ TINGLE_MAPCHOICE_CANCEL +} TingleBuyMapChoice; + +typedef enum { + /* 0 */ TINGLE_WATCH_TARGET_NONE, + /* 1 */ TINGLE_WATCH_TARGET_PLAYER, + /* 2 */ TINGLE_WATCH_TARGET_FAIRY +} TingleWatchTarget; + +typedef enum { + /* 0 */ TINGLE_BALLOON_ACTION_NONE, + /* 1 */ TINGLE_BALLOON_ACTION_POP, + /* 2 */ TINGLE_BALLOON_ACTION_FALL, + /* 4 */ TINGLE_BALLOON_ACTION_INFLATE = 4, + /* 5 */ TINGLE_BALLOON_ACTION_RISE +} TingleBalloonAction; + +typedef enum { + /* 0 */ TINGLE_IDLESTAGE_ACTIVITY, + /* 2 */ TINGLE_IDLESTAGE_PREP_WAIT = 2, + /* 3 */ TINGLE_IDLESTAGE_WAIT +} TingleIdleAnimStage; + +void EnBal_SetMainColliderToHead(EnBal* this); +s32 EnBal_ValidatePictograph(PlayState* play, Actor* thisx); +void EnBal_SetupFloatIdle(EnBal* this); +void EnBal_FloatIdle(EnBal* this, PlayState* play); +void EnBal_PopBalloon(EnBal* this, PlayState* play); +void EnBal_SetupFall(EnBal* this); +void EnBal_Fall(EnBal* this, PlayState* play); +void EnBal_InflateBalloon(EnBal* this, PlayState* play); +void EnBal_SetupFloatUp(EnBal* this); +void EnBal_FloatUp(EnBal* this, PlayState* play); +void EnBal_SetupGroundIdle(EnBal* this); +void EnBal_GroundIdle(EnBal* this, PlayState* play); +void EnBal_SetupTalk(EnBal* this); +void EnBal_Talk(EnBal* this, PlayState* play); +PlayerTransformation EnBal_GetRecognizedPlayerForm(void); +void EnBal_ThrowMagicSparkles(EnBal* this, PlayState* play); +void EnBal_EmitDustPuff(EnBal* this, PlayState* play); +void EnBal_TryPurchaseMap(EnBal* this, PlayState* play); +void EnBal_HandleConversation(EnBal* this, PlayState* play); +void EnBal_SetupOfferGetItem(EnBal* this); +void EnBal_OfferGetItem(EnBal* this, PlayState* play); +void EnBal_SetupThankYou(EnBal* this); +void EnBal_ThankYou(EnBal* this, PlayState* play); + ActorInit En_Bal_InitVars = { ACTOR_EN_BAL, ACTORCAT_NPC, @@ -28,8 +102,7 @@ ActorInit En_Bal_InitVars = { (ActorFunc)EnBal_Draw, }; -// static DamageTable sDamageTable = { -static DamageTable D_80A63CE0 = { +static DamageTable sDamageTable = { /* Deku Nut */ DMG_ENTRY(0, 0x0), /* Deku Stick */ DMG_ENTRY(0, 0x0), /* Horse trample */ DMG_ENTRY(0, 0x0), @@ -64,108 +137,1038 @@ static DamageTable D_80A63CE0 = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -// sColChkInfoInit -static CollisionCheckInfoInit2 D_80A63D00 = { 1, 0, 0, 0, MASS_IMMOVABLE }; +static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; -// static ColliderJntSphElementInit sJntSphElementsInit[1] = { -static ColliderJntSphElementInit D_80A63D0C[1] = { +static ColliderJntSphElementInit sJntSphElementsInit[1] = { { - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, - { 6, { { 2400, 0, 0 }, 50 }, 100 }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { TINGLE_LIMB_BALLOON, { { 2400, 0, 0 }, 50 }, 100 }, }, }; -// static ColliderJntSphInit sJntSphInit = { -static ColliderJntSphInit D_80A63D30 = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, }, - ARRAY_COUNT(sJntSphElementsInit), D_80A63D0C, // sJntSphElementsInit, +static ColliderJntSphInit sJntSphInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_JNTSPH, + }, + ARRAY_COUNT(sJntSphElementsInit), + sJntSphElementsInit, }; -#endif +static s16 sBuyMapOptions[TINGLE_MAP_MAX][2] = { + { TINGLE_MAP_CLOCK_TOWN, TINGLE_MAP_WOODFALL }, // TINGLE_MAP_CLOCK_TOWN + { TINGLE_MAP_WOODFALL, TINGLE_MAP_SNOWHEAD }, // TINGLE_MAP_WOODFALL + { TINGLE_MAP_SNOWHEAD, TINGLE_MAP_ROMANI_RANCH }, // TINGLE_MAP_SNOWHEAD + { TINGLE_MAP_ROMANI_RANCH, TINGLE_MAP_GREAT_BAY }, // TINGLE_MAP_ROMANI_RANCH + { TINGLE_MAP_GREAT_BAY, TINGLE_MAP_STONE_TOWER }, // TINGLE_MAP_GREAT_BAY + { TINGLE_MAP_STONE_TOWER, TINGLE_MAP_CLOCK_TOWN }, // TINGLE_MAP_STONE_TOWER +}; -extern DamageTable D_80A63CE0; -extern CollisionCheckInfoInit2 D_80A63D00; -extern ColliderJntSphElementInit D_80A63D0C[1]; -extern ColliderJntSphInit D_80A63D30; +static AnimationInfo sAnimationInfo[TINGLE_ANIM_MAX] = { + { &gTingleFloatIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_FLOAT_IDLE + { &gTingleFallAnim, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_FALL_LOOP + { &gTingleFallAnim, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // TINGLE_ANIM_FALL_ONCE + { &gTingleLandAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // TINGLE_ANIM_LAND + { &gTingleTwistAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_TWIST + { &gTingleTalkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_TALK + { &gTingleThrowConfettiAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_ANIM_MAGIC + { &gTingleHappyDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_HAPPY_DANCE_LOOP + { &gTingleHappyDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_ANIM_HAPPY_DANCE_ONCE + { &gTingleThrowConfettiAnim, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // TINGLE_ANIM_MAGIC_REVERSE + { &gTingleIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // TINGLE_ANIM_IDLE + { &gTingleSpinAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_ANIM_SPIN + { &gTingleFloatHideFaceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_ANIM_HIDE_FACE + { &gTingleFloatThrowConfettiAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // TINGLE_ANIM_CONFETTI +}; -extern UNK_TYPE D_060005FC; -extern UNK_TYPE D_0600CB78; -extern UNK_TYPE D_0600D530; +void EnBal_Init(Actor* thisx, PlayState* play) { + EnBal* this = THIS; + s32 pad; + f32 endFrame = Animation_GetLastFrame(&gTingleFloatIdleAnim); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_Init.s") + this->locationMapId = TINGLE_GET_MAP_ID(&this->picto.actor); + this->picto.actor.targetMode = 1; + this->picto.actor.uncullZoneForward = 3000.0f; + Actor_SetScale(&this->picto.actor, 0.02f); + SkelAnime_InitFlex(play, &this->skelAnime, &gTingleSkel, &gTingleFloatIdleAnim, this->jointTable, this->morphTable, + TINGLE_LIMB_MAX); + if (gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + Animation_Change(&this->skelAnime, &gTingleTalkAnim, 1.0f, 0.0f, endFrame, ANIMMODE_LOOP, -10.0f); + } + ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f); + this->skyFloatPhase = 0; + this->textId = 0; + this->balloonAction = TINGLE_BALLOON_ACTION_NONE; + this->timer = 0; + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + this->inflateEarly = false; + this->isTalking = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + this->eyeTimer = 60; + this->forceEyesShut = false; + Collider_InitJntSph(play, &this->collider); + Collider_SetJntSph(play, &this->collider, &this->picto.actor, &sJntSphInit, this->colliderElements); + CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); + this->picto.validationFunc = EnBal_ValidatePictograph; + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + this->picto.actor.world.pos.y = this->picto.actor.floorHeight; + EnBal_SetMainColliderToHead(this); + EnBal_SetupGroundIdle(this); + } else { + EnBal_SetupFloatIdle(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_Destroy.s") +void EnBal_Destroy(Actor* thisx, PlayState* play) { + EnBal* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A18.s") + Collider_InitJntSph(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A44.s") +void EnBal_SetMainColliderToBalloon(EnBal* this) { + this->collider.elements->dim.limb = TINGLE_LIMB_BALLOON; + this->collider.elements->dim.modelSphere.radius = 40; + this->collider.elements->dim.modelSphere.center.x = 2200; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_ValidatePictograph.s") +void EnBal_SetMainColliderToHead(EnBal* this) { + this->collider.elements->dim.limb = TINGLE_LIMB_HEAD; + this->collider.elements->dim.modelSphere.radius = 25; + this->collider.elements->dim.modelSphere.center.x = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61ADC.s") +s32 EnBal_ValidatePictograph(PlayState* play, Actor* thisx) { + s32 pictoValid; + EnBal* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61B5C.s") + pictoValid = Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_TINGLE, &this->picto.actor.focus.pos, + &this->picto.actor.shape.rot, 10.0f, 400.0f, 0x4000); + if (!pictoValid) { + this->forceEyesShut = true; + this->idleAnimStage = TINGLE_IDLESTAGE_WAIT; + } + return pictoValid; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61C9C.s") +void EnBal_SetupFloatIdle(EnBal* this) { + this->timer = 0; + EnBal_SetMainColliderToBalloon(this); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_FLOAT_IDLE); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61CE4.s") + this->picto.actor.focus.pos = this->picto.actor.world.pos; + this->picto.actor.focus.pos.y = this->picto.actor.world.pos.y + 100.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61DF8.s") + this->actionFunc = EnBal_FloatIdle; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61E5C.s") +void EnBal_FloatIdle(EnBal* this, PlayState* play) { + f32 scaleFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62128.s") + this->skyFloatPhase += 0x320; + this->picto.actor.focus.pos.y = this->picto.actor.world.pos.y + 100.0f; + this->timer += 1000; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A621C4.s") + scaleFactor = (Math_CosS(this->skyFloatPhase) * 0.1f) + 1.0f; + this->balloonScale.z = scaleFactor; + this->balloonScale.y = scaleFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62260.s") + scaleFactor = (Math_SinS(this->skyFloatPhase) * 0.1f) + 1.0f; + this->balloonScale.x = SQ(scaleFactor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A622A0.s") + this->picto.actor.world.pos.y = (Math_SinS(this->skyFloatPhase) * 50.0f) + this->picto.actor.home.pos.y; + if (this->forceEyesShut == true) { + if (this->skelAnime.animation != &gTingleFloatHideFaceAnim) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_HIDE_FACE); + } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if (this->idleAnimStage != TINGLE_IDLESTAGE_ACTIVITY) { + this->idleAnimStage--; + } else { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_FLOAT_IDLE); + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A623CC.s") +void EnBal_SetupPopBalloon(EnBal* this) { + EnBal_SetMainColliderToHead(this); + this->timer = 0; + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_MUJURA_BALLOON_BROKEN); + this->balloonAction = TINGLE_BALLOON_ACTION_POP; + this->actionFunc = EnBal_PopBalloon; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A624DC.s") +void EnBal_PopBalloon(EnBal* this, PlayState* play) { + this->picto.actor.focus.pos.x = this->picto.actor.world.pos.x; + this->picto.actor.focus.pos.y = this->picto.actor.world.pos.y + 20.0f; + this->picto.actor.focus.pos.z = this->picto.actor.world.pos.z + 30.0f; + if (this->picto.actor.csId != CS_ID_NONE) { + if (CutsceneManager_IsNext(this->picto.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->picto.actor.csId, &this->picto.actor); + Camera_SetFocalActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId)), + &this->picto.actor); + } else { + CutsceneManager_Queue(this->picto.actor.csId); + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62818.s") + if (this->timer > 30) { + this->timer = 0; + EnBal_SetupFall(this); + } else if (this->timer > 10) { + // Freeze animation and induce blink + this->skelAnime.playSpeed = 0.0f; + if (this->eyeTimer > 6) { + this->eyeTimer = 6; + } + this->timer++; + } else { + this->timer++; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62830.s") +void EnBal_SetupFall(EnBal* this) { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_TIVO00); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_FALL_LOOP); + this->forceEyesShut = true; + this->balloonAction = TINGLE_BALLOON_ACTION_FALL; + this->actionFunc = EnBal_Fall; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A629C4.s") +void EnBal_Fall(EnBal* this, PlayState* play) { + Vec3f worldPos = this->picto.actor.world.pos; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62AC4.s") + this->picto.actor.focus.pos.x = this->picto.actor.world.pos.x; + this->picto.actor.focus.pos.y = this->picto.actor.world.pos.y + 20.0f; + this->picto.actor.focus.pos.z = this->picto.actor.world.pos.z + 30.0f; + if (this->timer == 30) { + this->picto.actor.gravity = -1.5f; + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 5, 0x3000, 0x100); + Math_SmoothStepToS(&this->picto.actor.shape.rot.z, this->picto.actor.world.rot.z, 5, 0x3000, 0x100); + } else if (this->timer < 30) { + this->timer++; + this->picto.actor.shape.rot.y = (s32)(Math_CosS(this->skyFloatPhase) * 2500.0f) + this->picto.actor.world.rot.y; + this->picto.actor.shape.rot.z = (s32)(Math_SinS(this->skyFloatPhase) * 2500.0f) + this->picto.actor.world.rot.z; + if (this->timer == 25) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_FALL_ONCE); + } else if (this->timer == 29) { + this->picto.actor.velocity.y = -12.0f; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62B30.s") + if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_TIVO01); + Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_DOWN); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62B78.s") + if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->picto.actor.colChkInfo.health = 0; + if (this->timer > 80) { + this->picto.actor.shape.yOffset = 0.0f; + EnBal_SetupGroundIdle(this); + } else if (this->timer == 30) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_LAND); + this->picto.actor.shape.rot = this->picto.actor.world.rot; + Actor_SpawnFloorDustRing(play, &this->picto.actor, &worldPos, 10.0f, 30, 5.0f, 0, 0, 0); + this->timer++; + } else { + if ((play->gameplayFrames % 2) != 0) { + this->picto.actor.shape.yOffset = 20.0f; + } else { + this->picto.actor.shape.yOffset = 0.0f; + } + this->timer++; + } + } else if (this->picto.actor.velocity.y < 0.0f) { + Actor_PlaySfx_Flagged(&this->picto.actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62CF0.s") + this->skyFloatPhase += 0xBB8; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62DCC.s") +void EnBal_SetupInflateBalloon(EnBal* this) { + Vec3f scale = { 0.0f, 0.0f, 0.0f }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62ED0.s") + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_FLOAT_IDLE); + this->balloonAction = TINGLE_BALLOON_ACTION_INFLATE; + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + this->balloonScale = scale; + this->skyFloatPhase = 0; + this->timer = 0; + this->actionFunc = EnBal_InflateBalloon; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A62FAC.s") +void EnBal_InflateBalloon(EnBal* this, PlayState* play) { + f32 scale; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A63158.s") + if (Math_SmoothStepToF(&this->balloonScale.x, 1.0f, 0.05f, 0.03f, 0.01f) == 0.0f) { + EnBal_SetupFloatUp(this); + } + EnBal_EmitDustPuff(this, play); + Actor_PlaySfx_Flagged(&this->picto.actor, NA_SE_EV_BALLOON_SWELL - SFX_FLAG); + scale = this->balloonScale.x * 1.1f; + this->balloonScale.z = scale; + this->balloonScale.y = scale; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A634B4.s") +void EnBal_SetupFloatUp(EnBal* this) { + this->balloonAction = TINGLE_BALLOON_ACTION_RISE; + EnBal_SetMainColliderToBalloon(this); + this->actionFunc = EnBal_FloatUp; + this->picto.actor.gravity = 0.0f; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A634C8.s") +void EnBal_FloatUp(EnBal* this, PlayState* play) { + f32 cosFactor; + f32 sinFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A635DC.s") + if (this->timer < 500) { + cosFactor = (Math_CosS(this->skyFloatPhase) * 0.1f) + 1.0f; + this->balloonScale.z = cosFactor; + this->balloonScale.y = cosFactor; + sinFactor = (Math_SinS(this->skyFloatPhase) * 0.1f) + 1.0f; + this->balloonScale.x = SQ(sinFactor); + this->picto.actor.world.pos.y *= 500 - this->timer; + this->picto.actor.world.pos.y += + this->timer * (this->picto.actor.home.pos.y + (50.0f * Math_SinS(this->skyFloatPhase))); + this->picto.actor.world.pos.y *= 0.002f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A635F0.s") + if (this->timer < 100) { + this->timer++; + } else { + this->timer += 10; + } + this->skyFloatPhase += 0x320; + } else { + EnBal_SetupFloatIdle(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A636AC.s") +void EnBal_SetupGroundIdle(EnBal* this) { + if (this->actionFunc == EnBal_Fall) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + this->idleAnimStage = TINGLE_IDLESTAGE_WAIT; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_IDLE); + } else if (Rand_Next() & 1) { + this->idleAnimStage = TINGLE_IDLESTAGE_ACTIVITY; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + } else { + this->idleAnimStage = TINGLE_IDLESTAGE_ACTIVITY; + this->forceEyesShut = true; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_SPIN); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A637FC.s") + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + if (this->locationMapId == TINGLE_MAP_CLOCK_TOWN) { + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + // Effectively turn off reinflation timer by setting above 300 + this->timer = 301; + } else if (this->inflateEarly == true) { + // If this field is set, reduce time to balloon reinflation. + this->inflateEarly = false; + this->timer = 290; + } else { + this->timer = 0; + } + } else { + this->timer = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A63884.s") + this->actionFunc = EnBal_GroundIdle; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_Update.s") +void EnBal_GroundIdle(EnBal* this, PlayState* play) { + Player* player = GET_PLAYER(play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A63A10.s") + if (this->timer == 300) { + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + EnBal_SetupInflateBalloon(this); + return; + } + } else if (this->timer < 300) { + this->timer++; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A63B94.s") + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_TINGLE)) { + if (GET_PLAYER_FORM == EnBal_GetRecognizedPlayerForm()) { + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D0C, &this->picto.actor); + this->textId = 0x1D0C; + } else { + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D05, &this->picto.actor); + this->textId = 0x1D05; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_Draw.s") + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + // Reinflation should be unreachable while player does not have magic + this->inflateEarly = true; + } + } else { + this->watchTarget = TINGLE_WATCH_TARGET_FAIRY; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_LAND); + Message_StartTextbox(play, 0x1D00, &this->picto.actor); + this->textId = 0x1D00; + + if (this->locationMapId == TINGLE_MAP_CLOCK_TOWN) { + this->inflateEarly = true; + } + } + EnBal_SetupTalk(this); + } else { + if ((this->picto.actor.xzDistToPlayer < 100.0f) && (this->actionFunc != EnBal_InflateBalloon)) { + if (this->idleAnimStage != TINGLE_IDLESTAGE_WAIT) { + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + } else { + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + } + + if (!(player->stateFlags1 & PLAYER_STATE1_800000) && !(player->actor.bgCheckFlags & BGCHECKFLAG_WATER) && + ((this->timer < 300) || (this->timer == 301))) { + Actor_OfferTalk(&this->picto.actor, play, 100.0f); + } + } else { + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + } + + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if (this->idleAnimStage == TINGLE_IDLESTAGE_PREP_WAIT) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_IDLE); + this->idleAnimStage++; + } else if (this->idleAnimStage == TINGLE_IDLESTAGE_WAIT) { + if (Rand_Next() & 1) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + } else { + this->forceEyesShut = true; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_SPIN); + } + this->idleAnimStage = TINGLE_IDLESTAGE_ACTIVITY; + } else { + this->idleAnimStage++; + } + } else if ((this->idleAnimStage == TINGLE_IDLESTAGE_WAIT) && (Animation_OnFrame(&this->skelAnime, 20.0f))) { + this->forceEyesShut = true; + } + } +} + +void EnBal_SetupTalk(EnBal* this) { + this->timer = 0; + this->actionFunc = EnBal_Talk; +} + +void EnBal_Talk(EnBal* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + player->stateFlags2 |= PLAYER_STATE2_100000; + this->isTalking = false; + + switch (Message_GetState(&play->msgCtx)) { + case TEXT_STATE_NONE: + case TEXT_STATE_1: + break; + + case TEXT_STATE_CLOSING: + break; + + case TEXT_STATE_3: + if (this->textId != 0x1D10) { + this->isTalking = true; + } + break; + + case TEXT_STATE_CHOICE: + EnBal_TryPurchaseMap(this, play); + break; + + case TEXT_STATE_5: + EnBal_HandleConversation(this, play); + break; + + case TEXT_STATE_DONE: + if (Message_ShouldAdvance(play)) { + EnBal_SetupGroundIdle(this); + } + break; + + case TEXT_STATE_10: + if (Message_ShouldAdvance(play) && (this->textId == 0x1D08)) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + } + break; + + default: + break; + } + + if (this->textId == 0x1D07) { + if ((this->skelAnime.curFrame > 29.0f) && (this->skelAnime.curFrame < 33.0f)) { + if (Animation_OnFrame(&this->skelAnime, 30.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_CHINCLE_SPELL_EFFECT); + } + EnBal_ThrowMagicSparkles(this, play); + } + if (Animation_OnFrame(&this->skelAnime, 35.0f)) { + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + } + } +} + +void EnBal_UpdateShadow(EnBal* this) { + f32 homeY; + f32 worldY; + f32 shadowScale; + + if ((this->actionFunc != EnBal_GroundIdle) && (this->actionFunc != EnBal_FloatIdle)) { + homeY = this->picto.actor.home.pos.y - this->picto.actor.floorHeight; + worldY = this->picto.actor.world.pos.y - this->picto.actor.floorHeight; + shadowScale = (homeY - worldY) / homeY; + shadowScale = CLAMP_MIN(shadowScale, 0.0f); + this->picto.actor.shape.shadowScale = 12.0f * shadowScale; + this->picto.actor.shape.shadowAlpha = 255.0f * shadowScale; + } +} + +void EnBal_SetRecognizedPlayerForm(void) { + switch (gSaveContext.save.playerForm) { + case PLAYER_FORM_HUMAN: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_LOW_BIT); + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT); + break; + + case PLAYER_FORM_DEKU: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_LOW_BIT); + break; + + case PLAYER_FORM_GORON: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT); + break; + + case PLAYER_FORM_ZORA: + break; + + default: + break; + } +} + +PlayerTransformation EnBal_GetRecognizedPlayerForm(void) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_LOW_BIT)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT)) { + return PLAYER_FORM_HUMAN; + } + + return PLAYER_FORM_DEKU; + } + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT)) { + return PLAYER_FORM_GORON; + } + + return PLAYER_FORM_ZORA; +} + +void EnBal_ThrowMagicSparkles(EnBal* this, PlayState* play) { + static Vec3f sSparkleVelocity = { 0.0f, 0.0f, 0.0f }; + static Vec3f sSparkleAccel = { 0.0f, 0.0f, 0.0f }; + static Color_RGBA8 sSparklePrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sSparkleEnvColor = { 100, 200, 0, 255 }; + s32 i; + Vec3f pos = this->picto.actor.world.pos; + + pos.y += 30.0f; + pos.x += 20.0f * Math_SinS(this->picto.actor.shape.rot.y); + pos.z += 20.0f * Math_CosS(this->picto.actor.shape.rot.y); + + sSparkleAccel.y = -0.4f; + sSparkleVelocity.y = 5.5f; + + for (i = 0; i < 20; i++) { + sSparkleVelocity.x = Rand_Centered() * 3.0f; + sSparkleVelocity.z = Rand_Centered() * 3.0f; + EffectSsKirakira_SpawnDispersed(play, &pos, &sSparkleVelocity, &sSparkleAccel, &sSparklePrimColor, + &sSparkleEnvColor, 2500, 40); + } +} + +void EnBal_EmitDustPuff(EnBal* this, PlayState* play) { + static Vec3f sDustVelocity = { 0.0f, 0.0f, 0.0f }; + static Vec3f sDustAccel = { 0.0f, 0.0f, 0.0f }; + static Color_RGBA8 sDustPrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sDustEnvColor = { 198, 198, 198, 255 }; + Vec3f pos = this->picto.actor.world.pos; + + pos.y += 40.0f; + sDustVelocity.x = Rand_CenteredFloat(10.0f); + sDustVelocity.z = Rand_CenteredFloat(10.0f); + sDustVelocity.y = Rand_ZeroFloat(5.0f); + func_800B0EB0(play, &pos, &sDustVelocity, &sDustAccel, &sDustPrimColor, &sDustEnvColor, 150, 40, 15); +} + +static s32 sGetItemPending = false; +static Vec3f sFocusPosMultiplier = { 1000.0f, 0.0f, 0.0f }; +static TexturePtr sEyeTextures[] = { gTingleEyeOpenTex, gTingleEyeClosedTex }; + +s32 EnBal_CheckIfMapUnlocked(EnBal* this, PlayState* play) { + this->purchaseMapId = sBuyMapOptions[this->locationMapId][play->msgCtx.choiceIndex]; + switch (this->purchaseMapId) { + case TINGLE_MAP_CLOCK_TOWN: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN)) { + return true; + } + break; + + case TINGLE_MAP_WOODFALL: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL)) { + return true; + } + break; + + case TINGLE_MAP_SNOWHEAD: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD)) { + return true; + } + break; + + case TINGLE_MAP_ROMANI_RANCH: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH)) { + return true; + } + break; + + case TINGLE_MAP_GREAT_BAY: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY)) { + return true; + } + break; + + case TINGLE_MAP_STONE_TOWER: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER)) { + return true; + } + break; + + default: + break; + } + return false; +} + +void EnBal_UnlockSelectedAreaMap(EnBal* this) { + Inventory_SetWorldMapCloudVisibility(this->purchaseMapId); + switch (this->purchaseMapId) { + case TINGLE_MAP_CLOCK_TOWN: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN); + break; + + case TINGLE_MAP_WOODFALL: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL); + break; + + case TINGLE_MAP_SNOWHEAD: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD); + break; + + case TINGLE_MAP_ROMANI_RANCH: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH); + break; + + case TINGLE_MAP_GREAT_BAY: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY); + break; + + case TINGLE_MAP_STONE_TOWER: + SET_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER); + break; + + default: + break; + } +} + +void EnBal_TryPurchaseMap(EnBal* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s32 price; + + if (Message_ShouldAdvance(play)) { + if (play->msgCtx.choiceIndex != TINGLE_MAPCHOICE_CANCEL) { + // Get price depending on which map player wants to buy + if (play->msgCtx.choiceIndex == TINGLE_MAPCHOICE_PROXIMAL) { + price = play->msgCtx.unk1206C; + } else { + price = play->msgCtx.unk12070; + } + + if (gSaveContext.save.saveInfo.playerData.rupees < price) { + // Can't buy map because player doesn't have the money + Audio_PlaySfx(NA_SE_SY_ERROR); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D0A, &this->picto.actor); + this->textId = 0x1D0A; + } else if (EnBal_CheckIfMapUnlocked(this, play)) { + // Can't buy map because player already has it + Audio_PlaySfx(NA_SE_SY_ERROR); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D09, &this->picto.actor); + this->textId = 0x1D09; + } else { + // Proceed with map purchase + Audio_PlaySfx_MessageDecide(); + Rupees_ChangeBy(-price); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_MAGIC_REVERSE); + this->forceEyesShut = true; + Message_StartTextbox(play, 0x1D0B, &this->picto.actor); + this->textId = 0x1D0B; + EnBal_UnlockSelectedAreaMap(this); + player->stateFlags1 |= PLAYER_STATE1_20; + EnBal_SetupOfferGetItem(this); + } + } else { + // Cancel + Audio_PlaySfx_MessageCancel(); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D06, &this->picto.actor); + this->textId = 0x1D06; + } + } +} + +void EnBal_HandleConversation(EnBal* this, PlayState* play) { + if (((this->textId != 0x1D07) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && + (Message_ShouldAdvance(play))) { + switch (this->textId) { + case 0x1D00: + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D01, &this->picto.actor); + this->textId = 0x1D01; + break; + + case 0x1D01: + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + Message_StartTextbox(play, 0x1D02, &this->picto.actor); + this->textId = 0x1D02; + break; + + case 0x1D02: + this->forceEyesShut = true; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_HAPPY_DANCE_LOOP); + Message_StartTextbox(play, 0x1D03, &this->picto.actor); + this->textId = 0x1D03; + break; + + case 0x1D03: + case 0x1D0D: + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D04, &this->picto.actor); + this->textId = 0x1D04; + break; + + case 0x1D04: + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + switch (this->locationMapId) { + case TINGLE_MAP_CLOCK_TOWN: + Message_StartTextbox(play, 0x1D11, &this->picto.actor); + this->textId = 0x1D11; + break; + + case TINGLE_MAP_WOODFALL: + Message_StartTextbox(play, 0x1D12, &this->picto.actor); + this->textId = 0x1D12; + break; + + case TINGLE_MAP_SNOWHEAD: + Message_StartTextbox(play, 0x1D13, &this->picto.actor); + this->textId = 0x1D13; + break; + + case TINGLE_MAP_ROMANI_RANCH: + Message_StartTextbox(play, 0x1D14, &this->picto.actor); + this->textId = 0x1D14; + break; + + case TINGLE_MAP_GREAT_BAY: + Message_StartTextbox(play, 0x1D15, &this->picto.actor); + this->textId = 0x1D15; + break; + + case TINGLE_MAP_STONE_TOWER: + Message_StartTextbox(play, 0x1D16, &this->picto.actor); + this->textId = 0x1D16; + break; + + default: + Message_StartTextbox(play, 0x1D11, &this->picto.actor); + this->textId = 0x1D11; + break; + } + break; + + case 0x1D05: + case 0x1D0C: + this->watchTarget = TINGLE_WATCH_TARGET_FAIRY; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_HAPPY_DANCE_LOOP); + Message_StartTextbox(play, 0x1D0D, &this->picto.actor); + this->textId = 0x1D0D; + break; + + case 0x1D06: + case 0x1D17: + this->watchTarget = TINGLE_WATCH_TARGET_NONE; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_MAGIC); + this->forceEyesShut = true; + Message_StartTextbox(play, 0x1D07, &this->picto.actor); + this->textId = 0x1D07; + break; + + case 0x1D07: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_TINGLE)) { + Message_CloseTextbox(play); + EnBal_SetupGroundIdle(this); + } else { + this->forceEyesShut = true; + this->watchTarget = TINGLE_WATCH_TARGET_PLAYER; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); + Message_StartTextbox(play, 0x1D08, &this->picto.actor); + this->textId = 0x1D08; + SET_WEEKEVENTREG(WEEKEVENTREG_TALKED_TINGLE); + EnBal_SetRecognizedPlayerForm(); + } + break; + + case 0x1D08: + case 0x1D09: + case 0x1D0A: + Message_CloseTextbox(play); + EnBal_SetupGroundIdle(this); + break; + + default: + break; + } + } +} + +void EnBal_SetupOfferGetItem(EnBal* this) { + this->actionFunc = EnBal_OfferGetItem; +} + +void EnBal_OfferGetItem(EnBal* this, PlayState* play) { + GetItemId mapGetItemId; + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + Message_CloseTextbox(play); + sGetItemPending = true; + } + + if ((sGetItemPending == true) && Actor_HasParent(&this->picto.actor, play)) { + this->picto.actor.parent = NULL; + EnBal_SetupThankYou(this); + sGetItemPending = false; + } else { + switch (this->purchaseMapId) { + case TINGLE_MAP_CLOCK_TOWN: + mapGetItemId = GI_TINGLE_MAP_CLOCK_TOWN; + break; + + case TINGLE_MAP_WOODFALL: + mapGetItemId = GI_TINGLE_MAP_WOODFALL; + break; + + case TINGLE_MAP_SNOWHEAD: + mapGetItemId = GI_TINGLE_MAP_SNOWHEAD; + break; + + case TINGLE_MAP_ROMANI_RANCH: + mapGetItemId = GI_TINGLE_MAP_ROMANI_RANCH; + break; + + case TINGLE_MAP_GREAT_BAY: + mapGetItemId = GI_TINGLE_MAP_GREAT_BAY; + break; + + case TINGLE_MAP_STONE_TOWER: + mapGetItemId = GI_TINGLE_MAP_STONE_TOWER; + break; + + default: + mapGetItemId = GI_TINGLE_MAP_CLOCK_TOWN; + break; + } + Actor_OfferGetItem(&this->picto.actor, play, mapGetItemId, 500.0f, 100.0f); + } +} + +void EnBal_SetupThankYou(EnBal* this) { + this->actionFunc = EnBal_ThankYou; +} + +void EnBal_ThankYou(EnBal* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { + player->stateFlags1 &= ~PLAYER_STATE1_20; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TWIST); + this->forceEyesShut = false; + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + Message_StartTextbox(play, 0x1D17, &this->picto.actor); + this->textId = 0x1D17; + this->picto.actor.flags &= ~ACTOR_FLAG_10000; + EnBal_SetupTalk(this); + } else { + Actor_OfferTalkExchangeEquiCylinder(&this->picto.actor, play, 200.0f, PLAYER_IA_MINUS1); + } +} + +void EnBal_UpdateHead(EnBal* this, PlayState* play) { + Player* player; + + if (this->watchTarget == TINGLE_WATCH_TARGET_PLAYER) { + if ((this->skelAnime.animation != &gTingleIdleAnim) && (this->skelAnime.animation != &gTingleSpinAnim)) { + Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos); + } else { + Actor_TrackNone(&this->headRot, &this->torsoRot); + } + } else if (this->watchTarget == TINGLE_WATCH_TARGET_FAIRY) { + Vec3f tatlPos; + + player = GET_PLAYER(play); + if (player->tatlActor != NULL) { + tatlPos = player->tatlActor->world.pos; + Actor_TrackPoint(&this->picto.actor, &tatlPos, &this->headRot, &this->torsoRot); + } + } else { + Actor_TrackNone(&this->headRot, &this->torsoRot); + } + + if (this->forceEyesShut == true) { + this->eyeTexIndex = TINGLE_EYETEX_CLOSED; + } else if (this->eyeTimer > 3) { + this->eyeTimer--; + } else if (this->eyeTimer != 0) { + this->eyeTexIndex = TINGLE_EYETEX_CLOSED; + this->eyeTimer--; + } else { + this->eyeTexIndex = TINGLE_EYETEX_OPEN; + this->eyeTimer = 60; + } +} + +void EnBal_UpdateCollision(EnBal* this, PlayState* play) { + if ((this->actionFunc == EnBal_FloatIdle) || ((this->actionFunc == EnBal_FloatUp) && (this->timer > 50))) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); +} + +void EnBal_TryBalloonPopped(EnBal* this, PlayState* play) { + if (this->collider.base.acFlags & AC_HIT) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->picto.actor.world.pos.x, + this->picto.actor.world.pos.y + 100.0f, this->picto.actor.world.pos.z, 0xFF, 0xFF, 0xC8, + CLEAR_TAG_PARAMS(CLEAR_TAG_POP)); + this->collider.base.acFlags &= ~AC_HIT; + EnBal_SetupPopBalloon(this); + } +} + +void EnBal_Update(Actor* thisx, PlayState* play) { + EnBal* this = THIS; + + this->actionFunc(this, play); + EnBal_TryBalloonPopped(this, play); + EnBal_UpdateCollision(this, play); + SkelAnime_Update(&this->skelAnime); + if (this->actionFunc != EnBal_FloatIdle) { + Actor_MoveWithGravity(&this->picto.actor); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 32.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); + } + EnBal_UpdateHead(this, play); + if ((this->actionFunc == EnBal_Talk) && (this->textId != 0x1D10)) { + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000, 0x100); + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + } + EnBal_UpdateShadow(this); +} + +s32 EnBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnBal* this = THIS; + Vec3s balloonRot; + + if (limbIndex == TINGLE_LIMB_BALLOON) { + if ((this->balloonAction == TINGLE_BALLOON_ACTION_NONE) || + (this->balloonAction == TINGLE_BALLOON_ACTION_INFLATE) || + (this->balloonAction == TINGLE_BALLOON_ACTION_RISE)) { + balloonRot.x = Math_SinS(this->timer) * 0xE38; + balloonRot.z = Math_CosS(this->timer) * 0xE38; + Matrix_RotateZYX(balloonRot.x, 0, balloonRot.z, MTXMODE_APPLY); + Matrix_Scale(this->balloonScale.x, this->balloonScale.y, this->balloonScale.z, MTXMODE_APPLY); + Matrix_RotateZS(-balloonRot.z, MTXMODE_APPLY); + Matrix_RotateXS(-balloonRot.x, MTXMODE_APPLY); + } else { + *dList = NULL; + } + } + + if (limbIndex == TINGLE_LIMB_HEAD) { + rot->x += this->headRot.y; + rot->y -= this->headRot.x; + if ((this->isTalking == true) && ((play->state.frames & 2) == 0)) { + Matrix_Translate(20.0f, 0.0f, 0.0f, MTXMODE_APPLY); + } + } + + return false; +} + +void EnBal_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnBal* this = THIS; + + Collider_UpdateSpheres(limbIndex, &this->collider); + if (limbIndex == TINGLE_LIMB_HEAD) { + Matrix_MultVec3f(&sFocusPosMultiplier, &this->picto.actor.focus.pos); + } +} + +void EnBal_Draw(Actor* thisx, PlayState* play) { + EnBal* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 8, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex])); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnBal_OverrideLimbDraw, EnBal_PostLimbDraw, &this->picto.actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.h b/src/overlays/actors/ovl_En_Bal/z_en_bal.h index a64ef195d..b8c6a9f49 100644 --- a/src/overlays/actors/ovl_En_Bal/z_en_bal.h +++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.h @@ -3,6 +3,9 @@ #include "global.h" #include "z64snap.h" +#include "objects/object_bal/object_bal.h" + +#define TINGLE_GET_MAP_ID(thisx) ((thisx)->params & 0xFF) struct EnBal; @@ -10,9 +13,30 @@ typedef void (*EnBalActionFunc)(struct EnBal*, PlayState*); typedef struct EnBal { /* 0x000 */ PictoActor picto; - /* 0x148 */ char unk_148[0x44]; + /* 0x148 */ SkelAnime skelAnime; /* 0x18C */ EnBalActionFunc actionFunc; - /* 0x190 */ char unk_190[0x224]; -} EnBal; // size = 0x3B4 + /* 0x190 */ ColliderJntSph collider; + /* 0x1B0 */ ColliderJntSphElement colliderElements[1]; + /* 0x1F0 */ Vec3f balloonScale; + /* 0x1FC */ s32 eyeTexIndex; + /* 0x200 */ Vec3s jointTable[TINGLE_LIMB_MAX]; + /* 0x2C6 */ Vec3s morphTable[TINGLE_LIMB_MAX]; + /* 0x38C */ Vec3s headRot; + /* 0x392 */ Vec3s torsoRot; + /* 0x398 */ s16 eyeTimer; + /* 0x39A */ s16 forceEyesShut; + /* 0x39C */ s16 watchTarget; + /* 0x39E */ s16 skyFloatPhase; + /* 0x3A0 */ s16 textId; + /* 0x3A2 */ UNK_TYPE1 unk3A2[0x2]; + /* 0x3A4 */ s16 balloonAction; + /* 0x3A6 */ s16 idleAnimStage; + /* 0x3A8 */ s16 timer; + /* 0x3AA */ UNK_TYPE1 unk3AA[0x2]; + /* 0x3AC */ s16 purchaseMapId; + /* 0x3AE */ s16 locationMapId; + /* 0x3B0 */ s16 inflateEarly; + /* 0x3B2 */ u8 isTalking; +} EnBal; /* size = 0x3B4 */ #endif // Z_EN_BAL_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index cf6a9a7af..1b8b9880a 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -10758,42 +10758,42 @@ 0x80A614C4:("EnDyExtra_Draw",), 0x80A61810:("EnBal_Init",), 0x80A619EC:("EnBal_Destroy",), - 0x80A61A18:("func_80A61A18",), - 0x80A61A44:("func_80A61A44",), + 0x80A61A18:("EnBal_SetMainColliderToBalloon",), + 0x80A61A44:("EnBal_SetMainColliderToHead",), 0x80A61A6C:("EnBal_ValidatePictograph",), - 0x80A61ADC:("func_80A61ADC",), - 0x80A61B5C:("func_80A61B5C",), - 0x80A61C9C:("func_80A61C9C",), - 0x80A61CE4:("func_80A61CE4",), - 0x80A61DF8:("func_80A61DF8",), - 0x80A61E5C:("func_80A61E5C",), - 0x80A62128:("func_80A62128",), - 0x80A621C4:("func_80A621C4",), - 0x80A62260:("func_80A62260",), - 0x80A622A0:("func_80A622A0",), - 0x80A623CC:("func_80A623CC",), - 0x80A624DC:("func_80A624DC",), - 0x80A62818:("func_80A62818",), - 0x80A62830:("func_80A62830",), - 0x80A629C4:("func_80A629C4",), - 0x80A62AC4:("func_80A62AC4",), - 0x80A62B30:("func_80A62B30",), - 0x80A62B78:("func_80A62B78",), - 0x80A62CF0:("func_80A62CF0",), - 0x80A62DCC:("func_80A62DCC",), - 0x80A62ED0:("func_80A62ED0",), - 0x80A62FAC:("func_80A62FAC",), - 0x80A63158:("func_80A63158",), - 0x80A634B4:("func_80A634B4",), - 0x80A634C8:("func_80A634C8",), - 0x80A635DC:("func_80A635DC",), - 0x80A635F0:("func_80A635F0",), - 0x80A636AC:("func_80A636AC",), - 0x80A637FC:("func_80A637FC",), - 0x80A63884:("func_80A63884",), + 0x80A61ADC:("EnBal_SetupFloatIdle",), + 0x80A61B5C:("EnBal_FloatIdle",), + 0x80A61C9C:("EnBal_SetupPopBalloon",), + 0x80A61CE4:("EnBal_PopBalloon",), + 0x80A61DF8:("EnBal_SetupFall",), + 0x80A61E5C:("EnBal_Fall",), + 0x80A62128:("EnBal_SetupInflateBalloon",), + 0x80A621C4:("EnBal_InflateBalloon",), + 0x80A62260:("EnBal_SetupFloatUp",), + 0x80A622A0:("EnBal_FloatUp",), + 0x80A623CC:("EnBal_SetupGroundIdle",), + 0x80A624DC:("EnBal_GroundIdle",), + 0x80A62818:("EnBal_SetupTalk",), + 0x80A62830:("EnBal_Talk",), + 0x80A629C4:("EnBal_UpdateShadow",), + 0x80A62AC4:("EnBal_SetRecognizedPlayerForm",), + 0x80A62B30:("EnBal_GetRecognizedPlayerForm",), + 0x80A62B78:("EnBal_ThrowMagicSparkles",), + 0x80A62CF0:("EnBal_EmitDustPuff",), + 0x80A62DCC:("EnBal_CheckIfMapUnlocked",), + 0x80A62ED0:("EnBal_UnlockSelectedAreaMap",), + 0x80A62FAC:("EnBal_TryPurchaseMap",), + 0x80A63158:("EnBal_HandleConversation",), + 0x80A634B4:("EnBal_SetupOfferGetItem",), + 0x80A634C8:("EnBal_OfferGetItem",), + 0x80A635DC:("EnBal_SetupThankYou",), + 0x80A635F0:("EnBal_ThankYou",), + 0x80A636AC:("EnBal_UpdateHead",), + 0x80A637FC:("EnBal_UpdateCollision",), + 0x80A63884:("EnBal_TryBalloonPopped",), 0x80A63914:("EnBal_Update",), - 0x80A63A10:("func_80A63A10",), - 0x80A63B94:("func_80A63B94",), + 0x80A63A10:("EnBal_OverrideLimbDraw",), + 0x80A63B94:("EnBal_PostLimbDraw",), 0x80A63BEC:("EnBal_Draw",), 0x80A644A0:("EnGinkoMan_Init",), 0x80A64544:("EnGinkoMan_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 7cce84661..482947b96 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -11779,30 +11779,25 @@ 0x80A61794:("D_80A61794","f32","",0x4), 0x80A61798:("D_80A61798","f32","",0x4), 0x80A6179C:("D_80A6179C","f32","",0x4), - 0x80A63CC0:("En_Bal_InitVars","UNK_TYPE1","",0x1), - 0x80A63CE0:("D_80A63CE0","UNK_TYPE1","",0x1), - 0x80A63D00:("D_80A63D00","UNK_PTR","",0x4), - 0x80A63D0C:("D_80A63D0C","UNK_TYPE1","",0x1), - 0x80A63D30:("D_80A63D30","UNK_TYPE1","",0x1), - 0x80A63D40:("D_80A63D40","UNK_TYPE1","",0x1), - 0x80A63D58:("D_80A63D58","UNK_PTR","",0x4), - 0x80A63EA8:("D_80A63EA8","UNK_TYPE4","",0x4), - 0x80A63EB4:("D_80A63EB4","f32","",0x4), - 0x80A63EB8:("D_80A63EB8","f32","",0x4), - 0x80A63EBC:("D_80A63EBC","f32","",0x4), - 0x80A63EC0:("D_80A63EC0","UNK_TYPE1","",0x1), - 0x80A63EC4:("D_80A63EC4","f32","",0x4), - 0x80A63ECC:("D_80A63ECC","UNK_TYPE1","",0x1), - 0x80A63ED0:("D_80A63ED0","UNK_TYPE1","",0x1), - 0x80A63ED4:("D_80A63ED4","f32","",0x4), - 0x80A63ED8:("D_80A63ED8","f32","",0x4), - 0x80A63EDC:("D_80A63EDC","f32","",0x4), - 0x80A63EE0:("D_80A63EE0","UNK_TYPE1","",0x1), - 0x80A63EEC:("D_80A63EEC","UNK_TYPE1","",0x1), - 0x80A63EF0:("D_80A63EF0","UNK_TYPE1","",0x1), - 0x80A63EF4:("D_80A63EF4","UNK_TYPE4","",0x4), - 0x80A63EF8:("D_80A63EF8","UNK_TYPE1","",0x1), - 0x80A63F04:("D_80A63F04","UNK_TYPE1","",0x1), + 0x80A63CC0:("En_Bal_InitVars","ActorInit","",0x1), + 0x80A63CE0:("sDamageTable","DamageTable","",0x1), + 0x80A63D00:("sColChkInfoInit","CollisionCheckInfoInit2","",0x1), + 0x80A63D0C:("sJntSphElementsInit","ColliderJntSphElementInit","",0x1), + 0x80A63D30:("sJntSphInit","ColliderJntSphInit","",0x1), + 0x80A63D40:("sBuyMapOptions","s16","",0xC), + 0x80A63D58:("sAnimationInfo","AnimationInfo","",0xE), + 0x80A63EA8:("sInitBalloonScale","Vec3f","",0x1), + 0x80A63EB4:("sSparkleVelocity","Vec3f","",0x1), + 0x80A63EC0:("sSparkleAccel","Vec3f","",0x1), + 0x80A63ECC:("sSparklePrimColor","Color_RGBA8","",0x1), + 0x80A63ED0:("sSparkleEnvColor","Color_RGBA8","",0x1), + 0x80A63ED4:("sDustVelocity","Vec3f","",0x1), + 0x80A63EE0:("sDustAccel","Vec3f","",0x1), + 0x80A63EEC:("sDustPrimColor","Color_RGBA8","",0x1), + 0x80A63EF0:("sDustEnvColor","Color_RGBA8","",0x1), + 0x80A63EF4:("sGetItemPending","s32","",0x1), + 0x80A63EF8:("sFocusPosMultiplier","Vec3f","",0x1), + 0x80A63F04:("sEyeTextures","TexturePtr","",0x2), 0x80A63F10:("D_80A63F10","f32","",0x4), 0x80A63F14:("D_80A63F14","f32","",0x4), 0x80A63F18:("D_80A63F18","f32","",0x4), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 7e8c183a1..0bde4a5ce 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -84,7 +84,7 @@ weekEventReg = { ( 9 << 8) | 0x20: "WEEKEVENTREG_09_20", ( 9 << 8) | 0x40: "WEEKEVENTREG_09_40", ( 9 << 8) | 0x80: "WEEKEVENTREG_09_80", - (10 << 8) | 0x01: "WEEKEVENTREG_10_01", + (10 << 8) | 0x01: "WEEKEVENTREG_TALKED_TINGLE", (10 << 8) | 0x02: "WEEKEVENTREG_10_02", (10 << 8) | 0x04: "WEEKEVENTREG_10_04", (10 << 8) | 0x08: "WEEKEVENTREG_10_08", @@ -284,12 +284,12 @@ weekEventReg = { (34 << 8) | 0x20: "WEEKEVENTREG_34_20", (34 << 8) | 0x40: "WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH", (34 << 8) | 0x80: "WEEKEVENTREG_34_80", - (35 << 8) | 0x01: "WEEKEVENTREG_35_01", - (35 << 8) | 0x02: "WEEKEVENTREG_35_02", - (35 << 8) | 0x04: "WEEKEVENTREG_35_04", - (35 << 8) | 0x08: "WEEKEVENTREG_35_08", - (35 << 8) | 0x10: "WEEKEVENTREG_35_10", - (35 << 8) | 0x20: "WEEKEVENTREG_35_20", + (35 << 8) | 0x01: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN", + (35 << 8) | 0x02: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL", + (35 << 8) | 0x04: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD", + (35 << 8) | 0x08: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH", + (35 << 8) | 0x10: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY", + (35 << 8) | 0x20: "WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER", (35 << 8) | 0x40: "WEEKEVENTREG_35_40", (35 << 8) | 0x80: "WEEKEVENTREG_35_80", (36 << 8) | 0x01: "WEEKEVENTREG_36_01", @@ -519,8 +519,8 @@ weekEventReg = { (64 << 8) | 0x01: "WEEKEVENTREG_64_01", (64 << 8) | 0x02: "WEEKEVENTREG_64_02", (64 << 8) | 0x04: "WEEKEVENTREG_64_04", - (64 << 8) | 0x08: "WEEKEVENTREG_64_08", - (64 << 8) | 0x10: "WEEKEVENTREG_64_10", + (64 << 8) | 0x08: "WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_LOW_BIT", + (64 << 8) | 0x10: "WEEKEVENTREG_TINGLE_RECOGNIZED_PLAYER_FORM_HIGH_BIT", (64 << 8) | 0x20: "WEEKEVENTREG_64_20", (64 << 8) | 0x40: "WEEKEVENTREG_64_40", (64 << 8) | 0x80: "WEEKEVENTREG_TALKED_DOGGY_RACETRACK_OWNER_DAY_1", From 17b7f3f90e6a1f66cccbc4e80ebebdc853352050 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:34:52 -0300 Subject: [PATCH 064/121] document object_tsubo, object_racetsubo and object_obj_chan (#1346) * initial commit of object_tsubo, object_racetsubo and object_obj_chan documentation * little description in chandelier xml * desc between root and file * changed green pot to race pot * changed race pot to magic pot * space in desc Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_obj_chan.xml | 19 ++++++++++--------- assets/xml/objects/object_racetsubo.xml | 15 ++++++++------- assets/xml/objects/object_tsubo.xml | 11 ++++++----- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 8 ++++---- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 19 +++++++++---------- 5 files changed, 37 insertions(+), 35 deletions(-) diff --git a/assets/xml/objects/object_obj_chan.xml b/assets/xml/objects/object_obj_chan.xml index 8469110e4..0b378e8c1 100644 --- a/assets/xml/objects/object_obj_chan.xml +++ b/assets/xml/objects/object_obj_chan.xml @@ -1,13 +1,14 @@  + - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_racetsubo.xml b/assets/xml/objects/object_racetsubo.xml index 6558fcbe5..08a17d00a 100644 --- a/assets/xml/objects/object_racetsubo.xml +++ b/assets/xml/objects/object_racetsubo.xml @@ -1,11 +1,12 @@  + - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_tsubo.xml b/assets/xml/objects/object_tsubo.xml index 46aacd873..8bbebfc85 100644 --- a/assets/xml/objects/object_tsubo.xml +++ b/assets/xml/objects/object_tsubo.xml @@ -1,9 +1,10 @@  + - - - - - + + + + + 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 1f20f2136..fde4fa4b3 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -357,7 +357,7 @@ void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play) { } new_var2 = spA4 * Rand_ZeroOne(); EffectSsKakera_Spawn(play, &spDC, &spD0, &this->actor.world.pos, -260, phi_s0, 20, 0, 0, spA8 + new_var2, 0, 0, - 50, -1, OBJECT_TSUBO, object_tsubo_DL_001960); + 50, -1, OBJECT_TSUBO, gPotShardDL); } func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 20, 50, true); func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 10, 80, true); @@ -382,12 +382,12 @@ void ObjChan_Draw(Actor* thisx, PlayState* play) { opa = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&opa[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); - gSPDisplayList(&opa[1], object_obj_chan_DL_000AF0); + gSPDisplayList(&opa[1], gChandelierCenterDL); POLY_OPA_DISP = &opa[2]; xlu = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&xlu[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); - gSPDisplayList(&xlu[1], object_obj_chan_DL_000A10); + gSPDisplayList(&xlu[1], gChandelierPotHolderDL); POLY_XLU_DISP = &xlu[2]; CLOSE_DISPS(play->state.gfxCtx); @@ -408,7 +408,7 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) { dl = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); - gSPDisplayList(&dl[1], object_obj_chan_DL_002358); + gSPDisplayList(&dl[1], gChandelierPotDL); POLY_OPA_DISP = &dl[2]; CLOSE_DISPS(play->state.gfxCtx); 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 9b8baa861..d6f8b468b 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -20,11 +20,11 @@ void ObjTsubo_Update(Actor* thisx, PlayState* play); void ObjTsubo_Draw(Actor* thisx, PlayState* play2); void ObjTsubo_PotBreak1(ObjTsubo* this, PlayState* play); -void ObjTsubo_RacePotBreak1(ObjTsubo* this, PlayState* play); +void ObjTsubo_MagicPotBreak1(ObjTsubo* this, PlayState* play); void ObjTsubo_PotBreak2(ObjTsubo* this, PlayState* play2); -void ObjTsubo_RacePotBreak2(ObjTsubo* this, PlayState* play2); +void ObjTsubo_MagicPotBreak2(ObjTsubo* this, PlayState* play2); void ObjTsubo_PotBreak3(ObjTsubo* this, PlayState* play2); -void ObjTsubo_RacePotBreak3(ObjTsubo* this, PlayState* play2); +void ObjTsubo_MagicPotBreak3(ObjTsubo* this, PlayState* play2); void func_80928914(ObjTsubo* this); void func_80928928(ObjTsubo* this, PlayState* play); void func_809289B4(ObjTsubo* this); @@ -68,10 +68,9 @@ typedef struct { ObjTsuboData sPotTypeData[4] = { { GAMEPLAY_DANGEON_KEEP, 0.197f, gameplay_dangeon_keep_DL_017EA0, gameplay_dangeon_keep_DL_018090, 12, 32, ObjTsubo_PotBreak1, ObjTsubo_PotBreak2, ObjTsubo_PotBreak3 }, - { OBJECT_RACETSUBO, 0.29549998f, object_racetsubo_DL_000278, object_racetsubo_DL_001610, 18, 45, - ObjTsubo_RacePotBreak1, ObjTsubo_RacePotBreak2, ObjTsubo_RacePotBreak3 }, - { OBJECT_TSUBO, 0.197f, object_tsubo_DL_0017C0, object_tsubo_DL_001960, 12, 32, ObjTsubo_PotBreak1, - ObjTsubo_PotBreak2, ObjTsubo_PotBreak3 }, + { OBJECT_RACETSUBO, 0.29549998f, gMagicPotDL, gMagicPotShardDL, 18, 45, ObjTsubo_MagicPotBreak1, + ObjTsubo_MagicPotBreak2, ObjTsubo_MagicPotBreak3 }, + { OBJECT_TSUBO, 0.197f, gPotDL, gPotShardDL, 12, 32, ObjTsubo_PotBreak1, ObjTsubo_PotBreak2, ObjTsubo_PotBreak3 }, { GAMEPLAY_DANGEON_KEEP, 0.197f, gameplay_dangeon_keep_DL_017EA0, gameplay_dangeon_keep_DL_018090, 12, 32, ObjTsubo_PotBreak1, ObjTsubo_PotBreak2, ObjTsubo_PotBreak3 }, }; @@ -253,7 +252,7 @@ void ObjTsubo_PotBreak1(ObjTsubo* this, PlayState* play) { func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 10, 80, true); } -void ObjTsubo_RacePotBreak1(ObjTsubo* this, PlayState* play) { +void ObjTsubo_MagicPotBreak1(ObjTsubo* this, PlayState* play) { s16 rot; s32 phi_s0; s32 i; @@ -336,7 +335,7 @@ void ObjTsubo_PotBreak2(ObjTsubo* this, PlayState* play2) { } } -void ObjTsubo_RacePotBreak2(ObjTsubo* this, PlayState* play2) { +void ObjTsubo_MagicPotBreak2(ObjTsubo* this, PlayState* play2) { PlayState* play = (PlayState*)play2; s32 pad; s16 rot; @@ -421,7 +420,7 @@ void ObjTsubo_PotBreak3(ObjTsubo* this, PlayState* play2) { } } -void ObjTsubo_RacePotBreak3(ObjTsubo* this, PlayState* play2) { +void ObjTsubo_MagicPotBreak3(ObjTsubo* this, PlayState* play2) { } void func_80928914(ObjTsubo* this) { From 09100194b363ea7aa7f71cda9f6111fd6d8829dd Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:44:53 -0300 Subject: [PATCH 065/121] document object_hana (graveyard flower) (#1355) * initial commit object_hana documentation * explain how object is organized * change whole flower set name * a litle space Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_hana.xml | 24 ++++++++++++------- src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/assets/xml/objects/object_hana.xml b/assets/xml/objects/object_hana.xml index 21981bc02..872bdc806 100644 --- a/assets/xml/objects/object_hana.xml +++ b/assets/xml/objects/object_hana.xml @@ -1,13 +1,19 @@  + - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c index 97fbbec3d..fbc581aec 100644 --- a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c +++ b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c @@ -48,5 +48,5 @@ void ObjHana_Update(Actor* thisx, PlayState* play) { } void ObjHana_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_hana_DL_000500); + Gfx_DrawDListOpa(play, gGraveyardFlowersDL); } From ef519740494f34cf35fcc676bceeedc70939b3a1 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 14 Aug 2023 22:34:57 -0300 Subject: [PATCH 066/121] document object_mkk (#1350) * initial commit of object_mkk documentation * forgot door * spaces Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_mkk.xml | 23 +++++++++++---------- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 4 ++-- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/assets/xml/objects/object_mkk.xml b/assets/xml/objects/object_mkk.xml index 17f36f323..445d26f0d 100644 --- a/assets/xml/objects/object_mkk.xml +++ b/assets/xml/objects/object_mkk.xml @@ -1,15 +1,16 @@  + - - - - - - - - - - - + + + + + + + + + + + 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 60d0ec673..df7b1b384 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -379,7 +379,7 @@ static Gfx* D_808679A4[14][2] = { { gMilkBarDoorDL, gMilkBarDoorDL }, { gMusicBoxHouseDoorDL, gMusicBoxHouseDoorDL }, { gPiratesFortressDoorDL, gPiratesFortressDoorDL }, - { object_mkk_DL_000310, object_mkk_DL_000310 }, + { gWhiteBoeEyesDL, gWhiteBoeEyesDL }, { gFieldWoodDoorLeftDL, gFieldWoodDoorRightDL }, }; 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 0e347acb4..5387b94b6 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -128,8 +128,8 @@ static Color_RGBA8 sEffPrimColors[] = { { 50, 50, 50, 255 }, { 255, 255, 255, 25 static Color_RGBA8 sEffEnvColors[] = { { 200, 200, 200, 255 }, { 255, 255, 255, 255 } }; static EnMkkDlists sBoeDLists[] = { - { object_mkk_DL_000030, object_mkk_DL_0000B0, object_mkk_DL_0000C8, object_mkk_DL_000140 }, - { object_mkk_DL_0001F0, object_mkk_DL_000278, object_mkk_DL_000290, object_mkk_DL_000310 }, + { gBlackBoeBodyMaterialDL, gBlackBoeBodyModelDL, gBlackBoeEndDL, gBlackBoeEyesDL }, + { gWhiteBoeBodyMaterialDL, gWhiteBoeBodyModelDL, gWhiteBoeEndDL, gWhiteBoeEyesDL }, }; static Color_RGBA8 D_80A4F7C4[] = { From 33ca9daecea3e052eee418371cc2e069d7babac7 Mon Sep 17 00:00:00 2001 From: Synray <31429825+Synray@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:58:49 -0700 Subject: [PATCH 067/121] z_bgcheck OK (#1358) * z_bgcheck OK * Format * Cleanup * Cleanup * Review changes Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- src/code/z_bgcheck.c | 111 +++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 72 deletions(-) diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index ab2eca48a..924000f92 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" #include "fixed_point.h" @@ -92,13 +93,6 @@ char D_801EDAA8[80]; char D_801EDAF8[80]; Vec3f D_801EDB48[3]; // polyVerts -#ifndef NON_MATCHING -Vec3f D_801EDB70[3]; // polyVerts; -Plane D_801EDB98; // plane; -Sphere16 D_801EDBA8; // sphere; -TriNorm D_801EDBB0; // tri; -#endif - void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast); s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32* outZ, Vec3f* pos, f32 radius, @@ -394,8 +388,6 @@ s32 CollisionPoly_CheckZIntersectApprox(CollisionPoly* poly, Vec3s* vtxList, f32 y, zIntersect); } -#ifdef NON_MATCHING -// Matches, but needs in-function static bss s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0) { static Vec3f sPolyVerts[3]; // D_801EDB70 static Plane sPlane; // D_801EDB98 @@ -445,13 +437,7 @@ s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0) { } return false; } -#else -s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_LineVsPoly.s") -#endif -#ifdef NON_MATCHING -// Matches, but needs in-function static bss s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius) { static Sphere16 sSphere; // D_801EDBA8 static TriNorm sTri; // D_801EDBB0 @@ -466,10 +452,6 @@ s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, sSphere.radius = radius; return Math3D_ColSphereTri(&sSphere, &sTri, &intersect); } -#else -s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_SphVsPoly.s") -#endif /** * Add poly to StaticLookup table @@ -1897,7 +1879,6 @@ f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPol return BgCheck_RaycastFloorImpl(NULL, colCtx, COLPOLY_IGNORE_ENTITY, outPoly, bgId, pos, NULL, 0x06, 1.0f, 0); } -#ifdef NON_MATCHING /** * Tests if moving from `posPrev` to `posNext` will collide with a "wall" * `radius` is used to form a sphere for collision detection purposes @@ -1908,7 +1889,7 @@ f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPol 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) { StaticLookup* lookupTbl; - f32 temp_f0; + s32 pad; s32 result; CollisionPoly* poly; // change between posPrev to posNext @@ -1919,23 +1900,7 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul s32 dynaPolyCollision; Vec3f posIntersect; s32 bgId; - f32 temp_f0_2; f32 f32temp; - f32 nx2; - f32 nz2; - Vec3f checkLineNext; - Vec3f checkLinePrev; - f32 n2XZDist; - f32 n3XZDist; - f32 nx3; - f32 nz3; - s32 bccFlags; - Vec3f posIntersect2; - s32 bgId2; - // unit normal of polygon - f32 nx; - f32 ny; - f32 nz; result = false; *outBgId = BGCHECK_SCENE; @@ -1953,7 +1918,9 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul result = BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posNext, &posIntersect, &poly, &bgId, actor, 1.0f, BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING); if (result) { - ny = COLPOLY_GET_NORMAL(poly->normal.y); + // unit normal of polygon + f32 ny = COLPOLY_GET_NORMAL(poly->normal.y); + // if poly is floor, push result underneath the floor if (ny > 0.5f) { posResult->x = posIntersect.x; @@ -1969,8 +1936,9 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul } // poly is wall else { - nx = COLPOLY_GET_NORMAL(poly->normal.x); - nz = COLPOLY_GET_NORMAL(poly->normal.z); + f32 nx = COLPOLY_GET_NORMAL(poly->normal.x); + f32 nz = COLPOLY_GET_NORMAL(poly->normal.z); + posResult->x = radius * nx + posIntersect.x; posResult->y = radius * ny + posIntersect.y; posResult->z = radius * nz + posIntersect.z; @@ -1980,9 +1948,12 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul } } else { // if the radius is less than the distance travelled on the xz plane, also test for floor collisions - bccFlags = SQ(radius) < (SQ(dx) + SQ(dz)) - ? (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING) - : (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_FLOOR & ~BGCHECK_CHECK_CEILING); + Vec3f checkLineNext; + Vec3f checkLinePrev; + s32 pad; + s32 bccFlags = SQ(radius) < (SQ(dx) + SQ(dz)) + ? (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING) + : (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_FLOOR & ~BGCHECK_CHECK_CEILING); // perform a straight line test to see if a line at posNext.y + checkHeight from posPrev.xz to posNext.xz // passes through any wall and possibly floor polys @@ -1994,21 +1965,23 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul &posIntersect, &poly, &bgId, actor, 1.0f, bccFlags); if (result) { - nx2 = COLPOLY_GET_NORMAL(poly->normal.x); - nz2 = COLPOLY_GET_NORMAL(poly->normal.z); - n2XZDist = sqrtf(SQ(nx2) + SQ(nz2)); + f32 nx2 = COLPOLY_GET_NORMAL(poly->normal.x); + f32 nz2 = COLPOLY_GET_NORMAL(poly->normal.z); + f32 n2XZDist = sqrtf(SQ(nx2) + SQ(nz2)); // if poly is not a "flat" floor or "flat" ceiling if (!IS_ZERO(n2XZDist)) { // normalize nx,nz and multiply each by the radius to go back to the other side of the wall + f32 ny2; + f32temp = 1.0f / n2XZDist; - temp_f0 = radius * f32temp; - posResult->x = temp_f0 * nx2 + posIntersect.x; - posResult->z = temp_f0 * nz2 + posIntersect.z; + posResult->x = radius * f32temp * nx2 + posIntersect.x; + posResult->z = radius * f32temp * nz2 + posIntersect.z; *outPoly = poly; *outBgId = bgId; + ny2 = COLPOLY_GET_NORMAL(poly->normal.y); result = true; - if (poly->normal.y * COLPOLY_NORMAL_FRAC > 0.5f) { + if (ny2 > 0.5f) { if (actor != NULL) { actor->bgCheckFlags |= BGCHECKFLAG_PLAYER_1000; } @@ -2042,19 +2015,21 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul } // if a collision with a dyna poly was detected if (dynaPolyCollision || (*outBgId != BGCHECK_SCENE)) { + Vec3f posIntersect2; + s32 bgId2; + if (BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posResult, &posIntersect2, &poly, &bgId2, actor, 1.0f, BGCHECK_CHECK_ONE_FACE | BGCHECK_CHECK_WALL)) { - nx3 = COLPOLY_GET_NORMAL(poly->normal.x); - nz3 = COLPOLY_GET_NORMAL(poly->normal.z); - n3XZDist = sqrtf(SQ(nx3) + SQ(nz3)); + f32 nx3 = COLPOLY_GET_NORMAL(poly->normal.x); + f32 nz3 = COLPOLY_GET_NORMAL(poly->normal.z); + f32 n3XZDist = sqrtf(SQ(nx3) + SQ(nz3)); // if poly is not a "flat" floor or "flat" ceiling if (!IS_ZERO(n3XZDist)) { // normalize nx,nz and multiply each by the radius to go back to the other side of the wall f32temp = 1.0f / n3XZDist; - temp_f0_2 = radius * f32temp; - posResult->x = temp_f0_2 * nx3 + posIntersect2.x; - posResult->z = temp_f0_2 * nz3 + posIntersect2.z; + posResult->x = radius * f32temp * nx3 + posIntersect2.x; + posResult->z = radius * f32temp * nz3 + posIntersect2.z; *outPoly = poly; *outBgId = bgId2; result = true; @@ -2063,11 +2038,6 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul } return result; } -#else -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); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_CheckWallImpl.s") -#endif /** * Public. Tests if moving from `posPrev` to `posNext` will collide with a "wall" @@ -3249,7 +3219,6 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) { return result; } -#ifdef NON_MATCHING /** * Perform dyna poly raycast toward floor * returns the yIntersect of the poly found, or BGCHECK_Y_MIN if no poly is found @@ -3261,7 +3230,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { s32 i2; s32 pauseState; DynaPolyActor* dynaActor; - s32 pad; + u32 bgId; Vec3f polyVtx[3]; Vec3f polyNorm; u32 polyIndex; @@ -3270,10 +3239,10 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { f32 magnitude; Vec3s* vtxList; f32 polyDist; + CollisionPoly* poly; Vec3f vtx; f32 intersect; ScaleRotPos* curTransform; - CollisionPoly* poly; result = BGCHECK_Y_MIN; *dynaRaycast->bgId = BGCHECK_SCENE; @@ -3334,12 +3303,12 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { pauseState = dynaRaycast->play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE; } 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]; + bgId = *dynaRaycast->bgId; + polyMin = &dynaRaycast->dyna->polyList[(u16)dynaRaycast->dyna->bgActors[bgId].dynaLookup.polyStartIndex]; polyIndex = *dynaRaycast->resultPoly - polyMin; poly = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].colHeader->polyList[polyIndex]; + curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform; SkinMatrix_SetScaleRotateYRPTranslate(&srpMtx, curTransform->scale.x, curTransform->scale.y, curTransform->scale.z, curTransform->rot.x, curTransform->rot.y, curTransform->rot.z, curTransform->pos.x, curTransform->pos.y, @@ -3348,7 +3317,9 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { vtxList = dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].colHeader->vtxList; for (i2 = 0; i2 < 3; i2++) { - Math_Vec3s_ToVec3f(&vtx, &vtxList[COLPOLY_VTX_INDEX(poly->vtxData[i2])]); + Vec3s* src = &vtxList[COLPOLY_VTX_INDEX(poly->vtxData[i2])]; + + Math_Vec3s_ToVec3f(&vtx, src); SkinMatrix_Vec3fMtxFMultXYZ(&srpMtx, &vtx, &polyVtx[i2]); } Math3D_SurfaceNorm(&polyVtx[0], &polyVtx[1], &polyVtx[2], &polyNorm); @@ -3363,7 +3334,6 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { &polyVtx[0], &polyVtx[1], &polyVtx[2], polyNorm.x, polyNorm.y, polyNorm.z, polyDist, dynaRaycast->pos->z, dynaRaycast->pos->x, &intersect, dynaRaycast->checkDist)) { if (fabsf(intersect - result) < 1.0f) { - result = intersect; } } @@ -3372,9 +3342,6 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { } return result; } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_RaycastFloorDyna.s") -#endif /** * Performs collision detection on a BgActor's wall polys on sphere `pos`, `radius` From 0cceee6eba249ca3671a30e5eafe5bd0a7162bf3 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 15 Aug 2023 14:23:33 +1000 Subject: [PATCH 068/121] Animation Cleanup: En_C* and En_D* Actors (#1327) * En_C cleanup * En_D * more cleanup * name enums * missed one * PR Review * remove padding --- include/z_en_hy_code.h | 1 + src/code/z_en_hy_code.c | 62 ++--- .../actors/ovl_Dm_Char08/z_dm_char08.c | 17 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 6 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 3 + .../actors/ovl_En_Col_Man/z_en_col_man.c | 9 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 40 ++-- src/overlays/actors/ovl_En_Cow/z_en_cow.h | 4 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 8 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 218 +++++++++-------- src/overlays/actors/ovl_En_Dai/z_en_dai.h | 7 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 89 ++++--- src/overlays/actors/ovl_En_Daiku/z_en_daiku.h | 7 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 158 +++++++----- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 9 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 6 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 26 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 47 ++-- .../ovl_En_Demo_heishi/z_en_demo_heishi.h | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 42 ++-- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 14 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 173 +++++++++----- src/overlays/actors/ovl_En_Dnk/z_en_dnk.h | 11 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 226 +++++++++++------- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 71 +++--- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 175 ++++++++------ src/overlays/actors/ovl_En_Dnq/z_en_dnq.h | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 143 +++++------ src/overlays/actors/ovl_En_Dns/z_en_dns.h | 4 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 22 +- .../actors/ovl_En_Dodongo/z_en_dodongo.h | 5 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 52 +++- .../actors/ovl_En_Dragon/z_en_dragon.c | 56 +++-- .../actors/ovl_En_Dragon/z_en_dragon.h | 3 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 11 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 11 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 22 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 6 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 8 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 4 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 8 +- .../actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c | 4 +- .../actors/ovl_player_actor/z_player.c | 25 +- tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 10 +- 46 files changed, 1091 insertions(+), 758 deletions(-) diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h index 192e9183c..2b5d46d57 100644 --- a/include/z_en_hy_code.h +++ b/include/z_en_hy_code.h @@ -30,6 +30,7 @@ typedef enum EnHyLimb { //! TODO: Better animaion enum names when animations are documented typedef enum { + /* -1 */ ENHY_ANIM_NONE = -1, /* 0 */ ENHY_ANIM_AOB_0, /* 1 */ ENHY_ANIM_BOJ_1, /* 2 */ ENHY_ANIM_BOJ_2, diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index d59d31000..02666fc4c 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -11,28 +11,28 @@ #include "objects/object_boj/object_boj.h" #include "objects/object_os_anime/object_os_anime.h" -static AnimationInfoS sAnimationInfo[] = { - { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, +static AnimationInfoS sAnimationInfo[ENHY_ANIM_MAX] = { + { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_AOB_0 + { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_1 + { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_2 + { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_3 + { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_4 + { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_5 + { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BBA_6 + { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_7 + { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BJI_8 + { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_9 + { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_10 + { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_OS_ANIME_11 + { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_12 + { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_13 + { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_14 + { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_15 + { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_16 + { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_17 + { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_18 + { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_19 + { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_20 }; s8 gEnHyLimbToBodyParts[ENHY_LIMB_MAX] = { @@ -91,20 +91,20 @@ u8 gEnHyShadowSizes[ENHY_BODYPART_MAX] = { }; s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { - s16 frameCount; - s32 isChanged = false; + s16 endFrame; + s32 didAnimChange = false; - if (animIndex >= ENHY_ANIM_AOB_0 && animIndex < ENHY_ANIM_MAX) { - isChanged = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common); + if ((animIndex > ENHY_ANIM_NONE) && (animIndex < ENHY_ANIM_MAX)) { + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common); } Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, - sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); } - return isChanged; + return didAnimChange; } EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { 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 a3b8bc1a2..80d1bef15 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -26,11 +26,6 @@ void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play); void func_80AAF884(DmChar08* this, PlayState* play); void func_80AAFB04(DmChar08* this, PlayState* play); void func_80AAFB94(DmChar08* this, PlayState* play); -void DmChar08_HandleCutscene(DmChar08* this, PlayState* play); -void func_80AB023C(DmChar08* this, PlayState* play); -void DmChar08_UpdateAnim(DmChar08* this, PlayState* play); -void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play); -void func_80AAFCCC(DmChar08* this, PlayState* play); typedef enum { /* 0 */ TURTLE_EYEMODE_BLINK_LEFT, @@ -415,6 +410,9 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } } else { switch (this->unk_206) { @@ -433,6 +431,9 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } } return; @@ -453,8 +454,14 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } break; + + default: + 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 b6f8198c1..c6e0e4269 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -307,7 +307,7 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { } } } - return false; + return 0; } void func_808A0F88(DoorShutter* this, PlayState* play) { @@ -328,7 +328,7 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { } else { CutsceneManager_Queue(this->csId); } - } else if (func_808A0E28(this, play)) { + } else if (func_808A0E28(this, play) != 0) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; @@ -483,7 +483,7 @@ void func_808A1548(DoorShutter* this, PlayState* play) { } else { CutsceneManager_Queue(this->csId); } - } else if (func_808A0E28(this, play)) { + } else if (func_808A0E28(this, play) != 0) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; 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 407c6ea66..ad9210498 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 @@ -195,6 +195,9 @@ void EnCne01_Talk(EnHy* this, PlayState* play) { this->actionFunc = this->prevActionFunc; this->prevActionFunc = NULL; break; + + default: + break; } } 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 1f096bdf5..5b7b74db1 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 @@ -60,9 +60,6 @@ ActorInit En_Col_Man_InitVars = { (ActorFunc)NULL, }; -static Color_RGBA8 primColor = { 60, 50, 20, 255 }; -static Color_RGBA8 envColor = { 40, 30, 30, 255 }; - void EnColMan_Init(Actor* thisx, PlayState* play) { EnColMan* this = THIS; @@ -77,10 +74,12 @@ void EnColMan_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); func_80AFDD60(this); break; + case EN_COL_MAN_FALLING_ROCK: ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); func_80AFDF60(this); break; + case EN_COL_MAN_CUTSCENE_BOMB: case EN_COL_MAN_GAMEPLAY_BOMB: func_80AFE234(this); @@ -156,6 +155,8 @@ void func_80AFDF60(EnColMan* this) { } void func_80AFDFB4(EnColMan* this, PlayState* play) { + static Color_RGBA8 sPrimColor = { 60, 50, 20, 255 }; + static Color_RGBA8 sEnvColor = { 40, 30, 30, 255 }; s32 i; Vec3f velocity; Vec3f accel; @@ -180,7 +181,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { accel.z = 0.0f; accel.x = 0.0f; - func_800B0EB0(play, &this->actor.world.pos, &velocity, &accel, &primColor, &envColor, + func_800B0EB0(play, &this->actor.world.pos, &velocity, &accel, &sPrimColor, &sEnvColor, Rand_ZeroFloat(50.0f) + 60.0f, 30, Rand_ZeroFloat(5.0f) + 20.0f); } 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 feb0a8e54..6d72a49fa 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -127,13 +127,14 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, EN_COW_TYPE_TAIL); - this->animationTimer = Rand_ZeroFloat(1000.0f) + 40.0f; - this->animationCycle = 0; + this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + this->animCycle = 0; this->actor.targetMode = 6; gHorsePlayedEponasSong = false; func_801A5080(4); break; + case EN_COW_TYPE_TAIL: SkelAnime_InitFlex(play, &this->skelAnime, &gCowTailSkel, NULL, this->jointTable, this->morphTable, COW_TAIL_LIMB_MAX); @@ -146,7 +147,10 @@ void EnCow_Init(Actor* thisx, PlayState* play) { EnCow_SetTailPos(this); this->actor.flags &= ~ACTOR_FLAG_1; - this->animationTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + break; + + default: break; } @@ -167,10 +171,10 @@ void EnCow_Destroy(Actor* thisx, PlayState* play) { } void EnCow_UpdateAnimation(EnCow* this, PlayState* play) { - if (this->animationTimer > 0) { - this->animationTimer--; + if (this->animTimer > 0) { + this->animTimer--; } else { - this->animationTimer = Rand_ZeroFloat(500.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(500.0f) + 40.0f; Animation_Change(&this->skelAnime, &gCowChewAnim, 1.0f, this->skelAnime.curFrame, Animation_GetLastFrame(&gCowChewAnim), ANIMMODE_ONCE, 1.0f); } @@ -178,23 +182,23 @@ void EnCow_UpdateAnimation(EnCow* this, PlayState* play) { if (!(this->flags & EN_COW_FLAG_PLAYER_HAS_APPROACHED)) { this->flags |= EN_COW_FLAG_PLAYER_HAS_APPROACHED; if (this->skelAnime.animation == &gCowChewAnim) { - this->animationTimer = 0; + this->animTimer = 0; } } } - this->animationCycle++; - if (this->animationCycle > 0x30) { - this->animationCycle = 0; + this->animCycle++; + if (this->animCycle > 0x30) { + this->animCycle = 0; } - if (this->animationCycle < 0x20) { - this->actor.scale.x = ((Math_SinS(this->animationCycle * 0x400) * (1.0f / 100.0f)) + 1.0f) * 0.01f; + if (this->animCycle < 0x20) { + this->actor.scale.x = ((Math_SinS(this->animCycle * 0x400) * (1.0f / 100.0f)) + 1.0f) * 0.01f; } else { this->actor.scale.x = 0.01f; } - if (this->animationCycle > 0x10) { - this->actor.scale.y = ((Math_SinS((this->animationCycle * 0x400) - 0x4000) * (1.0f / 100.0f)) + 1.0f) * 0.01f; + if (this->animCycle > 0x10) { + this->actor.scale.y = ((Math_SinS((this->animCycle * 0x400) - 0x4000) * (1.0f / 100.0f)) + 1.0f) * 0.01f; } else { this->actor.scale.y = 0.01f; } @@ -310,10 +314,10 @@ void EnCow_Idle(EnCow* this, PlayState* play) { } void EnCow_DoTail(EnCow* this, PlayState* play) { - if (this->animationTimer > 0) { - this->animationTimer--; + if (this->animTimer > 0) { + this->animTimer--; } else { - this->animationTimer = Rand_ZeroFloat(200.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(200.0f) + 40.0f; Animation_Change(&this->skelAnime, &gCowTailIdleAnim, 1.0f, this->skelAnime.curFrame, Animation_GetLastFrame(&gCowTailIdleAnim), ANIMMODE_ONCE, 1.0f); } @@ -323,7 +327,7 @@ void EnCow_DoTail(EnCow* this, PlayState* play) { if (!(this->flags & EN_COW_FLAG_PLAYER_HAS_APPROACHED)) { this->flags |= EN_COW_FLAG_PLAYER_HAS_APPROACHED; if (this->skelAnime.animation == &gCowTailIdleAnim) { - this->animationTimer = 0; + this->animTimer = 0; } } } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.h b/src/overlays/actors/ovl_En_Cow/z_en_cow.h index 200ec5bec..b4a88a6fc 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h @@ -27,8 +27,8 @@ typedef struct EnCow { /* 0x0244 */ Vec3s morphTable[COW_LIMB_MAX]; /* 0x0268 */ Vec3s headTilt; /* 0x026E */ u16 flags; - /* 0x0270 */ u16 animationTimer; - /* 0x0272 */ u16 animationCycle; + /* 0x0270 */ u16 animTimer; + /* 0x0272 */ u16 animCycle; /* 0x0274 */ EnCowActionFunc actionFunc; } EnCow; // size = 0x278 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 021c55631..1cd89043e 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -159,11 +159,11 @@ void EnCrow_SetupFlyIdle(EnCrow* this) { void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 dist; - s32 onInitialAnimFrame; + s32 onAnimFirstFrame; s16 yaw; SkelAnime_Update(&this->skelAnime); - onInitialAnimFrame = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f; if ((this->actor.parent != NULL) && (this->actor.parent->home.rot.z == 0)) { @@ -181,7 +181,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { this->yawTarget = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } - if ((Math_SmoothStepToS(&this->actor.shape.rot.y, this->yawTarget, 5, 0x300, 0x10) == 0) && onInitialAnimFrame && + if ((Math_SmoothStepToS(&this->actor.shape.rot.y, this->yawTarget, 5, 0x300, 0x10) == 0) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { yaw = (Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y); @@ -201,7 +201,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { this->pitchTarget = Rand_S16Offset(0x800, 0x800); } - if ((Math_SmoothStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0xA, 0x100, 8) == 0) && onInitialAnimFrame && + if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0xA, 0x100, 8) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { if (this->actor.home.pos.y < this->actor.world.pos.y) { this->pitchTarget -= Rand_S16Offset(0x400, 0x400); diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index afe72d120..4477a8b8d 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -5,7 +5,6 @@ */ #include "z_en_dai.h" -#include "objects/object_dai/object_dai.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) @@ -127,50 +126,64 @@ s32 func_80B3E5B4(EnDai* this, PlayState* play) { return 0; } -s32 func_80B3E5DC(EnDai* this, s32 arg1) { - static AnimationInfoS sAnimationInfo[] = { - { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_007354, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_000CEC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_0069DC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_002E58, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_006590, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - }; +typedef enum { + /* -1 */ ENDAI_ANIM_NONE = -1, + /* 0 */ ENDAI_ANIM_0, + /* 1 */ ENDAI_ANIM_1, + /* 2 */ ENDAI_ANIM_2, + /* 3 */ ENDAI_ANIM_3, + /* 4 */ ENDAI_ANIM_4, + /* 5 */ ENDAI_ANIM_5, + /* 6 */ ENDAI_ANIM_6, + /* 7 */ ENDAI_ANIM_7, + /* 8 */ ENDAI_ANIM_8, + /* 9 */ ENDAI_ANIM_MAX +} EnDaiAnimation; - s32 phi_v1 = false; - s32 ret = false; +static AnimationInfoS sAnimationInfo[ENDAI_ANIM_MAX] = { + { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDAI_ANIM_0 + { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDAI_ANIM_1 + { &object_dai_Anim_007354, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_2 + { &object_dai_Anim_000CEC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_3 + { &object_dai_Anim_0069DC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_4 + { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDAI_ANIM_5 + { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_6 + { &object_dai_Anim_002E58, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDAI_ANIM_7 + { &object_dai_Anim_006590, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_8 +}; - switch (arg1) { - case 0: - case 1: - if ((this->unk_A70 != 0) && (this->unk_A70 != 1)) { - phi_v1 = true; +s32 EnDai_ChangeAnim(EnDai* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; + + switch (animIndex) { + case ENDAI_ANIM_0: + case ENDAI_ANIM_1: + if ((this->animIndex != ENDAI_ANIM_0) && (this->animIndex != ENDAI_ANIM_1)) { + changeAnim = true; } break; - case 5: - case 6: - if ((this->unk_A70 != 5) && (this->unk_A70 != 6)) { - phi_v1 = true; + case ENDAI_ANIM_5: + case ENDAI_ANIM_6: + if ((this->animIndex != ENDAI_ANIM_5) && (this->animIndex != ENDAI_ANIM_6)) { + changeAnim = true; } break; default: - if (arg1 != this->unk_A70) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } break; } - if (phi_v1) { - this->unk_A70 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } s32 func_80B3E69C(EnDai* this, PlayState* play) { @@ -239,19 +252,19 @@ static s32 D_80B3FC8C[] = { 0x920C0F0C, 0x930C1211, 0x5520100E, 0x0C940C12, 0x10000000, }; +static f32 D_80B3FCB4[] = { + 1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f, +}; + +static f32 D_80B3FCE4[] = { + 5.0f, 15.0f, 18.0f, 45.0f, 47.0f, 49.0f, 51.0f, 53.0f, 55.0f, 5.0f, 35.0f, 45.0f, +}; + +static s16 D_80B3FD14[] = { + 4, 5, 2, 0, 4, 5, 2, 5, 4, 4, 5, 2, +}; + s16 func_80B3E8BC(EnDai* this, s32 cueId) { - static f32 D_80B3FCB4[] = { - 1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f, - }; - - static f32 D_80B3FCE4[] = { - 5.0f, 15.0f, 18.0f, 45.0f, 47.0f, 49.0f, 51.0f, 53.0f, 55.0f, 5.0f, 35.0f, 45.0f, - }; - - static s16 D_80B3FD14[] = { - 4, 5, 2, 0, 4, 5, 2, 5, 4, 4, 5, 2, - }; - s32 i; s32 end; @@ -266,7 +279,7 @@ s16 func_80B3E8BC(EnDai* this, s32 cueId) { } while (i < end) { - if ((D_80B3FCB4[i] <= this->skelAnime.curFrame) && (D_80B3FCE4[i] >= this->skelAnime.curFrame)) { + if ((this->skelAnime.curFrame >= D_80B3FCB4[i]) && (this->skelAnime.curFrame <= D_80B3FCE4[i])) { return D_80B3FD14[i]; } i++; @@ -285,7 +298,7 @@ s32 func_80B3E96C(EnDai* this, PlayState* play) { ((this->unk_1DC == 0) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame))) { switch (this->unk_1DC) { case 0: - func_80B3E5DC(this, 2); + EnDai_ChangeAnim(this, ENDAI_ANIM_2); this->unk_1DC++; break; @@ -293,22 +306,25 @@ s32 func_80B3E96C(EnDai* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWSTORM_HARD); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WEATHER_TAG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0x1388, 0x708, 0x3E8, 0); - func_80B3E5DC(this, 3); + EnDai_ChangeAnim(this, ENDAI_ANIM_3); this->unk_1DC++; break; case 2: - func_80B3E5DC(this, 4); + EnDai_ChangeAnim(this, ENDAI_ANIM_4); this->unk_1DC++; break; case 3: - func_80B3E5DC(this, 1); + EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->unk_1F0 = D_80B3FBF0; this->unk_1FC = D_80B3FBF0; this->unk_1DC = 0; this->unk_1DA = Rand_S16Offset(20, 20); break; + + default: + break; } } else if (this->unk_1DC == 2) { sp50.x = sp50.y = 0.0f; @@ -336,30 +352,30 @@ void func_80B3EC10(f32 arg0, Vec3f arg1, f32 arg2, Vec3f arg3, f32 arg4, Vec3f* arg5->z = ((arg3.z - arg1.z) * temp_f0) + arg1.z; } +static f32 D_80B3FD2C[] = { + 6.0f, 11.0f, 15.0f, 0.0f, 12.0f, 17.0f, 0.0f, 3.0f, +}; + +static f32 D_80B3FD4C[] = { + 8.0f, 15.0f, 24.0f, 4.0f, 17.0f, 26.0f, 3.0f, 7.0f, +}; + +static s16 D_80B3FD6C[] = { + 1, 1, 1, 2, 2, 2, 3, 3, +}; + +static Vec3f D_80B3FD7C[] = { + { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.8f }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f }, + { 1.0f, 0.8f, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, +}; + s32 func_80B3EC84(EnDai* this) { - static f32 D_80B3FD2C[] = { - 6.0f, 11.0f, 15.0f, 0.0f, 12.0f, 17.0f, 0.0f, 3.0f, - }; - - static f32 D_80B3FD4C[] = { - 8.0f, 15.0f, 24.0f, 4.0f, 17.0f, 26.0f, 3.0f, 7.0f, - }; - - static s16 D_80B3FD6C[] = { - 1, 1, 1, 2, 2, 2, 3, 3, - }; - - static Vec3f D_80B3FD7C[] = { - { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.8f }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f }, - { 1.0f, 0.8f, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, - }; - s32 i; s32 ret = false; for (i = 0; i < ARRAY_COUNT(D_80B3FD6C); i++) { - if ((this->unk_1DC == D_80B3FD6C[i]) && (D_80B3FD2C[i] < this->skelAnime.curFrame) && - (D_80B3FD4C[i] >= this->skelAnime.curFrame)) { + if ((this->unk_1DC == D_80B3FD6C[i]) && (this->skelAnime.curFrame > D_80B3FD2C[i]) && + (this->skelAnime.curFrame <= D_80B3FD4C[i])) { func_80B3EC10(D_80B3FD2C[i], D_80B3FD7C[i], D_80B3FD4C[i], D_80B3FD7C[i + 1], this->skelAnime.curFrame, &this->unk_1F0); ret = true; @@ -370,20 +386,20 @@ s32 func_80B3EC84(EnDai* this) { return ret; } +static f32 D_80B3FDE8[] = { 22.0f, 0.0f, 0.0f }; + +static f32 D_80B3FDF4[] = { 29.0f, 3.0f, 9.0f }; + +static s16 D_80B3FE00[] = { 1, 2, 3 }; + +static Vec3f D_80B3FE08[] = { + { 1.0f, 1.0f, 1.0f }, + { 1.0f, 1.2f, 1.2f }, + { 1.0f, 0.7f, 0.8f }, + { 1.0f, 1.0f, 1.0f }, +}; + s32 func_80B3ED88(EnDai* this) { - static f32 D_80B3FDE8[] = { 22.0f, 0.0f, 0.0f }; - - static f32 D_80B3FDF4[] = { 29.0f, 3.0f, 9.0f }; - - static s16 D_80B3FE00[] = { 1, 2, 3 }; - - static Vec3f D_80B3FE08[] = { - { 1.0f, 1.0f, 1.0f }, - { 1.0f, 1.2f, 1.2f }, - { 1.0f, 0.7f, 0.8f }, - { 1.0f, 1.0f, 1.0f }, - }; - s32 i; s32 ret = false; @@ -415,7 +431,7 @@ void func_80B3EEDC(EnDai* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { - func_80B3E5DC(this, 1); + EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->actionFunc = func_80B3EE8C; } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { func_80B3E96C(this, play); @@ -440,9 +456,9 @@ void func_80B3F00C(EnDai* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); } -void func_80B3F044(EnDai* this, PlayState* play) { - static s32 D_80B3FE38[] = { - 0, 0, 6, 7, 8, +void EnDai_HandleCutscene(EnDai* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + ENDAI_ANIM_0, ENDAI_ANIM_0, ENDAI_ANIM_6, ENDAI_ANIM_7, ENDAI_ANIM_8, }; s32 cueChannel = 0; s32 cueId; @@ -451,7 +467,7 @@ void func_80B3F044(EnDai* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_472); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_80B3E5DC(this, D_80B3FE38[cueId]); + EnDai_ChangeAnim(this, sCsAnimIndex[cueId]); switch (cueId) { case 1: this->unk_1E0 = 0.0f; @@ -464,6 +480,9 @@ void func_80B3F044(EnDai* this, PlayState* play) { case 3: this->unk_1CE &= ~0x80; break; + + default: + break; } } this->cueId = cueId; @@ -505,6 +524,9 @@ void func_80B3F044(EnDai* this, PlayState* play) { } this->unk_1D6 = func_80B3E8BC(this, this->cueId); break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -514,9 +536,10 @@ void EnDai_Init(Actor* thisx, PlayState* play) { EnDai* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, 19); - this->unk_A70 = -1; - func_80B3E5DC(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, + OBJECT_DAI_LIMB_MAX); + this->animIndex = ENDAI_ANIM_NONE; + EnDai_ChangeAnim(this, ENDAI_ANIM_0); Actor_SetScale(&this->actor, 0.2f); this->actor.targetMode = 10; this->unk_1F0 = D_80B3FBF0; @@ -553,7 +576,7 @@ void EnDai_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); if (!func_80B3E7C8(this, play) && func_80B3E69C(this, play)) { - func_80B3F044(this, play); + EnDai_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); func_80B3E834(this); func_80B3E460(this); @@ -578,11 +601,11 @@ s32 EnDai_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p *dList = NULL; } - if (limbIndex == 11) { + if (limbIndex == OBJECT_DAI_LIMB_0B) { Matrix_MultVec3f(&gZeroVec3f, &this->unk_1E4); } - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { *dList = NULL; } @@ -597,7 +620,7 @@ void EnDai_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, MtxF sp24; switch (limbIndex) { - case 11: + case OBJECT_DAI_LIMB_0B: D_80B3FE4C.x = sREG(0); D_80B3FE4C.y = sREG(1); D_80B3FE4C.z = sREG(2); @@ -608,9 +631,12 @@ void EnDai_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->unk_1D4 = BINANG_SUB(sp64.y, 0x4000); break; - case 10: + case OBJECT_DAI_LIMB_0A: Matrix_Get(&this->unk_18C); break; + + default: + break; } } @@ -618,19 +644,22 @@ void EnDai_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx, Gfx** EnDai* this = THIS; switch (limbIndex) { - case 9: + case OBJECT_DAI_LIMB_09: if (this->unk_1CE & 0x100) { func_80B3EC84(this); } Matrix_Scale(this->unk_1F0.x, this->unk_1F0.y, this->unk_1F0.z, MTXMODE_APPLY); break; - case 2: + case OBJECT_DAI_LIMB_02: if (this->unk_1CE & 0x100) { func_80B3ED88(this); } Matrix_Scale(this->unk_1FC.x, this->unk_1FC.y, this->unk_1FC.z, MTXMODE_APPLY); break; + + default: + break; } } @@ -677,7 +706,6 @@ void func_80B3F920(EnDai* this, PlayState* play) { object_dai_Tex_0107B0, object_dai_Tex_010FB0, object_dai_Tex_0117B0, object_dai_Tex_010FB0, object_dai_Tex_011FB0, object_dai_Tex_0127B0, }; - s32 pad; this->unk_1CE |= 0x40; diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.h b/src/overlays/actors/ovl_En_Dai/z_en_dai.h index 35928388f..90456b833 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.h +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.h @@ -2,6 +2,7 @@ #define Z_EN_DAI_H #include "global.h" +#include "objects/object_dai/object_dai.h" struct EnDai; @@ -39,11 +40,11 @@ typedef struct EnDai { /* 0x1E4 */ Vec3f unk_1E4; /* 0x1F0 */ Vec3f unk_1F0; /* 0x1FC */ Vec3f unk_1FC; - /* 0x208 */ Vec3s jointTable[19]; - /* 0x27A */ Vec3s morphTable[19]; + /* 0x208 */ Vec3s jointTable[OBJECT_DAI_LIMB_MAX]; + /* 0x27A */ Vec3s morphTable[OBJECT_DAI_LIMB_MAX]; /* 0x2EC */ EnDaiEffect effects[EN_DAI_EFFECT_COUNT]; /* 0xA6C */ s32 unk_A6C; - /* 0xA70 */ s32 unk_A70; + /* 0xA70 */ s32 animIndex; } EnDai; // size = 0xA74 #endif // Z_EN_DAI_H 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 00a912adc..bfdf704a8 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -5,7 +5,6 @@ */ #include "z_en_daiku.h" -#include "objects/object_daiku/object_daiku.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -57,15 +56,42 @@ static ColliderCylinderInit sCylinderInit = { { 20, 60, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { - &object_daiku_Anim_002FA0, &object_daiku_Anim_00ACD0, &object_daiku_Anim_00C92C, - &object_daiku_Anim_000C44, &object_daiku_Anim_00C234, &object_daiku_Anim_000600, - &object_daiku_Anim_001114, &object_daiku_Anim_00B690, &object_daiku_Anim_00BEAC, +typedef enum { + /* -1 */ ENDAIKU_ANIM_NONE = -1, + /* 0 */ ENDAIKU_ANIM_0, + /* 1 */ ENDAIKU_ANIM_1, + /* 2 */ ENDAIKU_ANIM_2, + /* 3 */ ENDAIKU_ANIM_3, + /* 4 */ ENDAIKU_ANIM_4, + /* 5 */ ENDAIKU_ANIM_5, + /* 6 */ ENDAIKU_ANIM_6, + /* 7 */ ENDAIKU_ANIM_7, + /* 8 */ ENDAIKU_ANIM_8, + /* 9 */ ENDAIKU_ANIM_MAX +} EnDaiAnimation; + +static AnimationHeader* sAnimations[ENDAIKU_ANIM_MAX] = { + &object_daiku_Anim_002FA0, // ENDAIKU_ANIM_0 + &object_daiku_Anim_00ACD0, // ENDAIKU_ANIM_1 + &object_daiku_Anim_00C92C, // ENDAIKU_ANIM_2 + &object_daiku_Anim_000C44, // ENDAIKU_ANIM_3 + &object_daiku_Anim_00C234, // ENDAIKU_ANIM_4 + &object_daiku_Anim_000600, // ENDAIKU_ANIM_5 + &object_daiku_Anim_001114, // ENDAIKU_ANIM_6 + &object_daiku_Anim_00B690, // ENDAIKU_ANIM_7 + &object_daiku_Anim_00BEAC, // ENDAIKU_ANIM_8 }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, +static u8 sAnimationModes[ENDAIKU_ANIM_MAX] = { + ANIMMODE_LOOP, // ENDAIKU_ANIM_0 + ANIMMODE_LOOP, // ENDAIKU_ANIM_1 + ANIMMODE_LOOP, // ENDAIKU_ANIM_2 + ANIMMODE_LOOP, // ENDAIKU_ANIM_3 + ANIMMODE_ONCE, // ENDAIKU_ANIM_4 + ANIMMODE_LOOP, // ENDAIKU_ANIM_5 + ANIMMODE_LOOP, // ENDAIKU_ANIM_6 + ANIMMODE_ONCE, // ENDAIKU_ANIM_7 + ANIMMODE_ONCE, // ENDAIKU_ANIM_8 }; void EnDaiku_Init(Actor* thisx, PlayState* play) { @@ -105,17 +131,20 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { case ENDAIKU_PARAM_FF_1: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); break; case ENDAIKU_PARAM_FF_2: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_00B690, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); break; case ENDAIKU_PARAM_FF_3: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_001114, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); + break; + + default: break; } @@ -128,9 +157,10 @@ void EnDaiku_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_8094373C(EnDaiku* this, s32 arg1) { - this->unk_284 = Animation_GetLastFrame(sAnimations[arg1]); - Animation_Change(&this->skelAnime, sAnimations[arg1], 1.0f, 0.0f, this->unk_284, sAnimationModes[arg1], -4.0f); +void EnDaiku_ChangeAnim(EnDaiku* this, s32 animIndex) { + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[animIndex], -4.0f); } void func_809437C8(EnDaiku* this) { @@ -147,15 +177,18 @@ void func_80943820(EnDaiku* this) { switch (this->unk_278) { case 0: case 1: - func_8094373C(this, 0); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_0); break; case 2: - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); break; case 3: - func_8094373C(this, 6); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_6); + break; + + default: break; } @@ -167,7 +200,7 @@ void func_80943820(EnDaiku* this) { } void func_809438F8(EnDaiku* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 pad; s32 day = gSaveContext.save.day - 1; s32 pad2; @@ -188,11 +221,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) { return; } - if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (curFrame >= this->animEndFrame)) { if (Rand_ZeroOne() < 0.5f) { - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); } else { - func_8094373C(this, 8); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_8); } } @@ -235,13 +268,13 @@ void func_80943BC0(EnDaiku* this) { } void func_80943BDC(EnDaiku* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; - if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (curFrame >= this->animEndFrame)) { if (Rand_ZeroOne() < 0.5f) { - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); } else { - func_8094373C(this, 8); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_8); } } @@ -291,7 +324,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) { s32 EnDaiku_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDaiku* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { rot->x += this->unk_260; rot->z += this->unk_25E; } @@ -310,11 +343,11 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, D_809440D4[this->unk_278]); } - if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == 8)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == OBJECT_DAIKU_LIMB_08)) { gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_008EC8); } diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index ff88c8c9a..60275bbfa 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -2,6 +2,7 @@ #define Z_EN_DAIKU_H #include "global.h" +#include "objects/object_daiku/object_daiku.h" struct EnDaiku; @@ -22,8 +23,8 @@ typedef enum { typedef struct EnDaiku { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[17]; - /* 0x1EE */ Vec3s morphTable[17]; + /* 0x188 */ Vec3s jointTable[OBJECT_DAIKU_LIMB_MAX]; + /* 0x1EE */ Vec3s morphTable[OBJECT_DAIKU_LIMB_MAX]; /* 0x254 */ EnDaikuActionFunc actionFunc; /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; @@ -39,7 +40,7 @@ typedef struct EnDaiku { /* 0x27E */ s16 unk_27E; /* 0x280 */ s16 unk_280; /* 0x282 */ s16 unk_282; - /* 0x284 */ f32 unk_284; + /* 0x284 */ f32 animEndFrame; /* 0x288 */ s16 pathIndex; /* 0x28A */ s16 unk_28A; /* 0x28C */ s16 unk_28C; 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 bdb959b64..b744dbbb0 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -83,7 +83,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, - this->morphTable, 17); + this->morphTable, OBJECT_DAIKU_LIMB_MAX); this->actor.targetMode = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU2_GET_7F(&this->actor); @@ -120,25 +120,61 @@ void EnDaiku2_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80BE6408(EnDaiku2* this, s32 arg1) { - static AnimationHeader* sAnimations[] = { - &object_daiku_Anim_002FA0, &object_daiku_Anim_00ACD0, &object_daiku_Anim_00C92C, &object_daiku_Anim_000C44, - &object_daiku_Anim_00C234, &object_daiku_Anim_000600, &object_daiku_Anim_001114, &object_daiku_Anim_00B690, - &object_daiku_Anim_001A24, &object_daiku_Anim_002134, &object_daiku_Anim_00D328, - }; - static u8 D_80BE7958[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - }; - f32 sp34 = 1.0f; +typedef enum { + /* -1 */ ENDAIKU2_ANIM_NONE = -1, + /* 0 */ ENDAIKU2_ANIM_0, + /* 1 */ ENDAIKU2_ANIM_1, + /* 2 */ ENDAIKU2_ANIM_2, + /* 3 */ ENDAIKU2_ANIM_3, + /* 4 */ ENDAIKU2_ANIM_4, + /* 5 */ ENDAIKU2_ANIM_5, + /* 6 */ ENDAIKU2_ANIM_6, + /* 7 */ ENDAIKU2_ANIM_7, + /* 8 */ ENDAIKU2_ANIM_8, + /* 9 */ ENDAIKU2_ANIM_9, + /* 10 */ ENDAIKU2_ANIM_10, + /* 11 */ ENDAIKU2_ANIM_MAX, + /* 11 */ ENDAIKU2_ANIM_11 = ENDAIKU2_ANIM_MAX // for object_daiku_Anim_002134 set external to `EnDaiku2_ChangeAnim` +} EnDaiAnimation; - this->unk_276 = arg1; - this->unk_284 = Animation_GetLastFrame(sAnimations[this->unk_276]); - if (this->unk_276 == 3) { - sp34 = 2.0f; +static AnimationHeader* sAnimations[ENDAIKU2_ANIM_MAX] = { + &object_daiku_Anim_002FA0, // ENDAIKU2_ANIM_0 + &object_daiku_Anim_00ACD0, // ENDAIKU2_ANIM_1 + &object_daiku_Anim_00C92C, // ENDAIKU2_ANIM_2 + &object_daiku_Anim_000C44, // ENDAIKU2_ANIM_3 + &object_daiku_Anim_00C234, // ENDAIKU2_ANIM_4 + &object_daiku_Anim_000600, // ENDAIKU2_ANIM_5 + &object_daiku_Anim_001114, // ENDAIKU2_ANIM_6 + &object_daiku_Anim_00B690, // ENDAIKU2_ANIM_7 + &object_daiku_Anim_001A24, // ENDAIKU2_ANIM_8 + &object_daiku_Anim_002134, // ENDAIKU2_ANIM_9 + &object_daiku_Anim_00D328, // ENDAIKU2_ANIM_10 +}; + +static u8 sAnimationModes[ENDAIKU2_ANIM_MAX] = { + ANIMMODE_LOOP, // ENDAIKU2_ANIM_0 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_1 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_2 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_3 + ANIMMODE_ONCE, // ENDAIKU2_ANIM_4 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_5 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_6 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_7 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_8 + ANIMMODE_ONCE, // ENDAIKU2_ANIM_9 + ANIMMODE_LOOP, // ENDAIKU2_ANIM_10 +}; + +void EnDaiku2_ChangeAnim(EnDaiku2* this, s32 animIndex) { + f32 playSpeed = 1.0f; + + this->animIndex = animIndex; + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + if (this->animIndex == ENDAIKU2_ANIM_3) { + playSpeed = 2.0f; } - Animation_Change(&this->skelAnime, sAnimations[this->unk_276], sp34, 0.0f, this->unk_284, D_80BE7958[this->unk_276], - -4.0f); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame, + sAnimationModes[this->animIndex], -4.0f); } s32 func_80BE64C0(EnDaiku2* this, PlayState* play) { @@ -170,7 +206,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_02)) { this->unk_28A = 6; } - func_80BE6408(this, 8); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8); break; case 1: @@ -178,21 +214,24 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_04)) { this->unk_28A = 7; } - func_80BE6408(this, 8); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8); break; case 2: this->unk_28A = 4; this->unk_264 = 1.0f; - func_80BE6408(this, 10); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); + break; + + default: break; } this->unk_264 = 1.0f; if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { this->unk_28A = 5; - if (this->unk_276 != 10) { - func_80BE6408(this, 10); + if (this->animIndex != ENDAIKU2_ANIM_10) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); } } @@ -201,7 +240,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { } void func_80BE66E4(EnDaiku2* this, PlayState* play) { - f32 sp9C = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 sp98 = gSaveContext.save.day - 1; s32 i; Vec3f sp88; @@ -214,8 +253,8 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { if (sp98 != 2) { if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { this->unk_28A = 5; - if (this->unk_276 != 10) { - func_80BE6408(this, 10); + if (this->animIndex != ENDAIKU2_ANIM_10) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); } } } @@ -233,7 +272,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { } Actor_OfferTalk(&this->actor, play, 80.0f); - if ((this->unk_276 == 8) && Animation_OnFrame(&this->skelAnime, 6.0f)) { + if ((this->animIndex == ENDAIKU2_ANIM_8) && Animation_OnFrame(&this->skelAnime, 6.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROCK_BROKEN); for (i = 0; i < 10; i++) { @@ -260,22 +299,22 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { temp_v0 = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.home.rot.y)); if (temp_v0 > 0x2890) { if (sp98 != 2) { - if ((this->unk_276 == 5) || (this->unk_276 == 9)) { - func_80BE6408(this, 10); - } else if ((this->unk_276 == 10) && (this->unk_284 <= sp9C)) { - this->unk_284 = Animation_GetLastFrame(&object_daiku_Anim_002134); - Animation_Change(&this->skelAnime, &object_daiku_Anim_002134, -1.0f, this->unk_284, 0.0f, ANIMMODE_ONCE, - -4.0f); - this->unk_276 = 11; - } else if ((this->unk_276 == 11) && (sp9C <= 0.0f)) { - func_80BE6408(this, 8); + if ((this->animIndex == ENDAIKU2_ANIM_5) || (this->animIndex == ENDAIKU2_ANIM_9)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); + } else if ((this->animIndex == ENDAIKU2_ANIM_10) && (curFrame >= this->animEndFrame)) { + this->animEndFrame = Animation_GetLastFrame(&object_daiku_Anim_002134); + Animation_Change(&this->skelAnime, &object_daiku_Anim_002134, -1.0f, this->animEndFrame, 0.0f, + ANIMMODE_ONCE, -4.0f); + this->animIndex = ENDAIKU2_ANIM_11; + } else if ((this->animIndex == ENDAIKU2_ANIM_11) && (curFrame <= 0.0f)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8); } } } else if (sp98 != 2) { - if ((this->unk_276 != 9) && (this->unk_276 != 10)) { - func_80BE6408(this, 9); - } else if ((this->unk_276 == 9) && (this->unk_284 <= sp9C)) { - func_80BE6408(this, 10); + if ((this->animIndex != ENDAIKU2_ANIM_9) && (this->animIndex != ENDAIKU2_ANIM_10)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_9); + } else if ((this->animIndex == ENDAIKU2_ANIM_9) && (curFrame >= this->animEndFrame)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); } } } @@ -287,7 +326,7 @@ void func_80BE6B40(EnDaiku2* this, PlayState* play) { if ((day != 3) && Flags_GetSwitch(play, this->unk_278)) { this->actionFunc = func_80BE6BC0; } else { - func_80BE6408(this, 5); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5); this->actionFunc = func_80BE6BC0; } } @@ -315,6 +354,9 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) { case 1: SET_WEEKEVENTREG(WEEKEVENTREG_64_04); break; + + default: + break; } func_80BE65B4(this, play); } @@ -322,7 +364,7 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) { } void func_80BE6CFC(EnDaiku2* this) { - func_80BE6408(this, 3); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3); this->unk_288 = 2; this->actionFunc = func_80BE6D40; this->unk_264 = 0.0f; @@ -354,14 +396,14 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) { } void func_80BE6EB0(EnDaiku2* this) { - func_80BE6408(this, 2); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_2); this->unk_274 = 0; this->unk_288 = 3; this->actionFunc = func_80BE6EF0; } void func_80BE6EF0(EnDaiku2* this, PlayState* play) { - f32 sp5C = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 pad[4]; Vec3f sp40; s16 var; @@ -372,7 +414,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { } Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0); - if (this->unk_284 <= sp5C) { + if (curFrame >= this->animEndFrame) { this->unk_274 = 1; } @@ -387,14 +429,14 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { 4.0f) && (this->path != NULL)) { if (!func_80BE64C0(this, play)) { - if (this->unk_276 != 3) { - func_80BE6408(this, 3); + if (this->animIndex != ENDAIKU2_ANIM_3) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3); } if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { this->unk_28A = 5; - if (this->unk_276 != 10) { - func_80BE6408(this, 10); + if (this->animIndex != ENDAIKU2_ANIM_10) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); } func_80BE65B4(this, play); return; @@ -425,20 +467,20 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { } void func_80BE71A0(EnDaiku2* this) { - func_80BE6408(this, 9); + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_9); this->actionFunc = func_80BE71D8; } void func_80BE71D8(EnDaiku2* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; if (func_80BE64C0(this, play)) { func_80BE6CFC(this); - } else if ((this->unk_276 == 9) && (this->unk_284 <= currentFrame)) { - func_80BE6408(this, 0); - } else if ((this->unk_276 == 0) && (this->unk_284 <= currentFrame)) { - func_80BE6408(this, 5); - } else if ((this->unk_276 == 5) && (this->unk_284 <= currentFrame)) { + } else if ((this->animIndex == ENDAIKU2_ANIM_9) && (curFrame >= this->animEndFrame)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_0); + } else if ((this->animIndex == ENDAIKU2_ANIM_0) && (curFrame >= this->animEndFrame)) { + EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5); + } else if ((this->animIndex == ENDAIKU2_ANIM_5) && (curFrame >= this->animEndFrame)) { func_80BE65B4(this, play); } } @@ -468,13 +510,13 @@ void EnDaiku2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (limbIndex == 14) { + if (limbIndex == OBJECT_DAIKU_LIMB_0E) { Matrix_Scale(this->unk_260, this->unk_260, this->unk_260, 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_daiku_DL_009638); } - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_00A390); } diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index 58fc26b9a..51cd23124 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -2,6 +2,7 @@ #define Z_EN_DAIKU2_H #include "global.h" +#include "objects/object_daiku/object_daiku.h" struct EnDaiku2; @@ -34,8 +35,8 @@ typedef struct EnDaiku2Effect { typedef struct EnDaiku2 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[17]; - /* 0x1EE */ Vec3s morphTable[17]; + /* 0x188 */ Vec3s jointTable[OBJECT_DAIKU_LIMB_MAX]; + /* 0x1EE */ Vec3s morphTable[OBJECT_DAIKU_LIMB_MAX]; /* 0x254 */ EnDaiku2ActionFunc actionFunc; /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; @@ -43,12 +44,12 @@ typedef struct EnDaiku2 { /* 0x264 */ f32 unk_264; /* 0x268 */ Vec3f unk_268; /* 0x274 */ s16 unk_274; - /* 0x276 */ s16 unk_276; + /* 0x276 */ s16 animIndex; /* 0x278 */ s16 unk_278; /* 0x27A */ s16 pathIndex; /* 0x27C */ UNK_TYPE1 unk_27C[0x4]; /* 0x280 */ s32 unk_280; - /* 0x284 */ f32 unk_284; + /* 0x284 */ f32 animEndFrame; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; /* 0x28C */ EnDaiku2Effect effects[EN_DAIKU2_EFFECT_COUNT]; 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 e9bb777c6..da8ea8b85 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -343,7 +343,7 @@ void EnDekubaba_Wait(EnDekubaba* this, PlayState* play) { this->actor.world.pos.z = this->actor.home.pos.z; this->actor.world.pos.y = this->actor.home.pos.y + 14.0f * this->size; - if ((this->timer == 0) && (this->actor.xzDistToPlayer < 200.0f * this->size) && + if ((this->timer == 0) && (this->actor.xzDistToPlayer < (200.0f * this->size)) && (fabsf(this->actor.playerHeightRel) < 30.0f * this->size)) { EnDekubaba_SetupGrow(this); } @@ -430,7 +430,7 @@ void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) { 1, HAHEN_OBJECT_DEFAULT, 10, NULL); if (this->timer == 0) { - if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 240.0f * this->size) { + if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < (240.0f * this->size)) { EnDekubaba_SetupPrepareLunge(this); } else { EnDekubaba_SetupRetract(this); @@ -942,7 +942,7 @@ void EnDekubaba_SetupStunnedVertical(EnDekubaba* this) { if (this->timer == 1) { Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 4.0f, 0.0f, Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f); - this->timer = 0x28; + this->timer = 40; } else { Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 0.0f, 0.0f, Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f); 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 1057da6fa..e0cba18b0 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -671,22 +671,22 @@ s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec f32 arg1; f32 arg2; f32 arg3; - f32 currentFrame; + f32 curFrame; if (this->actionFunc == func_808BDA4C) { if (limbIndex == DEKU_SCRUB_LIMB_SNOUT) { - currentFrame = this->skelAnime.curFrame; - if (currentFrame <= 6.0f) { - arg2 = 1.0f - (currentFrame * 0.0833f); - arg1 = (currentFrame * 0.1167f) + 1.0f; - arg3 = (currentFrame * 0.1167f) + 1.0f; - } else if (currentFrame <= 7.0f) { - currentFrame -= 6.0f; - arg2 = 0.5f + currentFrame; - arg1 = 1.7f - (currentFrame * 0.7f); - arg3 = 1.7f - (currentFrame * 0.7f); - } else if (currentFrame <= 10.0f) { - arg2 = 1.5f - ((currentFrame - 7.0f) * 0.1667f); + curFrame = this->skelAnime.curFrame; + if (curFrame <= 6.0f) { + arg2 = 1.0f - (curFrame * 0.0833f); + arg1 = (curFrame * 0.1167f) + 1.0f; + arg3 = (curFrame * 0.1167f) + 1.0f; + } else if (curFrame <= 7.0f) { + curFrame -= 6.0f; + arg2 = 0.5f + curFrame; + arg1 = 1.7f - (curFrame * 0.7f); + arg3 = 1.7f - (curFrame * 0.7f); + } else if (curFrame <= 10.0f) { + arg2 = 1.5f - ((curFrame - 7.0f) * 0.1667f); arg1 = 1.0f; arg3 = 1.0f; } else { 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 3a6302411..8b87ce39e 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 @@ -15,20 +15,10 @@ void EnDemoheishi_Destroy(Actor* thisx, PlayState* play); void EnDemoheishi_Update(Actor* thisx, PlayState* play); void EnDemoheishi_Draw(Actor* thisx, PlayState* play); -void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex); void EnDemoheishi_SetupIdle(EnDemoheishi* this); void EnDemoheishi_Idle(EnDemoheishi* this, PlayState* play); void EnDemoheishi_SetupTalk(EnDemoheishi* this); void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play); -s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); - -typedef enum { - /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ DEMOHEISHI_ANIM_WAVE, - /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, - /* 4 */ DEMOHEISHI_ANIM_STAND_UP -} EnDemoheishiAnimation; ActorInit En_Demo_heishi_InitVars = { ACTOR_EN_DEMO_HEISHI, @@ -83,18 +73,35 @@ void EnDemoheishi_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); } -void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex) { - static AnimationHeader* sAnimations[] = { - &gSoldierStandHandOnHip, &gSoldierCheerWithSpear, &gSoldierWave, &gSoldierSitAndReach, &gSoldierStandUp, - }; - static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - }; +typedef enum { + /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ DEMOHEISHI_ANIM_WAVE, + /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, + /* 4 */ DEMOHEISHI_ANIM_STAND_UP, + /* 5 */ DEMOHEISHI_ANIM_MAX +} EnDemoheishiAnimation; +static AnimationHeader* sAnimations[DEMOHEISHI_ANIM_MAX] = { + &gSoldierStandHandOnHip, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpear, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWave, // DEMOHEISHI_ANIM_WAVE + &gSoldierSitAndReach, // DEMOHEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUp, // DEMOHEISHI_ANIM_STAND_UP +}; + +static u8 sAnimationModes[DEMOHEISHI_ANIM_MAX] = { + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_WAVE + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_SIT_AND_REACH + ANIMMODE_ONCE, // DEMOHEISHI_ANIM_STAND_UP +}; + +void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex) { this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -10.0f); } diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h index 9d9714b95..8c1a576f5 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h @@ -22,7 +22,7 @@ typedef struct EnDemoheishi { /* 0x262 */ s16 headRotZTarget; /* 0x264 */ s32 animIndex; /* 0x268 */ s16 timer; - /* 0x26C */ f32 frameCount; + /* 0x26C */ f32 animEndFrame; /* 0x270 */ s16 isTalking; /* 0x272 */ s16 textIdIndex; /* 0x274 */ ColliderCylinder colliderCylinder; 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 1e6af02ac..b35f4d5c5 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -185,33 +185,41 @@ typedef enum { /* 16 */ DOG_ANIM_MAX } DogAnimation; -static AnimationInfoS sAnimationInfo[] = { - { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gDogBarkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_LOOP_PARTIAL, -6 }, - { &gDogLyingDownAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, { &gDogLyingDownLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogLyingDownAnim, 1.0f, 0, 27, ANIMMODE_ONCE, -6 }, { &gDogLyingDownAnim, 1.0f, 28, -1, ANIMMODE_ONCE, -6 }, - { &gDogLyingDownAnim, 1.0f, 54, 54, ANIMMODE_ONCE, -6 }, { &gDogWalkAnim, -1.5f, -1, 0, ANIMMODE_LOOP, -6 }, - { &gDogJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, { &gDogLongJumpAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDogJumpAttackAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, { &gDogWalkAnim, 0.5f, 0, -1, ANIMMODE_LOOP, 0 }, +static AnimationInfoS sAnimationInfo[DOG_ANIM_MAX] = { + { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_WALK_AFTER_TALKING + { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_WALK + { &gDogRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_RUN + { &gDogBarkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_BARK + { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_SIT_DOWN_ONCE + { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_LOOP_PARTIAL, -6 }, // DOG_ANIM_SIT_DOWN + { &gDogLyingDownAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_1 + { &gDogLyingDownLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_LYING_DOWN_LOOP + { &gDogLyingDownAnim, 1.0f, 0, 27, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_2 + { &gDogLyingDownAnim, 1.0f, 28, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_3 + { &gDogLyingDownAnim, 1.0f, 54, 54, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_4 + { &gDogWalkAnim, -1.5f, -1, 0, ANIMMODE_LOOP, -6 }, // DOG_ANIM_WALK_BACKWARDS + { &gDogJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_JUMP + { &gDogLongJumpAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_LONG_JUMP + { &gDogJumpAttackAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_JUMP_ATTACK + { &gDogWalkAnim, 0.5f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_SWIM }; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_STOP), }; -void EnDg_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 animIndex) { - f32 frameCount; +void EnDg_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animInfo, s32 animIndex) { + f32 endFrame; - animationInfo += animIndex; - if (animationInfo->frameCount < 0) { - frameCount = Animation_GetLastFrame(animationInfo->animation); + animInfo += animIndex; + if (animInfo->frameCount < 0) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frameCount = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed + (BREG(88) * 0.1f), - animationInfo->startFrame, frameCount, animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed + (BREG(88) * 0.1f), animInfo->startFrame, + endFrame, animInfo->mode, animInfo->morphFrames); } void EnDg_UpdateCollision(EnDg* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 47c6c2567..8e2b9b382 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -54,8 +54,13 @@ ActorInit En_Dnh_InitVars = { (ActorFunc)EnDnh_Draw, }; -static AnimationInfoS sAnimationInfo[] = { - { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* 0 */ ENDNH_ANIM_HEAD_MOVING, + /* 1 */ ENDNH_ANIM_MAX +} EnDnhAnimation; + +static AnimationInfoS sAnimationInfo[ENDNH_ANIM_MAX] = { + { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING }; static TexturePtr sEyeTextures[] = { @@ -133,8 +138,9 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable, KOUME_KIOSK_LIMB_MAX); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENDNH_ANIM_HEAD_MOVING); this->actor.shape.yOffset = 1100.0f; + if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 1)) { SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk198 = 0; @@ -142,9 +148,11 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->unk198 = CHECK_EVENTINF(EVENTINF_35) ? 2 : 1; } + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { this->actor.draw = NULL; } + this->msgEventCallback = func_80A50D40; this->unk194 = 0; this->actionFunc = EnDnh_DoNothing; diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 041eb54b0..f9dd65a46 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -5,9 +5,6 @@ */ #include "z_en_dnk.h" -#include "objects/object_dnk/object_dnk.h" -#include "objects/object_hintnuts/object_hintnuts.h" -#include "objects/object_dekunuts/object_dekunuts.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -17,7 +14,7 @@ void EnDnk_Init(Actor* thisx, PlayState* play); void EnDnk_Destroy(Actor* thisx, PlayState* play); void EnDnk_Update(Actor* thisx, PlayState* play); -void func_80A51890(EnDnk* this, PlayState* play); +void EnDnk_HandleCutscene(EnDnk* this, PlayState* play); void EnDnk_DoNothing(EnDnk* this, PlayState* play); void func_80A52018(Actor* thisx, PlayState* play); void func_80A52134(EnDnk* this, PlayState* play); @@ -93,66 +90,108 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardWaitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardAttackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardDigAnim, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPalaceGuardDigAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardHappyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_000168, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_0024CC, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, - { &object_hintnuts_Anim_0024CC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_0026C4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002894, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002B90, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_0029BC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_002E84, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubSpitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubDamageAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubDieAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubUnburrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubLookAroundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubPantingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ ENDNK_ANIM_NONE = -1, + /* 0 */ ENDNK_ANIM_0, + /* 1 */ ENDNK_ANIM_1, + /* 2 */ ENDNK_ANIM_2, + /* 3 */ ENDNK_ANIM_3, + /* 4 */ ENDNK_ANIM_4, + /* 5 */ ENDNK_ANIM_5, + /* 6 */ ENDNK_ANIM_6, + /* 7 */ ENDNK_ANIM_7, + /* 8 */ ENDNK_ANIM_8, + /* 9 */ ENDNK_ANIM_9, + /* 10 */ ENDNK_ANIM_10, + /* 11 */ ENDNK_ANIM_11, + /* 12 */ ENDNK_ANIM_12, + /* 13 */ ENDNK_ANIM_13, + /* 14 */ ENDNK_ANIM_14, + /* 15 */ ENDNK_ANIM_15, + /* 16 */ ENDNK_ANIM_16, + /* 17 */ ENDNK_ANIM_17, + /* 18 */ ENDNK_ANIM_18, + /* 19 */ ENDNK_ANIM_19, + /* 20 */ ENDNK_ANIM_20, + /* 21 */ ENDNK_ANIM_21, + /* 22 */ ENDNK_ANIM_22, + /* 23 */ ENDNK_ANIM_23, + /* 24 */ ENDNK_ANIM_24, + /* 25 */ ENDNK_ANIM_25, + /* 26 */ ENDNK_ANIM_26, + /* 27 */ ENDNK_ANIM_27, + /* 28 */ ENDNK_ANIM_28, + /* 29 */ ENDNK_ANIM_29, + /* 30 */ ENDNK_ANIM_30, + /* 31 */ ENDNK_ANIM_31, + /* 32 */ ENDNK_ANIM_32, + /* 33 */ ENDNK_ANIM_33, + /* 34 */ ENDNK_ANIM_34, + /* 35 */ ENDNK_ANIM_35, + /* 36 */ ENDNK_ANIM_MAX +} EnDnkAnimation; + +static AnimationInfoS sAnimationInfo[ENDNK_ANIM_MAX] = { + { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_0 + { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_1 + { &gDekuPalaceGuardWaitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_2 + { &gDekuPalaceGuardAttackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_3 + { &gDekuPalaceGuardDigAnim, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_4 + { &gDekuPalaceGuardDigAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_5 + { &gDekuPalaceGuardJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_6 + { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_7 + { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_8 + { &gDekuPalaceGuardHappyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_9 + { &object_hintnuts_Anim_000168, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_10 + { &object_hintnuts_Anim_0024CC, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_11 + { &object_hintnuts_Anim_0024CC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_12 + { &object_hintnuts_Anim_0026C4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_13 + { &object_hintnuts_Anim_002894, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_14 + { &object_hintnuts_Anim_002B90, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_15 + { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_16 + { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_17 + { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_18 + { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_19 + { &object_hintnuts_Anim_0029BC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_20 + { &object_hintnuts_Anim_002E84, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_21 + { &gDekuScrubSpitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_22 + { &gDekuScrubDamageAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_23 + { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_24 + { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_25 + { &gDekuScrubDieAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_26 + { &gDekuScrubUnburrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_27 + { &gDekuScrubLookAroundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_28 + { &gDekuScrubUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_29 + { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_30 + { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_31 + { &gDekuScrubPantingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_32 + { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_33 + { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_34 + { &gDekuScrubStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_35 }; -s32 func_80A514F0(SkelAnime* skelAnime, s16 animIndex) { - s16 frame; - s16 frameCount; - s32 sp30 = false; +s32 EnDnk_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { + s16 startFrame; + s16 endFrame; + s32 didAnimChange = false; if (animIndex >= 0) { if (animIndex < ARRAY_COUNT(sAnimationInfo)) { - sp30 = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); } - frame = sAnimationInfo[animIndex].startFrame; - if (frame < 0) { - frame = frameCount; + startFrame = sAnimationInfo[animIndex].startFrame; + if (startFrame < 0) { + startFrame = endFrame; } - Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, frame, - frameCount, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); + Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, + startFrame, endFrame, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].morphFrames); } } - return sp30; + return didAnimChange; } s32 func_80A515C4(EnDnk* this) { @@ -180,19 +219,19 @@ void func_80A51648(EnDnk* this, PlayState* play) { case ENDNK_GET_3_0: SkelAnime_Init(play, &this->skelAnime, &gDekuPalaceGuardSkel, NULL, this->jointTable, this->morphTable, DEKU_PALACE_GUARD_LIMB_MAX); - func_80A514F0(&this->skelAnime, 7); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_7); break; case ENDNK_GET_3_1: SkelAnime_Init(play, &this->skelAnime, &object_hintnuts_Skel_0023B8.sh, NULL, this->jointTable, - this->morphTable, 10); - func_80A514F0(&this->skelAnime, 18); + this->morphTable, OBJECT_HINTNUTS_LIMB_MAX); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_18); break; case ENDNK_GET_3_2: SkelAnime_Init(play, &this->skelAnime, &gDekuScrubSkel, NULL, this->jointTable, this->morphTable, DEKU_SCRUB_LIMB_MAX); - func_80A514F0(&this->skelAnime, 35); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_35); break; } @@ -202,7 +241,7 @@ void func_80A51648(EnDnk* this, PlayState* play) { if (ENDNK_GET_3C(&this->actor) == 4) { this->actor.flags &= ~ACTOR_FLAG_1; this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); - this->actionFunc = func_80A51890; + this->actionFunc = EnDnk_HandleCutscene; Actor_SetScale(&this->actor, 0.1f); } else { this->actor.flags &= ~ACTOR_FLAG_1; @@ -212,7 +251,7 @@ void func_80A51648(EnDnk* this, PlayState* play) { } } -void func_80A51890(EnDnk* this, PlayState* play) { +void EnDnk_HandleCutscene(EnDnk* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_126)) { Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_126)); } @@ -284,7 +323,7 @@ void func_80A51AA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Vec3f sp44; Vec3s sp3C; - if (limbIndex == 2) { + if (limbIndex == DEKU_PALACE_GUARD_LIMB_HEAD) { Matrix_MultVec3f(&sp50, &sp44); Matrix_Get(&sp5C); Matrix_MtxFToYXZRot(&sp5C, &sp3C, false); @@ -360,7 +399,9 @@ void func_80A51DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Vec3f sp44; Vec3s sp3C; - if (limbIndex == 2) { + // Note: Also for `limbIndex == OBJECT_HINTNUTS_LIMB_02` + // Assumes `OBJECT_HINTNUTS_LIMB_02` is the same value as `DEKU_SCRUB_LIMB_HEAD` + if (limbIndex == DEKU_SCRUB_LIMB_HEAD) { Matrix_MultVec3f(&sp50, &sp44); Matrix_Get(&sp5C); Matrix_MtxFToYXZRot(&sp5C, &sp3C, false); @@ -419,6 +460,9 @@ void func_80A52018(Actor* thisx, PlayState* play) { case ENDNK_GET_3_2: func_80A51FC0(this, play); break; + + default: + break; } } @@ -439,6 +483,9 @@ void func_80A52074(EnDnk* this, PlayState* play) { case 493: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR); break; + + default: + break; } if ((play->csCtx.curFrame >= 198) && (play->csCtx.curFrame < 438)) { diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h index 57467b3f1..ba870d67b 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h @@ -2,6 +2,9 @@ #define Z_EN_DNK_H #include "global.h" +#include "objects/object_dnk/object_dnk.h" +#include "objects/object_hintnuts/object_hintnuts.h" +#include "objects/object_dekunuts/object_dekunuts.h" struct EnDnk; @@ -18,15 +21,17 @@ typedef enum { /* 4 */ ENDNK_GET_3_4 } EnDnkParam; +#define DNK_LIMB_MAX MAX(MAX((s32)DEKU_PALACE_GUARD_LIMB_MAX, (s32)OBJECT_HINTNUTS_LIMB_MAX), (s32)DEKU_SCRUB_LIMB_MAX) + typedef struct EnDnk { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnDnkActionFunc actionFunc; /* 0x18C */ UNK_TYPE1 unk_18C[0x4]; /* 0x190 */ ColliderCylinder collider; - /* 0x1DC */ Vec3s jointTable[11]; - /* 0x21E */ Vec3s morphTable[11]; - /* 0x260 */ Gfx* unk_260[11]; + /* 0x1DC */ Vec3s jointTable[DNK_LIMB_MAX]; + /* 0x21E */ Vec3s morphTable[DNK_LIMB_MAX]; + /* 0x260 */ Gfx* unk_260[DEKU_PALACE_GUARD_LIMB_MAX]; /* 0x28C */ u16 unk_28C; /* 0x28E */ s8 unk_28E; /* 0x290 */ s16 unk_290; 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 bfe4c7e16..d31d6c02f 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -44,6 +44,7 @@ s32 EnDno_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx); typedef enum { + /* -1 */ EN_DNO_ANIM_NONE = -1, /* 0 */ EN_DNO_ANIM_START_RACE_START, /* 1 */ EN_DNO_ANIM_START_RACE_END, /* 2 */ EN_DNO_ANIM_FLY, @@ -63,30 +64,31 @@ typedef enum { /* 16 */ EN_DNO_ANIM_IMPLORE_START, /* 17 */ EN_DNO_ANIM_SHOCK_START, /* 18 */ EN_DNO_ANIM_SHOCK_LOOP, - /* 19 */ EN_DNO_ANIM_GRIEVE + /* 19 */ EN_DNO_ANIM_GRIEVE, + /* 20 */ EN_DNO_ANIM_MAX } EnDnoAnimation; -static AnimationSpeedInfo sAnimations[] = { - { &gDekuButlerStartRaceStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerStartRaceEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerFlyAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerFarewellAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerGreetingAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerGreetingWithCandleAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerPrayerLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerCloseParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerOpenParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerImploreLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerImploreEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerTalkAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerTalkWithParasolAndCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerIdleWithCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerPrayerStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerImploreStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerShockStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerShockLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerGrieveAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, +static AnimationSpeedInfo sAnimationSpeedInfo[EN_DNO_ANIM_MAX] = { + { &gDekuButlerStartRaceStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_START_RACE_START + { &gDekuButlerStartRaceEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_START_RACE_END + { &gDekuButlerFlyAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_FLY + { &gDekuButlerFarewellAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_FAREWELL + { &gDekuButlerGreetingAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_GREETING + { &gDekuButlerGreetingWithCandleAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_GREETING_WITH_CANDLE + { &gDekuButlerPrayerLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_PRAYER_LOOP + { &gDekuButlerCloseParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_CLOSE_PARASOL + { &gDekuButlerOpenParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_OPEN_PARASOL + { &gDekuButlerImploreLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IMPLORE_LOOP + { &gDekuButlerImploreEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_IMPLORE_END + { &gDekuButlerTalkAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_TALK + { &gDekuButlerTalkWithParasolAndCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_TALK_WITH_PARSOL_AND_CANDLE + { &gDekuButlerIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IDLE + { &gDekuButlerIdleWithCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IDLE_WITH_CANDLE + { &gDekuButlerPrayerStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_PRAYER_START + { &gDekuButlerImploreStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_IMPLORE_START + { &gDekuButlerShockStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_SHOCK_START + { &gDekuButlerShockLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_SHOCK_LOOP + { &gDekuButlerGrieveAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_GRIEVE }; ActorInit En_Dno_InitVars = { @@ -236,10 +238,10 @@ void EnDno_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit); 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, - sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].morphFrames); + Animation_Change(&this->skelAnime, sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation, 1.0f, 0.0f, + Animation_GetLastFrame(sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation), + sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].mode, + sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].morphFrames); this->unk_3BE = 0x3E93; this->unk_3C0 = 60.0f; this->unk_3B0 = 0; @@ -252,8 +254,8 @@ void EnDno_Init(Actor* thisx, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_93_02)) { Actor_Kill(thisx); } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); thisx->room = -1; gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); @@ -267,7 +269,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { Actor_Kill(thisx); } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); this->unk_460 = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_DNQ); if (this->unk_460 == NULL) { @@ -296,7 +298,7 @@ void EnDno_Destroy(Actor* thisx, PlayState* play) { void func_80A71B04(EnDno* this, PlayState* play) { this->unk_452 = 0; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_GRIEVE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GRIEVE, &this->animIndex); this->actionFunc = EnDno_DoNothing; } @@ -309,15 +311,15 @@ void func_80A71B68(EnDno* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) { if (!(this->unk_3B0 & 0x20)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->unk_460); } } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } this->actionFunc = func_80A71C3C; } @@ -326,23 +328,26 @@ void func_80A71C3C(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_LOOP: case EN_DNO_ANIM_IMPLORE_START: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_END, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IMPLORE_END, + &this->animIndex); break; case EN_DNO_ANIM_FAREWELL: case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, + &this->animIndex); } break; case EN_DNO_ANIM_TALK: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_START, + &this->animIndex); break; case EN_DNO_ANIM_PRAYER_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); } @@ -350,6 +355,9 @@ void func_80A71C3C(EnDno* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->unk_460), 2, 0xE38, 0x222); break; + + default: + break; } if ((this->animIndex == EN_DNO_ANIM_IDLE) && (this->actor.xzDistToPlayer <= 120.0f)) { @@ -404,8 +412,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xE38)) { switch (this->textId) { case 0x80B: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_START, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_START, &this->animIndex); case 0x811: Message_StartTextbox(play, this->textId, &this->actor); @@ -414,15 +422,18 @@ void func_80A71F18(EnDno* this, PlayState* play) { case 0x80C: case 0x80F: if (this->animIndex == EN_DNO_ANIM_IDLE) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_GREETING, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING, &this->animIndex); } else if ((this->animIndex == EN_DNO_ANIM_GREETING) && (this->skelAnime.curFrame == this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_TALK, &this->animIndex); Message_StartTextbox(play, this->textId, &this->actor); } break; + + default: + break; } } break; @@ -432,8 +443,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_LOOP, &this->animIndex); } Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->unk_460), 0x71C); @@ -442,11 +453,14 @@ void func_80A71F18(EnDno* this, PlayState* play) { case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { Message_CloseTextbox(play); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); func_80A71B68(this, play); } break; + + default: + break; } } break; @@ -459,15 +473,15 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_LOOP, &this->animIndex); } break; case EN_DNO_ANIM_IMPLORE_LOOP: if (Message_ShouldAdvance(play)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_END, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_END, &this->animIndex); play->msgCtx.msgMode = 0x44; } break; @@ -475,11 +489,14 @@ void func_80A71F18(EnDno* this, PlayState* play) { case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { Message_CloseTextbox(play); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); func_80A71B68(this, play); } break; + + default: + break; } break; @@ -497,11 +514,11 @@ void func_80A71F18(EnDno* this, PlayState* play) { case 0x80E: if (this->animIndex == EN_DNO_ANIM_TALK) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_FAREWELL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_FAREWELL, &this->animIndex); } else if (this->animIndex == EN_DNO_ANIM_FAREWELL) { if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } } else if ((this->animIndex == EN_DNO_ANIM_IDLE) && Message_ShouldAdvance(play)) { @@ -526,16 +543,19 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_TALK: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_START, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_PRAYER_START, &this->animIndex); break; case EN_DNO_ANIM_PRAYER_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); } break; + + default: + break; } break; @@ -545,6 +565,9 @@ void func_80A71F18(EnDno* this, PlayState* play) { func_80A71B68(this, play); } break; + + default: + break; } break; } @@ -552,7 +575,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { void func_80A72438(EnDno* this, PlayState* play) { this->unk_452 = 1; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE_WITH_CANDLE, + &this->animIndex); this->actor.textId = 0; if (Flags_GetSwitch(play, EN_DNO_GET_RACE_STARTED_SWITCH_FLAG(&this->actor))) { this->unk_454 = 1.0f; @@ -599,7 +623,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0: if (this->animIndex == EN_DNO_ANIM_IDLE_WITH_CANDLE) { if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2D8)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING_WITH_CANDLE, &this->animIndex); } } else if ((this->animIndex == EN_DNO_ANIM_GREETING_WITH_CANDLE) && @@ -611,8 +635,8 @@ void func_80A725F8(EnDno* this, PlayState* play) { } else { Message_StartTextbox(play, 0x800, &this->actor); } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); } break; @@ -626,6 +650,9 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 3: Message_StartTextbox(play, 0x804, &this->actor); break; + + default: + break; } break; @@ -647,7 +674,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_TALK_WITH_PARSOL_AND_CANDLE, &this->animIndex); Message_StartTextbox(play, 0x803, &this->actor); } @@ -664,7 +691,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { play->msgCtx.msgMode = 0x44; this->unk_452 = 1; this->unk_454 = 0.0f; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_OPEN_PARASOL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_OPEN_PARASOL, &this->animIndex); } break; @@ -691,7 +718,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0x804: if (this->animIndex == EN_DNO_ANIM_IDLE_WITH_CANDLE) { if (Message_ShouldAdvance(play)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING_WITH_CANDLE, &this->animIndex); if (!(this->unk_3B0 & 0x40)) { func_80A72CF8(this, play); @@ -720,7 +747,8 @@ void func_80A725F8(EnDno* this, PlayState* play) { } void func_80A72AE4(EnDno* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_START_RACE_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, + &this->animIndex); func_80A714B4(this, play); this->actionFunc = func_80A72B3C; } @@ -747,7 +775,8 @@ void func_80A72BA4(EnDno* this, PlayState* play) { } void func_80A72C04(EnDno* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_START_RACE_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, + &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); Math_Vec3f_Copy(&this->unk_334, &this->actor.world.pos); @@ -826,26 +855,29 @@ s32 EnDno_ActorPathing_Move(PlayState* play, ActorPathing* actorPath) { } void func_80A730A0(EnDno* this, PlayState* play) { - s32 phi_a2; + s32 nextAnimIndex; if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - phi_a2 = -1; + nextAnimIndex = EN_DNO_ANIM_NONE; switch (this->animIndex) { case EN_DNO_ANIM_START_RACE_START: if (this->unk_44E >= 20) { - phi_a2 = EN_DNO_ANIM_START_RACE_END; + nextAnimIndex = EN_DNO_ANIM_START_RACE_END; } else { this->unk_44E = 20; } break; case EN_DNO_ANIM_START_RACE_END: - phi_a2 = EN_DNO_ANIM_FLY; + nextAnimIndex = EN_DNO_ANIM_FLY; + break; + + default: break; } - if (phi_a2 >= 0) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex); + if (nextAnimIndex > EN_DNO_ANIM_NONE) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, nextAnimIndex, &this->animIndex); } } @@ -891,11 +923,12 @@ void func_80A732C8(EnDno* this, PlayState* play) { if (Math_ScaledStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0x71C)) { this->unk_3B0 |= 4; this->unk_44E = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_CLOSE_PARASOL, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_CLOSE_PARASOL, + &this->animIndex); } } else if (this->unk_44E == 3) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); func_80A72438(this, play); } else { @@ -915,8 +948,8 @@ void func_80A732C8(EnDno* this, PlayState* play) { } void func_80A73408(EnDno* this, PlayState* play) { - s32 phi_a2; - u8 sp33 = true; + s32 nextAnimIndex; + u8 changeAnim = true; s32 cueChannel; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_475)) { @@ -924,21 +957,21 @@ void func_80A73408(EnDno* this, PlayState* play) { if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - phi_a2 = 13; + nextAnimIndex = EN_DNO_ANIM_IDLE; break; case 2: - phi_a2 = 17; + nextAnimIndex = EN_DNO_ANIM_SHOCK_START; break; default: - phi_a2 = 0; - sp33 = false; + nextAnimIndex = EN_DNO_ANIM_START_RACE_START; + changeAnim = false; break; } - if (sp33) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex); + if (changeAnim) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, nextAnimIndex, &this->animIndex); } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -947,7 +980,7 @@ void func_80A73408(EnDno* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->animIndex) { case EN_DNO_ANIM_SHOCK_START: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_SHOCK_LOOP, &this->animIndex); break; @@ -983,7 +1016,7 @@ s32 EnDno_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p EnDno* this = THIS; *dList = NULL; - if (limbIndex == 9) { + if (limbIndex == DEKU_BUTLER_LIMB_EYES) { rot->x += this->unk_466; } return false; @@ -1001,36 +1034,47 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (*dList != NULL) { switch (this->unk_452) { case 0: - if ((limbIndex != 25) && (limbIndex != 26) && (limbIndex != 13) && (limbIndex != 15) && - (limbIndex != 16) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_CANDLE) && (limbIndex != DEKU_BUTLER_LIMB_CANDLE_WICK) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_HANDLE) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 1: - if ((limbIndex != 26) && (limbIndex != 13) && (limbIndex != 15) && (limbIndex != 16) && - (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_CANDLE_WICK) && (limbIndex != DEKU_BUTLER_LIMB_PARASOL_HANDLE) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 2: - if ((limbIndex != 15) && (limbIndex != 16)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS)) { phi_v0 = true; } break; case 3: - if ((limbIndex != 16) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 4: - if ((limbIndex != 15) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; + + default: + break; } } @@ -1038,7 +1082,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (limbIndex == 13) { + if (limbIndex == DEKU_BUTLER_LIMB_PARASOL_HANDLE) { Matrix_Scale(this->unk_454, this->unk_454, this->unk_454, MTXMODE_APPLY); Matrix_RotateXS(this->unk_45C, MTXMODE_APPLY); } @@ -1051,7 +1095,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, CLOSE_DISPS(play->state.gfxCtx); } - if ((this->unk_3B0 & 1) && (limbIndex == 26)) { + if ((this->unk_3B0 & 1) && (limbIndex == DEKU_BUTLER_LIMB_CANDLE_WICK)) { u32 frames; OPEN_DISPS(play->state.gfxCtx); 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 0ef492e9c..82a7bc5f7 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -93,36 +93,37 @@ typedef enum { /* 22 */ DEKU_PRINCESS_ANIM_BOUNCE_START, /* 23 */ DEKU_PRINCESS_ANIM_BOUNCE_LOOP, /* 24 */ DEKU_PRINCESS_ANIM_GLARE_START, - /* 25 */ DEKU_PRINCESS_ANIM_GLARE_LOOP -} EnDnpAnimation; + /* 25 */ DEKU_PRINCESS_ANIM_GLARE_LOOP, + /* 26 */ DEKU_PRINCESS_ANIM_MAX +} DekuPrincessAnimation; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +static AnimationInfoS sAnimationInfo[DEKU_PRINCESS_ANIM_MAX] = { + { &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_JUMP_KICK + { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_HURRY + { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_CUTSCENE_HURRY + { &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_HURRY_END + { &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_SCOLD + { &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_LAUGH_START + { &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_LAUGH_LOOP + { &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_TURN_AROUND + { &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_BOW + { &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_RUN + { &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_THINK_START + { &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_THINK_LOOP + { &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START + { &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_ARMS_TOGETHER_LOOP + { &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_GREETING + { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_IDLE + { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_CUTSCENE_IDLE + { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_UNUSED_WALK + { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_WALK + { &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_ANGRY_START + { &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_ANGRY_LOOP + { &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_JUMP + { &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_BOUNCE_START + { &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_BOUNCE_LOOP + { &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_GLARE_START + { &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_GLARE_LOOP }; static s32 D_80B3DE58[] = { @@ -173,14 +174,14 @@ s32 func_80B3CA20(EnDnp* this) { } s32 EnDnp_ChangeAnim(EnDnp* this, s32 animIndex) { - s32 ret = false; + s32 didAnimChange = false; - if (animIndex != this->animIndex) { + if (this->animIndex != animIndex) { this->animIndex = animIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_80B3CC80(EnDnp* this, PlayState* play) { @@ -287,7 +288,7 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { } void func_80B3D11C(EnDnp* this, PlayState* play) { - static s32 sCsAnimations[] = { + static s32 sCsAnimIndex[] = { DEKU_PRINCESS_ANIM_JUMP_KICK, DEKU_PRINCESS_ANIM_CUTSCENE_IDLE, DEKU_PRINCESS_ANIM_GREETING, DEKU_PRINCESS_ANIM_THINK_START, DEKU_PRINCESS_ANIM_WALK, DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START, DEKU_PRINCESS_ANIM_LAUGH_START, DEKU_PRINCESS_ANIM_TURN_AROUND, DEKU_PRINCESS_ANIM_CUTSCENE_HURRY, @@ -306,7 +307,7 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_101); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - EnDnp_ChangeAnim(this, sCsAnimations[cueId]); + EnDnp_ChangeAnim(this, sCsAnimIndex[cueId]); if (this->animIndex == DEKU_PRINCESS_ANIM_CUTSCENE_IDLE) { this->unk_322 |= 8; } else { 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 4e47902f7..b84545f12 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -59,27 +59,52 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingSurpriseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingJumpedOnStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingJumpedOnLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingJumpedOnEndAnim, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingJumpedOnEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingLyingDownTwitchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingWailLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingWailStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingMarchAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingSpinScepterAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingIntimidateAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingPointScepterAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingJumpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum { + /* -1 */ DEKU_KING_ANIM_NONE = -1, + /* 0 */ DEKU_KING_ANIM_IDLE, + /* 1 */ DEKU_KING_ANIM_IDLE_MORPH, + /* 2 */ DEKU_KING_ANIM_SURPRISE, + /* 3 */ DEKU_KING_ANIM_JUMPED_ON_START, + /* 4 */ DEKU_KING_ANIM_JUMPED_ON_LOOP, + /* 5 */ DEKU_KING_ANIM_JUMPED_ON_END, + /* 6 */ DEKU_KING_ANIM_JUMPED_ON_END_MORPH, + /* 7 */ DEKU_KING_ANIM_LYING_DOWN_TWITCH, + /* 8 */ DEKU_KING_ANIM_WAIL, + /* 9 */ DEKU_KING_ANIM_FOOT_STAMP_START, + /* 10 */ DEKU_KING_ANIM_FOOT_STAMP_ONCE, + /* 11 */ DEKU_KING_ANIM_WAIL_START, + /* 12 */ DEKU_KING_ANIM_MARCH, + /* 13 */ DEKU_KING_ANIM_SPIN_SCEPTER, + /* 14 */ DEKU_KING_ANIM_INTIMIDATE, + /* 15 */ DEKU_KING_ANIM_POINT_SCEPTER, + /* 16 */ DEKU_KING_ANIM_JUMP, + /* 17 */ DEKU_KING_ANIM_LAUGH_ONCE, + /* 18 */ DEKU_KING_ANIM_FOOT_STAMP_LOOP, + /* 19 */ DEKU_KING_ANIM_LAUGH_LOOP, + /* 36 */ ENDNQ_ANIM_MAX +} EnDnkAnimation; + +static AnimationInfoS sAnimationInfo[ENDNQ_ANIM_MAX] = { + { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_KING_ANIM_IDLE + { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_IDLE_MORPH + { &gDekuKingSurpriseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_SURPRISE + { &gDekuKingJumpedOnStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_JUMPED_ON_START + { &gDekuKingJumpedOnLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_JUMPED_ON_LOOP + { &gDekuKingJumpedOnEndAnim, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_JUMPED_ON_END + { &gDekuKingJumpedOnEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_JUMPED_ON_END_MORPH + { &gDekuKingLyingDownTwitchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_LYING_DOWN_TWITCH + { &gDekuKingWailLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_WAIL + { &gDekuKingFootStampStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_START + { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_ONCE + { &gDekuKingWailStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_WAIL_START + { &gDekuKingMarchAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_MARCH + { &gDekuKingSpinScepterAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_SPIN_SCEPTER + { &gDekuKingIntimidateAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_INTIMIDATE + { &gDekuKingPointScepterAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_POINT_SCEPTER + { &gDekuKingJumpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_JUMP + { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_LAUGH_ONCE + { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_LOOP + { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_LAUGH_LOOP }; s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) { @@ -87,30 +112,30 @@ s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) { 480.0f, 0x38E3); } -s32 func_80A5257C(EnDnq* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnDnq_ChangeAnim(EnDnq* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg1 == 0) || (arg1 == 1)) { - switch (this->unk_398) { - case 0: - case 1: + if ((animIndex == DEKU_KING_ANIM_IDLE) || (animIndex == DEKU_KING_ANIM_IDLE_MORPH)) { + switch (this->animIndex) { + case DEKU_KING_ANIM_IDLE: + case DEKU_KING_ANIM_IDLE_MORPH: break; default: - phi_v1 = true; + changeAnim = true; break; } - } else if (arg1 != this->unk_398) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { - this->unk_398 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_80A52604(EnDnq* this, PlayState* play) { @@ -143,45 +168,48 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { s32 func_80A526F8(EnDnq* this) { if (this->unk_386 == 0) { - func_80A5257C(this, 8); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3; this->unk_388 = 0; this->unk_386 = 1; } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - switch (this->unk_398) { - case 8: + switch (this->animIndex) { + case DEKU_KING_ANIM_WAIL: if (DECR(this->unk_38C) == 0) { - func_80A5257C(this, 9); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_START); } break; - case 9: - func_80A5257C(this, 10); + case DEKU_KING_ANIM_FOOT_STAMP_START: + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_ONCE); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 3) + 2; break; - case 10: + case DEKU_KING_ANIM_FOOT_STAMP_ONCE: if (DECR(this->unk_38C) == 0) { this->unk_388++; if ((this->unk_38C != 0) || (this->unk_388 < 2)) { - func_80A5257C(this, 11); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL_START); } else { - func_80A5257C(this, 17); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_LAUGH_ONCE); this->unk_38C = 4; } } break; - case 11: - func_80A5257C(this, 8); + case DEKU_KING_ANIM_WAIL_START: + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3; break; - case 17: + case DEKU_KING_ANIM_LAUGH_ONCE: if (DECR(this->unk_38C) == 0) { this->unk_386 = 0; } break; + + default: + break; } if (this->unk_386 != 0) { @@ -197,7 +225,7 @@ s32 func_80A52944(EnDnq* this) { s16 phi_v1 = 0; if (this->unk_386 == 0) { - func_80A5257C(this, 12); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_MARCH); this->unk_38C = 1; this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; this->unk_386 = 1; @@ -206,7 +234,7 @@ s32 func_80A52944(EnDnq* this) { } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->unk_386++; if (this->unk_386 >= 6) { - func_80A5257C(this, 12); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_MARCH); this->unk_386 = 1; phi_v1 = this->unk_38C * 0x2000; } else if (this->unk_386 <= 3) { @@ -214,7 +242,7 @@ s32 func_80A52944(EnDnq* this) { this->skelAnime.curFrame = 0.0f; phi_v1 = this->unk_38C * 0x2000; } else { - func_80A5257C(this, 13); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_SPIN_SCEPTER); this->skelAnime.curFrame = 0.0f; } this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; @@ -227,7 +255,8 @@ s32 func_80A52944(EnDnq* this) { s32 func_80A52A78(EnDnq* this, PlayState* play) { static s32 D_80A535DC[] = { - 17, 12, 14, 13, 16, + DEKU_KING_ANIM_LAUGH_ONCE, DEKU_KING_ANIM_MARCH, DEKU_KING_ANIM_INTIMIDATE, + DEKU_KING_ANIM_SPIN_SCEPTER, DEKU_KING_ANIM_JUMP, }; if (this->unk_38A == 0) { @@ -247,7 +276,7 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) { this->unk_388 += 3; this->unk_388 %= 5; } - func_80A5257C(this, D_80A535DC[this->unk_388]); + EnDnq_ChangeAnim(this, D_80A535DC[this->unk_388]); this->skelAnime.curFrame = 0.0f; } @@ -257,36 +286,39 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) { s32 func_80A52B68(EnDnq* this, PlayState* play) { Player* player = GET_PLAYER(play); - u16 temp = play->msgCtx.currentTextId; + u16 textId = play->msgCtx.currentTextId; if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor == &this->picto.actor)) { - switch (temp) { + switch (textId) { case 0x89B: - func_80A5257C(this, 18); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_LOOP); break; case 0x89E: - func_80A5257C(this, 19); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_LAUGH_LOOP); break; case 0x898: case 0x89F: - func_80A5257C(this, 16); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_JUMP); break; case 0x899: case 0x89D: - func_80A5257C(this, 14); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_INTIMIDATE); break; case 0x89A: case 0x89C: - func_80A5257C(this, 15); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_POINT_SCEPTER); + break; + + default: break; } this->unk_39C = 1; } else if (this->unk_39C != 0) { - func_80A5257C(this, 0); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_IDLE); this->unk_39C = 0; this->unk_37E = 0; this->unk_386 = 0; @@ -388,9 +420,11 @@ void func_80A52FB8(EnDnq* this, PlayState* play) { } } -void func_80A53038(EnDnq* this, PlayState* play) { - static s32 D_80A535FC[] = { - 0, 1, 2, 3, 5, 6, +void EnDnq_HandleCutscene(EnDnq* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + DEKU_KING_ANIM_IDLE, DEKU_KING_ANIM_IDLE_MORPH, + DEKU_KING_ANIM_SURPRISE, DEKU_KING_ANIM_JUMPED_ON_START, + DEKU_KING_ANIM_JUMPED_ON_END, DEKU_KING_ANIM_JUMPED_ON_END_MORPH, }; s32 cueChannel; u32 cueId; @@ -399,17 +433,18 @@ void func_80A53038(EnDnq* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_105); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_80A5257C(this, D_80A535FC[cueId]); + EnDnq_ChangeAnim(this, sCsAnimIndex[cueId]); this->cueId = cueId; } - if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) { + if ((this->animIndex == DEKU_KING_ANIM_JUMPED_ON_LOOP) && Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE); } - if (((this->unk_398 == 3) || (this->unk_398 == 6)) && + if (((this->animIndex == DEKU_KING_ANIM_JUMPED_ON_START) || + (this->animIndex == DEKU_KING_ANIM_JUMPED_ON_END_MORPH)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A5257C(this, this->unk_398 + 1); + EnDnq_ChangeAnim(this, this->animIndex + 1); } Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, cueChannel); @@ -422,8 +457,8 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->picto.actor.shape, 0.0f, NULL, 14.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gDekuKingSkel, NULL, this->jointTable, this->morphTable, DEKU_KING_LIMB_MAX); - this->unk_398 = -1; - func_80A5257C(this, 0); + this->animIndex = DEKU_KING_ANIM_NONE; + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_IDLE); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->picto.actor, 0.02f); @@ -450,7 +485,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { EnDnq* this = THIS; if (!func_80A52D44(this, play) && func_80A52648(this, play)) { - func_80A53038(this, play); + EnDnq_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); } else { this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h index 6ede37a55..ddb6616a2 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h @@ -29,7 +29,7 @@ typedef struct EnDnq { /* 0x38C */ s16 unk_38C; /* 0x390 */ f32 unk_390; /* 0x394 */ f32 unk_394; - /* 0x398 */ s32 unk_398; + /* 0x398 */ s32 animIndex; /* 0x39C */ s32 unk_39C; /* 0x3A0 */ UNK_TYPE1 unk_3A0[0x4]; /* 0x3A4 */ s32 unk_3A4; 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 9d5c6ae48..e04d2bf4d 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -19,20 +19,6 @@ void func_8092D330(EnDns* this, PlayState* play); void EnDns_DoNothing(EnDns* this, PlayState* play); void func_8092D4D8(EnDns* this, PlayState* play); -typedef enum { - /* 0 */ EN_DNS_ANIM_IDLE_1, - /* 1 */ EN_DNS_ANIM_IDLE_2, - /* 2 */ EN_DNS_ANIM_WALK_1, - /* 3 */ EN_DNS_ANIM_WALK_2, - /* 4 */ EN_DNS_ANIM_SURPRISE_START, - /* 5 */ EN_DNS_ANIM_SURPRISE_LOOP, - /* 6 */ EN_DNS_ANIM_RUN_START, - /* 7 */ EN_DNS_ANIM_RUN_LOOP, - /* 8 */ EN_DNS_ANIM_DANCE, - /* 9 */ EN_DNS_ANIM_FLIP, - /* 10 */ EN_DNS_ANIM_MAX -} EnDnsAnimation; - static s32 D_8092DCB0[] = { 0x00172000, 0x050E082F, 0x0C100E08, 0x200C1000, 0x00172000, 0x050E0830, 0x0C100E08, 0x210C1000, 0x00172000, 0x050E0831, 0x0C100E08, 0x220C1000, 0x00172000, 0x050E0832, 0x0C100E08, 0x230C1000, @@ -73,60 +59,75 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gKingsChamberDekuGuardSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardRunStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardRunLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardDanceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardFlipAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +typedef enum { + /* -1 */ EN_DNS_ANIM_NONE = -1, + /* 0 */ EN_DNS_ANIM_IDLE, + /* 1 */ EN_DNS_ANIM_IDLE_MORPH, + /* 2 */ EN_DNS_ANIM_WALK, + /* 3 */ EN_DNS_ANIM_WALK_MORPH, + /* 4 */ EN_DNS_ANIM_SURPRISE_START, + /* 5 */ EN_DNS_ANIM_SURPRISE_LOOP, + /* 6 */ EN_DNS_ANIM_RUN_START, + /* 7 */ EN_DNS_ANIM_RUN_LOOP, + /* 8 */ EN_DNS_ANIM_DANCE, + /* 9 */ EN_DNS_ANIM_FLIP, + /* 10 */ EN_DNS_ANIM_MAX +} EnDnsAnimation; + +static AnimationInfoS sAnimationInfo[EN_DNS_ANIM_MAX] = { + { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_IDLE + { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_DNS_ANIM_IDLE_MORPH + { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_WALK + { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_DNS_ANIM_WALK_MORPH + { &gKingsChamberDekuGuardSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_SURPRISE_START + { &gKingsChamberDekuGuardSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_SURPRISE_LOOP + { &gKingsChamberDekuGuardRunStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_RUN_START + { &gKingsChamberDekuGuardRunLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_RUN_LOOP + { &gKingsChamberDekuGuardDanceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_DANCE + { &gKingsChamberDekuGuardFlipAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_FLIP }; void func_8092C5C0(EnDns* this) { s32 pad; - if (((this->animIndex == EN_DNS_ANIM_WALK_1) || (this->animIndex == EN_DNS_ANIM_WALK_2) || + if (((this->animIndex == EN_DNS_ANIM_WALK) || (this->animIndex == EN_DNS_ANIM_WALK_MORPH) || (this->animIndex == EN_DNS_ANIM_RUN_START) || (this->animIndex == EN_DNS_ANIM_RUN_LOOP)) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 3.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } } -s32 func_8092C63C(EnDns* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnDns_ChangeAnim(EnDns* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - switch (arg1) { - case EN_DNS_ANIM_IDLE_1: - case EN_DNS_ANIM_IDLE_2: - if ((this->animIndex != EN_DNS_ANIM_IDLE_1) && (this->animIndex != EN_DNS_ANIM_IDLE_2)) { - phi_v1 = true; + switch (animIndex) { + case EN_DNS_ANIM_IDLE: + case EN_DNS_ANIM_IDLE_MORPH: + if ((this->animIndex != EN_DNS_ANIM_IDLE) && (this->animIndex != EN_DNS_ANIM_IDLE_MORPH)) { + changeAnim = true; } break; - case EN_DNS_ANIM_WALK_1: - case EN_DNS_ANIM_WALK_2: - if ((this->animIndex != EN_DNS_ANIM_WALK_1) && (this->animIndex != EN_DNS_ANIM_WALK_2)) { - phi_v1 = true; + case EN_DNS_ANIM_WALK: + case EN_DNS_ANIM_WALK_MORPH: + if ((this->animIndex != EN_DNS_ANIM_WALK) && (this->animIndex != EN_DNS_ANIM_WALK_MORPH)) { + changeAnim = true; } break; default: - if (this->animIndex != arg1) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } } - if (phi_v1) { - this->animIndex = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_8092C6FC(EnDns* this, PlayState* play) { @@ -200,9 +201,10 @@ s32* func_8092C9BC(EnDns* this, PlayState* play) { case ENDNS_GET_7_3: return &D_8092DCB0[12]; - } - return 0; + default: + return NULL; + } } s32 EnDns_GetCueType(EnDns* this) { @@ -218,9 +220,10 @@ s32 EnDns_GetCueType(EnDns* this) { case ENDNS_GET_7_3: return CS_CMD_ACTOR_CUE_468; - } - return 0; + default: + return 0; + } } s32 func_8092CAD0(EnDns* this, PlayState* play) { @@ -231,10 +234,10 @@ s32 func_8092CAD0(EnDns* this, PlayState* play) { SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_2C6 &= ~0x10; if (ENDNS_GET_4000(&this->actor)) { - this->unk_2F0 = 0.0f; + this->animCurFrame = 0.0f; if (this->unk_2D2 != 0) { - this->unk_2F0 = this->skelAnime.curFrame; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + this->animCurFrame = this->skelAnime.curFrame; + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); } this->unk_2DA = this->actor.world.rot.y; } @@ -305,13 +308,13 @@ s32 func_8092CCEC(EnDns* this, PlayState* play) { s32 func_8092CE38(EnDns* this) { static s32 D_8092DE00[] = { EN_DNS_ANIM_DANCE, EN_DNS_ANIM_DANCE, EN_DNS_ANIM_FLIP }; - s16 frame; + s16 rotVelocity; s32 pad; Vec3f sp2C; s32 ret = false; if ((this->unk_2C6 & 0x200) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8092C63C(this, D_8092DE00[this->unk_2D2]); + EnDns_ChangeAnim(this, D_8092DE00[this->unk_2D2]); this->unk_2C6 &= ~0x200; this->skelAnime.curFrame = 0.0f; if (this->unk_2D2 == 2) { @@ -330,10 +333,10 @@ s32 func_8092CE38(EnDns* this) { this->actor.shape.rot.y = this->actor.world.rot.y; Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_JUMP); } else if (this->skelAnime.curFrame < 13.0f) { - frame = this->skelAnime.curFrame; + rotVelocity = this->skelAnime.curFrame; this->actor.shape.rot.y = this->actor.world.rot.y; - frame *= 2520; - this->actor.shape.rot.y += frame; + rotVelocity *= 0x9D8; + this->actor.shape.rot.y += rotVelocity; this->unk_2E4 -= -(40.0f / 13.0f); } } else { @@ -404,11 +407,11 @@ void func_8092D1B8(EnDns* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_FOUND); SET_EVENTINF(EVENTINF_15); this->unk_2F4 = func_8092CCEC; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); this->actionFunc = EnDns_DoNothing; } else if (CHECK_EVENTINF(EVENTINF_16)) { func_8092CCEC(this, play); - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); this->actionFunc = func_8092D330; } Math_ApproachS(&this->actor.shape.rot.y, sp22, 3, 0x2AA8); @@ -450,16 +453,16 @@ void func_8092D4D8(EnDns* this, PlayState* play) { if (ENDNS_GET_4000(&this->actor) && (this->unk_2D2 == 0)) { if (func_8092CE38(this)) { - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); } } else if (func_8010BF58(&this->actor, play, this->unk_1E0, this->unk_2F4, &this->unk_1DC)) { SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2F4 = NULL; if (ENDNS_GET_4000(&this->actor)) { if (!CHECK_EVENTINF(EVENTINF_15)) { - this->skelAnime.curFrame = this->unk_2F0; + this->skelAnime.curFrame = this->animCurFrame; this->actor.world.rot.y = this->unk_2DA; - func_8092C63C(this, EN_DNS_ANIM_DANCE); + EnDns_ChangeAnim(this, EN_DNS_ANIM_DANCE); } this->unk_2CC = 0; this->unk_2CE = 0; @@ -471,10 +474,10 @@ void func_8092D4D8(EnDns* this, PlayState* play) { } } -void func_8092D5E8(EnDns* this, PlayState* play) { - static s32 D_8092DE0C[] = { - EN_DNS_ANIM_IDLE_1, - EN_DNS_ANIM_IDLE_1, +void EnDns_HandleCutscene(EnDns* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + EN_DNS_ANIM_IDLE, + EN_DNS_ANIM_IDLE, EN_DNS_ANIM_SURPRISE_START, EN_DNS_ANIM_RUN_START, }; @@ -485,13 +488,13 @@ void func_8092D5E8(EnDns* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, this->cueType); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_8092C63C(this, D_8092DE0C[cueId]); + EnDns_ChangeAnim(this, sCsAnimIndex[cueId]); this->cueId = cueId; } if (((this->animIndex == EN_DNS_ANIM_SURPRISE_START) || (this->animIndex == EN_DNS_ANIM_RUN_START)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8092C63C(this, this->animIndex + 1); + EnDns_ChangeAnim(this, this->animIndex + 1); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -509,8 +512,8 @@ void EnDns_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f); SkelAnime_Init(play, &this->skelAnime, &gKingsChamberDekuGuardSkel, NULL, this->jointTable, this->morphTable, KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX); - this->animIndex = -1; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + this->animIndex = EN_DNS_ANIM_NONE; + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); @@ -541,7 +544,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) { EnDns* this = THIS; if (!func_8092CAD0(this, play) && func_8092CB98(this, play)) { - func_8092D5E8(this, play); + EnDns_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); func_8092C5C0(this); } else { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h index ade8b6174..5b926f9db 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h @@ -28,7 +28,7 @@ typedef struct EnDns { /* 0x1D8 */ u8 cueId; /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ s32* unk_1E0; - /* 0x1E4 */ Gfx* unk_1E4[13]; + /* 0x1E4 */ Gfx* unk_1E4[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; /* 0x218 */ Vec3f unk_218; /* 0x224 */ Vec3s unk_224; /* 0x22A */ Vec3s jointTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; @@ -50,7 +50,7 @@ typedef struct EnDns { /* 0x2E4 */ f32 unk_2E4; /* 0x2E8 */ UNK_TYPE1 unk_2E8[0x4]; /* 0x2EC */ f32 unk_2EC; - /* 0x2F0 */ f32 unk_2F0; + /* 0x2F0 */ f32 animCurFrame; /* 0x2F4 */ EnDnsFunc unk_2F4; /* 0x2F8 */ s32 animIndex; /* 0x2FC */ s32 unk_2FC; 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 0f0025a4a..6b141e281 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -8,7 +8,6 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#include "objects/object_dodongo/object_dodongo.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -297,7 +296,7 @@ void EnDodongo_Init(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&this->unk_314, &gOneVec3f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 48.0f); SkelAnime_Init(play, &this->skelAnime, &object_dodongo_Skel_008318, &object_dodongo_Anim_004C20, this->jointTable, - this->morphTable, 31); + this->morphTable, OBJECT_DODONGO_LIMB_MAX); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements); Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements); @@ -803,20 +802,20 @@ void func_80877E60(EnDodongo* this, PlayState* play) { void func_80878354(EnDodongo* this) { s32 pad; - AnimationHeader* sp18; + AnimationHeader* anim; s16 yDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; this->unk_306 = (0xFFFF - ABS_ALT(yDiff)) / 15; if (yDiff >= 0) { - sp18 = &object_dodongo_Anim_0042C4; + anim = &object_dodongo_Anim_0042C4; this->unk_306 = -this->unk_306; } else { - sp18 = &object_dodongo_Anim_003B14; + anim = &object_dodongo_Anim_003B14; } Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_TAIL); - Animation_PlayOnceSetSpeed(&this->skelAnime, sp18, 2.0f); + Animation_PlayOnceSetSpeed(&this->skelAnime, anim, 2.0f); this->timer = 0; this->collider1.base.atFlags |= AT_ON; this->unk_304 = -1; @@ -1066,9 +1065,9 @@ void EnDodongo_Update(Actor* thisx, PlayState* play2) { s32 EnDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDodongo* this = THIS; - if (limbIndex == 1) { + if (limbIndex == OBJECT_DODONGO_LIMB_01) { pos->z += 1000.0f; - } else if ((limbIndex == 15) || (limbIndex == 16)) { + } else if ((limbIndex == OBJECT_DODONGO_LIMB_0F) || (limbIndex == OBJECT_DODONGO_LIMB_10)) { Matrix_Scale(this->unk_314.x, this->unk_314.y, this->unk_314.z, MTXMODE_APPLY); } @@ -1121,16 +1120,17 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } - if (limbIndex == 7) { + if (limbIndex == OBJECT_DODONGO_LIMB_07) { Matrix_MultVec3f(&D_80879370, &this->unk_308); Matrix_MultVec3f(&D_8087937C, &this->bodyPartsPos[DODONGO_BODYPART_0]); Matrix_MultZero(&this->actor.focus.pos); Matrix_MultVecY(-200.0f, &this->bodyPartsPos[DODONGO_BODYPART_1]); - } else if (limbIndex == 13) { + } else if (limbIndex == OBJECT_DODONGO_LIMB_0D) { Matrix_MultVecX(1600.0f, &this->unk_320); } - if ((limbIndex == 30) && (this->actionFunc == func_80878424) && (this->timer != this->unk_304)) { + if ((limbIndex == OBJECT_DODONGO_LIMB_1E) && (this->actionFunc == func_80878424) && + (this->timer != this->unk_304)) { EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->bodyPartsPos[DODONGO_BODYPART_4]); this->unk_304 = this->timer; diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h index be3095410..33e580539 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h @@ -2,6 +2,7 @@ #define Z_EN_DODONGO_H #include "global.h" +#include "objects/object_dodongo/object_dodongo.h" struct EnDodongo; @@ -23,8 +24,8 @@ typedef enum DodongoBodyPart { typedef struct EnDodongo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[31]; - /* 0x242 */ Vec3s morphTable[31]; + /* 0x188 */ Vec3s jointTable[OBJECT_DODONGO_LIMB_MAX]; + /* 0x242 */ Vec3s morphTable[OBJECT_DODONGO_LIMB_MAX]; /* 0x2FC */ EnDodongoActionFunc actionFunc; /* 0x300 */ u8 drawDmgEffType; /* 0x302 */ s16 timer; 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 df7b1b384..1450eb8bb 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -353,17 +353,48 @@ static InitChainEntry sInitChain[] = { ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), }; -static AnimationHeader* sAnimations[] = { - &gameplay_keep_Anim_020658, &gameplay_keep_Anim_022CA8, &gameplay_keep_Anim_020658, &gameplay_keep_Anim_022E68, - &gameplay_keep_Anim_0204B4, &gameplay_keep_Anim_022BE8, &gameplay_keep_Anim_022D90, &gameplay_keep_Anim_022BE8, - &gameplay_keep_Anim_022FF0, &gameplay_keep_Anim_0205A0, +static AnimationHeader* sAnimations[2 * PLAYER_FORM_MAX] = { + // left + &gameplay_keep_Anim_020658, // PLAYER_FORM_FIERCE_DEITY + &gameplay_keep_Anim_022CA8, // PLAYER_FORM_GORON + &gameplay_keep_Anim_020658, // PLAYER_FORM_ZORA + &gameplay_keep_Anim_022E68, // PLAYER_FORM_DEKU + &gameplay_keep_Anim_0204B4, // PLAYER_FORM_HUMAN + // right + &gameplay_keep_Anim_022BE8, // PLAYER_FORM_FIERCE_DEITY + &gameplay_keep_Anim_022D90, // PLAYER_FORM_GORON + &gameplay_keep_Anim_022BE8, // PLAYER_FORM_ZORA + &gameplay_keep_Anim_022FF0, // PLAYER_FORM_DEKU + &gameplay_keep_Anim_0205A0, // PLAYER_FORM_HUMAN }; -static u8 sAnimOpenFrames[10] = { - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +static u8 sAnimOpenFrames[2 * PLAYER_FORM_MAX] = { + // left + 25, // PLAYER_FORM_FIERCE_DEITY + 25, // PLAYER_FORM_GORON + 25, // PLAYER_FORM_ZORA + 25, // PLAYER_FORM_DEKU + 25, // PLAYER_FORM_HUMAN + // right + 25, // PLAYER_FORM_FIERCE_DEITY + 25, // PLAYER_FORM_GORON + 25, // PLAYER_FORM_ZORA + 25, // PLAYER_FORM_DEKU + 25, // PLAYER_FORM_HUMAN }; -static u8 sAnimCloseFrames[10] = { - 60, 60, 60, 70, 70, 60, 60, 60, 60, 70, +static u8 sAnimCloseFrames[2 * PLAYER_FORM_MAX] = { + // left + 60, // PLAYER_FORM_FIERCE_DEITY + 60, // PLAYER_FORM_GORON + 60, // PLAYER_FORM_ZORA + 70, // PLAYER_FORM_DEKU + 70, // PLAYER_FORM_HUMAN + // right + 60, // PLAYER_FORM_FIERCE_DEITY + 60, // PLAYER_FORM_GORON + 60, // PLAYER_FORM_ZORA + 60, // PLAYER_FORM_DEKU + 70, // PLAYER_FORM_HUMAN }; static Gfx* D_808679A4[14][2] = { @@ -638,8 +669,9 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { s32 pad; - temp = (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[3].z + rot->z) - - Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); + temp = + (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[DOOR_LIMB_3].z + rot->z) - + Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); *dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1]; } else { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index 69773f821..e1e7197d9 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -25,13 +25,6 @@ void EnDragon_SetupAttack(EnDragon* this); void EnDragon_Attack(EnDragon* this, PlayState* play); void EnDragon_Dead(EnDragon* this, PlayState* play); -typedef enum { - /* 0 */ DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY, - /* 1 */ DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY, - /* 2 */ DEEP_PYTHON_ANIM_VERTICAL_SWAY, - /* 3 */ DEEP_PYTHON_ANIM_IDLE -} DeepPythonAnimation; - typedef enum { /* 0 */ DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED, /* 1 */ DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED, @@ -256,26 +249,39 @@ void EnDragon_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyJntSph(play, &this->collider); } -static AnimationHeader* sAnimations[] = { - &gDeepPythonSmallSideSwayAnim, - &gDeepPythonLargeSideSwayAnim, - &gDeepPythonVerticalSwayAnim, - &gDeepPythonSmallSideSwayAnim, +typedef enum { + /* 0 */ DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY, + /* 1 */ DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY, + /* 2 */ DEEP_PYTHON_ANIM_VERTICAL_SWAY, + /* 3 */ DEEP_PYTHON_ANIM_IDLE, + /* 4 */ DEEP_PYTHON_ANIM_MAX +} DeepPythonAnimation; + +static AnimationHeader* sAnimations[DEEP_PYTHON_ANIM_MAX] = { + &gDeepPythonSmallSideSwayAnim, // DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY + &gDeepPythonLargeSideSwayAnim, // DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY + &gDeepPythonVerticalSwayAnim, // DEEP_PYTHON_ANIM_VERTICAL_SWAY + &gDeepPythonSmallSideSwayAnim, // DEEP_PYTHON_ANIM_IDLE }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE }; +static u8 sAnimationModes[DEEP_PYTHON_ANIM_MAX] = { + ANIMMODE_LOOP, // DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY + ANIMMODE_LOOP, // DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY + ANIMMODE_ONCE, // DEEP_PYTHON_ANIM_VERTICAL_SWAY + ANIMMODE_ONCE, // DEEP_PYTHON_ANIM_IDLE +}; void EnDragon_ChangeAnim(EnDragon* this, s32 animIndex) { f32 startFrame; this->animIndex = animIndex; - this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]); + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); startFrame = 0.0f; if (this->animIndex == DEEP_PYTHON_ANIM_IDLE) { - startFrame = this->endFrame; + startFrame = this->animEndFrame; } - Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, startFrame, this->endFrame, + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, startFrame, this->animEndFrame, sAnimationModes[this->animIndex], -4.0f); } @@ -370,7 +376,7 @@ void EnDragon_SetupExtend(EnDragon* this) { void EnDragon_Extend(EnDragon* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s16 yaw; EnDragon_SpawnBubbles(this, play, this->jawPos); @@ -410,7 +416,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { Math_SmoothStepToS(&this->jawZRotation, 0, 5, 0xBB8, 0x14); SkelAnime_Update(&this->skelAnime); if (this->state == DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED) { - if (currentFrame < this->endFrame) { + if (curFrame < this->animEndFrame) { return; } @@ -420,7 +426,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { yaw = ABS_ALT(BINANG_SUB(Math_Vec3f_Yaw(&this->jawPos, &player->actor.world.pos), this->actor.shape.rot.y)); if (yaw < 0x5000) { // Player is in front of the jaw - if ((this->endFrame <= currentFrame) && (this->largeSwayWaitTimer == 0)) { + if ((curFrame >= this->animEndFrame) && (this->largeSwayWaitTimer == 0)) { if (this->animIndex != DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY); } @@ -433,7 +439,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { // Player is in behind the jaw if (this->state == DEEP_PYTHON_EXTEND_STATE_REPEAT_LARGE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY); - this->largeSwayWaitTimer = Rand_ZeroFloat(20.0f) + this->endFrame; + this->largeSwayWaitTimer = Rand_ZeroFloat(20.0f) + this->animEndFrame; this->state = DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY; } @@ -562,7 +568,7 @@ void EnDragon_SetupAttack(EnDragon* this) { void EnDragon_Attack(EnDragon* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Vec3f pos; // used as both the extended position and the camera eye Vec3f subCamAt; @@ -603,7 +609,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.y, pos.y, 0.3f, 200.0f); Math_ApproachF(&this->actor.world.pos.z, pos.z, 0.3f, 200.0f); - if ((this->state <= DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) { + if ((this->state <= DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) { Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BITE); if (this->animIndex != DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY); @@ -612,7 +618,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->state++; } - if (((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) || + if (((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) || (!(player->stateFlags2 & PLAYER_STATE2_80)) || ((this->collider.elements[0].info.bumperFlags & BUMP_HIT)) || (this->collider.elements[1].info.bumperFlags & BUMP_HIT) || (this->collider.elements[2].info.bumperFlags & BUMP_HIT)) { @@ -625,7 +631,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_100000; - if ((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) { + if ((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) { this->timer = 3; this->actionFunc = EnDragon_RetreatOnceTimerEnds; } else { @@ -639,7 +645,7 @@ void EnDragon_SetupDead(EnDragon* this, PlayState* play) { CutsceneManager_Queue(this->deathCsId); } else { CutsceneManager_StartWithPlayerCs(this->deathCsId, &this->actor); - this->endFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim); + this->animEndFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim); Animation_Change(&this->skelAnime, &gDeepPythonSmallSideSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); this->timer = 20; this->actionFunc = EnDragon_Dead; diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h index a35c8fa9b..fa0979389 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h @@ -53,8 +53,7 @@ typedef struct EnDragon { /* 0x2C8 */ s16 subCamId; /* 0x2CA */ s16 grabTimer; // Counts up from the time a grab starts until the time the actor begins attacking /* 0x2CC */ s16 unk_2CC; // Initialized, but never used - /* 0x2CE */ UNK_TYPE1 unk_2CE[0x2]; - /* 0x2D0 */ f32 endFrame; + /* 0x2D0 */ f32 animEndFrame; /* 0x2D4 */ f32 scale; /* 0x2D8 */ UNK_TYPE1 unk_2D8[0x4]; /* 0x2DC */ ColliderJntSph collider; diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index 9fc28c952..da2f0571d 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -51,7 +51,14 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo = { &gWeddingDressMannequinIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }; +typedef enum { + /* 0 */ WEDDING_DRESS_MANNEQUIN_ANIM_IDLE, + /* 1 */ WEDDING_DRESS_MANNEQUIN_ANIM_MAX +} WeddingDressMannequinAnimation; + +static AnimationInfoS sAnimationInfo[WEDDING_DRESS_MANNEQUIN_ANIM_MAX] = { + { &gWeddingDressMannequinIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // WEDDING_DRESS_MANNEQUIN_ANIM_IDLE +}; void EnDrs_CollisionUpdate(EnDrs* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); @@ -65,7 +72,7 @@ void EnDrs_Setup(EnDrs* this, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gWeddingDressMannequinSkel, NULL, this->jointTable, this->morphTable, WEDDING_DRESS_MANNEQUIN_LIMB_MAX); - SubS_ChangeAnimationByInfoS(&this->skelAnime, &sAnimationInfo, 0); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, WEDDING_DRESS_MANNEQUIN_ANIM_IDLE); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 6a2eea9d2..22312a7c2 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -32,14 +32,19 @@ ActorInit En_Ds2n_InitVars = { (ActorFunc)EnDs2n_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gDs2nIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ ENDS2N_ANIM_IDLE, + /* 1 */ ENDS2N_ANIM_MAX +} EnDs2nAnimation; + +static AnimationInfo sAnimationInfo[ENDS2N_ANIM_MAX] = { + { &gDs2nIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENDS2N_ANIM_IDLE }; void EnDs2n_SetupIdle(EnDs2n* this) { this->blinkTimer = 20; this->blinkState = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENDS2N_ANIM_IDLE); this->actionFunc = EnDs2n_Idle; } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 06b4308a0..14f08c531 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -85,16 +85,20 @@ void EnDyExtra_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } +static Color_RGBA8 D_80A61740[] = { + { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, + { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, +}; + +static Color_RGBA8 D_80A61754[] = { + { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } +}; + +static u8 D_80A61768[] = { + 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 0, +}; + void EnDyExtra_Draw(Actor* thisx, PlayState* play) { - static Color_RGBA8 D_80A61740[] = { - { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, - { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, - }; - static Color_RGBA8 D_80A61754[] = { - { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } - }; - static u8 D_80A61768[] = { 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, - 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00 }; EnDyExtra* this = THIS; s32 pad; GraphicsContext* gfxCtx = play->state.gfxCtx; 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 150fafc60..6af86aaad 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -282,7 +282,7 @@ void EnFirefly_SetupFlyIdle(EnFirefly* this) { } void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { - s32 isSkelAnimeUpdated; + s32 onAnimFirstFrame; f32 rand; SkelAnime_Update(&this->skelAnime); @@ -290,11 +290,11 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { this->timer--; } - isSkelAnimeUpdated = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 1.5f; if (!EnFirefly_ReturnToPerch(this, play) && !EnFirefly_SeekTorch(this, play)) { - if (isSkelAnimeUpdated) { + if (onAnimFirstFrame) { rand = Rand_ZeroOne(); if (rand < 0.5f) { 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 ffe28b2b3..7798abf96 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -296,15 +296,15 @@ void func_808D0CE4(EnFloormas* this) { } void func_808D0D70(EnFloormas* this, PlayState* play) { - s32 temp_v0; + s32 onAnimFirstFrame; SkelAnime_Update(&this->skelAnime); - temp_v0 = Animation_OnFrame(&this->skelAnime, 0.0f); - if ((temp_v0 != 0) && (this->unk_18E != 0)) { + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); + if (onAnimFirstFrame && (this->unk_18E != 0)) { this->unk_18E--; } - if ((temp_v0 != 0) || Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 24.0f) || + if (onAnimFirstFrame || Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 24.0f) || Animation_OnFrame(&this->skelAnime, 36.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK); } 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 e7f14e8a8..5ee8a68e0 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -750,7 +750,7 @@ void EnMushi2_Init(Actor* thisx, PlayState* play) { if (ENMUSHI2_GET_3(&this->actor) == ENMUSHI2_0) { func_80A68A78(this, play); } - this->actor.shape.rot.y += Rand_S16Offset(-2000, 4000); + this->actor.shape.rot.y += Rand_S16Offset(-0x7D0, 0xFA0); this->actor.home.rot.y = this->actor.shape.rot.y; this->actor.world.rot.y = this->actor.shape.rot.y; func_80A68F24(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 7c5fdce36..26f5b4e24 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -326,9 +326,9 @@ void EnSsh_Stunned(EnSsh* this, PlayState* play) { if (this->stunTimer < 30) { if (this->stunTimer & 1) { - this->actor.shape.rot.y += 2000; + this->actor.shape.rot.y += 0x7D0; } else { - this->actor.shape.rot.y -= 2000; + this->actor.shape.rot.y -= 0x7D0; } } } 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 5e2250388..c3cdc7e5e 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -479,10 +479,10 @@ void func_80C11538(EnThiefbird* this) { void func_80C11590(EnThiefbird* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 sp38; + s32 onAnimFirstFrame; SkelAnime_Update(&this->skelAnime); - sp38 = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f; if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { @@ -493,7 +493,7 @@ void func_80C11590(EnThiefbird* this, PlayState* play) { } } - if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 5, 0x300, 0x10) && (sp38 != 0) && + if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 5, 0x300, 0x10) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { s16 yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y; @@ -513,7 +513,7 @@ void func_80C11590(EnThiefbird* this, PlayState* play) { this->unk_190 = Rand_S16Offset(2048, 2048); } - if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->unk_190, 10, 0x100, 8) && (sp38 != 0) && + if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->unk_190, 10, 0x100, 8) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { if (this->actor.home.pos.y < this->actor.world.pos.y) { this->unk_190 -= Rand_S16Offset(0x400, 0x400); 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 340618db7..51dee7da0 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 @@ -253,7 +253,7 @@ void EnTuboTrap_Idle(EnTuboTrap* this, PlayState* play) { } void EnTuboTrap_Levitate(EnTuboTrap* this, PlayState* play) { - this->actor.shape.rot.y += 5000; + this->actor.shape.rot.y += 0x1388; Math_ApproachF(&this->actor.world.pos.y, this->targetHeight, 0.8f, 3.0f); if (fabsf(this->actor.world.pos.y - this->targetHeight) < 10.0f) { @@ -279,7 +279,7 @@ void EnTuboTrap_FlyAtPlayer(EnTuboTrap* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, -3.0f, 0.2f, 0.5f); } - this->actor.shape.rot.y += 5000; + this->actor.shape.rot.y += 0x1388; EnTuboTrap_HandleImpact(this, play); } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1e594aaa0..951d98538 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6088,9 +6088,9 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { s32 temp = this->transformation - 1; PlayerAnimationHeader* anim; f32 temp_fv0; // sp5C - KnobDoorActor* doorHandle = (KnobDoorActor*)door; + KnobDoorActor* knobDoor = (KnobDoorActor*)door; - doorHandle->animIndex = this->transformation; + knobDoor->animIndex = this->transformation; if (this->doorDirection < 0) { if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { @@ -6101,7 +6101,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { anim = D_8085D118[temp]; } } else { - doorHandle->animIndex += 5; + knobDoor->animIndex += PLAYER_FORM_MAX; if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { anim = D_8085BE84[PLAYER_ANIMGROUP_10][this->modelAnimType]; @@ -6116,15 +6116,14 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { this->stateFlags2 |= PLAYER_STATE2_800000; func_8082DE14(play, this); if (this->doorDirection < 0) { - this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y; + this->actor.shape.rot.y = knobDoor->dyna.actor.shape.rot.y; } else { - this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y - 0x8000; + this->actor.shape.rot.y = knobDoor->dyna.actor.shape.rot.y - 0x8000; } this->currentYaw = this->actor.shape.rot.y; temp_fv0 = this->doorDirection * 22.0f; - func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, temp_fv0, - &this->actor.world.pos); + func_80835BF8(&knobDoor->dyna.actor.world.pos, knobDoor->dyna.actor.shape.rot.y, temp_fv0, &this->actor.world.pos); func_8082EC9C(play, this, anim); if (this->doorTimer != 0) { @@ -6134,19 +6133,19 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); - doorHandle->playOpenAnim = true; + knobDoor->playOpenAnim = true; if (this->doorType != PLAYER_DOORTYPE_FAKE) { CollisionPoly* poly; s32 bgId; Vec3f pos; - s32 enDoorType = ENDOOR_GET_TYPE(&doorHandle->dyna.actor); + s32 enDoorType = ENDOOR_GET_TYPE(&knobDoor->dyna.actor); this->stateFlags1 |= PLAYER_STATE1_20000000; if (this->actor.category == ACTORCAT_PLAYER) { Actor_DeactivateLens(play); - func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, -temp_fv0, &pos); - pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f; + func_80835BF8(&knobDoor->dyna.actor.world.pos, knobDoor->dyna.actor.shape.rot.y, -temp_fv0, &pos); + pos.y = knobDoor->dyna.actor.world.pos.y + 10.0f; BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); if (Player_HandleExitsAndVoids(play, this, poly, BGCHECK_SCENE)) { @@ -6157,8 +6156,8 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { this->unk_AE7 = 38.0f * D_8085C3E8; mainCam = Play_GetCamera(play, CAM_ID_MAIN); - Camera_ChangeDoorCam(mainCam, &doorHandle->dyna.actor, - play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorHandle->dyna.actor)] + Camera_ChangeDoorCam(mainCam, &knobDoor->dyna.actor, + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&knobDoor->dyna.actor)] .sides[(this->doorDirection > 0) ? 0 : 1] .bgCamIndex, 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1b8b9880a..3e8e246db 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7118,7 +7118,7 @@ 0x8092C550:("DemoShd_Update",), 0x8092C560:("DemoShd_Draw",), 0x8092C5C0:("func_8092C5C0",), - 0x8092C63C:("func_8092C63C",), + 0x8092C63C:("EnDns_ChangeAnim",), 0x8092C6FC:("func_8092C6FC",), 0x8092C740:("func_8092C740",), 0x8092C86C:("func_8092C86C",), @@ -7136,7 +7136,7 @@ 0x8092D320:("func_8092D320",), 0x8092D330:("func_8092D330",), 0x8092D4D8:("func_8092D4D8",), - 0x8092D5E8:("func_8092D5E8",), + 0x8092D5E8:("EnDns_HandleCutscene",), 0x8092D6C0:("EnDns_Init",), 0x8092D820:("EnDns_Destroy",), 0x8092D84C:("EnDns_Update",), @@ -7502,7 +7502,7 @@ 0x80942D34:("EnGoroiwa_Draw",), 0x809434B0:("EnDaiku_Init",), 0x80943710:("EnDaiku_Destroy",), - 0x8094373C:("func_8094373C",), + 0x8094373C:("EnDaiku_ChangeAnim",), 0x809437C8:("func_809437C8",), 0x80943820:("func_80943820",), 0x809438F8:("func_809438F8",), @@ -10574,10 +10574,10 @@ 0x80A510E0:("EnDnh_Update",), 0x80A51168:("func_80A51168",), 0x80A511B4:("EnDnh_Draw",), - 0x80A514F0:("func_80A514F0",), + 0x80A514F0:("EnDnk_ChangeAnim",), 0x80A515C4:("func_80A515C4",), 0x80A51648:("func_80A51648",), - 0x80A51890:("func_80A51890",), + 0x80A51890:("EnDnk_HandleCutscene",), 0x80A518DC:("func_80A518DC",), 0x80A518EC:("EnDnk_Init",), 0x80A519A8:("EnDnk_Destroy",), @@ -10592,7 +10592,7 @@ 0x80A52074:("func_80A52074",), 0x80A52134:("func_80A52134",), 0x80A52530:("EnDnq_ValidatePictograph",), - 0x80A5257C:("func_80A5257C",), + 0x80A5257C:("EnDnq_ChangeAnim",), 0x80A52604:("func_80A52604",), 0x80A52648:("func_80A52648",), 0x80A526F8:("func_80A526F8",), @@ -10604,7 +10604,7 @@ 0x80A52D44:("func_80A52D44",), 0x80A52DC8:("func_80A52DC8",), 0x80A52FB8:("func_80A52FB8",), - 0x80A53038:("func_80A53038",), + 0x80A53038:("EnDnq_HandleCutscene",), 0x80A5313C:("EnDnq_Init",), 0x80A53258:("EnDnq_Destroy",), 0x80A53284:("EnDnq_Update",), @@ -13640,7 +13640,7 @@ 0x80B3E168:("func_80B3E168",), 0x80B3E460:("func_80B3E460",), 0x80B3E5B4:("func_80B3E5B4",), - 0x80B3E5DC:("func_80B3E5DC",), + 0x80B3E5DC:("EnDai_ChangeAnim",), 0x80B3E69C:("func_80B3E69C",), 0x80B3E7C8:("func_80B3E7C8",), 0x80B3E834:("func_80B3E834",), @@ -13653,7 +13653,7 @@ 0x80B3EEDC:("func_80B3EEDC",), 0x80B3EF90:("func_80B3EF90",), 0x80B3F00C:("func_80B3F00C",), - 0x80B3F044:("func_80B3F044",), + 0x80B3F044:("EnDai_HandleCutscene",), 0x80B3F318:("EnDai_Init",), 0x80B3F494:("EnDai_Destroy",), 0x80B3F4A4:("EnDai_Update",), @@ -16117,7 +16117,7 @@ 0x80BE61D0:("func_80BE61D0",), 0x80BE6228:("EnDaiku2_Init",), 0x80BE63DC:("EnDaiku2_Destroy",), - 0x80BE6408:("func_80BE6408",), + 0x80BE6408:("EnDaiku2_ChangeAnim",), 0x80BE64C0:("func_80BE64C0",), 0x80BE65B4:("func_80BE65B4",), 0x80BE66E4:("func_80BE66E4",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 482947b96..9e122fed2 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -7965,7 +7965,7 @@ 0x8092DD54:("D_8092DD54","UNK_PTR","",0x4), 0x8092DD60:("sAnimations","UNK_TYPE1","",0x1), 0x8092DE00:("D_8092DE00","UNK_TYPE1","",0x1), - 0x8092DE0C:("D_8092DE0C","UNK_TYPE1","",0x1), + 0x8092DE0C:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x8092DE1C:("D_8092DE1C","UNK_TYPE1","",0x1), 0x8092DE30:("D_8092DE30","f32","",0x4), 0x8092DE34:("D_8092DE34","f32","",0x4), @@ -11563,7 +11563,7 @@ 0x80A5349C:("sAnimationInfo","UNK_TYPE1","",0x1), 0x80A535DC:("D_80A535DC","UNK_TYPE1","",0x1), 0x80A535F0:("D_80A535F0","UNK_TYPE4","",0x4), - 0x80A535FC:("D_80A535FC","UNK_TYPE1","",0x1), + 0x80A535FC:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80A53620:("jtbl_80A53620","UNK_PTR","",0x4), 0x80A53648:("jtbl_80A53648","UNK_PTR","",0x4), 0x80A53B50:("Bg_Keikoku_Saku_InitVars","UNK_TYPE1","",0x1), @@ -14161,7 +14161,7 @@ 0x80B3DCAC:("D_80B3DCAC","UNK_TYPE1","",0x1), 0x80B3DCB8:("sAnimations","UNK_TYPE1","",0x1), 0x80B3DE58:("D_80B3DE58","UNK_TYPE1","",0x1), - 0x80B3DE74:("sCsAnimations","UNK_TYPE1","",0x1), + 0x80B3DE74:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80B3DEAC:("sEyeTextures","UNK_TYPE1","",0x1), 0x80B3DEC0:("D_80B3DEC0","f32","",0x4), 0x80B3DEC4:("D_80B3DEC4","f32","",0x4), @@ -14183,7 +14183,7 @@ 0x80B3FDF4:("D_80B3FDF4","UNK_TYPE4","",0x4), 0x80B3FE00:("D_80B3FE00","UNK_TYPE2","",0x2), 0x80B3FE08:("D_80B3FE08","UNK_TYPE4","",0x4), - 0x80B3FE38:("D_80B3FE38","UNK_TYPE1","",0x1), + 0x80B3FE38:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80B3FE4C:("D_80B3FE4C","f32","",0x4), 0x80B3FE50:("D_80B3FE50","f32","",0x4), 0x80B3FE54:("D_80B3FE54","f32","",0x4), @@ -15939,7 +15939,7 @@ 0x80BE78F0:("sTextIds","s16","",0x1), 0x80BE7900:("D_80BE7900","UNK_TYPE1","",0x1), 0x80BE792C:("sAnimations","AnimationHeader*","",0x1), - 0x80BE7958:("D_80BE7958","UNK_TYPE1","",0x1), + 0x80BE7958:("sAnimationModes","UNK_TYPE1","",0x1), 0x80BE7970:("D_80BE7970","f32","",0x4), 0x80BE7974:("D_80BE7974","f32","",0x4), 0x80BE7978:("D_80BE7978","f32","",0x4), From c5d6185a88adbd76cd560006fc86d78282460b96 Mon Sep 17 00:00:00 2001 From: Isghj <42048411+isghj5@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:59:51 -0700 Subject: [PATCH 069/121] `En_Horse_Link_Child` and `object_horse_link_child` partially documented. (#1353) * ChildHorse: some documentation * OOT Horse: more documentation * OOT Horse: more documentation * OOT Horse: more documentation * might be busted * OOT Epona: more documents aft * OOT Epona: some object documentation, continued documentation * format * OOT Epona: requested changes * OOT Epona: minor documentation changes * what is this warning, c pls * OOT Horse: git nudge * OOT Epona: requested changes to enums * OOT Epona: Anim * Update src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * OOT Epona: change enum name * OOT Epona: Requested changes * OOT Epona: More requested changes * OOT Epona: removed incorrect padding guess --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- .../xml/objects/object_horse_link_child.xml | 31 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 20 +- .../z_en_horse_link_child.c | 530 ++++++++++-------- .../z_en_horse_link_child.h | 14 +- tools/disasm/functions.txt | 30 +- 5 files changed, 353 insertions(+), 272 deletions(-) diff --git a/assets/xml/objects/object_horse_link_child.xml b/assets/xml/objects/object_horse_link_child.xml index 6af29e1e5..535ea1d86 100644 --- a/assets/xml/objects/object_horse_link_child.xml +++ b/assets/xml/objects/object_horse_link_child.xml @@ -1,4 +1,5 @@  + @@ -9,10 +10,13 @@ - - - - + + + + + + + @@ -20,16 +24,20 @@ - + + - + - - - + + + + + + @@ -76,14 +84,17 @@ - + + + + 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 287a50e45..1bb7640dc 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -110,9 +110,15 @@ typedef struct { } RaceInfo; // size = 0x8 static AnimationHeader* sEponaAnimations[] = { - &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64, - &object_horse_link_child_Anim_004DE8, &object_horse_link_child_Anim_007D50, &object_horse_link_child_Anim_0043AC, - &object_horse_link_child_Anim_002F98, &object_horse_link_child_Anim_0035B0, &object_horse_link_child_Anim_003D38, + &gEponaIdleAnim, + &gEponaWhinnyAnim, + &object_horse_link_child_Anim_005F64, + &object_horse_link_child_Anim_004DE8, + &gEponaWalkAnim, + &gEponaTrotAnim, + &gEponaGallopAnim, + &object_horse_link_child_Anim_0035B0, + &object_horse_link_child_Anim_003D38, }; static AnimationHeader* sHniAnimations[] = { @@ -130,7 +136,7 @@ static f32 sPlaybackSpeeds[] = { }; static SkeletonHeader* sSkeletonHeaders[] = { - NULL, NULL, &object_horse_link_child_Skel_00A480, NULL, NULL, + NULL, NULL, &gEponaSkel, NULL, NULL, }; ActorInit En_Horse_InitVars = { @@ -4633,9 +4639,9 @@ void EnHorse_PostDraw(Actor* thisx, PlayState* play, Skin* skin) { s32 EnHorse_OverrideLimbDraw(Actor* thisx, PlayState* play, s32 limbIndex, Skin* skin) { static TexturePtr D_80889204[] = { - object_horse_link_child_Tex_001D28, - object_horse_link_child_Tex_001928, - object_horse_link_child_Tex_001B28, + gEponaEyeOpenTex, + gEponaEyeHalfTex, + gEponaEyeClosedTex, }; static u8 D_80889210[] = { 0, 1, 2, 1 }; EnHorse* this = THIS; 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 d867d299f..bba55073b 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 @@ -1,7 +1,8 @@ /* * File: z_en_horse_link_child.c * Overlay: ovl_En_Horse_Link_Child - * Description: Child Epona + * Description: Child Epona from OoT, when player learns Epona's song + * (Unused in MM and broken) */ #include "z_en_horse_link_child.h" @@ -17,15 +18,17 @@ void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play); void EnHorseLinkChild_Update(Actor* thisx, PlayState* play); void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play); -void func_808DEA0C(EnHorseLinkChild* this, PlayState* play); -void func_808DEB14(EnHorseLinkChild* this, PlayState* play); -void func_808DECA0(EnHorseLinkChild* this); -void func_808DED40(EnHorseLinkChild* this, PlayState* play); -void func_808DEFE8(EnHorseLinkChild* this); -void func_808DF194(EnHorseLinkChild* this, PlayState* play); -void func_808DF620(EnHorseLinkChild* this, PlayState* play); -void func_808DF788(EnHorseLinkChild* this); -void func_808DF838(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex); +void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this); +void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_SetupLonLonIdle(EnHorseLinkChild* this); +void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_SetupActionFunc5(EnHorseLinkChild* this); +void EnHorseLinkChild_ActionFunc5(EnHorseLinkChild* this, PlayState* play); +void EnHorseLinkChild_SetupActionFunc4(EnHorseLinkChild* this); +void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play); ActorInit En_Horse_Link_Child_InitVars = { ACTOR_EN_HORSE_LINK_CHILD, @@ -39,9 +42,21 @@ ActorInit En_Horse_Link_Child_InitVars = { (ActorFunc)EnHorseLinkChild_Draw, }; -AnimationHeader* D_808DFEC0[] = { - &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_007D50, - &object_horse_link_child_Anim_0043AC, &object_horse_link_child_Anim_002F98, +typedef enum { + /* 0 */ OOT_CHILD_EPONA_ANIM_IDLE, // head down + pawing + /* 1 */ OOT_CHILD_EPONA_ANIM_WHINNY, // head shake + /* 2 */ OOT_CHILD_EPONA_ANIM_WALK, // slow + /* 3 */ OOT_CHILD_EPONA_ANIM_TROT, // mid + /* 4 */ OOT_CHILD_EPONA_ANIM_GALLOP, // fast + /* 5 */ OOT_CHILD_EPONA_ANIM_MAX +} OoTEponaAnimation; + +AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = { + &gEponaIdleAnim, // OOT_CHILD_EPONA_ANIM_IDLE + &gEponaWhinnyAnim, // OOT_CHILD_EPONA_ANIM_WHINNY + &gEponaWalkAnim, // OOT_CHILD_EPONA_ANIM_WALK + &gEponaTrotAnim, // OOT_CHILD_EPONA_ANIM_TROT + &gEponaGallopAnim, // OOT_CHILD_EPONA_ANIM_GALLOP }; static ColliderJntSphElementInit sJntSphElementsInit[] = { @@ -73,41 +88,65 @@ static ColliderJntSphInit sJntSphInit = { static CollisionCheckInfoInit sColChkInfoInit = { 10, 35, 100, MASS_HEAVY }; -s32 D_808DFF10[] = { 1, 19 }; +// the animation frames that should have sfx +static s32 sAnimSoundFrames[] = { 1, 19 }; -f32 D_808DFF18[] = { 1.0f, 1.0f, 1.5f, 1.5f, 1.5f }; +static f32 sAnimPlaySpeeds[OOT_CHILD_EPONA_ANIM_MAX] = { + 1.0f, // OOT_CHILD_EPONA_ANIM_IDLE + 1.0f, // OOT_CHILD_EPONA_ANIM_WHINNY + 1.5f, // OOT_CHILD_EPONA_ANIM_WALK + 1.5f, // OOT_CHILD_EPONA_ANIM_TROT + 1.5f // OOT_CHILD_EPONA_ANIM_GALLOP +}; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_STOP), }; -EnHorseLinkChildUnkFunc D_808DFF30[] = { - func_808DEA0C, func_808DED40, func_808DEB14, func_808DF194, func_808DF838, func_808DF620, +typedef enum { + /* 0 */ OOT_CHILD_EPONA_ACTION_0, // unfinished + /* 1 */ OOT_CHILD_EPONA_ACTION_GREET_PLAYER, // approaching + /* 2 */ OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER, + /* 3 */ OOT_CHILD_EPONA_ACTION_LONLON_IDLE, + /* 4 */ OOT_CHILD_EPONA_ACTION_4, + /* 5 */ OOT_CHILD_EPONA_ACTION_5, + /* 6 */ OOT_CHILD_EPONA_ACTION_MAX +} OoTEponaAction; + +static EnHorseLinkChildActionFunc sActionFuncs[] = { + EnHorseLinkChild_ActionFunc0, // OOT_CHILD_EPONA_ACTION_0 + EnHorseLinkChild_GreetPlayer, // OOT_CHILD_EPONA_ACTION_GREET_PLAYER + EnHorseLinkChild_WaitForPlayer, // OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER + EnHorseLinkChild_LonLonIdle, // OOT_CHILD_EPONA_ACTION_LONLON_IDLE + EnHorseLinkChild_ActionFunc4, // OOT_CHILD_EPONA_ACTION_4 + EnHorseLinkChild_ActionFunc5, // OOT_CHILD_EPONA_ACTION_5 }; -TexturePtr D_808DFF48[] = { object_horse_link_child_Tex_001D28, object_horse_link_child_Tex_001928, - object_horse_link_child_Tex_001B28 }; +static TexturePtr sEyeTextures[] = { gEponaEyeOpenTex, gEponaEyeHalfTex, gEponaEyeClosedTex }; -s8 D_808DFF54[] = { 0, 1, 2, 1 }; +s8 sEyeTextureIndexOverride[] = { 0, 1, 2, 1 }; -void func_808DE5C0(EnHorseLinkChild* this) { - if ((D_808DFF10[this->unk_1E8] < this->skin.skelAnime.curFrame) && - ((this->unk_1E8 != 0) || !(D_808DFF10[1] < this->skin.skelAnime.curFrame))) { +// This plays the walking/gallop sfx, which needs to be timed based on horse speed, +// this is only used for animation OOT_CHILD_EPONA_ANIM_WALK +void EnHorseLinkChild_PlayWalkingSound(EnHorseLinkChild* this) { + if ((sAnimSoundFrames[this->footstepCounter] < this->skin.skelAnime.curFrame) && + ((this->footstepCounter != 0) || !(sAnimSoundFrames[1] < this->skin.skelAnime.curFrame))) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_WALK); - this->unk_1E8++; - if (this->unk_1E8 >= 2) { - this->unk_1E8 = 0; + + this->footstepCounter++; + if (this->footstepCounter >= 2) { + this->footstepCounter = 0; } } } -void func_808DE660(EnHorseLinkChild* this) { - if (this->unk_148 == 2) { - func_808DE5C0(this); +void EnHorseLinkChild_PlaySound(EnHorseLinkChild* this) { + if (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK) { + EnHorseLinkChild_PlayWalkingSound(this); } else if (this->skin.skelAnime.curFrame == 0.0f) { - if ((this->unk_148 == 3) || (this->unk_148 == 4)) { + if ((this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || (this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP)) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN); - } else if (this->unk_148 == 1) { + } else if (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) { if (Rand_ZeroOne() > 0.5f) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_GROAN); } else { @@ -117,52 +156,55 @@ void func_808DE660(EnHorseLinkChild* this) { } } -f32 func_808DE728(EnHorseLinkChild* this) { - f32 phi_fv1; +f32 EnHorseLinkChild_GetAnimSpeed(EnHorseLinkChild* this) { + f32 animSpeed; - if (this->unk_148 == 2) { - phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 2.0f); - } else if (this->unk_148 == 3) { - phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 3.0f); - } else if (this->unk_148 == 4) { - phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 5.0f); + if (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK) { + animSpeed = sAnimPlaySpeeds[this->animIndex] * this->actor.speed * (1.0f / 2.0f); + } else if (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) { + animSpeed = sAnimPlaySpeeds[this->animIndex] * this->actor.speed * (1.0f / 3.0f); + } else if (this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) { + animSpeed = sAnimPlaySpeeds[this->animIndex] * this->actor.speed * (1.0f / 5.0f); } else { - phi_fv1 = D_808DFF18[this->unk_148]; + animSpeed = sAnimPlaySpeeds[this->animIndex]; } - return phi_fv1; + + return animSpeed; } void EnHorseLinkChild_Init(Actor* thisx, PlayState* play) { EnHorseLinkChild* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - Actor_SetScale(&this->actor, 0.00648f); + Actor_SetScale(&this->actor, 64.8f * 0.0001f); this->actor.gravity = -3.5f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawHorse, 20.0f); - this->unk_144 = 1; + this->action = OOT_CHILD_EPONA_ACTION_GREET_PLAYER; this->actor.speed = 0.0f; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 70.0f; - Skin_Init(&play->state, &this->skin, &object_horse_link_child_Skel_00A480, &object_horse_link_child_Anim_002F98); - this->unk_148 = 0; - Animation_PlayOnce(&this->skin.skelAnime, D_808DFEC0[0]); + Skin_Init(&play->state, &this->skin, &gEponaSkel, &gEponaGallopAnim); + this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; + + // this gets overwritten by EnHorseLinkChild_SetupLonLonIdle below + Animation_PlayOnce(&this->skin.skelAnime, sAnimations[OOT_CHILD_EPONA_ANIM_IDLE]); Collider_InitCylinder(play, &this->colldierCylinder); Collider_InitJntSph(play, &this->colliderJntSph); Collider_SetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, this->colliderJntSphElements); CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit); - this->unk_1E8 = 0; - this->unk_1E4 = 0; + this->footstepCounter = 0; + this->eyeTexIndex = 0; - if (gSaveContext.sceneLayer >= 4) { - func_808DEFE8(this); + if (gSaveContext.sceneLayer >= 4) { // IS_CUTSCENE_LAYER in OoT + EnHorseLinkChild_SetupLonLonIdle(this); } else { - func_808DEFE8(this); + EnHorseLinkChild_SetupLonLonIdle(this); } this->actor.home.rot.z = this->actor.world.rot.z = this->actor.shape.rot.z = 0; @@ -176,303 +218,324 @@ void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyJntSph(play, &this->colliderJntSph); } -void func_808DE9A8(EnHorseLinkChild* this) { - this->unk_144 = 0; - this->unk_148++; - if (this->unk_148 >= ARRAY_COUNT(D_808DFF18)) { - this->unk_148 = 0; +void EnHorseLinkChild_SetupActionFunc0(EnHorseLinkChild* this) { + this->action = OOT_CHILD_EPONA_ACTION_0; + this->animIndex++; + if (this->animIndex >= ARRAY_COUNT(sAnimPlaySpeeds)) { + this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } - Animation_PlayOnce(&this->skin.skelAnime, D_808DFEC0[this->unk_148]); - this->skin.skelAnime.playSpeed = func_808DE728(this); + Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animIndex]); + this->skin.skelAnime.playSpeed = EnHorseLinkChild_GetAnimSpeed(this); } -void func_808DEA0C(EnHorseLinkChild* this, PlayState* play) { +/** + * Mostly broken + */ +void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play) { this->actor.speed = 0.0f; if (SkelAnime_Update(&this->skin.skelAnime)) { - func_808DE9A8(this); + EnHorseLinkChild_SetupActionFunc0(this); } } -void func_808DEA54(EnHorseLinkChild* this, s32 arg1) { - this->unk_144 = 2; +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex) { + this->action = OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER; this->actor.speed = 0.0f; - if ((arg1 != 0) && (arg1 != 1)) { - arg1 = 0; + if ((nextAnimIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (nextAnimIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; } - if (arg1 != this->unk_148) { - this->unk_148 = arg1; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + if (nextAnimIndex != this->animIndex) { + this->animIndex = nextAnimIndex; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } } -void func_808DEB14(EnHorseLinkChild* this, PlayState* play) { - f32 sp44 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); - s32 phi_v0; +/** + * Waiting for the player to get close, to notice and begin to approach the player. + */ +void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) { + f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); + s32 nextAnimIndex; if (SkelAnime_Update(&this->skin.skelAnime)) { - if ((sp44 < 1000.0f) && (sp44 > 70.0f)) { - func_808DECA0(this); + if ((distToPlayer < 1000.0f) && (distToPlayer > 70.0f)) { + EnHorseLinkChild_SetupGreetPlayer(this); return; } - if (this->unk_148 == 1) { - phi_v0 = 0; + if (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; } else { - phi_v0 = 1; + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WHINNY; } - if (phi_v0 != this->unk_148) { - this->unk_148 = phi_v0; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + if (nextAnimIndex != this->animIndex) { + this->animIndex = nextAnimIndex; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, 0.0f); } } } -void func_808DECA0(EnHorseLinkChild* this) { - this->unk_144 = 1; - this->unk_148 = 0; +void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this) { + this->action = OOT_CHILD_EPONA_ACTION_GREET_PLAYER; + this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; this->actor.speed = 0.0f; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } -void func_808DED40(EnHorseLinkChild* this, PlayState* play) { - f32 temp_fv0; - s16 temp_a0; - s32 phi_v0; +/** + * Chasing the player down. + */ +void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { + f32 distToPlayer; + s16 yawTowardPlayerDiff; + s32 nextAnimIndex; - if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) { - temp_a0 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; - if (temp_a0 > 0x12C) { + if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || + (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { + yawTowardPlayerDiff = + Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; + if (yawTowardPlayerDiff > 0x12C) { this->actor.world.rot.y += 0x12C; - } else if (temp_a0 < -0x12C) { + } else if (yawTowardPlayerDiff < -0x12C) { this->actor.world.rot.y -= 0x12C; } else { - this->actor.world.rot.y += temp_a0; + this->actor.world.rot.y += yawTowardPlayerDiff; } this->actor.shape.rot.y = this->actor.world.rot.y; } if (SkelAnime_Update(&this->skin.skelAnime)) { - temp_fv0 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); - if (temp_fv0 > 1000.0f) { - func_808DEA54(this, 0); + distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); + if (distToPlayer > 1000.0f) { + EnHorseLinkChild_SetupWaitForPlayer(this, 0); return; } - if ((temp_fv0 < 1000.0f) && (temp_fv0 >= 300.0f)) { - phi_v0 = 4; + if ((distToPlayer < 1000.0f) && (distToPlayer >= 300.0f)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; - } else if ((temp_fv0 < 300.0f) && (temp_fv0 >= 150.0f)) { - phi_v0 = 3; + } else if ((distToPlayer < 300.0f) && (distToPlayer >= 150.0f)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; - } else if ((temp_fv0 < 150.0f) && (temp_fv0 >= 70.0f)) { - phi_v0 = 2; - this->unk_1E8 = 0; + } else if ((distToPlayer < 150.0f) && (distToPlayer >= 70.0f)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->footstepCounter = 0; this->actor.speed = 2.0f; } else { - func_808DEA54(this, 1); + EnHorseLinkChild_SetupWaitForPlayer(this, 1); return; } - if (phi_v0 != this->unk_148) { - this->unk_148 = phi_v0; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + if (nextAnimIndex != this->animIndex) { + this->animIndex = nextAnimIndex; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, 0.0f); } } } -void func_808DEFE8(EnHorseLinkChild* this) { - this->unk_144 = 3; - this->unk_148 = 0; +void EnHorseLinkChild_SetupLonLonIdle(EnHorseLinkChild* this) { + this->action = OOT_CHILD_EPONA_ACTION_LONLON_IDLE; + this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; this->actor.speed = 0.0f; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } void func_808DF088(EnHorseLinkChild* this, PlayState* play) { - if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) { + if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || + (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { Player* player = GET_PLAYER(play); - s16 sp32; - s32 phi_v0; + s16 newYawDiff; + s32 newYawDir; s32 pad; if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) < 250.0f) { - sp32 = player->actor.shape.rot.y; + newYawDiff = player->actor.shape.rot.y; if (Actor_WorldYawTowardActor(&this->actor, &player->actor) > 0) { - phi_v0 = 1; + newYawDir = 1; } else { - phi_v0 = -1; + newYawDir = -1; } - sp32 += (phi_v0 * 0x4000); + newYawDiff += (newYawDir * 0x4000); } else { - sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos) - this->actor.world.rot.y; + newYawDiff = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos) - this->actor.world.rot.y; } - if (sp32 > 0x12C) { + if (newYawDiff > 0x12C) { this->actor.world.rot.y += 0x12C; - } else if (sp32 < -0x12C) { + } else if (newYawDiff < -0x12C) { this->actor.world.rot.y += -0x12C; } else { - this->actor.world.rot.y += sp32; + this->actor.world.rot.y += newYawDiff; } this->actor.shape.rot.y = this->actor.world.rot.y; } } -void func_808DF194(EnHorseLinkChild* this, PlayState* play) { +/** + * Idle in one spot, waiting for player to finish getting Epona song. + * However, the flag was not migrated from OoT corectly, so it checks for the wrong flag. + */ +void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) { Player* player; - f32 sp50; - s32 sp4C; - s32 sp48; + f32 distToPlayer; + s32 isAnimFinished; + s32 nextAnimIndex; func_808DF088(this, play); player = GET_PLAYER(play); - sp50 = Actor_WorldDistXZToActor(&this->actor, &player->actor); - sp48 = this->unk_148; - sp4C = SkelAnime_Update(&this->skin.skelAnime); + distToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); + nextAnimIndex = this->animIndex; + isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); - if ((sp4C != 0) || (this->unk_148 == 1) || (this->unk_148 == 0)) { - // The carry-over of this flag from OoT was not done correctly + if ((isAnimFinished) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) || + (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE)) { + //! @bug: The carry-over of this flag from OoT was not done correctly if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) { - f32 sp44 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); + f32 distToHome = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); s32 pad; if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) > 250.0f) { - if (sp44 >= 300.0f) { - sp48 = 4; + if (distToHome >= 300.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; - } else if ((sp44 < 300.0f) && (sp44 >= 150.0f)) { - sp48 = 3; + } else if ((distToHome < 300.0f) && (distToHome >= 150.0f)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; - } else if ((sp44 < 150.0f) && (sp44 >= 70.0f)) { - sp48 = 2; - this->unk_1E8 = 0; + } else if ((distToHome < 150.0f) && (distToHome >= 70.0f)) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; - if (this->unk_148 == 0) { - sp48 = (sp4C == 1) ? 1 : 0; + if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { + nextAnimIndex = + (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - sp48 = (sp4C == 1) ? 0 : 1; + nextAnimIndex = + (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } - } else if (sp50 < 200.0f) { - sp48 = 4; + } else if (distToPlayer < 200.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; - } else if (sp50 < 300.0f) { - sp48 = 3; + } else if (distToPlayer < 300.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; - } else if (sp50 < 400.0f) { - sp48 = 2; - this->unk_1E8 = 0; + } else if (distToPlayer < 400.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; - if (this->unk_148 == 0) { - sp48 = (sp4C == 1) ? 1 : 0; + if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { + nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - sp48 = (sp4C == 1) ? 0 : 1; + nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } else { this->actor.speed = 0.0f; - if (this->unk_148 == 0) { - sp48 = (sp4C == 1) ? 1 : 0; + if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { + nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - sp48 = (sp4C == 1) ? 0 : 1; + nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } - if ((sp48 != this->unk_148) || (sp4C == 1)) { - this->unk_148 = sp48; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + if ((nextAnimIndex != this->animIndex) || (isAnimFinished == true)) { + this->animIndex = nextAnimIndex; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), - this->skin.skelAnime.curFrame, Animation_GetLastFrame(D_808DFEC0[this->unk_148]), + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + this->skin.skelAnime.curFrame, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, 0.0f); } } -void func_808DF560(EnHorseLinkChild* this) { - this->unk_144 = 5; +void EnHorseLinkChild_SetupActionFunc5(EnHorseLinkChild* this) { + this->action = OOT_CHILD_EPONA_ACTION_5; if (Rand_ZeroOne() > 0.5f) { - this->unk_148 = 0; + this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } else { - this->unk_148 = 1; + this->animIndex = OOT_CHILD_EPONA_ANIM_WHINNY; } gHorsePlayedEponasSong = false; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, 0.0f); } -void func_808DF620(EnHorseLinkChild* this, PlayState* play) { - s16 sp36; +void EnHorseLinkChild_ActionFunc5(EnHorseLinkChild* this, PlayState* play) { + s16 yawTowardsPlayer; if (gHorsePlayedEponasSong) { gHorsePlayedEponasSong = false; Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); - func_808DF788(this); + EnHorseLinkChild_SetupActionFunc4(this); return; } this->actor.speed = 0.0f; - sp36 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; + yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; - if ((Math_CosS(sp36) < 0.7071f) && (this->unk_148 == 2)) { + if ((Math_CosS(yawTowardsPlayer) < 0.7071f) && (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { Horse_RotateToPoint(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C); } if (SkelAnime_Update(&this->skin.skelAnime)) { - if (Math_CosS(sp36) < 0.0f) { - this->unk_148 = 2; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], D_808DFF18[this->unk_148], 0.0f, - Animation_GetLastFrame(D_808DFEC0[2]), ANIMMODE_ONCE, -5.0f); + if (Math_CosS(yawTowardsPlayer) < 0.0f) { + this->animIndex = OOT_CHILD_EPONA_ANIM_WALK; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], sAnimPlaySpeeds[this->animIndex], + 0.0f, Animation_GetLastFrame(sAnimations[OOT_CHILD_EPONA_ANIM_WALK]), ANIMMODE_ONCE, + -5.0f); } else { - func_808DF560(this); + EnHorseLinkChild_SetupActionFunc5(this); } } } -void func_808DF788(EnHorseLinkChild* this) { - this->unk_1DC = 0; - this->unk_144 = 4; - this->unk_148 = 2; - this->unk_1E0 = 0; +void EnHorseLinkChild_SetupActionFunc4(EnHorseLinkChild* this) { + this->timer = 0; + this->action = OOT_CHILD_EPONA_ACTION_4; + this->animIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->isReturningHome = false; this->actor.speed = 2.0f; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } -void func_808DF838(EnHorseLinkChild* this, PlayState* play) { +void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 phi_fv0; - s32 phi_v0; + f32 distToTargetPos; + s32 nextAnimIndex; - this->unk_1DC++; - if (this->unk_1DC > 300) { - this->unk_1E0 = 1; + this->timer++; + if (this->timer > 300) { + this->isReturningHome = true; } - if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) { - if (this->unk_1E0 == 0) { + if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || + (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { + if (!this->isReturningHome) { Horse_RotateToPoint(&this->actor, &player->actor.world.pos, 0x12C); } else { Horse_RotateToPoint(&this->actor, &this->actor.home.pos, 0x12C); @@ -480,46 +543,46 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) { } if (SkelAnime_Update(&this->skin.skelAnime)) { - if (this->unk_1E0 == 0) { - phi_fv0 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); + if (!this->isReturningHome) { + distToTargetPos = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); } else { - phi_fv0 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); + distToTargetPos = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); } - if (this->unk_1E0 == 0) { - if (phi_fv0 >= 300.0f) { - phi_v0 = 4; + if (!this->isReturningHome) { + if (distToTargetPos >= 300.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; - } else if (phi_fv0 >= 150.0f) { - phi_v0 = 3; + } else if (distToTargetPos >= 150.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else { - phi_v0 = 2; - this->unk_1E8 = 0; + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->footstepCounter = 0; this->actor.speed = 2.0f; } - } else if (phi_fv0 >= 300.0f) { - phi_v0 = 4; + } else if (distToTargetPos >= 300.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; - } else if (phi_fv0 >= 150.0f) { - phi_v0 = 3; + } else if (distToTargetPos >= 150.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; - } else if (phi_fv0 >= 70.0f) { - phi_v0 = 2; - this->unk_1E8 = 0; + } else if (distToTargetPos >= 70.0f) { + nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + this->footstepCounter = 0; this->actor.speed = 2.0f; } else { - func_808DF560(this); + EnHorseLinkChild_SetupActionFunc5(this); return; } - if (phi_v0 != this->unk_148) { - this->unk_148 = phi_v0; - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f); + if (nextAnimIndex != this->animIndex) { + this->animIndex = nextAnimIndex; + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { - Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, - Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); + Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), + 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, 0.0f); } } } @@ -528,7 +591,8 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play) { s32 pad; EnHorseLinkChild* this = THIS; - D_808DFF30[this->unk_144](this, play); + sActionFuncs[this->action](this, play); + Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 55.0f, 100.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | @@ -537,19 +601,19 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play) { this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 70.0f; - if ((Rand_ZeroOne() < 0.025f) && (this->unk_1E4 == 0)) { - this->unk_1E4++; - } else if (this->unk_1E4 > 0) { - this->unk_1E4++; - if (this->unk_1E4 >= 4) { - this->unk_1E4 = 0; + if ((Rand_ZeroOne() < 0.025f) && (this->eyeTexIndex == 0)) { + this->eyeTexIndex++; + } else if (this->eyeTexIndex > 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex >= 4) { + this->eyeTexIndex = 0; } } Collider_UpdateCylinder(&this->actor, &this->colldierCylinder); CollisionCheck_SetOC(play, &play->colChkCtx, &this->colldierCylinder.base); - func_808DE660(this); + EnHorseLinkChild_PlaySound(this); } void EnHorseLinkChild_PostSkinDraw(Actor* thisx, PlayState* play, Skin* skin) { @@ -581,9 +645,9 @@ s32 EnHorseLinkChild_OverrideSkinDraw(Actor* thisx, PlayState* play, s32 limbInd OPEN_DISPS(play->state.gfxCtx); if (limbIndex == OBJECT_HORSE_LINK_CHILD_LIMB_0D) { - u8 index = D_808DFF54[this->unk_1E4]; + u8 index = sEyeTextureIndexOverride[this->eyeTexIndex]; - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808DFF48[index])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[index])); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h index 62fac6a63..0d5e30165 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h @@ -6,17 +6,17 @@ struct EnHorseLinkChild; -typedef void (*EnHorseLinkChildUnkFunc)(struct EnHorseLinkChild*, PlayState*); +typedef void (*EnHorseLinkChildActionFunc)(struct EnHorseLinkChild*, PlayState*); typedef struct EnHorseLinkChild { /* 0x000 */ Actor actor; - /* 0x144 */ s32 unk_144; - /* 0x148 */ s32 unk_148; + /* 0x144 */ s32 action; // index to action func list + /* 0x148 */ s32 animIndex; /* 0x14C */ Skin skin; - /* 0x1DC */ s32 unk_1DC; - /* 0x1DC */ s32 unk_1E0; - /* 0x1E4 */ u8 unk_1E4; - /* 0x1E8 */ s32 unk_1E8; + /* 0x1DC */ s32 timer; + /* 0x1DC */ s32 isReturningHome; + /* 0x1E4 */ u8 eyeTexIndex; + /* 0x1E8 */ s32 footstepCounter; // two sfx per animation loop /* 0x1EC */ ColliderCylinder colldierCylinder; /* 0x238 */ ColliderJntSph colliderJntSph; /* 0x258 */ ColliderJntSphElement colliderJntSphElements[1]; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 3e8e246db..11286c882 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6473,24 +6473,24 @@ 0x808DD970:("func_808DD970",), 0x808DDE74:("func_808DDE74",), 0x808DDE9C:("func_808DDE9C",), - 0x808DE5C0:("func_808DE5C0",), - 0x808DE660:("func_808DE660",), - 0x808DE728:("func_808DE728",), + 0x808DE5C0:("EnHorseLinkChild_PlayWalkingSound",), + 0x808DE660:("EnHorseLinkChild_PlaySound",), + 0x808DE728:("EnHorseLinkChild_GetAnimSpeed",), 0x808DE7F0:("EnHorseLinkChild_Init",), 0x808DE958:("EnHorseLinkChild_Destroy",), - 0x808DE9A8:("func_808DE9A8",), - 0x808DEA0C:("func_808DEA0C",), - 0x808DEA54:("func_808DEA54",), - 0x808DEB14:("func_808DEB14",), - 0x808DECA0:("func_808DECA0",), - 0x808DED40:("func_808DED40",), - 0x808DEFE8:("func_808DEFE8",), + 0x808DE9A8:("EnHorseLinkChild_SetupActionFunc0",), + 0x808DEA0C:("EnHorseLinkChild_ActionFunc0",), + 0x808DEA54:("EnHorseLinkChild_SetupWaitForPlayer",), + 0x808DEB14:("EnHorseLinkChild_WaitForPlayer",), + 0x808DECA0:("EnHorseLinkChild_SetupGreetPlayer",), + 0x808DED40:("EnHorseLinkChild_GreetPlayer",), + 0x808DEFE8:("EnHorseLinkChild_SetupLonLonIdle",), 0x808DF088:("func_808DF088",), - 0x808DF194:("func_808DF194",), - 0x808DF560:("func_808DF560",), - 0x808DF620:("func_808DF620",), - 0x808DF788:("func_808DF788",), - 0x808DF838:("func_808DF838",), + 0x808DF194:("EnHorseLinkChild_LonLonIdle",), + 0x808DF560:("EnHorseLinkChild_SetupActionFunc5",), + 0x808DF620:("EnHorseLinkChild_ActionFunc5",), + 0x808DF788:("EnHorseLinkChild_SetupActionFunc4",), + 0x808DF838:("EnHorseLinkChild_ActionFunc4",), 0x808DFB14:("EnHorseLinkChild_Update",), 0x808DFC3C:("EnHorseLinkChild_PostSkinDraw",), 0x808DFDC8:("EnHorseLinkChild_OverrideSkinDraw",), From 312fcafe2db9379a01c1b7f1f3ea4cd783ca48fe Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 20 Aug 2023 01:50:55 -0700 Subject: [PATCH 070/121] Small General cleanup (#1360) * Draw things * EffectSsFhgFlash_SpawnShock enum * gohtIndex * colliders * ObjGhaka_Init * func_80B3C39C * undef syms --- src/code/z_rcp.c | 4 ++-- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 6 +++--- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 2 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Crow/z_en_crow.h | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.h | 2 +- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 11 ++++++----- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.h | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h | 2 +- src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 12 ++++++------ src/overlays/actors/ovl_player_actor/z_player.c | 3 ++- .../ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c | 6 +++--- undefined_syms.txt | 2 ++ 16 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 1e25aca8b..0830fa572 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1539,10 +1539,10 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(DEBUG_DISP++, gGfxMasterDL->setupBuffers); if (clearZb) { - gSPDisplayList(gfxCtx->polyOpa.p++, D_0E000000.clearZBuffer); + gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearZBuffer); } if (clearFb) { - gSPDisplayList(gfxCtx->polyOpa.p++, D_0E000000.clearFrameBuffer); + gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFrameBuffer); } CLOSE_DISPS(gfxCtx); 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 67dd857c0..a22bf3e46 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -152,17 +152,17 @@ void EnBom_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider1, &this->actor, &sCylinderInit); if (!this->isPowderKeg) { - Collider_SetJntSph(play, &this->collider2, &this->actor, &sJntSphInit1, &this->collider3); + Collider_SetJntSph(play, &this->collider2, &this->actor, &sJntSphInit1, this->collider2Elements); this->collider1.dim.radius = 6; this->collider1.dim.height = 11; } else { - Collider_SetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, &this->collider3); + Collider_SetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements); this->collider1.dim.radius = 20; this->collider1.dim.height = 36; func_80872648(play, &this->actor.world.pos); } - this->collider3.info.toucher.damage += ENBOM_GETZ_FF00(thisx); + this->collider2Elements[0].info.toucher.damage += ENBOM_GETZ_FF00(thisx); this->actor.shape.rot.z &= 0xFF; if (ENBOM_GETZ_80(&this->actor)) { this->actor.shape.rot.z |= 0xFF00; diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h index d11547230..7ca26d3cb 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -26,7 +26,7 @@ typedef struct EnBom { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider1; /* 0x190 */ ColliderJntSph collider2; - /* 0x1B0 */ ColliderJntSphElement collider3; + /* 0x1B0 */ ColliderJntSphElement collider2Elements[1]; /* 0x1F0 */ s16 timer; /* 0x1F2 */ s16 flashSpeedScale; /* 0x1F4 */ f32 unk_1F4; 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 1cd89043e..fcdd89d03 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -130,7 +130,7 @@ void EnCrow_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); SkelAnime_InitFlex(play, &this->skelAnime, &gGuaySkel, &gGuayFlyAnim, this->jointTable, this->morphTable, OBJECT_CROW_LIMB_MAX); - Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderItems); + Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius; CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f); diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.h b/src/overlays/actors/ovl_En_Crow/z_en_crow.h index d2ebc554a..fca2cc0b0 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.h +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.h @@ -32,7 +32,7 @@ typedef struct EnCrow { /* 0x194 */ Vec3s jointTable[OBJECT_CROW_LIMB_MAX]; /* 0x1CA */ Vec3s morphTable[OBJECT_CROW_LIMB_MAX]; /* 0x200 */ ColliderJntSph collider; - /* 0x220 */ ColliderJntSphElement colliderItems[1]; + /* 0x220 */ ColliderJntSphElement colliderElements[1]; /* 0x260 */ Vec3f bodyPartsPos[GUAY_BODYPART_MAX]; /* 0x290 */ f32 drawDmgEffAlpha; /* 0x294 */ f32 drawDmgEffFrozenSteamScale; 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 636ab6bdf..80fe5a8e1 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -266,7 +266,7 @@ void EnIk_Init(Actor* thisx, PlayState* play) { this->morphTable, IRON_KNUCKLE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->colliderCylinder); - Collider_InitAndSetTris(play, &this->colliderTris, &this->actor, &sTrisInit, this->shieldColliderItems); + Collider_InitAndSetTris(play, &this->colliderTris, &this->actor, &sTrisInit, this->shieldColliderElements); Collider_InitAndSetQuad(play, &this->colliderQuad, &this->actor, &sQuadInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTableArmor, &sColChkInfoInit); this->actor.params = IK_GET_ARMOR_TYPE(&this->actor); diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.h b/src/overlays/actors/ovl_En_Ik/z_en_ik.h index 0d1625144..a6d56bca6 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.h +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.h @@ -72,7 +72,7 @@ typedef struct EnIk { /* 0x03AC */ ColliderCylinder colliderCylinder; /* 0x03F8 */ ColliderQuad colliderQuad; /* 0x0478 */ ColliderTris colliderTris; - /* 0x0498 */ ColliderTrisElement shieldColliderItems[2]; + /* 0x0498 */ ColliderTrisElement shieldColliderElements[2]; /* 0x0550 */ IronKnuckleEffect effects[IRON_KNUCKLE_ARMOR_BODYPART_MAX]; } EnIk; // size = 0x668 diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index f0d84366c..e7ac95d3e 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -104,10 +104,11 @@ void EnNnh_Update(Actor* thisx, PlayState* play) { } void EnNnh_Draw(Actor* thisx, PlayState* play) { - GraphicsContext* gfxCtx = play->state.gfxCtx; - s32 pad; + OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Opa(gfxCtx); - gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfxCtx->polyOpa.p++, gButlerSonMainBodyDL); + Gfx_SetupDL25_Opa(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++, gButlerSonMainBodyDL); + + CLOSE_DISPS(play->state.gfxCtx); } 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 5359d5ece..e94bc851b 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -645,7 +645,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) { ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f); Collider_InitJntSph(play, &this->collider); - Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, &this->colliderElement); + Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements->dim.worldSphere.radius = sJntSphInit.elements->dim.modelSphere.radius; CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h index f34df8375..40eee8102 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h @@ -33,7 +33,7 @@ typedef struct EnRuppecrow { /* 0x24C */ Path* path; /* 0x250 */ s32 currentPoint; /* 0x254 */ ColliderJntSph collider; - /* 0x274 */ ColliderJntSphElement colliderElement; + /* 0x274 */ ColliderJntSphElement colliderElements[1]; /* 0x2B4 */ u16 isGoingCounterClockwise; /* 0x2B8 */ f32 speedModifier; /* 0x2BC */ s16 rupeeIndex; 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 946791a8b..be3d243e0 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -339,7 +339,7 @@ void ObjComb_Init(Actor* thisx, PlayState* play) { return; } - Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, &this->colliderElement); + Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); if ((sp2C == 0) && Item_CanDropBigFairy(play, OBJCOMB_GET_3F(&this->actor), OBJCOMB_GET_7F00(&this->actor))) { this->unk_1B7 = 1; diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h index 0ee61baaf..0b1873bb3 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h @@ -19,7 +19,7 @@ typedef struct ObjComb { /* 0x000 */ Actor actor; /* 0x144 */ ObjCombActionFunc actionFunc; /* 0x148 */ ColliderJntSph collider; - /* 0x168 */ ColliderJntSphElement colliderElement; + /* 0x168 */ ColliderJntSphElement colliderElements[1]; /* 0x1A8 */ s16 unk_1A8; /* 0x1AA */ s16 unk_1AA; /* 0x1AC */ s16 unk_1AC; 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 02d7f2973..09dbd8dab 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -70,12 +70,12 @@ void func_80B3C2C4(ObjGhaka* this, PlayState* play) { void func_80B3C39C(ObjGhaka* this, PlayState* play) { Player* player = GET_PLAYER(play); - s16 distDiff = this->dyna.actor.yawTowardsPlayer - this->dyna.actor.shape.rot.y; + s16 yaw = this->dyna.actor.yawTowardsPlayer - this->dyna.actor.shape.rot.y; if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { func_80B3C29C(this); - } else if (this->dyna.actor.xzDistToPlayer < 100.0f || this->dyna.actor.isTargeted) { - if (distDiff <= -0x5556 || distDiff >= 0x5556) { + } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) || this->dyna.actor.isTargeted) { + if ((yaw <= -0x5556) || (yaw >= 0x5556)) { Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play); if (player->transformation == PLAYER_FORM_GORON) { this->dyna.actor.textId = 0xCF3; @@ -85,8 +85,8 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) { } } - if (this->dyna.pushForce < 0.0f && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20) && - player->transformation == PLAYER_FORM_GORON) { + if ((this->dyna.pushForce < 0.0f) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20) && + (player->transformation == PLAYER_FORM_GORON)) { func_80B3C2B0(this); } else { player->stateFlags2 &= ~PLAYER_STATE2_10; @@ -158,7 +158,7 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) { 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); - if (this->dyna.actor.floorPoly == 0) { + if (this->dyna.actor.floorPoly == NULL) { Actor_Kill(&this->dyna.actor); } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 951d98538..89ba05a86 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -33,6 +33,7 @@ #include "overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h" #include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h" +#include "overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h" #include "overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -11315,7 +11316,7 @@ void func_808445C4(PlayState* play, Player* this) { pos.x = (Rand_CenteredFloat(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; pos.y = (Rand_CenteredFloat(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; pos.z = (Rand_CenteredFloat(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; - EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); + EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, FHGFLASH_SHOCK_PLAYER); Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index 4edc1e3b1..c8f5a74c7 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -97,12 +97,12 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { s32 pad; Vec3f* bodyPartPos; BossHakugin* goht = (BossHakugin*)this->actor; - s32 index = goht->unk_191 - 3; + s32 gohtIndex = goht->unk_191 - 3; - if (index < 0) { + if (gohtIndex < 0) { bodyPartPos = &goht->unk_2F00[this->rParams][12].unk_00; } else { - bodyPartPos = &goht->unk_2F00[this->rParams][index].unk_00; + bodyPartPos = &goht->unk_2F00[this->rParams][gohtIndex].unk_00; } this->pos.x = Rand_CenteredFloat(70.0f) + bodyPartPos->x; diff --git a/undefined_syms.txt b/undefined_syms.txt index 0234b8ba9..81f14ced8 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -640,6 +640,8 @@ D_0A000D40 = 0x0A000D40; D_0C000000 = 0x0C000000; +// segment 0x0D + // segment 0x0E D_0E000000 = 0x0E000000; From 80595371509567174f2da5bc61c89e51799fca32 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 21 Aug 2023 18:44:28 -0700 Subject: [PATCH 071/121] Game bss and cleanup (#1356) * Game bss and cleanup * Match Oot with rdp time variables * PR review * Namefixer --- include/functions.h | 7 -- include/variables.h | 6 +- include/z64game.h | 16 +-- include/z64speed_meter.h | 18 +++ spec | 1 - src/code/game.c | 108 +++++++++--------- src/code/graph.c | 10 +- src/code/sched.c | 2 +- src/code/speed_meter.c | 5 +- src/code/z_kaleido_setup.c | 2 +- src/code/z_play.c | 14 +-- src/code/z_prenmi.c | 2 +- .../gamestates/ovl_daytelop/z_daytelop.c | 2 +- .../ovl_file_choose/z_file_choose_NES.c | 2 +- .../gamestates/ovl_opening/z_opening.c | 2 +- src/overlays/gamestates/ovl_select/z_select.c | 2 +- src/overlays/gamestates/ovl_title/z_title.c | 2 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 10 +- tools/disasm/functions.txt | 18 +-- tools/disasm/variables.txt | 6 +- tools/namefixer.py | 2 + tools/sizes/code_functions.csv | 18 +-- 22 files changed, 135 insertions(+), 120 deletions(-) create mode 100644 include/z64speed_meter.h diff --git a/include/functions.h b/include/functions.h index 4664fee89..ff803000d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1457,13 +1457,6 @@ void Sched_SendGfxCancelMsg(SchedContext* sched); void Sched_FaultClient(void* param1, void* param2); void Sched_ThreadEntry(void* arg); void Sched_Init(SchedContext* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr); -// void func_80177390(void); -void func_801773A0(void* arg0); -void func_801773C4(void* arg0); -void SpeedMeter_DrawTimeEntries(void* displayList, GraphicsContext* gfxCtx); -// void func_80177A84(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9); -//void func_80177AC8(void); -void SpeedMeter_DrawAllocEntries(void* displayList, GraphicsContext* gfxCtx, GameState* gameState); void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY, f32 translateZ); void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); diff --git a/include/variables.h b/include/variables.h index e1fa8b491..8a46bdbf5 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2054,13 +2054,15 @@ extern u32 gAudioSPDataSize; extern volatile OSTime D_801FBAE0; extern volatile OSTime D_801FBAE8; -extern volatile OSTime D_801FBAF0; +extern volatile OSTime gRDPTimeTotal; extern volatile OSTime lastRenderFrameDuration; extern volatile OSTime gRSPAudioTotalTime; extern volatile OSTime sRSPGFXTotalTime; extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; -extern volatile OSTime gRDPTotalTime; + +// Accumulator for `gRDPTimeTotal` +extern volatile OSTime gRDPTimeAcc; // extern UNK_TYPE1 D_801FBB28; extern Vec3f D_801FBBF0; diff --git a/include/z64game.h b/include/z64game.h index 87dffe5c3..a0c57853a 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -71,16 +71,16 @@ typedef struct GameState { } GameState; // size = 0xA4 -void Game_UpdateFramerateVariables(s32 divisor); -void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); -void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); -void Game_Nop80173534(GameState* gameState); +void GameState_UpdateFramerateDivisors(s32 divisor); +void GameState_SetFramerateDivisor(GameState* gameState, s32 divisor); +void GameState_SetFBFilter(Gfx** gfxP, void* zbuffer); +void GameState_Noop(GameState* gameState); void GameState_Draw(GameState* gameState, struct GraphicsContext* gfxCtx); void GameState_SetFrameBuffer(struct GraphicsContext* gfxCtx); -void func_801736DC(struct GraphicsContext* gfxCtx); -void Game_UpdateInput(GameState* gameState); -void Game_Update(GameState* gameState); -void Game_IncrementFrameCount(GameState* gameState); +void GameState_DrawEnd(struct GraphicsContext* gfxCtx); +void GameState_GetInput(GameState* gameState); +void GameState_Update(GameState* gameState); +void GameState_IncrementFrameCount(GameState* gameState); void GameState_InitArena(GameState* gameState, size_t size); void GameState_Realloc(GameState* gameState, size_t size); void GameState_Init(GameState* gameState, GameStateFunc init, struct GraphicsContext* gfxCtx); diff --git a/include/z64speed_meter.h b/include/z64speed_meter.h new file mode 100644 index 000000000..fbd815248 --- /dev/null +++ b/include/z64speed_meter.h @@ -0,0 +1,18 @@ +#ifndef Z64SPEED_METER_H +#define Z64SPEED_METER_H + +#include "PR/ultratypes.h" + +struct GameState; +struct GraphicsContext; + +typedef struct SpeedMeter { + /* 0x00 */ char unk_00[0x20]; +} SpeedMeter; // size = 0x20 + +void SpeedMeter_Init(SpeedMeter* this); +void SpeedMeter_Destroy(SpeedMeter* this); +void SpeedMeter_DrawTimeEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx); +void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* gameState); + +#endif diff --git a/spec b/spec index 17b041fe1..6c8311802 100644 --- a/spec +++ b/spec @@ -555,7 +555,6 @@ beginseg include "build/src/code/audio_thread_manager.o" include "build/src/code/title_setup.o" include "build/src/code/game.o" - include "build/data/code/game.bss.o" include "build/src/code/gamealloc.o" include "build/src/code/graph.o" include "build/src/code/graphalloc.o" diff --git a/src/code/game.c b/src/code/game.c index 0884de444..dc1e1b93e 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -5,38 +5,39 @@ #include "system_malloc.h" #include "z64debug_text.h" #include "z64rumble.h" +#include "z64speed_meter.h" #include "z64vimode.h" #include "z64viscvg.h" #include "z64vismono.h" #include "z64viszbuf.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -extern UNK_TYPE1 D_801F7FF0; -extern VisCvg sGameVisCvg; -extern VisZbuf sGameVisZbuf; -extern VisMono sGameVisMono; -extern ViMode sGameViMode; - s32 gFramerateDivisor = 1; f32 gFramerateDivisorF = 1.0f; f32 gFramerateDivisorHalf = 1.0f / 2.0f; f32 gFramerateDivisorThird = 1.0f / 3.0f; -void Game_UpdateFramerateVariables(s32 divisor) { +SpeedMeter sGameSpeedMeter; +VisCvg sGameVisCvg; +VisZbuf sGameVisZbuf; +VisMono sGameVisMono; +ViMode sGameViMode; + +void GameState_UpdateFramerateDivisors(s32 divisor) { gFramerateDivisor = divisor; gFramerateDivisorF = divisor; gFramerateDivisorHalf = divisor / 2.0f; gFramerateDivisorThird = divisor / 3.0f; } -void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) { - R_UPDATE_RATE = (s16)divisor; +void GameState_SetFramerateDivisor(GameState* gameState, s32 divisor) { + R_UPDATE_RATE = divisor; gameState->framerateDivisor = divisor; - Game_UpdateFramerateVariables(divisor); + GameState_UpdateFramerateDivisors(divisor); } -void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { - Gfx* dlist = *gfx; +void GameState_SetFBFilter(Gfx** gfxP, void* zbuffer) { + Gfx* gfx = *gfxP; if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) { sGameVisCvg.type = R_FB_FILTER_TYPE; @@ -44,7 +45,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { sGameVisCvg.color.g = R_FB_FILTER_PRIM_COLOR(1); sGameVisCvg.color.b = R_FB_FILTER_PRIM_COLOR(2); sGameVisCvg.color.a = R_FB_FILTER_A; - VisCvg_Draw(&sGameVisCvg, &dlist); + VisCvg_Draw(&sGameVisCvg, &gfx); } else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { sGameVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); sGameVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); @@ -55,7 +56,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { sGameVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1); sGameVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2); sGameVisZbuf.envColor.a = R_FB_FILTER_A; - VisZbuf_Draw(&sGameVisZbuf, &dlist, zbuffer); + VisZbuf_Draw(&sGameVisZbuf, &gfx, zbuffer); } else if (R_FB_FILTER_TYPE == 7) { sGameVisMono.unk_00 = 0; sGameVisMono.primColor.r = R_FB_FILTER_PRIM_COLOR(0); @@ -66,43 +67,43 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { sGameVisMono.envColor.g = R_FB_FILTER_ENV_COLOR(1); sGameVisMono.envColor.b = R_FB_FILTER_ENV_COLOR(2); sGameVisMono.envColor.a = R_FB_FILTER_A; - VisMono_Draw(&sGameVisMono, &dlist); + VisMono_Draw(&sGameVisMono, &gfx); } - *gfx = dlist; + *gfxP = gfx; } -void Game_Nop80173534(GameState* gameState) { +void GameState_Noop(GameState* gameState) { } void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { - Gfx* nextDisplayList; - Gfx* polyOpa; + Gfx* gfx; + Gfx* gfxHead; OPEN_DISPS(gfxCtx); - nextDisplayList = Graph_GfxPlusOne(polyOpa = POLY_OPA_DISP); - gSPDisplayList(OVERLAY_DISP++, nextDisplayList); + gfx = Graph_GfxPlusOne(gfxHead = POLY_OPA_DISP); + gSPDisplayList(OVERLAY_DISP++, gfx); - if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) { - GameState_SetFBFilter(&nextDisplayList, gfxCtx->zbuffer); + if ((R_FB_FILTER_TYPE != 0) && (R_FB_FILTER_ENV_COLOR(3) == 0)) { + GameState_SetFBFilter(&gfx, gfxCtx->zbuffer); } if (R_ENABLE_ARENA_DBG < 0) { R_ENABLE_ARENA_DBG = 0; } - gSPEndDisplayList(nextDisplayList++); - Graph_BranchDlist(polyOpa, nextDisplayList); - POLY_OPA_DISP = nextDisplayList; + gSPEndDisplayList(gfx++); + Graph_BranchDlist(gfxHead, gfx); + POLY_OPA_DISP = gfx; CLOSE_DISPS(gfxCtx); Debug_DrawText(gfxCtx); if (R_ENABLE_ARENA_DBG != 0) { - SpeedMeter_DrawTimeEntries(&D_801F7FF0, gfxCtx); - SpeedMeter_DrawAllocEntries(&D_801F7FF0, gfxCtx, gameState); + SpeedMeter_DrawTimeEntries(&sGameSpeedMeter, gfxCtx); + SpeedMeter_DrawAllocEntries(&sGameSpeedMeter, gfxCtx, gameState); } } @@ -119,27 +120,27 @@ void GameState_SetFrameBuffer(GraphicsContext* gfxCtx) { CLOSE_DISPS(gfxCtx); } -void func_801736DC(GraphicsContext* gfxCtx) { - Gfx* nextDisplayList; - Gfx* polyOpa; +void GameState_DrawEnd(GraphicsContext* gfxCtx) { + Gfx* gfx; + Gfx* gfxHead; OPEN_DISPS(gfxCtx); - nextDisplayList = Graph_GfxPlusOne(polyOpa = gfxCtx->polyOpa.p); - gSPDisplayList(OVERLAY_DISP++, nextDisplayList); - gSPEndDisplayList(nextDisplayList++); - Graph_BranchDlist(polyOpa, nextDisplayList); + gfx = Graph_GfxPlusOne(gfxHead = POLY_OPA_DISP); + gSPDisplayList(OVERLAY_DISP++, gfx); + gSPEndDisplayList(gfx++); + Graph_BranchDlist(gfxHead, gfx); - POLY_OPA_DISP = nextDisplayList; + POLY_OPA_DISP = gfx; CLOSE_DISPS(gfxCtx); } -void Game_UpdateInput(GameState* gameState) { +void GameState_GetInput(GameState* gameState) { PadMgr_GetInput(gameState->input, true); } -void Game_Update(GameState* gameState) { +void GameState_Update(GameState* gameState) { GraphicsContext* gfxCtx = gameState->gfxCtx; GameState_SetFrameBuffer(gameState->gfxCtx); @@ -148,12 +149,12 @@ void Game_Update(GameState* gameState) { if (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_PROCESS) { GameState_Draw(gameState, gfxCtx); - func_801736DC(gfxCtx); + GameState_DrawEnd(gfxCtx); } } -void Game_IncrementFrameCount(GameState* gameState) { - Game_Nop80173534(gameState); +void GameState_IncrementFrameCount(GameState* gameState) { + GameState_Noop(gameState); gameState->frames++; } @@ -171,27 +172,26 @@ void GameState_InitArena(GameState* gameState, size_t size) { } void GameState_Realloc(GameState* gameState, size_t size) { - GameAlloc* alloc; + GameAlloc* alloc = &gameState->alloc; void* gameArena; size_t systemMaxFree; size_t bytesFree; size_t bytesAllocated; - void* heapStart; + void* heapStart = gameState->heap.start; - heapStart = gameState->heap.start; - alloc = &gameState->alloc; THA_Destroy(&gameState->heap); GameAlloc_Free(alloc, heapStart); SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated); - size = ((systemMaxFree - (sizeof(ArenaNode))) < size) ? (0) : (size); + size = ((systemMaxFree - sizeof(ArenaNode)) < size) ? 0 : size; if (size == 0) { - size = systemMaxFree - (sizeof(ArenaNode)); + size = systemMaxFree - sizeof(ArenaNode); } - if ((gameArena = GameAlloc_Malloc(alloc, size)) != NULL) { + gameArena = GameAlloc_Malloc(alloc, size); + if (gameArena != NULL) { THA_Init(&gameState->heap, gameArena, size); } else { - THA_Init(&gameState->heap, 0, 0); + THA_Init(&gameState->heap, NULL, 0); __assert("../game.c", 1074); } } @@ -201,7 +201,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g gameState->frames = 0; gameState->main = NULL; gameState->destroy = NULL; - gameState->running = 1; + gameState->running = true; gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; @@ -216,7 +216,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g } GameState_InitArena(gameState, 0x100000); - Game_SetFramerateDivisor(gameState, 3); + GameState_SetFramerateDivisor(gameState, 3); init(gameState); @@ -224,7 +224,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g VisZbuf_Init(&sGameVisZbuf); VisMono_Init(&sGameVisMono); ViMode_Init(&sGameViMode); - func_801773A0(&D_801F7FF0); + SpeedMeter_Init(&sGameSpeedMeter); Rumble_Init(); osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK); @@ -240,7 +240,7 @@ void GameState_Destroy(GameState* gameState) { } Rumble_Destroy(); - func_801773C4(&D_801F7FF0); + SpeedMeter_Destroy(&sGameSpeedMeter); VisCvg_Destroy(&sGameVisCvg); VisZbuf_Destroy(&sGameVisZbuf); VisMono_Destroy(&sGameVisMono); @@ -266,7 +266,7 @@ s32 GameState_GetArenaSize(GameState* gameState) { } s32 func_80173B48(GameState* gameState) { - s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(D_801FBAF0); + s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal); return result; } diff --git a/src/code/graph.c b/src/code/graph.c index fe1542f66..bce162406 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -228,8 +228,8 @@ retry: } void Graph_UpdateGame(GameState* gameState) { - Game_UpdateInput(gameState); - Game_IncrementFrameCount(gameState); + GameState_GetInput(gameState); + GameState_IncrementFrameCount(gameState); if (SREG(20) < 3) { Audio_Update(); } @@ -245,7 +245,7 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { gameState->unk_A3 = 0; Graph_SetNextGfxPool(gfxCtx); - Game_Update(gameState); + GameState_Update(gameState); OPEN_DISPS(gfxCtx); @@ -312,10 +312,10 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { D_801FBAE8 = sRSPGFXTotalTime; D_801FBAE0 = gRSPAudioTotalTime; - D_801FBAF0 = gRDPTotalTime; + gRDPTimeTotal = gRDPTimeAcc; sRSPGFXTotalTime = 0; gRSPAudioTotalTime = 0; - gRDPTotalTime = 0; + gRDPTimeAcc = 0; if (sGraphTaskStartTime != 0) { lastRenderFrameDuration = time - sGraphTaskStartTime; diff --git a/src/code/sched.c b/src/code/sched.c index 19e6a6bc9..f8dc2a35d 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -481,7 +481,7 @@ void Sched_HandleRDPDone(SchedContext* sched) { } // Log run time - gRDPTotalTime = osGetTime() - sRDPStartTime; + gRDPTimeAcc = osGetTime() - sRDPStartTime; // Mark task done curRDP = sched->curRDPTask; diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c index 780a02c62..1e6f1f886 100644 --- a/src/code/speed_meter.c +++ b/src/code/speed_meter.c @@ -1,12 +1,13 @@ #include "global.h" +#include "z64speed_meter.h" #include "z64view.h" #include "system_malloc.h" #pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177390.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801773A0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801773C4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s") #pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s") diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 91c0b4a7c..a08f2b56b 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -110,7 +110,7 @@ void KaleidoSetup_Update(PlayState* play) { } if (pauseCtx->state == PAUSE_STATE_OPENING_0) { - Game_SetFramerateDivisor(&play->state, 2); + GameState_SetFramerateDivisor(&play->state, 2); if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) { ShrinkWindow_Letterbox_SetSizeTarget(0); } diff --git a/src/code/z_play.c b/src/code/z_play.c index 1d5617850..ccbf1f0c4 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -728,7 +728,7 @@ void Play_UpdateTransition(PlayState* this) { if (gTransitionTileState == TRANS_TILE_READY) { TransitionTile_Destroy(&sTransitionTile); gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); } } this->transitionTrigger = TRANS_TRIGGER_OFF; @@ -775,7 +775,7 @@ void Play_UpdateTransition(PlayState* this) { if (sTransitionFillTimer >= 20) { gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; this->envCtx.fillScreen = false; @@ -809,7 +809,7 @@ void Play_UpdateTransition(PlayState* this) { this->transitionMode = TRANS_MODE_OFF; } else { gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; } @@ -838,7 +838,7 @@ void Play_UpdateTransition(PlayState* this) { if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA < 110) { gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; } @@ -874,7 +874,7 @@ void Play_UpdateTransition(PlayState* this) { if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA <= 0) { gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; } @@ -897,7 +897,7 @@ void Play_UpdateTransition(PlayState* this) { if (gSaveContext.cutsceneTransitionControl <= 100) { gTransitionTileState = TRANS_TILE_OFF; - Game_SetFramerateDivisor(&this->state, 3); + GameState_SetFramerateDivisor(&this->state, 3); this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; } @@ -945,7 +945,7 @@ void Play_UpdateMain(PlayState* this) { } else { sTransitionTile.zBuffer = gZBufferPtr; gTransitionTileState = TRANS_TILE_READY; - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); } break; diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index 51f2d77f7..e1282db6b 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -50,5 +50,5 @@ void PreNMI_Init(GameState* thisx) { this->timer = 30; this->unk_A8 = 10; - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); } diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index cd44664c9..1b68e0b14 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -226,7 +226,7 @@ void DayTelop_LoadGraphics(DayTelopState* this) { void DayTelop_Init(GameState* thisx) { DayTelopState* this = (DayTelopState*)thisx; - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); Matrix_Init(&this->state); ShrinkWindow_Destroy(); View_Init(&this->view, this->state.gfxCtx); diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index f869c88a4..4d3e172d9 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2521,7 +2521,7 @@ void FileSelect_Init(GameState* thisx) { FileSelectState* this = (FileSelectState*)thisx; size_t size; - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); Matrix_Init(&this->state); ShrinkWindow_Init(); View_Init(&this->view, this->state.gfxCtx); diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index 84425cc73..f2b74cdc7 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -52,7 +52,7 @@ void TitleSetup_Destroy(GameState* thisx) { void TitleSetup_Init(GameState* thisx) { TitleSetupState* this = (TitleSetupState*)thisx; - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); Matrix_Init(&this->state); ShrinkWindow_Init(); View_Init(&this->view, this->state.gfxCtx); diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 71524496e..06775bf6e 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -1084,7 +1084,7 @@ void MapSelect_Init(GameState* thisx) { this->pageDownIndex = dREG(82); } - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); gSaveContext.save.cutsceneIndex = 0; gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; gSaveContext.save.linkAge = 0; diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index abde294e5..21f034e12 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -156,7 +156,7 @@ void ConsoleLogo_Init(GameState* thisx) { this->staticSegment = THA_AllocTailAlign16(&this->state.heap, segmentSize); DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(nintendo_rogo_static), segmentSize); - Game_SetFramerateDivisor(&this->state, 1); + GameState_SetFramerateDivisor(&this->state, 1); Matrix_Init(&this->state); ShrinkWindow_Init(); View_Init(&this->view, this->state.gfxCtx); 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 e864a27d7..04567cf9d 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 @@ -3157,7 +3157,7 @@ void KaleidoScope_Update(PlayState* play) { if (interfaceCtx->screenFillAlpha >= 255) { interfaceCtx->screenFillAlpha = 255; pauseCtx->state = PAUSE_STATE_OFF; - Game_SetFramerateDivisor(&play->state, 3); + GameState_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); @@ -3314,7 +3314,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->promptChoice = PAUSE_PROMPT_YES; Audio_PlaySfx(NA_SE_SY_DECIDE); pauseCtx->state = PAUSE_STATE_OFF; - Game_SetFramerateDivisor(&play->state, 3); + GameState_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); @@ -3347,7 +3347,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_GAMEOVER_7: if (sramCtx->status == 0) { pauseCtx->state = PAUSE_STATE_OFF; - Game_SetFramerateDivisor(&play->state, 3); + GameState_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); @@ -3387,7 +3387,7 @@ void KaleidoScope_Update(PlayState* play) { interfaceCtx->screenFillAlpha = 255; pauseCtx->state = PAUSE_STATE_OFF; - Game_SetFramerateDivisor(&play->state, 3); + GameState_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); @@ -3580,7 +3580,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_UNPAUSE_CLOSE: pauseCtx->state = PAUSE_STATE_OFF; - Game_SetFramerateDivisor(&play->state, 3); + GameState_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; Object_LoadAll(&play->objectCtx); BgCheck_InitCollisionHeaders(&play->colCtx, play); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 11286c882..686ce3002 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3120,16 +3120,16 @@ 0x801732DC:("Setup_InitImpl",), 0x8017332C:("Setup_Destroy",), 0x80173338:("Setup_Init",), - 0x80173360:("Game_UpdateFramerateVariables",), - 0x801733A8:("Game_SetFramerateDivisor",), + 0x80173360:("GameState_UpdateFramerateDivisors",), + 0x801733A8:("GameState_SetFramerateDivisor",), 0x801733DC:("GameState_SetFBFilter",), - 0x80173534:("Game_Nop80173534",), + 0x80173534:("GameState_Noop",), 0x80173540:("GameState_Draw",), 0x80173644:("GameState_SetFrameBuffer",), - 0x801736DC:("func_801736DC",), - 0x80173754:("Game_UpdateInput",), - 0x8017377C:("Game_Update",), - 0x801737E4:("Game_IncrementFrameCount",), + 0x801736DC:("GameState_DrawEnd",), + 0x80173754:("GameState_GetInput",), + 0x8017377C:("GameState_Update",), + 0x801737E4:("GameState_IncrementFrameCount",), 0x80173810:("GameState_InitArena",), 0x80173880:("GameState_Realloc",), 0x80173950:("GameState_Init",), @@ -3216,8 +3216,8 @@ 0x8017715C:("Sched_ThreadEntry",), 0x801772A0:("Sched_Init",), 0x80177390:("func_80177390",), - 0x801773A0:("func_801773A0",), - 0x801773C4:("func_801773C4",), + 0x801773A0:("SpeedMeter_Init",), + 0x801773C4:("SpeedMeter_Destroy",), 0x801773D0:("SpeedMeter_DrawTimeEntries",), 0x80177A84:("func_80177A84",), 0x80177AC8:("func_80177AC8",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 9e122fed2..8a0c74f95 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4025,7 +4025,7 @@ 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c), 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), - 0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x20), + 0x801F7FF0:("sGameSpeedMeter","SpeedMeter","", 0x20), 0x801F8010:("sGameVisCvg","VisCvg","",0x10), 0x801F8020:("sGameVisZbuf","VisZbuf","",0x10), 0x801F8030:("sGameVisMono","VisMono","",0x18), @@ -4062,7 +4062,7 @@ 0x801FBAD4:("gAudioSPDataSize","u32","",0x4), 0x801FBAE0:("D_801FBAE0","UNK_TYPE1","",0x1), 0x801FBAE8:("D_801FBAE8","UNK_TYPE1","",0x1), - 0x801FBAF0:("D_801FBAF0","volatile OSTime","",0x8), + 0x801FBAF0:("gRDPTimeTotal","volatile OSTime","",0x8), 0x801FBAF8:("lastRenderFrameDuration","volatile OSTime","",0x8), 0x801FBB00:("gRSPAudioTotalTime","UNK_TYPE1","",0x1), 0x801FBB04:("D_801FBB04","UNK_TYPE1","",0x1), @@ -4070,7 +4070,7 @@ 0x801FBB0C:("D_801FBB0C","UNK_TYPE1","",0x1), 0x801FBB10:("sRSPOtherTotalTime","UNK_TYPE1","",0x1), 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), - 0x801FBB20:("gRDPTotalTime","UNK_TYPE1","",0x1), + 0x801FBB20:("gRDPTimeAcc","UNK_TYPE1","",0x1), 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), diff --git a/tools/namefixer.py b/tools/namefixer.py index 86095aa6e..e4343cf31 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -894,6 +894,8 @@ wordReplace = { "func_8012CA0C": "Gfx_SetupDL56_Ptr", "func_8012CA38": "Gfx_SetupDL59_Opa", + "Game_SetFramerateDivisor": "GameState_SetFramerateDivisor", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 5e2e9ce14..b7da3ff1c 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2634,16 +2634,16 @@ asm/non_matchings/code/title_setup/Setup_SetRegs.s,Setup_SetRegs,0x80173130,0x6B asm/non_matchings/code/title_setup/Setup_InitImpl.s,Setup_InitImpl,0x801732DC,0x14 asm/non_matchings/code/title_setup/Setup_Destroy.s,Setup_Destroy,0x8017332C,0x3 asm/non_matchings/code/title_setup/Setup_Init.s,Setup_Init,0x80173338,0xA -asm/non_matchings/code/game/Game_UpdateFramerateVariables.s,Game_UpdateFramerateVariables,0x80173360,0x12 -asm/non_matchings/code/game/Game_SetFramerateDivisor.s,Game_SetFramerateDivisor,0x801733A8,0xD +asm/non_matchings/code/game/GameState_UpdateFramerateDivisors.s,GameState_UpdateFramerateDivisors,0x80173360,0x12 +asm/non_matchings/code/game/GameState_SetFramerateDivisor.s,GameState_SetFramerateDivisor,0x801733A8,0xD asm/non_matchings/code/game/GameState_SetFBFilter.s,GameState_SetFBFilter,0x801733DC,0x56 -asm/non_matchings/code/game/Game_Nop80173534.s,Game_Nop80173534,0x80173534,0x3 +asm/non_matchings/code/game/GameState_Noop.s,GameState_Noop,0x80173534,0x3 asm/non_matchings/code/game/GameState_Draw.s,GameState_Draw,0x80173540,0x41 asm/non_matchings/code/game/Game_ResetSegments.s,Game_ResetSegments,0x80173644,0x26 -asm/non_matchings/code/game/func_801736DC.s,func_801736DC,0x801736DC,0x1E -asm/non_matchings/code/game/Game_UpdateInput.s,Game_UpdateInput,0x80173754,0xA -asm/non_matchings/code/game/Game_Update.s,Game_Update,0x8017377C,0x1A -asm/non_matchings/code/game/Game_IncrementFrameCount.s,Game_IncrementFrameCount,0x801737E4,0xB +asm/non_matchings/code/game/GameState_DrawEnd.s,GameState_DrawEnd,0x801736DC,0x1E +asm/non_matchings/code/game/GameState_GetInput.s,GameState_GetInput,0x80173754,0xA +asm/non_matchings/code/game/GameState_Update.s,GameState_Update,0x8017377C,0x1A +asm/non_matchings/code/game/GameState_IncrementFrameCount.s,GameState_IncrementFrameCount,0x801737E4,0xB asm/non_matchings/code/game/Game_InitHeap.s,Game_InitHeap,0x80173810,0x1C asm/non_matchings/code/game/Game_ResizeHeap.s,Game_ResizeHeap,0x80173880,0x34 asm/non_matchings/code/game/GameState_Init.s,GameState_Init,0x80173950,0x40 @@ -2730,8 +2730,8 @@ asm/non_matchings/code/sched/Sched_FaultClient.s,Sched_FaultClient,0x80177084,0x asm/non_matchings/code/sched/Sched_ThreadEntry.s,Sched_ThreadEntry,0x8017715C,0x51 asm/non_matchings/code/sched/Sched_Init.s,Sched_Init,0x801772A0,0x3C asm/non_matchings/code/speed_meter/func_80177390.s,func_80177390,0x80177390,0x4 -asm/non_matchings/code/speed_meter/func_801773A0.s,func_801773A0,0x801773A0,0x9 -asm/non_matchings/code/speed_meter/func_801773C4.s,func_801773C4,0x801773C4,0x3 +asm/non_matchings/code/speed_meter/SpeedMeter_Init.s,SpeedMeter_Init,0x801773A0,0x9 +asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s,SpeedMeter_Destroy,0x801773C4,0x3 asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s,SpeedMeter_DrawTimeEntries,0x801773D0,0x1AD asm/non_matchings/code/speed_meter/func_80177A84.s,func_80177A84,0x80177A84,0x11 asm/non_matchings/code/speed_meter/func_80177AC8.s,func_80177AC8,0x80177AC8,0xE4 From 108b482ad081a2ee2cccd1ddc47fed0f7e66f332 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 21 Aug 2023 23:09:19 -0300 Subject: [PATCH 072/121] document remaining door assets (#1351) * initial commit of remaining door asset documentation * format * forgor the g removed comments * space in metal door desc Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * space in spider door dsc Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_dor01.xml | 7 ++++--- assets/xml/objects/object_kinsta2_obj.xml | 5 +++-- assets/xml/objects/object_wdor01.xml | 7 ++++--- assets/xml/objects/object_wdor02.xml | 7 ++++--- assets/xml/objects/object_wdor03.xml | 7 ++++--- src/overlays/actors/ovl_En_Door/z_en_door.c | 12 ++++++------ 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/assets/xml/objects/object_dor01.xml b/assets/xml/objects/object_dor01.xml index 9708d97c6..727949d60 100644 --- a/assets/xml/objects/object_dor01.xml +++ b/assets/xml/objects/object_dor01.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/assets/xml/objects/object_kinsta2_obj.xml b/assets/xml/objects/object_kinsta2_obj.xml index f27778b1a..85e829c66 100644 --- a/assets/xml/objects/object_kinsta2_obj.xml +++ b/assets/xml/objects/object_kinsta2_obj.xml @@ -1,6 +1,7 @@  + - - + + diff --git a/assets/xml/objects/object_wdor01.xml b/assets/xml/objects/object_wdor01.xml index ffc3327bb..b18158a14 100644 --- a/assets/xml/objects/object_wdor01.xml +++ b/assets/xml/objects/object_wdor01.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/assets/xml/objects/object_wdor02.xml b/assets/xml/objects/object_wdor02.xml index 9cb35ddb8..f192bf8f5 100644 --- a/assets/xml/objects/object_wdor02.xml +++ b/assets/xml/objects/object_wdor02.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/assets/xml/objects/object_wdor03.xml b/assets/xml/objects/object_wdor03.xml index c23f87037..545a68242 100644 --- a/assets/xml/objects/object_wdor03.xml +++ b/assets/xml/objects/object_wdor03.xml @@ -1,7 +1,8 @@  + - - - + + + 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 1450eb8bb..7fa39da26 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -5,7 +5,7 @@ */ #include "z_en_door.h" -#include "objects/object_mkk/object_mkk.h" +#include "objects/object_kinsta2_obj/object_kinsta2_obj.h" #include "objects/object_dor01/object_dor01.h" #include "objects/object_dor02/object_dor02.h" #include "objects/object_dor03/object_dor03.h" @@ -400,17 +400,17 @@ static u8 sAnimCloseFrames[2 * PLAYER_FORM_MAX] = { static Gfx* D_808679A4[14][2] = { { gDoorLeftDL, gDoorRightDL }, { gWoodfallDoorDL, gWoodfallDoorDL }, - { object_dor01_DL_000448, object_dor01_DL_000448 }, + { gObservatoryLabDoorDL, gObservatoryLabDoorDL }, { gZoraHallDoorDL, gZoraHallDoorDL }, { gSwampDoorDL, gSwampDoorDL }, { gMagicHagPotionShopDoorDL, gMagicHagPotionShopDoorDL }, - { object_wdor01_DL_000548, object_wdor01_DL_000548 }, // Lottery Shop / Curiosity Shop / Mayor's House Door - { object_wdor02_DL_000548, object_wdor02_DL_000548 }, // Trading Post / Post Office Door - { object_wdor03_DL_000548, object_wdor03_DL_000548 }, // Stockpot Inn & Swordsman's School Door + { gLotteryCuriosityShopMayorHouseDoorDL, gLotteryCuriosityShopMayorHouseDoorDL }, + { gPostOfficeTradingPostDoorDL, gPostOfficeTradingPostDoorDL }, + { gInnSchoolDoorDL, gInnSchoolDoorDL }, { gMilkBarDoorDL, gMilkBarDoorDL }, { gMusicBoxHouseDoorDL, gMusicBoxHouseDoorDL }, { gPiratesFortressDoorDL, gPiratesFortressDoorDL }, - { gWhiteBoeEyesDL, gWhiteBoeEyesDL }, + { gOceansideSpiderHouseDoorDL, gOceansideSpiderHouseDoorDL }, { gFieldWoodDoorLeftDL, gFieldWoodDoorRightDL }, }; From cbf9d98dba61924625629061f7680e3508fc2701 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 23 Aug 2023 10:48:14 -0700 Subject: [PATCH 073/121] ASM_PROC_FORCE (#1362) --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index 252413511..d8878ac4b 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,8 @@ FULL_DISASM ?= 0 RUN_CC_CHECK ?= 1 # Dump build object files OBJDUMP_BUILD ?= 0 +# Force asm processor to run on every file +ASM_PROC_FORCE ?= 0 # Number of threads to disassmble, extract, and compress with N_THREADS ?= $(shell nproc) @@ -92,6 +94,10 @@ ASM_PROC := python3 tools/asm-processor/build.py ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=global-with-filename +ifneq ($(ASM_PROC_FORCE), 0) + ASM_PROC_FLAGS += --force +endif + IINC := -Iinclude -Isrc -Iassets -Ibuild -I. ifeq ($(KEEP_MDEBUG),0) From 9cceea48f31bdeea1c2933a1f64a74b60b80f17a Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 2 Sep 2023 15:16:45 -0400 Subject: [PATCH 074/121] Documentation pass for the Target system (#1281) * cleanup * import bss * sActorHiliteMtx * some cleanups on func_800BB604 * Actor_IsInTargetableRange * rematch func_800BB604 Co-authored-by: engineer124 * Name ACTOR_FLAG_UNFRIENDLY and ACTOR_FLAG_FRIENDLY * Rename some Target_ functions * cleanusp * TargetMode enum * Target_800B82EC * sNaming * more * more naming * fairyHintPos * rotation * ACTOR_FLAG_TARGETABLE * update namefixer * remove trailing comma * bss * Wall of text for Target_800BB604 * function naming * cleanups * Target_GetAdjustedDistSq * NotLeash * more comments * minor comment * review * fix * rotZTick * review * name last members * fix * review * review * more namefixer * swap members * comment * Update src/code/z_actor.c Co-authored-by: Derek Hensley * Update src/code/z_actor.c Co-authored-by: Derek Hensley * review * format * Update src/code/z_actor.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64actor.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * review * fix * fix --------- Co-authored-by: engineer124 Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- docs/STYLE.md | 2 +- include/functions.h | 6 +- include/variables.h | 14 - include/z64actor.h | 76 +- include/z64player.h | 2 +- spec | 1 - src/code/z_actor.c | 821 ++++++++++-------- src/code/z_en_a_keep.c | 4 +- src/code/z_en_hy_code.c | 4 +- src/code/z_parameter.c | 2 +- src/code/z_player_call.c | 6 +- src/code/z_player_lib.c | 11 +- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 8 +- src/overlays/actors/ovl_Boss_01/z_boss_01.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 18 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 14 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 14 +- src/overlays/actors/ovl_Boss_05/z_boss_05.c | 2 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 4 +- src/overlays/actors/ovl_Boss_07/z_boss_07.c | 2 +- .../actors/ovl_Boss_Hakugin/z_boss_hakugin.c | 4 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 4 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 4 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 4 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 4 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 8 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 4 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 4 +- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 6 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 8 +- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 4 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 8 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 8 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 10 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 6 +- src/overlays/actors/ovl_En_An/z_en_an.c | 2 +- src/overlays/actors/ovl_En_And/z_en_and.c | 4 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 8 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 4 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 24 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 14 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 12 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 4 +- src/overlays/actors/ovl_En_Bal/z_en_bal.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 4 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 6 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 6 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 6 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 4 +- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 8 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 16 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 24 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 14 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 4 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- .../actors/ovl_En_Boj_01/z_en_boj_01.c | 2 +- .../actors/ovl_En_Boj_02/z_en_boj_02.c | 2 +- .../actors/ovl_En_Boj_03/z_en_boj_03.c | 2 +- .../actors/ovl_En_Boj_04/z_en_boj_04.c | 2 +- .../actors/ovl_En_Boj_05/z_en_boj_05.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 6 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 4 +- .../actors/ovl_En_Bombal/z_en_bombal.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 | 14 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 4 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- src/overlays/actors/ovl_En_Bsb/z_en_bsb.c | 2 +- src/overlays/actors/ovl_En_Bu/z_en_bu.c | 2 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 6 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 4 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 6 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 2 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 6 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 10 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 6 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 4 +- src/overlays/actors/ovl_En_Death/z_en_death.c | 4 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 8 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 6 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 10 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 6 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 2 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 6 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 6 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 12 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 8 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 8 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 4 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 6 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- src/overlays/actors/ovl_En_Dt/z_en_dt.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 44 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 4 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 2 +- .../actors/ovl_En_Encount2/z_en_encount2.c | 2 +- .../actors/ovl_En_Encount4/z_en_encount4.c | 2 +- .../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 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 4 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 12 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 6 +- .../actors/ovl_En_Firefly2/z_en_firefly2.c | 3 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 28 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 14 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 10 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 11 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 18 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 14 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 6 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 8 +- src/overlays/actors/ovl_En_Ge3/z_en_ge3.c | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 10 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 10 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 6 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 4 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 16 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 17 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 6 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 6 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 4 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 6 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 4 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 6 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 4 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 10 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 4 +- src/overlays/actors/ovl_En_Hs2/z_en_hs2.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 12 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../z_en_invadepoh_demo.c | 2 +- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 8 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 8 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 4 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- src/overlays/actors/ovl_En_Jso/z_en_jso.c | 2 +- src/overlays/actors/ovl_En_Jso2/z_en_jso2.c | 4 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 14 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 4 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 14 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 10 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 4 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 5 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 4 +- src/overlays/actors/ovl_En_Kitan/z_en_kitan.c | 2 +- .../actors/ovl_En_Knight/z_en_knight.c | 2 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 6 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 6 +- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 4 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 4 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 6 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 10 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 10 +- .../actors/ovl_En_Minideath/z_en_minideath.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 4 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 4 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 10 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 4 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 14 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 4 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 4 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 12 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 10 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 16 +- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 4 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 4 +- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 2 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 4 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 14 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 4 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 14 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 6 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 12 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 12 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 6 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 14 +- .../ovl_En_Po_Composer/z_en_po_composer.c | 2 +- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 15 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 14 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 8 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 4 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 6 +- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 8 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 8 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 20 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 26 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 6 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 16 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 4 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 10 +- src/overlays/actors/ovl_En_Rsn/z_en_rsn.c | 4 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 12 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 4 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 8 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 14 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 4 +- src/overlays/actors/ovl_En_Si/z_en_si.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 36 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 12 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 10 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 4 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 10 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.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 | 28 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 8 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 4 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 10 +- .../actors/ovl_En_Takaraya/z_en_takaraya.c | 4 +- src/overlays/actors/ovl_En_Talk/z_en_talk.c | 6 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 26 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 4 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 20 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 4 +- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 2 +- .../actors/ovl_En_Tanron6/z_en_tanron6.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 20 +- src/overlays/actors/ovl_En_Tg/z_en_tg.c | 2 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 7 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 12 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 14 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 4 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 4 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 10 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 6 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 8 +- .../actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 2 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 10 +- .../actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c | 4 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 4 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 4 +- .../actors/ovl_En_Wdhand/z_en_wdhand.c | 2 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 2 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 8 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 14 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 10 +- src/overlays/actors/ovl_En_Zl1/z_en_zl1.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 | 10 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 4 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 2 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 8 +- .../actors/ovl_Item_Inbox/z_item_inbox.c | 2 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 4 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 6 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 8 +- .../actors/ovl_Obj_Kinoko/z_obj_kinoko.c | 4 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 6 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 4 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 6 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 8 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 8 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 8 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 4 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 4 +- .../actors/ovl_player_actor/z_player.c | 156 ++-- tools/disasm/functions.txt | 26 +- tools/disasm/variables.txt | 14 +- tools/namefixer.py | 18 +- tools/sizes/code_functions.csv | 26 +- 304 files changed, 1620 insertions(+), 1501 deletions(-) diff --git a/docs/STYLE.md b/docs/STYLE.md index 0cf1d051b..616c4a8cc 100644 --- a/docs/STYLE.md +++ b/docs/STYLE.md @@ -140,7 +140,7 @@ Damage flag enums are not being used at present: we want to wait until we have a Pre-C99, commas at the end of the last item in an enum will cause a compiler warning, so leave them off. -All compound flag lists (e.g. `ACTOR_FLAG_4 | ACTOR_FLAG_8`) should be listed in *ascending* order +All compound flag lists (e.g. `ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_FRIENDLY`) should be listed in *ascending* order ## Arrays diff --git a/include/functions.h b/include/functions.h index ff803000d..6c7bc067a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -477,7 +477,7 @@ void func_800B4AEC(PlayState* play, Actor* actor, f32 y); void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play); void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW); -void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play); +void Target_Draw(TargetContext* targetCtx, PlayState* play); s32 Flags_GetSwitch(PlayState* play, s32 flag); void Flags_SetSwitch(PlayState* play, s32 flag); @@ -558,7 +558,7 @@ PosRot* Actor_GetFocus(PosRot* dest, Actor* actor); PosRot* Actor_GetWorld(PosRot* dest, Actor* actor); PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor); -s32 func_800B83F8(Actor* actor, Player* player, s32 flag); +s32 Target_OutsideLeashRange(Actor* actor, Player* player, s32 ignoreLeash); s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState); s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemAction); s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemAction); @@ -1119,7 +1119,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup); void func_80123C58(Player* player); void Player_SetEquipmentData(PlayState* play, Player* player); void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction); -void func_80123DA4(Player* player); +void Player_Untarget(Player* player); void func_80123DC0(Player* player); void func_80123E90(PlayState* play, Actor* actor); s32 func_80123F2C(PlayState* play, s32 ammo); diff --git a/include/variables.h b/include/variables.h index 8a46bdbf5..1614d922b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1907,20 +1907,6 @@ extern u8 gSampleBankTable[]; // bss // extern UNK_TYPE1 D_801ED894; -extern CollisionPoly* D_801ED8B0; -extern s32 D_801ED8B4; -// extern UNK_TYPE1 D_801ED8B8; -// extern UNK_TYPE1 D_801ED8BC; -// extern UNK_TYPE1 D_801ED8C0; -// extern UNK_TYPE1 D_801ED8C4; -extern f32 D_801ED8C8; -extern f32 sBgmEnemyDistSq; -extern f32 D_801ED8D0; -// extern UNK_TYPE1 D_801ED8D4; -// extern UNK_TYPE1 D_801ED8D8; -// extern UNK_TYPE1 D_801ED8DC; -extern Mtx D_801ED8E0; -extern Actor* D_801ED920; extern Vec3f D_801EDE00; extern Vec3f D_801EDE10; diff --git a/include/z64actor.h b/include/z64actor.h index d757117fb..d794b8dd1 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -150,7 +150,7 @@ typedef struct Actor { /* 0x100 */ f32 uncullZoneScale; // Amount to increase the uncull zone scale by (in projected space) /* 0x104 */ f32 uncullZoneDownward; // Amount to increase uncull zone downward by (in projected space) /* 0x108 */ Vec3f prevPos; // World position from the previous update cycle - /* 0x114 */ u8 isTargeted; // Set to true if the actor is currently being targeted by the player + /* 0x114 */ u8 isLockedOn; // Set to true if the actor is currently being targeted by the player /* 0x115 */ u8 targetPriority; // Lower values have higher priority. Resets to 0 when player stops targeting /* 0x116 */ u16 textId; // Text ID to pass to link/display when interacting with the actor /* 0x118 */ u16 freezeTimer; // Actor does not update when set. Timer decrements automatically @@ -296,33 +296,47 @@ typedef enum { #define ACTORCTX_FLAG_6 (1 << 6) #define ACTORCTX_FLAG_7 (1 << 7) - -typedef struct { +// A set of 4 triangles which appear around an actor when the player Z-Targets it +typedef struct LockOnTriangleSet { /* 0x00 */ Vec3f pos; - /* 0x0C */ f32 unkC; + /* 0x0C */ f32 radius; // distance towards the center of the locked on /* 0x10 */ Color_RGBA8 color; -} TargetContextEntry; // size = 0x14 +} LockOnTriangleSet; // size = 0x14 typedef struct TargetContext { - /* 0x00 */ Vec3f unk0; - /* 0x0C */ Vec3f targetCenterPos; - /* 0x18 */ Color_RGBAf fairyInner; - /* 0x28 */ Color_RGBAf fairyOuter; - /* 0x38 */ Actor* arrowPointedActor; - /* 0x3C */ Actor* targetedActor; - /* 0x40 */ f32 unk40; - /* 0x44 */ f32 unk44; - /* 0x48 */ s16 unk48; // alpha - /* 0x4A */ u8 unk4A; - /* 0x4B */ u8 unk4B; - /* 0x4C */ s8 unk4C; - /* 0x4D */ UNK_TYPE1 pad4D[0x3]; - /* 0x50 */ TargetContextEntry unk50[3]; - /* 0x8C */ Actor* unk8C; + /* 0x00 */ Vec3f fairyPos; // Used by Tatl to indicate a targetable actor or general hint + /* 0x0C */ Vec3f lockOnPos; + /* 0x18 */ Color_RGBAf fairyInnerColor; + /* 0x28 */ Color_RGBAf fairyOuterColor; + /* 0x38 */ Actor* fairyActor; + /* 0x3C */ Actor* lockOnActor; + /* 0x40 */ f32 fairyMoveProgressFactor; // Controls Tatl so she can smootly transition to the target actor + /* 0x44 */ f32 lockOnRadius; // Control the circle lock-on triangles coming in from offscreen when you first target + /* 0x48 */ s16 lockOnAlpha; + /* 0x4A */ u8 fairyActorCategory; + /* 0x4B */ u8 rotZTick; + /* 0x4C */ s8 lockOnIndex; + /* 0x50 */ LockOnTriangleSet lockOnTriangleSets[3]; + /* 0x8C */ Actor* forcedTargetActor; // Never set to non-NULL /* 0x90 */ Actor* bgmEnemy; - /* 0x94 */ Actor* unk_94; + /* 0x94 */ Actor* arrowPointedActor; } TargetContext; // size = 0x98 +typedef enum TargetMode { + /* 0 */ TARGET_MODE_0, + /* 1 */ TARGET_MODE_1, + /* 2 */ TARGET_MODE_2, + /* 3 */ TARGET_MODE_3, + /* 4 */ TARGET_MODE_4, + /* 5 */ TARGET_MODE_5, + /* 6 */ TARGET_MODE_6, + /* 7 */ TARGET_MODE_7, + /* 8 */ TARGET_MODE_8, + /* 9 */ TARGET_MODE_9, + /* 10 */ TARGET_MODE_10, + /* 11 */ TARGET_MODE_MAX +} TargetMode; + typedef struct { /* 0x0 */ TexturePtr texture; /* 0x4 */ s16 x; @@ -407,7 +421,7 @@ typedef struct ActorContext { /* 0x00F */ u8 numLensActors; /* 0x010 */ ActorListEntry actorLists[ACTORCAT_MAX]; /* 0x0A0 */ Actor* lensActors[LENS_ACTOR_MAX]; // Draws up to LENS_ACTOR_MAX number of invisible actors - /* 0x120 */ TargetContext targetContext; + /* 0x120 */ TargetContext targetCtx; /* 0x1B8 */ ActorContextSceneFlags sceneFlags; /* 0x1E4 */ TitleCardContext titleCtxt; /* 0x1F4 */ PlayerImpact playerImpact; @@ -454,14 +468,14 @@ typedef enum { /* 3 */ DOORLOCK_MAX } DoorLockType; -// Targetability / ACTOR_FLAG_TARGETABLE? -#define ACTOR_FLAG_1 (1 << 0) -// +// Allows Tatl to fly over the actor and lock-on it (using the Z-target) +#define ACTOR_FLAG_TARGETABLE (1 << 0) +// Unused #define ACTOR_FLAG_2 (1 << 1) -// -#define ACTOR_FLAG_4 (1 << 2) -// -#define ACTOR_FLAG_8 (1 << 3) +// Changes the targeting behaviour for unfriendly actors (sound effects, Player's stance, etc) +#define ACTOR_FLAG_UNFRIENDLY (1 << 2) +// Opposite of the UNFRIENDLY flag. It is not checked explictly in the original game. +#define ACTOR_FLAG_FRIENDLY (1 << 3) // #define ACTOR_FLAG_10 (1 << 4) // @@ -680,9 +694,11 @@ typedef struct BlinkInfo { /* 0x2 */ s16 blinkTimer; } BlinkInfo; // size = 0x4 -extern TargetRangeParams gTargetRanges[]; +extern TargetRangeParams gTargetRanges[TARGET_MODE_MAX]; extern s16 D_801AED48[8]; extern Gfx D_801AEF88[]; extern Gfx D_801AEFA0[]; +extern Actor* D_801ED920; + #endif diff --git a/include/z64player.h b/include/z64player.h index 5974defc5..03bb71d94 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1168,7 +1168,7 @@ typedef struct Player { /* 0x564 */ ColliderQuad meleeWeaponQuads[2]; /* 0x664 */ ColliderQuad shieldQuad; /* 0x6E4 */ ColliderCylinder shieldCylinder; - /* 0x730 */ Actor* targetedActor; // Z/L-Targeted actor + /* 0x730 */ Actor* lockOnActor; // Z/L-Targeted actor /* 0x734 */ char unk_734[4]; /* 0x738 */ s32 unk_738; /* 0x73C */ s32 meleeWeaponEffectIndex[3]; diff --git a/spec b/spec index 6c8311802..7ebf16cd9 100644 --- a/spec +++ b/spec @@ -445,7 +445,6 @@ beginseg include "build/src/code/flg_set.o" include "build/src/code/z_DLF.o" include "build/src/code/z_actor.o" - include "build/data/code/z_actor.bss.o" include "build/src/code/z_actor_dlftbls.o" include "build/src/code/z_bgcheck.o" include "build/src/code/z_bg_collect.o" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 5debc583d..f88f511b5 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3,6 +3,7 @@ * Description: */ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" #include "sys_cfb.h" @@ -18,21 +19,26 @@ #include "objects/object_bdoor/object_bdoor.h" // bss -extern FaultClient sActorFaultClient; // 2 funcs -extern CollisionPoly* D_801ED8B0; // 1 func -extern s32 D_801ED8B4; // 2 funcs -extern Actor* D_801ED8B8; // 2 funcs -extern Actor* D_801ED8BC; // 2 funcs -extern Actor* D_801ED8C0; // 2 funcs -extern Actor* D_801ED8C4; // 2 funcs -extern f32 D_801ED8C8; // 2 funcs -extern f32 sBgmEnemyDistSq; // 2 funcs -extern f32 D_801ED8D0; // 2 funcs -extern s32 D_801ED8D4; // 2 funcs -extern s32 D_801ED8D8; // 2 funcs -extern s16 D_801ED8DC; // 2 funcs -extern Mtx D_801ED8E0; // 1 func -extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor +FaultClient sActorFaultClient; // 2 funcs + +CollisionPoly* D_801ED8B0; // 1 func +s32 D_801ED8B4; // 2 funcs + +Actor* sTargetableNearestActor; +Actor* sTargetablePrioritizedActor; +Actor* D_801ED8C0; +Actor* D_801ED8C4; + +f32 sTargetableNearestActorDistSq; +f32 sBgmEnemyDistSq; +f32 D_801ED8D0; +s32 sTargetablePrioritizedPriority; +s32 D_801ED8D8; +s16 sTargetPlayerRotY; + +Mtx sActorHiliteMtx; + +Actor* D_801ED920; // 2 funcs. 1 out of z_actor #define ACTOR_AUDIO_FLAG_SFX_ACTOR_POS (1 << 0) #define ACTOR_AUDIO_FLAG_SFX_CENTERED_1 (1 << 1) @@ -52,7 +58,7 @@ extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx); Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play); Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play); -void func_800BB8EC(GameState* gameState, ActorContext* actorCtx, Actor** arg2, Actor** arg3, Player* player); +void Target_GetTargetActor(PlayState* play, ActorContext* actorCtx, Actor** targetableP, Actor** arg3, Player* player); s32 func_800BA2FC(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projectedW); void Actor_AddToCategory(ActorContext* actorCtx, Actor* actor, u8 actorCategory); Actor* Actor_RemoveFromCategory(PlayState* play, ActorContext* actorCtx, Actor* actorToRemove); @@ -415,11 +421,11 @@ void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos *invW = (*invW < 1.0f) ? 1.0f : (1.0f / *invW); } -void Target_SetPos(TargetContext* targetCtx, s32 index, f32 x, f32 y, f32 z) { - targetCtx->unk50[index].pos.x = x; - targetCtx->unk50[index].pos.y = y; - targetCtx->unk50[index].pos.z = z; - targetCtx->unk50[index].unkC = targetCtx->unk44; +void Target_SetLockOnPos(TargetContext* targetCtx, s32 index, f32 x, f32 y, f32 z) { + targetCtx->lockOnTriangleSets[index].pos.x = x; + targetCtx->lockOnTriangleSets[index].pos.y = y; + targetCtx->lockOnTriangleSets[index].pos.z = z; + targetCtx->lockOnTriangleSets[index].radius = targetCtx->lockOnRadius; } typedef struct { @@ -427,282 +433,293 @@ typedef struct { /* 0x4 */ Color_RGBA8 outer; } TatlColor; // size = 0x8 +// For whatever reason it has an extra entry TatlColor sTatlColorList[] = { - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 255, 255, 230, 255 }, { 220, 160, 80, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 150, 150, 255, 255 }, { 150, 150, 255, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_SWITCH + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_BG + { { 255, 255, 230, 255 }, { 220, 160, 80, 0 } }, // ACTORCAT_PLAYER + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_EXPLOSIVES + { { 150, 150, 255, 255 }, { 150, 150, 255, 0 } }, // ACTORCAT_NPC + { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, // ACTORCAT_ENEMY + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_PROP + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_ITEMACTION + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_MISC + { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, // ACTORCAT_BOSS + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_DOOR + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_CHEST + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_MAX }; -void func_800B4F78(TargetContext* targetCtx, s32 type, PlayState* play) { +void Target_InitLockOn(TargetContext* targetCtx, ActorType type, PlayState* play) { TatlColor* tatlColorEntry; s32 i; - TargetContextEntry* targetEntry; + LockOnTriangleSet* triangleSet; - Math_Vec3f_Copy(&targetCtx->targetCenterPos, &play->view.eye); - targetCtx->unk48 = 0x100; + Math_Vec3f_Copy(&targetCtx->lockOnPos, &play->view.eye); + targetCtx->lockOnAlpha = 256; tatlColorEntry = &sTatlColorList[type]; - targetCtx->unk44 = 500.0f; + targetCtx->lockOnRadius = 500.0f; - targetEntry = targetCtx->unk50; - for (i = 0; i < ARRAY_COUNT(targetCtx->unk50); i++, targetEntry++) { - Target_SetPos(targetCtx, i, 0.0f, 0.0f, 0.0f); + triangleSet = targetCtx->lockOnTriangleSets; + for (i = 0; i < ARRAY_COUNT(targetCtx->lockOnTriangleSets); i++, triangleSet++) { + Target_SetLockOnPos(targetCtx, i, 0.0f, 0.0f, 0.0f); - targetEntry->color.r = tatlColorEntry->inner.r; - targetEntry->color.g = tatlColorEntry->inner.g; - targetEntry->color.b = tatlColorEntry->inner.b; + triangleSet->color.r = tatlColorEntry->inner.r; + triangleSet->color.g = tatlColorEntry->inner.g; + triangleSet->color.b = tatlColorEntry->inner.b; } } -void Target_SetColors(TargetContext* targetCtx, Actor* actor, s32 type, PlayState* play) { - targetCtx->unk0.x = actor->focus.pos.x; - targetCtx->unk0.y = actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y); - targetCtx->unk0.z = actor->focus.pos.z; +void Target_SetFairyState(TargetContext* targetCtx, Actor* actor, ActorType type, PlayState* play) { + targetCtx->fairyPos.x = actor->focus.pos.x; + targetCtx->fairyPos.y = actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y); + targetCtx->fairyPos.z = actor->focus.pos.z; - targetCtx->fairyInner.r = sTatlColorList[type].inner.r; - targetCtx->fairyInner.g = sTatlColorList[type].inner.g; - targetCtx->fairyInner.b = sTatlColorList[type].inner.b; - targetCtx->fairyInner.a = sTatlColorList[type].inner.a; - targetCtx->fairyOuter.r = sTatlColorList[type].outer.r; - targetCtx->fairyOuter.g = sTatlColorList[type].outer.g; - targetCtx->fairyOuter.b = sTatlColorList[type].outer.b; - targetCtx->fairyOuter.a = sTatlColorList[type].outer.a; + targetCtx->fairyInnerColor.r = sTatlColorList[type].inner.r; + targetCtx->fairyInnerColor.g = sTatlColorList[type].inner.g; + targetCtx->fairyInnerColor.b = sTatlColorList[type].inner.b; + targetCtx->fairyInnerColor.a = sTatlColorList[type].inner.a; + targetCtx->fairyOuterColor.r = sTatlColorList[type].outer.r; + targetCtx->fairyOuterColor.g = sTatlColorList[type].outer.g; + targetCtx->fairyOuterColor.b = sTatlColorList[type].outer.b; + targetCtx->fairyOuterColor.a = sTatlColorList[type].outer.a; } -void Actor_TargetContextInit(TargetContext* targetCtx, Actor* actor, PlayState* play) { +void Target_Init(TargetContext* targetCtx, Actor* actor, PlayState* play) { targetCtx->bgmEnemy = NULL; - targetCtx->unk8C = NULL; - targetCtx->targetedActor = NULL; - targetCtx->arrowPointedActor = NULL; - targetCtx->unk4B = 0; - targetCtx->unk4C = 0; - targetCtx->unk40 = 0.0f; - Target_SetColors(targetCtx, actor, actor->category, play); - func_800B4F78(targetCtx, actor->category, play); + targetCtx->forcedTargetActor = NULL; + targetCtx->lockOnActor = NULL; + targetCtx->fairyActor = NULL; + targetCtx->rotZTick = 0; + targetCtx->lockOnIndex = 0; + targetCtx->fairyMoveProgressFactor = 0.0f; + Target_SetFairyState(targetCtx, actor, actor->category, play); + Target_InitLockOn(targetCtx, actor->category, play); } -void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { +void Target_Draw(TargetContext* targetCtx, PlayState* play) { Player* player = GET_PLAYER(play); + Actor* actor; - if (!(player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | - PLAYER_STATE1_400 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000))) { - Actor* actor = targetCtx->targetedActor; - - OPEN_DISPS(play->state.gfxCtx); - - if (targetCtx->unk48 != 0) { - TargetContextEntry* entry; - s16 alpha = 255; - f32 var1 = 1.0f; - Vec3f projectedPos; - s32 spB8; - f32 invW; - s32 spB0; - s32 spAC; - f32 var2; - s32 i; - - if (targetCtx->unk4B != 0) { - spB8 = 1; - } else { - spB8 = 3; - } - - if (actor != NULL) { - Math_Vec3f_Copy(&targetCtx->targetCenterPos, &actor->focus.pos); - var1 = (500.0f - targetCtx->unk44) / 420.0f; - } else { - targetCtx->unk48 -= 120; - if (targetCtx->unk48 < 0) { - targetCtx->unk48 = 0; - } - alpha = targetCtx->unk48; - } - - Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &projectedPos, &invW); - - projectedPos.x = ((SCREEN_WIDTH / 2) * (projectedPos.x * invW)) * var1; - projectedPos.x = CLAMP(projectedPos.x, -SCREEN_WIDTH, SCREEN_WIDTH); - - projectedPos.y = ((SCREEN_HEIGHT / 2) * (projectedPos.y * invW)) * var1; - projectedPos.y = CLAMP(projectedPos.y, -SCREEN_HEIGHT, SCREEN_HEIGHT); - - projectedPos.z = projectedPos.z * var1; - - targetCtx->unk4C--; - if (targetCtx->unk4C < 0) { - targetCtx->unk4C = 2; - } - - Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z); - - if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) { - OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); - - for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) { - entry = &targetCtx->unk50[spAC]; - - if (entry->unkC < 500.0f) { - if (entry->unkC <= 120.0f) { - var2 = 0.15f; - } else { - var2 = ((entry->unkC - 120.0f) * 0.001f) + 0.15f; - } - - Matrix_Translate(entry->pos.x, entry->pos.y, 0.0f, MTXMODE_NEW); - Matrix_Scale(var2, 0.15f, 1.0f, MTXMODE_APPLY); - - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, entry->color.r, entry->color.g, entry->color.b, - (u8)alpha); - - Matrix_RotateZS((targetCtx->unk4B * 512), MTXMODE_APPLY); - - for (i = 0; i < 4; i++) { - Matrix_RotateZS(0x4000, MTXMODE_APPLY); - Matrix_Push(); - Matrix_Translate(entry->unkC, entry->unkC, 0.0f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(OVERLAY_DISP++, gZTargetLockOnTriangleDL); - Matrix_Pop(); - } - } - - alpha -= 255 / 3; - if (alpha < 0) { - alpha = 0; - } - } - } - } - - actor = targetCtx->unk_94; - if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { - TatlColor* color = &sTatlColorList[actor->category]; - - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); - - Matrix_Translate(actor->focus.pos.x, - actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f, - actor->focus.pos.z, MTXMODE_NEW); - Matrix_RotateYS((play->gameplayFrames * 3000), MTXMODE_APPLY); - Matrix_Scale((iREG(27) + 35) / 1000.0f, (iREG(28) + 60) / 1000.0f, (iREG(29) + 50) / 1000.0f, - MTXMODE_APPLY); - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, color->inner.r, color->inner.g, color->inner.b, 255); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_XLU_DISP++, gZTargetArrowDL); - } - - CLOSE_DISPS(play->state.gfxCtx); + if (player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | + PLAYER_STATE1_400 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000)) { + return; } + + actor = targetCtx->lockOnActor; + + OPEN_DISPS(play->state.gfxCtx); + + if (targetCtx->lockOnAlpha != 0) { + LockOnTriangleSet* entry; + s16 alpha = 255; + f32 projectdPosScale = 1.0f; + Vec3f projectedPos; + s32 totalEntries; + f32 invW; + s32 i; + s32 index; + f32 lockOnScaleX; + + if (targetCtx->rotZTick != 0) { + totalEntries = 1; + } else { + // Use multiple entries for the movement effect when the triangles are getting closer to the actor from the + // margin of the screen + totalEntries = ARRAY_COUNT(targetCtx->lockOnTriangleSets); + } + + if (actor != NULL) { + Math_Vec3f_Copy(&targetCtx->lockOnPos, &actor->focus.pos); + projectdPosScale = (500.0f - targetCtx->lockOnRadius) / 420.0f; + } else { + targetCtx->lockOnAlpha -= 120; + if (targetCtx->lockOnAlpha < 0) { + targetCtx->lockOnAlpha = 0; + } + alpha = targetCtx->lockOnAlpha; + } + + Actor_GetProjectedPos(play, &targetCtx->lockOnPos, &projectedPos, &invW); + + projectedPos.x = ((SCREEN_WIDTH / 2) * (projectedPos.x * invW)) * projectdPosScale; + projectedPos.x = CLAMP(projectedPos.x, -SCREEN_WIDTH, SCREEN_WIDTH); + + projectedPos.y = ((SCREEN_HEIGHT / 2) * (projectedPos.y * invW)) * projectdPosScale; + projectedPos.y = CLAMP(projectedPos.y, -SCREEN_HEIGHT, SCREEN_HEIGHT); + + projectedPos.z *= projectdPosScale; + + targetCtx->lockOnIndex--; + if (targetCtx->lockOnIndex < 0) { + targetCtx->lockOnIndex = ARRAY_COUNT(targetCtx->lockOnTriangleSets) - 1; + } + + Target_SetLockOnPos(targetCtx, targetCtx->lockOnIndex, projectedPos.x, projectedPos.y, projectedPos.z); + + if (!(player->stateFlags1 & PLAYER_STATE1_40) || (actor != player->lockOnActor)) { + OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); + + for (i = 0, index = targetCtx->lockOnIndex; i < totalEntries; + i++, index = (index + 1) % ARRAY_COUNT(targetCtx->lockOnTriangleSets)) { + entry = &targetCtx->lockOnTriangleSets[index]; + + if (entry->radius < 500.0f) { + s32 triangleIndex; + + if (entry->radius <= 120.0f) { + lockOnScaleX = 0.15f; + } else { + lockOnScaleX = ((entry->radius - 120.0f) * 0.001f) + 0.15f; + } + + Matrix_Translate(entry->pos.x, entry->pos.y, 0.0f, MTXMODE_NEW); + Matrix_Scale(lockOnScaleX, 0.15f, 1.0f, MTXMODE_APPLY); + + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, entry->color.r, entry->color.g, entry->color.b, (u8)alpha); + + Matrix_RotateZS(targetCtx->rotZTick * 0x200, MTXMODE_APPLY); + + // Draw the 4 lock-on triangles + for (triangleIndex = 0; triangleIndex < 4; triangleIndex++) { + Matrix_RotateZS(0x10000 / 4, MTXMODE_APPLY); + Matrix_Push(); + Matrix_Translate(entry->radius, entry->radius, 0.0f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(OVERLAY_DISP++, gZTargetLockOnTriangleDL); + Matrix_Pop(); + } + } + + alpha -= 255 / ARRAY_COUNT(targetCtx->lockOnTriangleSets); + if (alpha < 0) { + alpha = 0; + } + } + } + } + + actor = targetCtx->arrowPointedActor; + if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { + TatlColor* color = &sTatlColorList[actor->category]; + + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); + + Matrix_Translate(actor->focus.pos.x, actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f, + actor->focus.pos.z, MTXMODE_NEW); + Matrix_RotateYS(play->gameplayFrames * 0xBB8, MTXMODE_APPLY); + Matrix_Scale((iREG(27) + 35) / 1000.0f, (iREG(28) + 60) / 1000.0f, (iREG(29) + 50) / 1000.0f, MTXMODE_APPLY); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, color->inner.r, color->inner.g, color->inner.b, 255); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(POLY_XLU_DISP++, gZTargetArrowDL); + } + + CLOSE_DISPS(play->state.gfxCtx); } // OoT: func_8002C7BC -void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameState* gameState) { - PlayState* play = (PlayState*)gameState; - Actor* sp68 = NULL; +void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor, PlayState* play) { + s32 pad; + Actor* actor = NULL; s32 category; Vec3f projectedPos; f32 invW; - if ((player->targetedActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { - targetCtx->unk_94 = NULL; + // If currently not locked on to an actor and not pressing down on the analog stick then try to find a targetable + // actor + if ((player->lockOnActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { + targetCtx->arrowPointedActor = NULL; } else { - func_800BB8EC(gameState, &play->actorCtx, &sp68, &D_801ED920, player); - targetCtx->unk_94 = sp68; + Target_GetTargetActor(play, &play->actorCtx, &actor, &D_801ED920, player); + targetCtx->arrowPointedActor = actor; } - if (targetCtx->unk8C != NULL) { - sp68 = targetCtx->unk8C; - targetCtx->unk8C = NULL; - } else if (actor != NULL) { - sp68 = actor; + if (targetCtx->forcedTargetActor != NULL) { + actor = targetCtx->forcedTargetActor; + targetCtx->forcedTargetActor = NULL; + } else if (lockOnActor != NULL) { + actor = lockOnActor; } - if (sp68 != NULL) { - category = sp68->category; + if (actor != NULL) { + category = actor->category; } else { category = player->actor.category; } - if ((sp68 != targetCtx->arrowPointedActor) || (category != targetCtx->unk4A)) { - targetCtx->arrowPointedActor = sp68; - targetCtx->unk4A = category; - targetCtx->unk40 = 1.0f; + if ((actor != targetCtx->fairyActor) || (category != targetCtx->fairyActorCategory)) { + targetCtx->fairyActor = actor; + targetCtx->fairyActorCategory = category; + targetCtx->fairyMoveProgressFactor = 1.0f; } - if (sp68 == NULL) { - sp68 = &player->actor; + if (actor == NULL) { + actor = &player->actor; } - if (!Math_StepToF(&targetCtx->unk40, 0.0f, 0.25f)) { - f32 temp_f0; - f32 x; - f32 y; - f32 z; + if (!Math_StepToF(&targetCtx->fairyMoveProgressFactor, 0.0f, 0.25f)) { + f32 fairyMoveScale = 0.25f / targetCtx->fairyMoveProgressFactor; + f32 x = actor->focus.pos.x - targetCtx->fairyPos.x; + f32 y = (actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y)) - targetCtx->fairyPos.y; + f32 z = actor->focus.pos.z - targetCtx->fairyPos.z; - temp_f0 = 0.25f / targetCtx->unk40; - - x = sp68->focus.pos.x - targetCtx->unk0.x; - y = (sp68->focus.pos.y + (sp68->targetArrowOffset * sp68->scale.y)) - targetCtx->unk0.y; - z = sp68->focus.pos.z - targetCtx->unk0.z; - - targetCtx->unk0.x += x * temp_f0; - targetCtx->unk0.y += y * temp_f0; - targetCtx->unk0.z += z * temp_f0; + targetCtx->fairyPos.x += x * fairyMoveScale; + targetCtx->fairyPos.y += y * fairyMoveScale; + targetCtx->fairyPos.z += z * fairyMoveScale; } else { - Target_SetColors(targetCtx, sp68, category, play); + Target_SetFairyState(targetCtx, actor, category, play); } - if ((actor != NULL) && (targetCtx->unk4B == 0)) { - Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW); + if ((lockOnActor != NULL) && (targetCtx->rotZTick == 0)) { + Actor_GetProjectedPos(play, &lockOnActor->focus.pos, &projectedPos, &invW); if ((projectedPos.z <= 0.0f) || (fabsf(projectedPos.x * invW) >= 1.0f) || (fabsf(projectedPos.y * invW) >= 1.0f)) { - actor = NULL; + lockOnActor = NULL; } } - if (actor != NULL) { - if (actor != targetCtx->targetedActor) { + if (lockOnActor != NULL) { + if (lockOnActor != targetCtx->lockOnActor) { s32 sfxId; - func_800B4F78(targetCtx, actor->category, play); + // Lock On entries need to be re-initialized when changing the targeted actor + Target_InitLockOn(targetCtx, lockOnActor->category, play); - targetCtx->targetedActor = actor; + targetCtx->lockOnActor = lockOnActor; - if (actor->id == ACTOR_EN_BOOM) { - targetCtx->unk48 = 0; + if (lockOnActor->id == ACTOR_EN_BOOM) { + // Avoid drawing the lock on triangles on a zora boomerang + targetCtx->lockOnAlpha = 0; } - sfxId = - CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1) ? NA_SE_SY_LOCK_ON : NA_SE_SY_LOCK_ON_HUMAN; + sfxId = CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) + ? NA_SE_SY_LOCK_ON + : NA_SE_SY_LOCK_ON_HUMAN; Audio_PlaySfx(sfxId); } - targetCtx->targetCenterPos.x = actor->world.pos.x; - targetCtx->targetCenterPos.y = actor->world.pos.y - (actor->shape.yOffset * actor->scale.y); - targetCtx->targetCenterPos.z = actor->world.pos.z; + targetCtx->lockOnPos.x = lockOnActor->world.pos.x; + targetCtx->lockOnPos.y = lockOnActor->world.pos.y - (lockOnActor->shape.yOffset * lockOnActor->scale.y); + targetCtx->lockOnPos.z = lockOnActor->world.pos.z; - if (targetCtx->unk4B == 0) { - f32 temp_f0_2; - f32 clampedFloat; + if (targetCtx->rotZTick == 0) { + f32 lockOnStep = (500.0f - targetCtx->lockOnRadius) * 3.0f; - temp_f0_2 = (500.0f - targetCtx->unk44) * 3.0f; - clampedFloat = CLAMP(temp_f0_2, 30.0f, 100.0f); + lockOnStep = CLAMP(lockOnStep, 30.0f, 100.0f); - if (Math_StepToF(&targetCtx->unk44, 80.0f, clampedFloat)) { - targetCtx->unk4B++; + if (Math_StepToF(&targetCtx->lockOnRadius, 80.0f, lockOnStep)) { + targetCtx->rotZTick++; } } else { - targetCtx->unk4B = (targetCtx->unk4B + 3) | 0x80; - targetCtx->unk44 = 120.0f; + // 0x80 is or'd to avoid getting this value be set to zero + // This rotation value gets multiplied by 0x200, which multiplied by 0x80 gives a full turn (0x10000) + targetCtx->rotZTick = (targetCtx->rotZTick + 3) | 0x80; + targetCtx->lockOnRadius = 120.0f; } } else { - targetCtx->targetedActor = NULL; - Math_StepToF(&targetCtx->unk44, 500.0f, 80.0f); + targetCtx->lockOnActor = NULL; + Math_StepToF(&targetCtx->lockOnRadius, 500.0f, 80.0f); } } @@ -1048,7 +1065,7 @@ void* Actor_FindSharedMemoryEntry(PlayState* play, s16 id) { void Actor_Kill(Actor* actor) { actor->draw = NULL; actor->update = NULL; - actor->flags &= ~ACTOR_FLAG_1; + actor->flags &= ~ACTOR_FLAG_TARGETABLE; } void Actor_SetWorldToHome(Actor* actor) { @@ -1089,7 +1106,7 @@ void Actor_Init(Actor* actor, PlayState* play) { Actor_SetFocus(actor, 0.0f); Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos); Actor_SetScale(actor, 0.01f); - actor->targetMode = 3; + actor->targetMode = TARGET_MODE_3; actor->terminalVelocity = -20.0f; actor->xyzDistToPlayerSq = FLT_MAX; @@ -1702,18 +1719,18 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, } } -Gfx* Hilite_Draw(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx, Gfx* dl, Hilite** hilite) { +Gfx* Hilite_Draw(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx, Gfx* dl, Hilite** hiliteP) { LookAt* lookAt = GRAPH_ALLOC(gfxCtx, sizeof(LookAt)); f32 correctedEyeX = (eye->x == object->x) && (eye->z == object->z) ? eye->x + 0.001f : eye->x; - *hilite = GRAPH_ALLOC(gfxCtx, sizeof(Hilite)); + *hiliteP = GRAPH_ALLOC(gfxCtx, sizeof(Hilite)); - guLookAtHilite(&D_801ED8E0, lookAt, *hilite, correctedEyeX, eye->y, eye->z, object->x, object->y, object->z, 0.0f, - 1.0f, 0.0f, lightDir->x, lightDir->y, lightDir->z, lightDir->x, lightDir->y, lightDir->z, 0x10, + guLookAtHilite(&sActorHiliteMtx, lookAt, *hiliteP, correctedEyeX, eye->y, eye->z, object->x, object->y, object->z, + 0.0f, 1.0f, 0.0f, lightDir->x, lightDir->y, lightDir->z, lightDir->x, lightDir->y, lightDir->z, 0x10, 0x10); gSPLookAt(dl++, lookAt); - gDPSetHilite1Tile(dl++, 1, *hilite, 0x10, 0x10); + gDPSetHilite1Tile(dl++, 1, *hiliteP, 0x10, 0x10); return dl; } @@ -1803,56 +1820,86 @@ PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor) { return dest; } -f32 func_800B82EC(Actor* actor, Player* player, s16 angle) { - f32 temp_f12; - s16 temp_v0 = BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), angle); - s16 yaw = ABS_ALT(temp_v0); +/** + * Returns the squared xyz distance from the actor to Player. + * + * This distance will be adjusted smaller if Player is already targeting an actor. The more Player is facing the actor, + * the smaller the distance is adjusted. + */ +f32 Target_GetAdjustedDistSq(Actor* actor, Player* player, s16 playerShapeYaw) { + f32 adjDistSq; + s16 yawDiff; - if (player->targetedActor != NULL) { - if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_CANT_LOCK_ON))) { + // The yaw, with player as the origin, from where player is facing to where the actor is positioned + yawDiff = ABS_ALT(BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), playerShapeYaw)); + + if (player->lockOnActor != NULL) { + if ((yawDiff > 0x4000) || (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { return FLT_MAX; } - temp_f12 = actor->xyzDistToPlayerSq - ((actor->xyzDistToPlayerSq * 0.8f) * ((0x4000 - yaw) * (1.0f / 0x8000))); - return temp_f12; + // Linear scaling, yaw being 90 degree means it will return the original distance, 0 degree will adjust to 60% + // of the distance + adjDistSq = + actor->xyzDistToPlayerSq - ((actor->xyzDistToPlayerSq * 0.8f) * ((0x4000 - yawDiff) * (1.0f / 0x8000))); + return adjDistSq; } - if (yaw >= 0x2AAB) { + if (yawDiff > (0x10000 / 6)) { return FLT_MAX; } return actor->xyzDistToPlayerSq; } #define TARGET_RANGE(range, leash) \ - { SQ(range), (f32)range / leash } + { SQ(range), (f32)(range) / (leash) } -TargetRangeParams gTargetRanges[] = { - TARGET_RANGE(70, 140), TARGET_RANGE(170, 255), TARGET_RANGE(280, 5600), TARGET_RANGE(350, 525), - TARGET_RANGE(700, 1050), TARGET_RANGE(1000, 1500), TARGET_RANGE(100, 105.36842), TARGET_RANGE(140, 163.33333), - TARGET_RANGE(240, 576), TARGET_RANGE(280, 280000), TARGET_RANGE(2500, 3750), +TargetRangeParams gTargetRanges[TARGET_MODE_MAX] = { + TARGET_RANGE(70, 140), // TARGET_MODE_0 + TARGET_RANGE(170, 255), // TARGET_MODE_1 + TARGET_RANGE(280, 5600), // TARGET_MODE_2 + TARGET_RANGE(350, 525), // TARGET_MODE_3 + TARGET_RANGE(700, 1050), // TARGET_MODE_4 + TARGET_RANGE(1000, 1500), // TARGET_MODE_5 + TARGET_RANGE(100, 105.36842), // TARGET_MODE_6 + TARGET_RANGE(140, 163.33333), // TARGET_MODE_7 + TARGET_RANGE(240, 576), // TARGET_MODE_8 + TARGET_RANGE(280, 280000), // TARGET_MODE_9 + TARGET_RANGE(2500, 3750), // TARGET_MODE_10 }; -s32 func_800B83BC(Actor* actor, f32 arg1) { - return arg1 < gTargetRanges[actor->targetMode].rangeSq; +/** + * Checks if an actor at distance `distSq` is inside the range specified by its targetMode + */ +s32 Target_IsActorInRange(Actor* actor, f32 distSq) { + return distSq < gTargetRanges[actor->targetMode].rangeSq; } -s32 func_800B83F8(Actor* actor, Player* player, s32 flag) { - if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_1) || (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { +/** + * Returns true if the actor is outside the leash distance to player. + * + * Passing true to ignoreLeash avoids the distance and yaw checks, and considers the actor inside the leash distance. + */ +s32 Target_OutsideLeashRange(Actor* actor, Player* player, s32 ignoreLeash) { + if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_TARGETABLE) || + (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { return true; } - if (!flag) { - s16 yaw = BINANG_SUB(actor->yawTowardsPlayer, 0x8000) - player->actor.shape.rot.y; - s16 phi_v1 = ABS_ALT(yaw); - f32 dist; + if (!ignoreLeash) { + s16 yawDiff; + f32 distSq; - if ((player->targetedActor == NULL) && (phi_v1 >= 0x2AAB)) { - dist = FLT_MAX; + // The yaw, with player as the origin, from where player is facing to where the actor is positioned + yawDiff = ABS_ALT(BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), player->actor.shape.rot.y)); + + if ((player->lockOnActor == NULL) && (yawDiff > (0x10000 / 6))) { + distSq = FLT_MAX; } else { - dist = actor->xyzDistToPlayerSq; + distSq = actor->xyzDistToPlayerSq; } - return !func_800B83BC(actor, gTargetRanges[actor->targetMode].leashScale * dist); + return !Target_IsActorInRange(actor, gTargetRanges[actor->targetMode].leashScale * distSq); } return false; @@ -1911,7 +1958,7 @@ s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRan if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || ((exchangeItemAction > PLAYER_IA_NONE) && Player_InCsMode(play)) || - (!actor->isTargeted && + (!actor->isLockedOn && ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) || (xzRange < actor->xzDistToPlayer)))) { return false; @@ -1971,7 +2018,7 @@ s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) { if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) && (talkActor != NULL)) { player->talkActor = actor2; - player->targetedActor = actor2; + player->lockOnActor = actor2; return true; } @@ -2372,7 +2419,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto actorCtx->absoluteSpace = NULL; Actor_SpawnEntry(actorCtx, actorEntry, play); - Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); + Target_Init(&actorCtx->targetCtx, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); Actor_InitHalfDaysBit(actorCtx); Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL); Actor_SpawnHorse(play, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); @@ -2473,13 +2520,13 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { actor->flags &= ~ACTOR_FLAG_1000000; if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) { - if (actor == params->player->targetedActor) { - actor->isTargeted = true; + if (actor == params->player->lockOnActor) { + actor->isLockedOn = true; } else { - actor->isTargeted = false; + actor->isLockedOn = false; } - if ((actor->targetPriority != 0) && (params->player->targetedActor == NULL)) { + if ((actor->targetPriority != 0) && (params->player->lockOnActor == NULL)) { actor->targetPriority = 0; } @@ -2604,22 +2651,22 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } } - actor = player->targetedActor; + actor = player->lockOnActor; if ((actor != NULL) && (actor->update == NULL)) { actor = NULL; - func_80123DA4(player); + Player_Untarget(player); } if ((actor == NULL) || (player->unk_738 < 5)) { actor = NULL; - if (actorCtx->targetContext.unk4B != 0) { - actorCtx->targetContext.unk4B = 0; + if (actorCtx->targetCtx.rotZTick != 0) { + actorCtx->targetCtx.rotZTick = 0; Audio_PlaySfx(NA_SE_SY_LOCK_OFF); } } if (!(player->stateFlags1 & PLAYER_STATE1_2)) { - func_800B5814(&actorCtx->targetContext, player, actor, &play->state); + Target_Update(&actorCtx->targetCtx, player, actor, play); } TitleCard_Update(&play->state, &actorCtx->titleCtxt); @@ -3396,21 +3443,21 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { Actor* newHead; ActorOverlay* overlayEntry = actor->overlayEntry; - if ((player != NULL) && (actor == player->targetedActor)) { - func_80123DA4(player); + if ((player != NULL) && (actor == player->lockOnActor)) { + Player_Untarget(player); Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), CAM_MODE_NORMAL); } - if (actor == actorCtx->targetContext.arrowPointedActor) { - actorCtx->targetContext.arrowPointedActor = NULL; + if (actor == actorCtx->targetCtx.fairyActor) { + actorCtx->targetCtx.fairyActor = NULL; } - if (actor == actorCtx->targetContext.unk8C) { - actorCtx->targetContext.unk8C = NULL; + if (actor == actorCtx->targetCtx.forcedTargetActor) { + actorCtx->targetCtx.forcedTargetActor = NULL; } - if (actor == actorCtx->targetContext.bgmEnemy) { - actorCtx->targetContext.bgmEnemy = NULL; + if (actor == actorCtx->targetCtx.bgmEnemy) { + actorCtx->targetCtx.bgmEnemy = NULL; } AudioSfx_StopByPos(&actor->projectedPos); @@ -3427,7 +3474,7 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { return newHead; } -s32 func_800BB59C(PlayState* play, Actor* actor) { +s32 Target_InTargetableScreenRegion(PlayState* play, Actor* actor) { s16 x; s16 y; @@ -3436,110 +3483,156 @@ s32 func_800BB59C(PlayState* play, Actor* actor) { return (x > -20) && (x < gScreenWidth + 20) && (y > -160) && (y < gScreenHeight + 160); } -void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, s32 actorCategory) { - PlayState* play = (PlayState*)gameState; - f32 temp_f0_2; - Actor* targetedActor; - Actor* actor; - s32 phi_s2; - CollisionPoly* sp80; - s32 sp7C; - Vec3f sp70; +/** + * Search for targetable actors of the `actorCategory` category. + * + * Looks for the actor of said category with higher targetPriority and the one that is nearest to player. This actor + * must be within the range (relative to player) speicified by its targetMode. + * + * The actor must be on-screen + * + * The highest priority actor is stored in `sTargetablePrioritizedActor`, while the nearest actor is stored in + * `sTargetableNearestActor`. The higher priority / smaller distance of those actors are stored in + * `sTargetablePrioritizedPriority` and `sTargetableNearestActorDistSq`. + * + * There is not much info to infer anything about ACTOR_FLAG_40000000, D_801ED8C4/D_801ED8C0, D_801ED8D8/D_801ED8D0. + * All appear unused in any meaningful way. + * + * For an actor to be taken in consideration by this function it needs: + * - Non-NULL update function (maybe obvious?) + * - Not be Player itself. + * - It must be targetable or ACTOR_FLAG_40000000 + * - Not be the already targeted actor, unless it has the ACTOR_FLAG_80000 flag + * - Be withing the range specified by its targetMode. + * - It must be on-screen (within a margin) + * - Must not be blocked by a surface (?) + * + * This function also checks for the nearest enemy actor, which allows determining if enemy background music should be + * played. This actor is stored in `targetContext.bgmEnemy` and its distance is stored in `sBgmEnemyDistSq` + * + * This function is expected to be called with almost every actor category in each cycle. On a new cycle its global + * variables must be reset by the caller, otherwise the information of the previous cycle will be retained on this one. + */ +void Target_FindTargetableActorForCategory(PlayState* play, ActorContext* actorCtx, Player* player, + ActorType actorCategory) { + f32 distSq; + Actor* actor = actorCtx->actorLists[actorCategory].first; + Actor* lockOnActor = player->lockOnActor; + s32 isNearestTargetableActor; s32 phi_s2_2; - actor = actorCtx->actorLists[actorCategory].first; - targetedActor = player->targetedActor; - while (actor != NULL) { - if ((actor->update != NULL) && ((Player*)actor != player)) { - if (actor->flags & (ACTOR_FLAG_40000000 | ACTOR_FLAG_1)) { - if ((actorCategory == ACTORCAT_ENEMY) && CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1)) { - if ((actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sBgmEnemyDistSq)) { - actorCtx->targetContext.bgmEnemy = actor; - sBgmEnemyDistSq = actor->xyzDistToPlayerSq; - } - } + for (; actor != NULL; actor = actor->next) { + if ((actor->update == NULL) || ((Player*)actor == player)) { + continue; + } - if ((actor != targetedActor) || (actor->flags & ACTOR_FLAG_80000)) { - temp_f0_2 = func_800B82EC(actor, player, D_801ED8DC); - phi_s2_2 = (actor->flags & ACTOR_FLAG_1) != 0; - if (phi_s2_2) { - phi_s2_2 = temp_f0_2 < D_801ED8C8; - } - phi_s2 = phi_s2_2; - phi_s2_2 = (actor->flags & ACTOR_FLAG_40000000) != 0; - if (phi_s2_2) { - phi_s2_2 = temp_f0_2 < D_801ED8D0; - } + // Actor must be at least either targetable or ACTOR_FLAG_40000000 + if (!(actor->flags & (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000000))) { + continue; + } - if (((phi_s2) || (phi_s2_2)) && (func_800B83BC(actor, temp_f0_2))) { - if (func_800BB59C(play, actor)) { - if (((!BgCheck_CameraLineTest1(&play->colCtx, &player->actor.focus.pos, &actor->focus.pos, - &sp70, &sp80, true, true, true, true, &sp7C)) || - (SurfaceType_IsIgnoredByProjectiles(&play->colCtx, sp80, sp7C)))) { - if (actor->targetPriority != 0) { - if ((phi_s2 != 0) && (actor->targetPriority < D_801ED8D4)) { - D_801ED8BC = actor; - D_801ED8D4 = actor->targetPriority; - } - if ((phi_s2_2 != 0) && (actor->targetPriority < D_801ED8D8)) { - D_801ED8C4 = actor; - D_801ED8D8 = actor->targetPriority; - } - } else { - if (phi_s2 != 0) { - D_801ED8B8 = actor; - D_801ED8C8 = temp_f0_2; - } - if (phi_s2_2 != 0) { - D_801ED8C0 = actor; - D_801ED8D0 = temp_f0_2; - } - } - } - } - } - } + // Determine the closest enemy actor to player within a range. Used for playing enemy background music. + if ((actorCategory == ACTORCAT_ENEMY) && + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { + if ((actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sBgmEnemyDistSq)) { + actorCtx->targetCtx.bgmEnemy = actor; + sBgmEnemyDistSq = actor->xyzDistToPlayerSq; } } - actor = actor->next; + // If this actor is the currently targeted one, then ignore it unless it has the ACTOR_FLAG_80000 flag + if ((actor == lockOnActor) && !(actor->flags & ACTOR_FLAG_80000)) { + continue; + } + + distSq = Target_GetAdjustedDistSq(actor, player, sTargetPlayerRotY); + + isNearestTargetableActor = (actor->flags & ACTOR_FLAG_TARGETABLE) && (distSq < sTargetableNearestActorDistSq); + phi_s2_2 = (actor->flags & ACTOR_FLAG_40000000) && (distSq < D_801ED8D0); + + if (!isNearestTargetableActor && !phi_s2_2) { + continue; + } + + if (Target_IsActorInRange(actor, distSq) && Target_InTargetableScreenRegion(play, actor)) { + CollisionPoly* poly; + s32 bgId; + Vec3f posResult; + + if (BgCheck_CameraLineTest1(&play->colCtx, &player->actor.focus.pos, &actor->focus.pos, &posResult, &poly, + true, true, true, true, &bgId)) { + if (!SurfaceType_IsIgnoredByProjectiles(&play->colCtx, poly, bgId)) { + continue; + } + } + + if (actor->targetPriority != 0) { + if (isNearestTargetableActor && (actor->targetPriority < sTargetablePrioritizedPriority)) { + sTargetablePrioritizedActor = actor; + sTargetablePrioritizedPriority = actor->targetPriority; + } + if (phi_s2_2 && (actor->targetPriority < D_801ED8D8)) { + D_801ED8C4 = actor; + D_801ED8D8 = actor->targetPriority; + } + } else { + if (isNearestTargetableActor) { + sTargetableNearestActor = actor; + sTargetableNearestActorDistSq = distSq; + } + if (phi_s2_2) { + D_801ED8C0 = actor; + D_801ED8D0 = distSq; + } + } + } } } -u8 D_801AED8C[] = { +u8 sTargetableActorCategories[] = { ACTORCAT_BOSS, ACTORCAT_ENEMY, ACTORCAT_BG, ACTORCAT_EXPLOSIVES, ACTORCAT_NPC, ACTORCAT_ITEMACTION, ACTORCAT_CHEST, ACTORCAT_SWITCH, ACTORCAT_PROP, ACTORCAT_MISC, ACTORCAT_DOOR, ACTORCAT_SWITCH, }; -void func_800BB8EC(GameState* gameState, ActorContext* actorCtx, Actor** arg2, Actor** arg3, Player* player) { +/** + * Search for the nearest targetable actor. + * + * The specific criteria is specified in Target_FindTargetableActorForCategory. + * + * The actor found is stored in the targetableP parameter. It may be NULL if no actor that fulfills the criteria is + * found. + */ +void Target_GetTargetActor(PlayState* play, ActorContext* actorCtx, Actor** targetableP, Actor** arg3, Player* player) { u8* actorCategories; s32 i; - D_801ED8B8 = D_801ED8BC = D_801ED8C0 = D_801ED8C4 = NULL; - D_801ED8C8 = D_801ED8D0 = sBgmEnemyDistSq = FLT_MAX; - D_801ED8D4 = D_801ED8D8 = INT32_MAX; + sTargetableNearestActor = sTargetablePrioritizedActor = D_801ED8C0 = D_801ED8C4 = NULL; + sTargetableNearestActorDistSq = D_801ED8D0 = sBgmEnemyDistSq = FLT_MAX; + sTargetablePrioritizedPriority = D_801ED8D8 = INT32_MAX; - actorCtx->targetContext.bgmEnemy = NULL; - D_801ED8DC = player->actor.shape.rot.y; + actorCtx->targetCtx.bgmEnemy = NULL; + sTargetPlayerRotY = player->actor.shape.rot.y; - actorCategories = D_801AED8C; + actorCategories = sTargetableActorCategories; + // Try to search for a targetable actor that's a Boss, Enemy or Bg first for (i = 0; i < 3; i++) { - func_800BB604(gameState, actorCtx, player, *actorCategories); + Target_FindTargetableActorForCategory(play, actorCtx, player, *actorCategories); actorCategories++; } - if (D_801ED8B8 == NULL) { - for (; i < ARRAY_COUNT(D_801AED8C); i++) { - func_800BB604(gameState, actorCtx, player, *actorCategories); + // If no actor in the above categories was found then try to search for one in every other category + if (sTargetableNearestActor == NULL) { + for (; i < ARRAY_COUNT(sTargetableActorCategories); i++) { + Target_FindTargetableActorForCategory(play, actorCtx, player, *actorCategories); actorCategories++; } } - if (D_801ED8B8 == NULL) { - *arg2 = D_801ED8BC; + if (sTargetableNearestActor == NULL) { + *targetableP = sTargetablePrioritizedActor; } else { - *arg2 = D_801ED8B8; + *targetableP = sTargetableNearestActor; } if (D_801ED8C0 == NULL) { @@ -3810,7 +3903,7 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16 s32 Actor_IsTargeted(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); - if ((player->stateFlags3 & PLAYER_STATE3_80000000) && actor->isTargeted) { + if ((player->stateFlags3 & PLAYER_STATE3_80000000) && actor->isLockedOn) { return true; } @@ -3823,7 +3916,7 @@ s32 Actor_IsTargeted(PlayState* play, Actor* actor) { s32 Actor_OtherIsTargeted(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); - if ((player->stateFlags3 & PLAYER_STATE3_80000000) && !actor->isTargeted) { + if ((player->stateFlags3 & PLAYER_STATE3_80000000) && !actor->isLockedOn) { return true; } @@ -4481,10 +4574,10 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { } if (arg3 < phi_f2) { - actor->flags &= ~ACTOR_FLAG_1; + actor->flags &= ~ACTOR_FLAG_TARGETABLE; Math_SmoothStepToS(&arg2, 0, 6, 0x14, 1); } else { - actor->flags |= ACTOR_FLAG_1; + actor->flags |= ACTOR_FLAG_TARGETABLE; Math_SmoothStepToS(&arg2, 0xFF, 6, 0x14, 1); } diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index 3f9f6b90e..1fa4d4cf2 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -1,7 +1,7 @@ #include "global.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnAObj*)thisx) @@ -46,7 +46,7 @@ static ColliderCylinderInit sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnAObj_Init(Actor* thisx, PlayState* play) { diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 02666fc4c..e2f31c404 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -231,7 +231,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos); enHy->actor.world.rot.y = enHy->actor.shape.rot.y; enHy->actor.gravity = 0.0f; - enHy->actor.flags &= ~ACTOR_FLAG_1; + enHy->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } return ret; @@ -239,7 +239,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { s32 EnHy_SetPointFowards(EnHy* enHy, PlayState* play, f32 gravity, s16 animIndex) { enHy->actor.gravity = gravity; - enHy->actor.flags |= ACTOR_FLAG_1; + enHy->actor.flags |= ACTOR_FLAG_TARGETABLE; EnHy_ChangeObjectAndAnim(enHy, play, animIndex); enHy->curPoint++; return false; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index cd458e331..3ba6a9e99 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6400,7 +6400,7 @@ void Interface_Draw(PlayState* play) { Minimap_Draw(play); if ((R_PAUSE_BG_PRERENDER_STATE != 2) && (R_PAUSE_BG_PRERENDER_STATE != 3)) { - Actor_DrawZTarget(&play->actorCtx.targetContext, play); + Target_Draw(&play->actorCtx.targetCtx, play); } Gfx_SetupDL39_Overlay(play->state.gfxCtx); diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index a109dab17..44427d54c 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,9 +1,9 @@ #include "prevent_bss_reordering.h" #include "global.h" -#define FLAGS \ - (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000 | \ - ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | \ + ACTOR_FLAG_2000000 | ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000) ActorFunc sPlayerCallInitFunc; ActorFunc sPlayerCallDestroyFunc; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index cd91ee42d..e272bbfea 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -518,7 +518,7 @@ s32 func_80123448(PlayState* play) { Player* player = GET_PLAYER(play); return (player->stateFlags1 & PLAYER_STATE1_400000) && - (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->targetedActor == NULL)); + (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->lockOnActor == NULL)); } // TODO: Player_IsGoronOrDeku is a temporary name until we have more info on this function. @@ -1315,9 +1315,8 @@ void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, Pla player->itemAction = itemAction; } -// Player_Untarget / Player_StopTargeting? -void func_80123DA4(Player* player) { - player->targetedActor = NULL; +void Player_Untarget(Player* player) { + player->lockOnActor = NULL; player->stateFlags2 &= ~PLAYER_STATE2_2000; } @@ -1335,14 +1334,14 @@ void func_80123DC0(Player* player) { ~(PLAYER_STATE1_8000 | PLAYER_STATE1_10000 | PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); } - func_80123DA4(player); + Player_Untarget(player); } void func_80123E90(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); func_80123DC0(player); - player->targetedActor = actor; + player->lockOnActor = actor; player->unk_A78 = actor; player->stateFlags1 |= PLAYER_STATE1_10000; Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, actor); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 427cc85d0..4baff41ce 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -865,7 +865,7 @@ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemI case SUBS_OFFER_MODE_AUTO_TARGETED: //! @bug: Both x and y conditionals are always true, || should be an && if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && - (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isTargeted) { + (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isLockedOn) { actor->flags |= ACTOR_FLAG_10000; canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } 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 c226c89f3..706b86b27 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 @@ -83,16 +83,16 @@ void func_80BD66AC(BgHakaTomb* this, PlayState* play) { s16 csId; if (Flags_GetClear(play, this->dyna.actor.room)) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId <= CS_ID_NONE) && Flags_GetClear(play, this->dyna.actor.room)) { - this->dyna.actor.flags |= ACTOR_FLAG_1; - if (this->dyna.actor.isTargeted) { + this->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; + if (this->dyna.actor.isLockedOn) { func_80BD6754(this); } } else { - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_Boss_01/z_boss_01.c b/src/overlays/actors/ovl_Boss_01/z_boss_01.c index 8d13ab6d3..3ca53ff7f 100644 --- a/src/overlays/actors/ovl_Boss_01/z_boss_01.c +++ b/src/overlays/actors/ovl_Boss_01/z_boss_01.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss01*)thisx) 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 255e2d3f7..751aa5523 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -13,7 +13,7 @@ #include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss02*)thisx) @@ -593,7 +593,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, BHEART_PARAM_NORMAL); } - this->actor.targetMode = 10; + this->actor.targetMode = TARGET_MODE_10; this->subCamUp.z = this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; if (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_STATIC) { @@ -601,7 +601,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { play->specialEffects = (void*)sEffects; this->actor.update = Boss02_Static_Update; this->actor.draw = Boss02_Static_Draw; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->playerScale = 0.01f; if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_55) || (sBlueWarp != NULL)) { this->unk_1D20 = 0; @@ -772,7 +772,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_0195 != 0) { this->actor.world.rot.z = Math_SinS(this->unk_014C * 0x1200) * 0xE00; } else { @@ -1192,9 +1192,9 @@ void Boss02_Tail_Update(Actor* thisx, PlayState* play) { } if ((this->actor.focus.pos.y < BgCheck_EntityRaycastFloor1(&play->colCtx, &outPoly, &pos)) || sIsInGiantMode) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } } @@ -1816,7 +1816,7 @@ void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_StopManual(play, &play->csCtx); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; player->stateFlags1 &= ~PLAYER_STATE1_100; this->playerScale = 0.01f; Play_DisableMotionBlur(); @@ -2227,7 +2227,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; Cutscene_StopManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1D20 = 0; sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3; sRedTwinmold->unk_0146[0] = sBlueTwinmold->unk_0146[0] = 60; @@ -2289,7 +2289,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { Cutscene_StopManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->unk_1D20 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; sp68->unk_0144 = 10; if ((sRedTwinmold->unk_0144 >= 10) && (sBlueTwinmold->unk_0144 >= 10)) { f32 phi_f0; 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 10f988f0b..168da5368 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -57,7 +57,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_water_effect/object_water_effect.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss03*)thisx) @@ -477,7 +477,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { this->jointTable[i].z = Math_SinS(this->unk_240 * 0x10 + i * 19000) * 4000.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; return; } @@ -508,7 +508,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { sGyorgEffects[i].type = GYORG_EFFECT_NONE; } - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; this->actor.colChkInfo.mass = MASS_HEAVY; this->actor.colChkInfo.health = 10; @@ -546,7 +546,7 @@ void func_809E344C(Boss03* this, PlayState* play) { this->actionFunc = func_809E34B8; Animation_MorphToLoop(&this->skelAnime, &gGyorgFastSwimmingAnim, -15.0f); this->unk_274 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -756,7 +756,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { this->unk_276 = 0x1000; this->unk_2BD = true; this->unk_278 = 15.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SkelAnime_Update(&this->skelAnime); @@ -1169,7 +1169,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->subCamAt.y = player->actor.world.pos.y + 30.0f; this->csState = 1; this->csTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2D5 = true; this->subCamFov = KREG(14) + 60.0f; @@ -1423,7 +1423,7 @@ void Boss03_SetupDeathCutscene(Boss03* this, PlayState* play) { this->workTimer[WORK_TIMER_UNK0_C] = 0; this->unk_242 = 0; this->csState = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void Boss03_DeathCutscene(Boss03* this, PlayState* play) { 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 4f4f907c5..82495ea1e 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -8,7 +8,7 @@ #include "z64shrink_window.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss04*)thisx) @@ -164,7 +164,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->actor.params = 0x64; Actor_SetScale(&this->actor, 0.1f); - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; this->actor.hintId = TATL_HINT_ID_WART; this->actor.colChkInfo.health = 20; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -232,7 +232,7 @@ void Boss04_Destroy(Actor* thisx, PlayState* play) { void func_809EC544(Boss04* this) { this->actionFunc = func_809EC568; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void func_809EC568(Boss04* this, PlayState* play) { @@ -522,7 +522,7 @@ void func_809ED224(Boss04* this) { this->unk_2D0 = 10000.0f; this->unk_2C8 = 200; Actor_PlaySfx(&this->actor, NA_SE_EN_ME_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Audio_RestorePrevBgm(); this->unk_1F6 = 10; } @@ -543,7 +543,7 @@ void func_809ED2A0(Boss04* this, PlayState* play) { } if (this->unk_1F8 == 3) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_700 = 0.0f; this->unk_6FC = 0.0f; this->unk_6F8 = 0.0f; @@ -749,9 +749,9 @@ void Boss04_Update(Actor* thisx, PlayState* play2) { func_809ED45C(this, play); if (this->unk_2CC > 3000.0f) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider1.base); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider2.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider2.base); diff --git a/src/overlays/actors/ovl_Boss_05/z_boss_05.c b/src/overlays/actors/ovl_Boss_05/z_boss_05.c index 314370079..535a3a8f5 100644 --- a/src/overlays/actors/ovl_Boss_05/z_boss_05.c +++ b/src/overlays/actors/ovl_Boss_05/z_boss_05.c @@ -6,7 +6,7 @@ #include "z_boss_05.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((Boss05*)thisx) diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index a65b1185a..38ca4f799 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -11,7 +11,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_knight/object_knight.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss06*)thisx) @@ -152,7 +152,7 @@ void Boss06_Init(Actor* thisx, PlayState* play) { this->unk_200[i] = temp_v0[i]; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void Boss06_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Boss_07/z_boss_07.c b/src/overlays/actors/ovl_Boss_07/z_boss_07.c index 824c70fa2..d2bc5d6be 100644 --- a/src/overlays/actors/ovl_Boss_07/z_boss_07.c +++ b/src/overlays/actors/ovl_Boss_07/z_boss_07.c @@ -7,7 +7,7 @@ #include "z_boss_07.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss07*)thisx) diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c index d9a7cb348..9c759b63c 100644 --- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c +++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c @@ -8,7 +8,7 @@ #include "z64quake.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((BossHakugin*)thisx) @@ -203,7 +203,7 @@ static CollisionCheckInfoInit D_80B0EA80 = { 30, 80, 100, MASS_IMMOVABLE }; static InitChainEntry D_80B0EAD8[] = { ICHAIN_S8(hintId, 27, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 27, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_STOP), }; 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 f5f88b80e..79e52d082 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -6,7 +6,7 @@ #include "z_dm_ah.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAh*)thisx) @@ -168,7 +168,7 @@ void DmAh_Init(Actor* thisx, PlayState* play) { OBJECT_AH_LIMB_MAX); this->animIndex = DMAH_ANIM_NONE; DmAh_ChangeAnim(this, DMAH_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_27C |= 1; if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { 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 ef6367ca2..91fd6ea80 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -6,7 +6,7 @@ #include "z_dm_al.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAl*)thisx) @@ -84,7 +84,7 @@ void DmAl_Init(Actor* thisx, PlayState* play) { MADAME_AROMA_LIMB_MAX); this->animIndex = MADAME_AROMA_ANIM_NONE; DmAl_ChangeAnim(this, MADAME_AROMA_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmAl_HandleCutscene; } 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 5e4300084..dfcb610c8 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -8,7 +8,7 @@ #include "objects/object_an4/object_an4.h" #include "objects/object_msmo/object_msmo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAn*)thisx) @@ -199,7 +199,7 @@ void func_80C1C958(DmAn* this, PlayState* play) { this->animIndex = DMAN_ANIM_NONE; DmAn_ChangeAnim(this, play, DMAN_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; this->actor.draw = func_80C1D0B0; 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 baeba3ce5..a0fa8d6b3 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -6,7 +6,7 @@ #include "z_dm_bal.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((DmBal*)thisx) @@ -70,7 +70,7 @@ static AnimationInfo sAnimationInfo[TINGLE_CS_ANIM_MAX] = { void DmBal_Init(Actor* thisx, PlayState* play) { DmBal* this = THIS; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.uncullZoneForward = 3000.0f; Actor_SetScale(&this->actor, 0.02f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); 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 80d1bef15..0948b7afc 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -146,7 +146,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; DmChar08* this = THIS; - thisx->targetMode = 5; + thisx->targetMode = TARGET_MODE_5; this->eyeMode = TURTLE_EYEMODE_CLOSED; thisx->targetArrowOffset = 120.0f; ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f); @@ -201,7 +201,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->eyeMode = TURTLE_EYEMODE_BLINK_STRAIGHT; this->unk_207 = 0; this->unk_208 = 0; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; if (gSaveContext.save.entrance == ENTRANCE(ZORA_CAPE, 8)) { this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->actionFunc = func_80AAFAC4; @@ -220,7 +220,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->unk_207 = 0; this->unk_208 = 0; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80AAFAE4; this->unk_1F0 = 1.0f; break; @@ -300,7 +300,7 @@ void func_80AAF884(DmChar08* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { 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->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80AAF8F4; } } 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 33df49243..2f7435053 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -8,7 +8,7 @@ #include "objects/object_an4/object_an4.h" #include "objects/object_msmo/object_msmo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmGm*)thisx) @@ -199,7 +199,7 @@ void func_80C248A8(DmGm* this, PlayState* play) { this->animIndex = DMGM_ANIM_NONE; DmGm_ChangeAnim(this, play, DMGM_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; this->actor.draw = func_80C25000; 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 327f25868..cf62f4557 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -6,7 +6,7 @@ #include "z_dm_nb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmNb*)thisx) @@ -83,7 +83,7 @@ void DmNb_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX); this->animIndex = DMNB_ANIM_NONE; DmNb_ChangeAnim(this, DMNB_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmNb_HandleCutscene; } 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 acfd72b76..9b1d0f048 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1768,7 +1768,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->tatlMessageTimer++; if (this->tatlMessageTimer > 800) { this->tatlMessageTimer = 0; @@ -1793,7 +1793,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { void DmStk_ClockTower_Idle(DmStk* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (this->animIndex == SK_ANIM_CALL_DOWN_MOON_LOOP) { this->actor.targetArrowOffset = 3100.0f; diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 3c12f1bbb..6eb910d2d 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -220,7 +220,7 @@ s32 func_80C2291C(DmTag* this, PlayState* play) { void func_80C229AC(DmTag* this, PlayState* play) { SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } void DmTag_DoNothing(DmTag* this, PlayState* play) { @@ -246,12 +246,12 @@ void DmTag_Init(Actor* thisx, PlayState* play) { this->unk_18E = 2; this->unk_18C = 0; SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = DmTag_DoNothing; } else if (this->actor.room == 2) { Actor_Kill(&this->actor); } else { - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->unk_18E = 1; this->unk_18C = 0; this->actionFunc = func_80C229AC; diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index 586704c3b..8d3fc8db4 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -82,7 +82,7 @@ void DoorAna_Init(Actor* thisx, PlayState* play) { DoorAna_SetupAction(this, DoorAna_WaitOpen); } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } void DoorAna_Destroy(Actor* thisx, PlayState* play) { @@ -130,7 +130,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { s32 grottoType = DOORANA_GET_TYPE(&this->actor); if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) { - if ((this->actor.targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && + if ((this->actor.targetMode != TARGET_MODE_0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) && (player->unk_AE7 == 0)) { @@ -162,10 +162,10 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { (this->actor.xzDistToPlayer <= 20.0f) && (this->actor.playerHeightRel >= -50.0f) && (this->actor.playerHeightRel <= 15.0f)) { player->stateFlags1 |= PLAYER_STATE1_80000000; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; } else { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } } diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index 8244c7fb6..ea443472f 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -83,7 +83,7 @@ void ElfMsg2_Init(Actor* thisx, PlayState* play) { ElfMsg2_SetupAction(this, func_8096EFD0); } else { ElfMsg2_SetupAction(this, func_8096EF98); - this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_1); + this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_TARGETABLE); this->actor.textId = func_8096EE50(this); } this->actor.shape.rot.z = 0; @@ -137,7 +137,7 @@ void func_8096EFD0(ElfMsg2* this, PlayState* play) { if ((this->actor.home.rot.y < 0) && (this->actor.home.rot.y >= -0x80) && (Flags_GetSwitch(play, -this->actor.home.rot.y - 1))) { ElfMsg2_SetupAction(this, func_8096EF98); - this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_1); + this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_TARGETABLE); this->actor.textId = func_8096EE50(this); } } 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 1ac67f889..09928dfe9 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -7,7 +7,7 @@ #include "z_en_ah.h" #include "objects/object_ah/object_ah.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAh*)thisx) @@ -499,11 +499,11 @@ void func_80BD36B8(EnAh* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BD3DB0, &sp18) || ((this->unk_1DC != sp18.result) && !func_80BD3548(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1DC = sp18.result; func_80BD3658(this, play); @@ -545,7 +545,7 @@ void EnAh_Init(Actor* thisx, PlayState* play) { EnAh_ChangeAnim(this, ENAH_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_1DC = 0; this->unk_2D8 = 0; 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 4447877ee..0d6ee9380 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -7,7 +7,7 @@ #include "z_en_akindonuts.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAkindonuts*)thisx) @@ -152,7 +152,7 @@ static u16 D_80BF04AC[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -1318,7 +1318,7 @@ void func_80BEEE10(EnAkindonuts* this, PlayState* play) { this->actionFunc = func_80BEEFA8; } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { @@ -1341,7 +1341,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->actionFunc = func_80BEEE10; } else if (this->unk_32C & 0x20) { this->unk_32C &= ~0x20; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_32C &= ~0x4; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 3c3625840..0f8679b3c 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -6,7 +6,7 @@ #include "z_en_al.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAl*)thisx) @@ -702,8 +702,8 @@ s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BDF390(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_4F0 = PLAYER_IA_NONE; this->unk_4C2 = 0; this->unk_4D4 = 40.0f; @@ -787,11 +787,11 @@ void func_80BDF5E8(EnAl* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BDFC70, &sp20) || ((this->unk_35C != sp20.result) && !func_80BDF390(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_35C = sp20.result; this->unk_368 = func_80BDE384(this, play); 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 1aef0a374..916bfca1b 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_400 | ACTOR_FLAG_4 | ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_400 | ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnAm*)thisx) @@ -209,7 +209,7 @@ void EnAm_RemoveEnemyTexture(EnAm* this, PlayState* play) { this->textureBlend -= 10; } else { this->textureBlend = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unkFlag = 0; } } @@ -230,7 +230,7 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) { if (this->textureBlend + 20 >= 255) { this->textureBlend = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->enemyCollider.info.bumper.dmgFlags = 0x81C2C788; this->interactCollider.info.bumper.dmgFlags = 0x760D3877; this->enemyCollider.base.atFlags |= AT_ON; diff --git a/src/overlays/actors/ovl_En_An/z_en_an.c b/src/overlays/actors/ovl_En_An/z_en_an.c index 6b85ffc53..3ab31bfb8 100644 --- a/src/overlays/actors/ovl_En_An/z_en_an.c +++ b/src/overlays/actors/ovl_En_An/z_en_an.c @@ -6,7 +6,7 @@ #include "z_en_an.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAn*)thisx) diff --git a/src/overlays/actors/ovl_En_And/z_en_and.c b/src/overlays/actors/ovl_En_And/z_en_and.c index 8c450a8ac..c244a0c5e 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -6,7 +6,7 @@ #include "z_en_and.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAnd*)thisx) @@ -124,7 +124,7 @@ void EnAnd_Init(Actor* thisx, PlayState* play) { this->animIndex = ENAND_ANIM_NONE; EnAnd_ChangeAnim(this, ENAND_ANIM_0); Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->flags |= 8; this->actionFunc = EnAnd_HandleCutscene; } 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 3adc9ad12..d8b87a81f 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -8,7 +8,7 @@ #include "z_en_ani.h" #include "z64quake.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnAni*)thisx) 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 bfc0e6e5a..eab1c83ce 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 @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Racedog/z_en_racedog.h" #include "overlays/actors/ovl_En_Dg/z_en_dg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnAob01*)thisx) @@ -1114,7 +1114,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { case EVENTINF_DOG_RACE_STATE_NOT_STARTED: EnAob01_InitializeDogTextOffsets(); EnAob01_SpawnDogs(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnAob01_BeforeRace_Idle; break; @@ -1125,7 +1125,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { this->csId = this->actor.csId; EnAob01_Race_FollowSelectedDog(this, play); CutsceneManager_Queue(this->csId); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnAob01_Race_HidePlayer(this, play); this->actionFunc = EnAob01_Race_StartCutscene; break; @@ -1133,7 +1133,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { case EVENTINF_DOG_RACE_STATE_ENDED: EnAob01_InitializeDogTextOffsets(); EnAob01_SpawnDogs(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = EnAob01_AfterRace_GiveRaceResult; break; 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 e8b74f8ec..daba8eea6 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 @@ -33,7 +33,7 @@ ActorInit En_Attack_Niw_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -59,7 +59,7 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { this->randomTargetCenterOffset.z = Rand_CenteredFloat(100.0f); Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; // Unnecessary: this actor does not start with this flag + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Unnecessary: this actor does not start with this flag this->actor.shape.rot.y = this->actor.world.rot.y = (Rand_ZeroOne() - 0.5f) * 60000.0f; this->actionFunc = EnAttackNiw_EnterViewFromOffscreen; } 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 156d7f956..8d1e306bb 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -205,7 +205,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); this->unk_374 = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; switch (BEAVER_GET_PARAM_F00(thisx)) { case 0: phi_v1 = @@ -303,12 +303,12 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { this->unk_2FA = 5; if (this->unk_374 & 2) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_374 |= 0x20; } } else { this->unk_2FA = 0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_374 |= 0x20; } func_80A94B20(play); @@ -322,7 +322,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { case ENTRANCE(WATERFALL_RAPIDS, 3): this->unk_2FA = 0; if (!(this->unk_374 & 2)) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); } if (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 3)) { this->unk_2FA = 0xA; @@ -378,18 +378,18 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { if (this->unk_2FA == 2) { if (!(this->unk_374 & 2)) { this->unk_374 |= 0x20; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); this->actionFunc = func_80A97C24; } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80A95C5C(this, play); } } else { if (this->unk_374 & 2) { this->unk_374 |= 0x20; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } this->actionFunc = func_80A97C24; } @@ -592,7 +592,7 @@ void func_80A95C5C(EnAz* this, PlayState* play) { this->actor.world.pos.y = this->actor.home.pos.y + 120.0f; this->actor.gravity = -1.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_3C0 = 0; this->actionFunc = func_80A95CEC; @@ -627,7 +627,7 @@ void func_80A95DA0(EnAz* this, PlayState* play) { this->actor.gravity = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_374 |= 0x1000; Math_Vec3f_Copy(&this->actor.world.pos, &sp40->curPoint); @@ -650,7 +650,7 @@ void func_80A95E88(EnAz* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } this->unk_374 &= ~0x2000; - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { func_80A95F94(this, play); } } @@ -1620,7 +1620,7 @@ void func_80A97EAC(EnAz* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_374 |= 0x1000; this->unk_3C2 = 0; 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 b2d64c386..bf93ad365 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -6,7 +6,7 @@ #include "z_en_baba.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBaba*)thisx) @@ -513,7 +513,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { this->actor.draw = EnBaba_Draw; this->stateFlags |= BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (play->sceneId == SCENE_BOMYA) { this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; @@ -558,7 +558,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { } else { this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; if (BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_SWAY) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->animIndex = BOMB_SHOP_LADY_ANIM_SWAY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_DoNothing; @@ -672,11 +672,11 @@ void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { ((this->scheduleResult != scheduleOutput.result) && !EnBaba_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = BOMB_SHOP_LADY_SCH_NONE; } else { this->stateFlags |= BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; @@ -686,7 +686,7 @@ void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A39, &this->actor); // "I'm sorry" this->actionFunc = EnBaba_FollowSchedule_Talk; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -744,7 +744,7 @@ void EnBaba_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -4.0f; this->actionFunc = EnBaba_FinishInit; } 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 17eb5c9ef..25f867ec1 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBaguo*)thisx) @@ -133,7 +133,7 @@ void EnBaguo_Init(Actor* thisx, PlayState* play) { this->actor.world.rot.z = 0; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements[0].dim.modelSphere.radius = 30; @@ -146,7 +146,7 @@ void EnBaguo_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -3.0f; this->actor.colChkInfo.damageTable = &sDamageTable; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_HARD; this->actionFunc = EnBaguo_UndergroundIdle; } @@ -165,7 +165,7 @@ void EnBaguo_UndergroundIdle(EnBaguo* this, PlayState* play) { this->actor.world.rot.z = 0; this->actor.world.rot.x = this->actor.world.rot.z; this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBaguo_EmergeFromUnderground; } this->actor.shape.rot.y = this->actor.world.rot.y; @@ -293,7 +293,7 @@ void EnBaguo_RetreatUnderground(EnBaguo* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_APPEAR); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBaguo_UndergroundIdle; } } @@ -354,7 +354,7 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) { this->timer = 30; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.0f); this->collider.elements->dim.scale = 3.0f; this->collider.elements->info.toucher.damage = 8; 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 0bd7dfc0b..e6ac52cee 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -7,7 +7,7 @@ #include "z_en_baisen.h" #include "objects/object_bai/object_bai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBaisen*)thisx) @@ -97,7 +97,7 @@ void EnBaisen_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (this->paramCopy == 0) { diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.c b/src/overlays/actors/ovl_En_Bal/z_en_bal.c index 303baccf6..490517e09 100644 --- a/src/overlays/actors/ovl_En_Bal/z_en_bal.c +++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.c @@ -7,7 +7,7 @@ #include "z_en_bal.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBal*)thisx) 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 cef624ca8..d1de1bb0d 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bat/object_bat.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnBat*)thisx) @@ -315,7 +315,7 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play) { } void EnBat_SetupDie(EnBat* this, PlayState* play) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); this->actor.speed *= Math_CosS(this->actor.world.rot.x); this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; 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 6d96d9e28..06c70aa24 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnBb*)thisx) @@ -370,7 +370,7 @@ void EnBb_SetupDead(EnBb* this, PlayState* play) { } this->actor.flags |= ACTOR_FLAG_10; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBb_Dead; } @@ -488,7 +488,7 @@ void EnBb_Revive(EnBb* this, PlayState* play) { if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.0005f)) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_ON; this->collider.base.atFlags |= AT_ON; this->actor.world.rot.y = this->actor.shape.rot.y; 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 8226fa138..7b9355305 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 @@ -15,7 +15,7 @@ #include "z_en_bba_01.h" #include "objects/object_bba/object_bba.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBba01*)thisx) @@ -158,7 +158,7 @@ void EnBba01_FinishInit(EnHy* this, PlayState* play) { //! @bug: gBbaSkel does not match EnHy's skeleton assumptions. //! Since gBbaSkel has more limbs than expected, joint and morph tables will overflow if (EnHy_Init(this, play, &gBbaSkel, ENHY_ANIM_BBA_6)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnBba01_Draw; this->waitingOnInit = false; if (ENBBA01_GET_PATH_INDEX(&this->actor) == ENBBA01_PATH_INDEX_NONE) { @@ -228,7 +228,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->enHy.collider); Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->enHy.actor.flags &= ~ACTOR_FLAG_1; + this->enHy.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH_INDEX(&this->enHy.actor), ENBBA01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); 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 ddf379c5b..0f9d16a47 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200) #define THIS ((EnBbfall*)thisx) @@ -269,7 +269,7 @@ void EnBbfall_SetupWaitForPlayer(EnBbfall* this) { } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBbfall_WaitForPlayer; } @@ -290,7 +290,7 @@ void EnBbfall_SetupEmerge(EnBbfall* this) { this->collider.base.ocFlags1 |= OC1_ON; this->actor.velocity.y = 17.0f; EnBbfall_EnableColliders(this); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEFALL_APPEAR); this->actionFunc = EnBbfall_Emerge; } 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 0e8727c45..d3fa6ad4a 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -6,7 +6,7 @@ #include "z_en_bee.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBee*)thisx) @@ -98,7 +98,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) { OBJECT_BEE_LIMB_MAX); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->instanceId = sNumLoadedBees; sNumLoadedBees++; diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index 9e5641aad..ac19bdb44 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -32,7 +32,7 @@ ActorInit En_Bh_InitVars = { void EnBh_Init(Actor* thisx, PlayState* play) { EnBh* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); SkelAnime_InitFlex(play, &this->skelAnime, &gBhSkel, &gBhFlyingAnim, this->jointTable, this->morphTable, OBJECT_BH_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index fd3818b01..a147db127 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -7,7 +7,7 @@ #include "z_en_bigokuta.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBigokuta*)thisx) @@ -86,10 +86,8 @@ static ColliderCylinderInit sBodyCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 4, 130, 120, MASS_HEAVY }; static InitChainEntry sInitChain[] = { - ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), - ICHAIN_S8(hintId, TATL_HINT_ID_BIG_OCTO, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_S8(hintId, TATL_HINT_ID_BIG_OCTO, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 33, ICHAIN_STOP), }; 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 f1bd9ae9b..bd17bb873 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -10,7 +10,7 @@ #include "overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) #define THIS ((EnBigpamet*)thisx) @@ -123,9 +123,11 @@ TexturePtr D_80A29754[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE), - ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE), + ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), + ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; s32 D_80A29778 = 0; @@ -364,7 +366,7 @@ void func_80A2811C(EnBigpamet* this, PlayState* play) { void func_80A281B4(EnBigpamet* this) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80A281DC; } @@ -628,7 +630,7 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.params = ENBIGPAMET_0; if ((this->actor.parent->params == GEKKO_ON_SNAPPER) || (this->actor.parent->params == GEKKO_REAR_ON_SNAPPER) || @@ -680,7 +682,7 @@ void func_80A28DC0(EnBigpamet* this, PlayState* play) { void func_80A28E40(EnBigpamet* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRearUpAnim, -2.0f); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->actionFunc = func_80A28E98; } 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 4e9eb8944..cced08a09 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -9,7 +9,7 @@ #include "objects/object_bigpo/object_bigpo.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnBigpo*)thisx) @@ -289,7 +289,7 @@ void EnBigpo_LowerCutsceneSubCamera(EnBigpo* this, PlayState* play) { } void EnBigpo_InitWellBigpo(EnBigpo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_WellWaitForProximity; this->fireRadius = 200.0f; } @@ -488,7 +488,7 @@ void EnBigpo_SetupWarpOut(EnBigpo* this) { this->collider.base.ocFlags1 &= ~OC1_ON; this->rotVelocity = 0x2000; this->idleTimer = 32; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR); this->actionFunc = EnBigpo_WarpingOut; @@ -549,7 +549,7 @@ void EnBigpo_SetupIdleFlying(EnBigpo* this) { this->actor.world.rot.y = this->actor.shape.rot.y; this->collider.base.acFlags |= AC_ON; this->collider.base.ocFlags1 |= OC1_ON; - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_IdleFlying; } @@ -749,7 +749,7 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) { this->actor.velocity.y = 0.0f; this->actor.world.pos.y -= 15.0f; func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_MISC); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); // targetable OFF, enemy music OFF + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); // targetable OFF, enemy music OFF this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_400; this->actionFunc = EnBigpo_LanternFalling; } @@ -816,8 +816,8 @@ void EnBigpo_ScoopSoulAppearing(EnBigpo* this, PlayState* play) { void EnBigpo_SetupScoopSoulIdle(EnBigpo* this) { this->savedHeight = this->actor.world.pos.y; Actor_SetFocus(&this->actor, -10.0f); - this->idleTimer = 400; // 20 seconds - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->idleTimer = 400; // 20 seconds + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_ScoopSoulIdle; } @@ -839,7 +839,7 @@ void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) { } void EnBigpo_SetupScoopSoulLeaving(EnBigpo* this) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10000); // targetable OFF and unknown OFF + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10000); // unknown OFF this->actionFunc = EnBigpo_ScoopSoulFadingAway; } @@ -851,7 +851,7 @@ void EnBigpo_ScoopSoulFadingAway(EnBigpo* this, PlayState* play) { } void EnBigpo_InitDampeMainPo(EnBigpo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_SelectRandomFireLocations; } @@ -897,7 +897,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { randomFirePo->actor.update = EnBigpo_UpdateFire; func_800BC154(play, &play->actorCtx, &randomFirePo->actor, ACTORCAT_PROP); randomFirePo->unk20C = fireIndex; - randomFirePo->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + randomFirePo->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // make invisible by size: 0 Actor_SetScale(&randomFirePo->actor, 0); @@ -1128,7 +1128,7 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, PlayState* play) { } if (Actor_ApplyDamage(&this->actor) == 0) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD); Enemy_StartFinishingBlow(play, &this->actor); if (this->actor.params == BIG_POE_TYPE_SUMMONED) { // dampe type @@ -1163,7 +1163,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) { } if (EnBigpo_ApplyDamage(this, play) == 0) { - if ((this->actor.isTargeted) && (this->actionFunc != EnBigpo_WarpingOut) && + if ((this->actor.isLockedOn) && (this->actionFunc != EnBigpo_WarpingOut) && !(this->collider.base.acFlags & AC_HARD) && (this->actor.category == ACTORCAT_ENEMY)) { this->unk20C++; } else { 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 f4d498a14..744b46e24 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -12,7 +12,7 @@ #include "objects/object_bigslime/object_bigslime.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) #define THIS ((EnBigslime*)thisx) @@ -308,7 +308,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_GEKKO_GIANT_SLIME, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(targetArrowOffset, -13221, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; void EnBigslime_Init(Actor* thisx, PlayState* play2) { @@ -372,7 +372,7 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) { this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(gBigslimeFrozenTexAnim); this->iceShardTexAnim = Lib_SegmentedToVirtual(gBigslimeIceShardTexAnim); this->actor.world.pos.y = GBT_ROOM_5_MIN_Y; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.shadowAlpha = 255; this->gekkoScale = 0.007f; this->actor.shape.rot.y = 0; @@ -765,7 +765,7 @@ void EnBigslime_BreakIntoMinislime(EnBigslime* this, PlayState* play) { EnBigslime_SetPlayerParams(this, play); EnBigslime_EndCutscene(this, play); this->actor.colChkInfo.mass = 50; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_400); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_400); this->actor.flags |= ACTOR_FLAG_200; this->actor.hintId = TATL_HINT_ID_GEKKO_GIANT_SLIME; this->gekkoRot.x = 0; @@ -1001,7 +1001,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { if (this->callTimer == 0) { EnBigslime_EndCutscene(this, play); this->formBigslimeTimer = 2; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnBigslime_SetupIdleNoticePlayer(this); } } else if (this->isAnimFinished) { @@ -2040,7 +2040,7 @@ void EnBigslime_JumpGekko(EnBigslime* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->gekkoCollider.base.acFlags |= AC_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->jumpTimer--; @@ -2352,7 +2352,7 @@ void EnBigslime_SetupCutsceneDefeat(EnBigslime* this, PlayState* play) { this->minislime[i]->actor.params = MINISLIME_DEFEAT_IDLE; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnBigslime_GekkoThaw(this, play); this->actionFunc = EnBigslime_CutsceneDefeat; } 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 0f2850266..81e94d78f 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 @@ -6,7 +6,7 @@ #include "z_en_bji_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBji01*)thisx) @@ -381,7 +381,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.child = NULL; this->animIndex = SHIKASHI_ANIM_NONE; diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index d21340d15..ed68e212f 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -6,7 +6,7 @@ #include "z_en_bjt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBjt*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c index 1dc827057..6abc25f79 100644 --- a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c +++ b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c @@ -6,7 +6,7 @@ #include "z_en_boj_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj01*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c index c5cff183a..ccf96aa67 100644 --- a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c +++ b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c @@ -6,7 +6,7 @@ #include "z_en_boj_02.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj02*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c index f72a5c081..ee00b2b5c 100644 --- a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c +++ b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c @@ -6,7 +6,7 @@ #include "z_en_boj_03.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj03*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c index efb7e96df..8ef2c98ea 100644 --- a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c +++ b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c @@ -6,7 +6,7 @@ #include "z_en_boj_04.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj04*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c index 2a6991922..ccb7f1cef 100644 --- a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c +++ b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c @@ -6,7 +6,7 @@ #include "z_en_boj_05.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj05*)thisx) 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 b40f1c774..7e277f4cf 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 @@ -7,7 +7,7 @@ #include "z_en_bom_bowl_man.h" #include "objects/object_cs/object_cs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBomBowlMan*)thisx) @@ -139,7 +139,7 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_CS_LIMB_MAX); this->unk_2F6 = ENBOMBOWLMAN_GET_F0(&this->actor); this->unk_2F4 = ENBOMBOWLMAN_GET_F(&this->actor); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); if (this->unk_2F6 == ENBOMBOWLMAN_F0_0) { @@ -414,7 +414,7 @@ void func_809C52B4(EnBomBowlMan* this) { this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.world.pos.x = 1340.0f; this->actor.world.pos.z = -1795.0f; this->unk_29C = 3; 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 6ef27baca..4409a7316 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 @@ -58,7 +58,7 @@ static ColliderSphereInit sSphereInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 1000 * BOMBCHU_SCALE, ICHAIN_STOP), }; @@ -180,7 +180,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) { 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; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx_SurfaceBomb(play, &this->actor); this->isMoving = true; 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 a7ebc75be..5d45ffc55 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -64,7 +64,7 @@ void EnBombal_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); this->actor.colChkInfo.mass = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.health = 1; this->scale = 0.1f; this->csId = this->actor.csId; 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 f3baf9341..21d8bf309 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -7,7 +7,7 @@ #include "z_en_bombers.h" #include "overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBombers*)thisx) @@ -144,7 +144,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphtable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.01f); this->unk_2BC = ENBOMBERS_GET_F0(&this->actor); 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 390eca9f1..b8795c3f2 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -6,7 +6,7 @@ #include "z_en_bombers2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBombers2*)thisx) @@ -113,7 +113,7 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphTable, OBJECT_CS_LIMB_MAX); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) { 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 92a3f71f1..bf9ba05a9 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bombf/object_bombf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10) #define THIS ((EnBombf*)thisx) @@ -110,7 +110,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play2) { thisx->focus.pos = thisx->world.pos; thisx->colChkInfo.cylRadius = 10; thisx->colChkInfo.cylHeight = 10; - thisx->targetMode = 0; + thisx->targetMode = TARGET_MODE_0; if (ENBOMBF_GET(thisx) == ENBOMBF_0) { this->timer = 140; @@ -118,7 +118,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play2) { thisx->gravity = -1.5f; func_800BC154(play, &play->actorCtx, thisx, 3); thisx->colChkInfo.mass = 200; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; EnBombf_SetupAction(this, func_808AEE3C); } else { thisx->colChkInfo.mass = MASS_IMMOVABLE; @@ -158,7 +158,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { this->timer = 180; this->unk_204 = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_PL_PULL_UP_ROCK); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { player->actor.child = NULL; player->heldActor = NULL; @@ -178,7 +178,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { bombf->unk_1F8 = 1; bombf->timer = 0; this->timer = 180; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_204 = 0.0f; } } @@ -189,7 +189,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { if (bombf != NULL) { bombf->timer = 100; this->timer = 180; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_204 = 0.0f; } } else { @@ -209,7 +209,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { if (this->timer == 0) { this->unk_204 += 0.05f; if (this->unk_204 >= 1.0f) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } 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 9218016e3..cb8d48d3e 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -7,7 +7,7 @@ #include "overlays/actors/ovl_En_Bombal/z_en_bombal.h" #include "z_en_bomjima.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBomjima*)thisx) @@ -185,7 +185,7 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_2E6 = ENBOMJIMA_GET_F0(&this->actor); this->unk_2E4 = ENBOMJIMA_GET_F(&this->actor); Actor_SetScale(&this->actor, 0.01f); 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 e52c49a82..2e1984651 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -7,7 +7,7 @@ #include "z_en_bomjimb.h" #include "overlays/actors/ovl_En_Niw/z_en_niw.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBomjimb*)thisx) @@ -157,7 +157,7 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_2C6 = ENBOMJIMB_GET_F0(&this->actor); diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index 8c6f58850..c89179e8b 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -52,7 +52,7 @@ static ColliderQuadInit sQuadInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_S8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_S8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_VEC3S(shape.rot, 0, ICHAIN_STOP), }; 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 2a2b8f6e8..959a986a4 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -69,7 +69,7 @@ ActorInit En_Box_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnBox_SetupAction(EnBox* this, EnBoxActionFunc func) { diff --git a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c index 6c6e832c8..cdcf0879f 100644 --- a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c +++ b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnBsb*)thisx) diff --git a/src/overlays/actors/ovl_En_Bu/z_en_bu.c b/src/overlays/actors/ovl_En_Bu/z_en_bu.c index 043f1ebb7..ad26cf99d 100644 --- a/src/overlays/actors/ovl_En_Bu/z_en_bu.c +++ b/src/overlays/actors/ovl_En_Bu/z_en_bu.c @@ -6,7 +6,7 @@ #include "z_en_bu.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnBu*)thisx) 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 92d56eec5..7453c6d79 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -6,7 +6,7 @@ #include "z_en_bubble.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnBubble*)thisx) @@ -77,7 +77,7 @@ void EnBubble_SetDimensions(EnBubble* this, f32 dim) { f32 z; f32 norm; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 1.0f); this->actor.shape.yOffset = 16.0f; this->modelRotSpeed = 16.0f; @@ -144,7 +144,7 @@ s32 EnBubble_Explosion(EnBubble* this, PlayState* play) { &sEffectEnvColor, Rand_S16Offset(100, 50), 25, 0); } Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0x50); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; return Rand_S16Offset(90, 60); } 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 91822be01..89e73c9a6 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 @@ -7,7 +7,7 @@ #include "z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnClearTag*)thisx) @@ -422,7 +422,7 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { Vec3f vel; Vec3f accel; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (thisx->params >= 0) { this->activeTimer = 70; Math_Vec3f_Copy(&pos, &this->actor.world.pos); 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 ad9210498..daa07db44 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 @@ -7,7 +7,7 @@ #include "z_en_cne_01.h" #include "objects/object_cne/object_cne.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnCne01*)thisx) @@ -148,7 +148,7 @@ s32 func_809CB4A0(EnCne01* this, PlayState* play) { void EnCne01_FinishInit(EnHy* this, PlayState* play) { if (EnHy_Init(this, play, &gCneSkel, ENHY_ANIM_OS_ANIME_11)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnCne01_Draw; this->waitingOnInit = false; if (ENCNE01_GET_PATH_INDEX(&this->actor) == ENCNE01_PATH_INDEX_NONE) { @@ -218,7 +218,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->enHy.collider); Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->enHy.actor.flags &= ~ACTOR_FLAG_1; + this->enHy.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH_INDEX(&this->enHy.actor), ENCNE01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); 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 5b7b74db1..0c10f72cd 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 @@ -64,7 +64,7 @@ void EnColMan_Init(Actor* thisx, PlayState* play) { EnColMan* this = THIS; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->scale = (BREG(55) / 1000.0f) + 0.01f; switch (this->actor.params) { 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 6d72a49fa..f96e43cd5 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -7,7 +7,7 @@ #include "z_en_cow.h" #include "z64horse.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnCow*)thisx) @@ -129,7 +129,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; this->animCycle = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; gHorsePlayedEponasSong = false; func_801A5080(4); @@ -146,7 +146,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { EnCow_SetTailPos(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; break; 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 fcdd89d03..ca1f1db13 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -7,7 +7,7 @@ #include "z_en_crow.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnCrow*)thisx) @@ -138,7 +138,7 @@ void EnCrow_Init(Actor* thisx, PlayState* play) { sDeadCount = 0; if (this->actor.parent != NULL) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } EnCrow_SetupFlyIdle(this); } @@ -172,7 +172,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { dist = Actor_WorldDistXZToPoint(&this->actor, &this->actor.parent->world.pos); } else { dist = 450.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { @@ -456,7 +456,7 @@ void EnCrow_Respawn(EnCrow* this, PlayState* play) { scaleTarget = 0.01f; } if (Math_StepToF(&this->actor.scale.x, scaleTarget, scaleTarget * 0.1f)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_10; this->actor.colChkInfo.health = 1; EnCrow_SetupFlyIdle(this); @@ -481,7 +481,7 @@ void EnCrow_UpdateDamage(EnCrow* this, PlayState* play) { } else { this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); EnCrow_SetupDamaged(this, play); } diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 4477a8b8d..6a936636c 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -6,7 +6,7 @@ #include "z_en_dai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnDai*)thisx) @@ -541,7 +541,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { this->animIndex = ENDAI_ANIM_NONE; EnDai_ChangeAnim(this, ENDAI_ANIM_0); Actor_SetScale(&this->actor, 0.2f); - this->actor.targetMode = 10; + this->actor.targetMode = TARGET_MODE_10; this->unk_1F0 = D_80B3FBF0; this->unk_1FC = D_80B3FBF0; this->unk_1CE = 0; @@ -561,7 +561,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { } this->unk_1CD = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_1CE |= (0x100 | 0x20); this->unk_1CE |= 0x80; this->actionFunc = func_80B3EEDC; 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 bfdf704a8..ddf98cd3d 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -6,7 +6,7 @@ #include "z_en_daiku.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDaiku*)thisx) @@ -99,7 +99,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); if (this->unk_278 == ENDAIKU_PARAM_FF_3) { 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 b744dbbb0..5282697a4 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -9,7 +9,7 @@ #include "objects/object_daiku/object_daiku.h" #include "objects/object_bombiwa/object_bombiwa.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDaiku2*)thisx) @@ -84,7 +84,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU2_GET_7F(&this->actor); this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor); diff --git a/src/overlays/actors/ovl_En_Death/z_en_death.c b/src/overlays/actors/ovl_En_Death/z_en_death.c index de02f44ad..ca7fd6a3b 100644 --- a/src/overlays/actors/ovl_En_Death/z_en_death.c +++ b/src/overlays/actors/ovl_En_Death/z_en_death.c @@ -7,7 +7,7 @@ #include "z_en_death.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnDeath*)thisx) @@ -133,7 +133,7 @@ static InitChainEntry D_808C9A60[] = { ICHAIN_VEC3F(scale, 0, ICHAIN_CONTINUE), ICHAIN_S8(hintId, TATL_HINT_ID_GOMESS, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; #endif 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 da8ea8b85..aa0b0ff5f 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -9,7 +9,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnDekubaba*)thisx) @@ -222,7 +222,7 @@ void EnDekubaba_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 4; // Big Deku Baba hint does not exist in MM this->actor.hintId = TATL_HINT_ID_BIO_DEKU_BABA; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; } else { this->size = 1.0f; @@ -230,7 +230,7 @@ void EnDekubaba_Init(Actor* thisx, PlayState* play) { this->collider.elements[i].dim.worldSphere.radius = this->collider.elements[i].dim.modelSphere.radius; } this->actor.hintId = TATL_HINT_ID_DEKU_BABA; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; } EnDekubaba_SetupWait(this); @@ -868,7 +868,7 @@ void EnDekubaba_PrunedSomersaultDie(EnDekubaba* this, PlayState* play) { this->actor.scale.y = 0.0f; this->actor.scale.x = 0.0f; this->actor.speed = 0.0f; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, this->size * 3.0f, 0, (s32)(this->size * 12.0f), (s32)(this->size * 5.0f), 15, HAHEN_OBJECT_DEFAULT, 10, NULL); } 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 e0cba18b0..7da0437a9 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnDekunuts*)thisx) @@ -131,11 +131,11 @@ void EnDekunuts_Init(Actor* thisx, PlayState* play) { } if (this->actor.params == ENDEKUNUTS_GET_FF00_1) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.colType = COLTYPE_NONE; this->collider.info.bumperFlags |= (BUMP_NO_HITMARK | BUMP_NO_SWORD_SFX | BUMP_NO_DAMAGE | BUMP_NO_AT_INFO); } else if (this->actor.params == ENDEKUNUTS_GET_FF00_2) { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } func_808BD428(this); 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 8b87ce39e..3d4d95b87 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 @@ -6,7 +6,7 @@ #include "z_en_demo_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDemoheishi*)thisx) @@ -61,7 +61,7 @@ void EnDemoheishi_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); EnDemoheishi_SetupIdle(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 b35f4d5c5..bd0139222 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -7,7 +7,7 @@ #include "z_en_dg.h" #include "overlays/actors/ovl_En_Aob_01/z_en_aob_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_800000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_800000) #define THIS ((EnDg*)thisx) @@ -491,7 +491,7 @@ void EnDg_TryPickUp(EnDg* this, PlayState* play) { } EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_SIT_DOWN); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; if (Player_GetMask(play) == PLAYER_MASK_TRUTH) { this->actor.flags |= ACTOR_FLAG_10000; @@ -516,7 +516,7 @@ s32 EnDg_FindFollowerForBremenMask(PlayState* play) { while (enemy != NULL) { if (enemy->id == ACTOR_EN_DG) { - if (enemy->isTargeted) { + if (enemy->isLockedOn) { sBremenMaskFollowerIndex = ((EnDg*)enemy)->index; return true; } @@ -1241,7 +1241,7 @@ void EnDg_JumpOutOfWater(EnDg* this, PlayState* play) { void EnDg_Held(EnDg* this, PlayState* play) { if (Actor_HasNoParent(&this->actor, play)) { this->grabState = DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (sIsAnyDogHeld) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; sIsAnyDogHeld = false; @@ -1312,7 +1312,7 @@ void EnDg_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH_INDEX(&this->actor), ENDG_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.0075f); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.gravity = -3.0f; this->timer = Rand_S16Offset(60, 60); this->dogFlags = DOG_FLAG_NONE; 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 8779f9e6d..0dcce10d0 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -7,7 +7,7 @@ #include "z_en_dinofos.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) #define THIS ((EnDinofos*)thisx) @@ -439,7 +439,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { } if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && - this->actor.isTargeted && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && + this->actor.isLockedOn && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) { if (Rand_ZeroOne() < 0.5f) { func_8089C024(this, 2); @@ -1131,7 +1131,7 @@ void func_8089CF70(EnDinofos* this, PlayState* play) { void func_8089CFAC(EnDinofos* this) { Animation_PlayOnce(&this->skelAnime, &gDinolfosDieAnim); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_DEAD); this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 8e2b9b382..25a54ec4a 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -6,7 +6,7 @@ #include "z_en_dnh.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnh*)thisx) diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index f9dd65a46..2dfc36daa 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -6,7 +6,7 @@ #include "z_en_dnk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnk*)thisx) @@ -239,12 +239,12 @@ void func_80A51648(EnDnk* this, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (ENDNK_GET_3C(&this->actor) == 4) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); this->actionFunc = EnDnk_HandleCutscene; Actor_SetScale(&this->actor, 0.1f); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnDnk_DoNothing; Actor_SetScale(&this->actor, 0.01f); } 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 d31d6c02f..500259dc6 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -12,7 +12,7 @@ #include "overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnDno*)thisx) @@ -778,7 +778,7 @@ void func_80A72C04(EnDno* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Math_Vec3f_Copy(&this->unk_334, &this->actor.world.pos); SubS_ActorPathing_Init(play, &this->unk_334, &this->actor, &this->actorPath, play->setupPathList, EN_DNO_GET_7F(&this->actor), 1, 0, 1, 0); @@ -907,7 +907,7 @@ void func_80A730A0(EnDno* this, PlayState* play) { void func_80A73244(EnDno* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_328 = 2; this->actor.speed = 0.0f; Flags_UnsetSwitch(play, EN_DNO_GET_RACE_STARTED_SWITCH_FLAG(&this->actor)); 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 82a7bc5f7..2518cbc47 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -9,7 +9,7 @@ #include "z_en_dnp.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnDnp*)thisx) @@ -271,14 +271,14 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_322 & 0x200)) { this->unk_322 |= (0x200 | 0x10); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->cueId = 255; } SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = func_80B3D11C; ret = true; } else if (this->unk_322 & 0x200) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~(0x200 | 0x10); this->actionFunc = func_80B3D2D4; @@ -380,7 +380,7 @@ void func_80B3D47C(EnDnp* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Math_SmoothStepToF(&this->actor.scale.x, 0.0085f, 0.1f, 0.01f, 0.001f); if ((s32)(this->actor.scale.x * 10000.0f) >= 85) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~0x10; this->unk_322 |= 0x400; @@ -411,11 +411,11 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->unk_322 = 0; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_322 |= (0x100 | 0x80 | 0x10); this->actor.gravity = -1.0f; if (DEKU_PRINCESS_GET_TYPE(&this->actor) == DEKU_PRINCESS_TYPE_RELEASED_FROM_BOTTLE) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.85f * 0.001f); SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actor.shape.rot.x = 0; 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 b84545f12..cd25a835b 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -9,7 +9,7 @@ #include "z_en_dnq.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnq*)thisx) @@ -148,7 +148,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_37C & 0x20)) { - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->cueId = 255; this->unk_37C |= 0x20; } @@ -156,7 +156,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { ret = true; } else { if (this->unk_37C & 0x20) { - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; this->cueId = 255; this->unk_37C &= ~0x20; SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -462,7 +462,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->picto.actor, 0.02f); - this->picto.actor.targetMode = 1; + this->picto.actor.targetMode = TARGET_MODE_1; this->unk_386 = 0; this->unk_37C = 0; SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); 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 e04d2bf4d..723ee895f 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -6,7 +6,7 @@ #include "z_en_dns.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnDns*)thisx) @@ -254,14 +254,14 @@ s32 func_8092CB98(EnDns* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_2C6 & 0x80)) { this->cueType = EnDns_GetCueType(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_2C6 |= 0x80; this->cueId = 255; } phi_v1 = 1; } else if (this->unk_2C6 & 0x80) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2C6 &= ~0x80; } @@ -517,7 +517,7 @@ void EnDns_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -0.8f; this->unk_2D2 = 0; this->unk_2C6 = 0; 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 6b141e281..c85cdf6ee 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnDodongo*)thisx) @@ -898,7 +898,7 @@ void func_80878724(EnDodongo* this) { this->timer = 0; this->unk_304 = 0; Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); this->actionFunc = func_808787B0; 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 7fa39da26..289b1403d 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -347,7 +347,7 @@ static EnDoorInfo sObjInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.x, 0, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index d48bfd359..dfa0e4934 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -79,7 +79,7 @@ EnDoorEtcInfo sObjInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.x, 0, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index e1e7197d9..efaa851e6 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -7,7 +7,7 @@ #include "z_en_dragon.h" #include "overlays/actors/ovl_En_Ot/z_en_ot.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnDragon*)thisx) @@ -208,7 +208,7 @@ void EnDragon_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 4; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 0xA; + this->actor.targetMode = TARGET_MODE_10; Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements[0].dim.scale = this->collider.elements[1].dim.scale = this->collider.elements[2].dim.scale = @@ -751,7 +751,7 @@ void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_100000; this->action = DEEP_PYTHON_ACTION_SETUP_DEAD; this->actionFunc = EnDragon_SetupDead; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 22312a7c2..50db36063 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -9,7 +9,7 @@ #include "z_en_ds2n.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnDs2n*)thisx) diff --git a/src/overlays/actors/ovl_En_Dt/z_en_dt.c b/src/overlays/actors/ovl_En_Dt/z_en_dt.c index 0ac7dcb4b..e82d6d6e3 100644 --- a/src/overlays/actors/ovl_En_Dt/z_en_dt.c +++ b/src/overlays/actors/ovl_En_Dt/z_en_dt.c @@ -6,7 +6,7 @@ #include "z_en_dt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDt*)thisx) 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 d690fd585..30dc3de26 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -12,7 +12,7 @@ #include "overlays/actors/ovl_En_Estone/z_en_estone.h" #include "overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) #define THIS ((EnEgol*)thisx) @@ -1059,7 +1059,7 @@ void EnEgol_Damaged(EnEgol* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_100000; this->actionFunc = EnEgol_StartDeathCutscene; } 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 023c73f7c..61cf693d7 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -884,7 +884,7 @@ void func_8088E60C(EnElf* this, PlayState* play) { void func_8088E850(EnElf* this, PlayState* play) { Vec3f nextPos; Player* player = GET_PLAYER(play); - Actor* arrowPointedActor; + Actor* targetFairyActor; f32 xScale; f32 distFromLinksHead; u32 cueChannel; @@ -970,15 +970,15 @@ void func_8088E850(EnElf* this, PlayState* play) { break; default: - arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; + targetFairyActor = play->actorCtx.targetCtx.fairyActor; if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor != NULL)) { Math_Vec3f_Copy(&nextPos, &player->talkActor->focus.pos); } else { - Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetContext.unk0); + Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetCtx.fairyPos); } nextPos.y += 1500.0f * this->actor.scale.y; - if (arrowPointedActor != NULL) { + if (targetFairyActor != NULL) { func_8088DB4C(this, &nextPos, 0.0f, 30.0f, 0.2f); if (this->actor.speed >= 5.0f) { func_8088F5F4(this, play, 0x10); @@ -1039,7 +1039,7 @@ void func_8088EF18(Color_RGBAf* dest, Color_RGBAf* newColor, Color_RGBAf* curCol } void func_8088EFA4(EnElf* this, PlayState* play) { - Actor* arrayPointerActor = play->actorCtx.targetContext.arrowPointedActor; + Actor* targetFairyActor = play->actorCtx.targetCtx.fairyActor; Player* player = GET_PLAYER(play); f32 transitionRate; @@ -1064,35 +1064,35 @@ void func_8088EFA4(EnElf* this, PlayState* play) { this->outerColor.b = 80.0f; this->outerColor.a = 0.0f; } - } else if (play->actorCtx.targetContext.unk40 != 0.0f) { + } else if (play->actorCtx.targetCtx.fairyMoveProgressFactor != 0.0f) { this->unk_268 = 0; this->unk_238 = 1.0f; if (!this->unk_269) { Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_DASH_NORMAL); } } else if (this->unk_268 == 0) { - if ((arrayPointerActor == NULL) || - (Math_Vec3f_DistXYZ(&this->actor.world.pos, &play->actorCtx.targetContext.unk0) < 50.0f)) { + if ((targetFairyActor == NULL) || + (Math_Vec3f_DistXYZ(&this->actor.world.pos, &play->actorCtx.targetCtx.fairyPos) < 50.0f)) { this->unk_268 = 1; } } else if (this->unk_238 != 0.0f) { if (Math_StepToF(&this->unk_238, 0.0f, 0.25f)) { - this->innerColor = play->actorCtx.targetContext.fairyInner; - this->outerColor = play->actorCtx.targetContext.fairyOuter; + this->innerColor = play->actorCtx.targetCtx.fairyInnerColor; + this->outerColor = play->actorCtx.targetCtx.fairyOuterColor; } else { transitionRate = 0.25f / this->unk_238; - func_8088EF18(&this->innerColor, &play->actorCtx.targetContext.fairyInner, &this->innerColor, + func_8088EF18(&this->innerColor, &play->actorCtx.targetCtx.fairyInnerColor, &this->innerColor, transitionRate); - func_8088EF18(&this->outerColor, &play->actorCtx.targetContext.fairyOuter, &this->outerColor, + func_8088EF18(&this->outerColor, &play->actorCtx.targetCtx.fairyOuterColor, &this->outerColor, transitionRate); } } if (this->fairyFlags & 1) { - if ((arrayPointerActor == NULL) || (player->targetedActor == NULL)) { + if ((targetFairyActor == NULL) || (player->lockOnActor == NULL)) { this->fairyFlags ^= 1; } - } else if ((arrayPointerActor != NULL) && (player->targetedActor != NULL)) { + } else if ((targetFairyActor != NULL) && (player->lockOnActor != NULL)) { u8 temp = this->unk_269; u16 targetSfxId = (this->unk_269 == 0) ? NA_SE_NONE : NA_SE_NONE; @@ -1105,7 +1105,7 @@ void func_8088EFA4(EnElf* this, PlayState* play) { void func_8088F214(EnElf* this, PlayState* play) { s32 sp34; - Actor* arrowPointedActor; + Actor* targetFairyActor; Player* player = GET_PLAYER(play); s32 pad; @@ -1136,12 +1136,12 @@ void func_8088F214(EnElf* this, PlayState* play) { sp34 = 1; Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BELL_ANGER - SFX_FLAG); } else { - arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; + targetFairyActor = play->actorCtx.targetCtx.fairyActor; if (player->stateFlags1 & PLAYER_STATE1_400) { sp34 = 10; this->unk_25C = 100; - } else if ((arrowPointedActor == NULL) || (arrowPointedActor->category == 4)) { - if (arrowPointedActor != NULL) { + } else if ((targetFairyActor == NULL) || (targetFairyActor->category == ACTORCAT_NPC)) { + if (targetFairyActor != NULL) { this->unk_25C = 100; player->stateFlags2 |= PLAYER_STATE2_100000; sp34 = 0; @@ -1280,13 +1280,13 @@ void func_8088FA38(EnElf* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->fairyFlags & 0x10) { - refPos = play->actorCtx.targetContext.unk0; + refPos = play->actorCtx.targetCtx.fairyPos; if (this->unk_234 != NULL) { refPos = this->unk_234->world.pos; } else { - if ((player->targetedActor == NULL) || (&player->actor == player->targetedActor) || - (&this->actor == player->targetedActor) || (this->unk_264 & 4)) { + if ((player->lockOnActor == NULL) || (&player->actor == player->lockOnActor) || + (&this->actor == player->lockOnActor) || (this->unk_264 & 4)) { refPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f); refPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 5.0f; @@ -1462,7 +1462,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { gSaveContext.save.saveInfo.playerData.tatlTimer = 0; } - if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) { + if ((player->tatlTextId == 0) && (player->lockOnActor == NULL)) { if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 600) && (gSaveContext.save.saveInfo.playerData.tatlTimer <= 3000)) { player->tatlTextId = QuestHint_GetTatlTextId(play); diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index 2584a1c73..ef53999de 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" #include "objects/object_bubble/object_bubble.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnElfbub*)thisx) @@ -82,7 +82,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { } this->oscillationAngle = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnElfbub_Destroy(Actor* thisx, PlayState* play) { 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 0650770ce..42ac47f69 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -67,7 +67,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { this->unk_148 = 0; this->unk_14A = 0; this->actor.focus.pos.y += 40.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (this->unk_147) { case ENELFGRP_1: @@ -172,7 +172,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { } else { this->actor.textId = 0x578; } - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } break; } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index cadbe6047..22a28ed43 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -71,7 +71,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) { this->spawnTotalMax = -1; this->spawnDistanceMax = -1.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnEncount1_SpawnActor; } 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 effbb3eba..c840c33e1 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -112,7 +112,7 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) { this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; Collider_InitAndSetJntSph(play, &this->collider, &this->dyna.actor, &sJntSphInit, &this->colElement); - this->dyna.actor.targetMode = 6; + this->dyna.actor.targetMode = TARGET_MODE_6; this->dyna.actor.colChkInfo.health = 1; this->scale = 0.1f; this->switchFlag = ENCOUNT2_GET_SWITCH_FLAG(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 913e8b7e5..077273309 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -53,7 +53,7 @@ void EnEncount4_Init(Actor* thisx, PlayState* play) { return; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_809C3FD8; } 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 33b50bc2a..c281bd61f 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_dt_Skel_00B0CC, &object_dt_Anim_000BE0, this->jointTable, this->morphTable, OBJECT_DT_LIMB_MAX); 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 78c948911..31bc4be65 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero2*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_bai_Skel_007908, &object_bai_Anim_0011C0, this->jointTable, this->morphTable, OBJECT_BAI_LIMB_MAX); 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 b7ac5cbad..bfca5a5b5 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero3.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero3*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero3_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_toryo_Skel_007150, &object_toryo_Anim_000E50, this->jointTable, this->morphTable, OBJECT_TORYO_LIMB_MAX); 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 f0828f8bf..3d75e19d7 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero4.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero4*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero4_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpear, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); 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 c49121150..2120f0a27 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero5.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero5*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero5_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); 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 2d13f126c..8f6551e84 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 @@ -6,7 +6,7 @@ #include "z_en_ending_hero6.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero6*)thisx) @@ -84,7 +84,7 @@ void EnEndingHero6_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, sSkeletons[this->type], sAnimations[this->type], this->jointTable, this->morphTable, sLimbCounts[this->type]); 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 d7933db62..f99f179af 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnFamos*)thisx) @@ -706,7 +706,7 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { void EnFamos_SetupDeathFade(EnFamos* this) { EnFamos_SetupDeathDebris(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.shadowDraw = NULL; this->actionFunc = EnFamos_DeathFade; this->actor.speed = 0.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 d1da1ef8d..3da9f2673 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -7,7 +7,7 @@ #include "z_en_fg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_200 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_4000) #define THIS ((EnFg*)thisx) @@ -197,7 +197,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { switch (EnFg_GetDamageEffect(this)) { case BETAFROG_DMGEFFECT_DEKUSTICK: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_1); this->skelAnime.playSpeed = 0.0f; this->actor.shape.shadowDraw = NULL; @@ -212,7 +212,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_ARROW: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; rotY = this->collider.base.ac->world.rot.y; rotX = this->collider.base.ac->world.rot.x; @@ -226,7 +226,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_EXPLOSION: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); this->actor.params = BETAFROG_BLACK; this->skelAnime.playSpeed = 0.0f; @@ -261,7 +261,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { switch (EnFg_GetDamageEffect(this)) { case BETAFROG_DMGEFFECT_ARROW: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; rotY = ac->world.rot.y; @@ -279,7 +279,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_EXPLOSION: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_IDLE); this->actor.params = BETAFROG_BLACK; 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 6af86aaad..6b9d031df 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly*)thisx) @@ -125,7 +125,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 5, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 4000, ICHAIN_STOP), }; @@ -658,7 +658,7 @@ void EnFirefly_UpdateDamage(EnFirefly* this, PlayState* play) { } else { Enemy_StartFinishingBlow(play, &this->actor); this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Negate effects of fire on Fire Keese and Ice on Ice Keese if (((this->currentType == KEESE_FIRE) && (this->actor.colChkInfo.damageEffect == KEESE_DMGEFF_FIRE)) || diff --git a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c index 00a0d4d9d..3459faf40 100644 --- a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c +++ b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c @@ -6,7 +6,8 @@ #include "z_en_firefly2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly2*)thisx) 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 b047e65ee..645ad7300 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -9,7 +9,7 @@ #include "z_en_fish2.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFish2*)thisx) 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 f481c346c..33e49d6e5 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -791,7 +791,7 @@ FishingFishInit sFishInits[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -831,7 +831,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->focus.pos = thisx->world.pos; thisx->focus.pos.y += 75.0f; - thisx->flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (sLinkAge != 1) { // HIGH_SCORE(HS_FISHING) from OoT @@ -960,8 +960,8 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { if (thisx->params == 200) { this->unk_150 = 100; func_800BC154(play, &play->actorCtx, thisx, ACTORCAT_PROP); - thisx->targetMode = 0; - thisx->flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + thisx->targetMode = TARGET_MODE_0; + thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); } else { this->unk_150 = 10; @@ -2819,7 +2819,7 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { if (this->unk_1CB == 0) { if (this->unk_1CC == 0) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { D_8090CCF8 = D_809171CC; @@ -2829,7 +2829,7 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { } } else { this->unk_1CC--; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else if (Actor_TextboxIsClosing(&this->actor, play)) { this->unk_1CB = 0; @@ -2882,9 +2882,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((D_80917200 != 0) || (sSubCamId != SUB_CAM_ID_DONE) || ((player->actor.world.pos.z > 1150.0f) && (this->unk_150 != 100))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (D_8090CD14 != 0) { if (D_80917202 == 0) { this->actor.focus.pos = sLurePos; @@ -3094,7 +3094,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (D_80917206 == 2) { func_809038A4(this, input); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } break; @@ -3131,7 +3131,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (D_80917206 == 2) { func_809038A4(this, input); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } break; @@ -3174,7 +3174,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->unk_1AC.z = Rand_ZeroFloat(50.0f); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; break; case -2: @@ -3212,7 +3212,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } Math_ApproachF(&this->unk_1A8, 2048.0f, 1.0f, 128.0f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } break; @@ -5092,9 +5092,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { SkelAnime_Update(&this->skelAnime); if ((D_8090CD04 != 0) || Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_20); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_20); } if ((this->actor.xzDistToPlayer < 120.0f) || Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { 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 7798abf96..a8e916aa0 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -7,7 +7,7 @@ #include "z_en_floormas.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnFloormas*)thisx) @@ -159,7 +159,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) { if (this->actor.params == ENFLOORMAS_GET_7FFF_10) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_808D2AA8; return; } @@ -573,7 +573,7 @@ void func_808D19D4(EnFloormas* this) { void func_808D1B44(EnFloormas* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { if (SkelAnime_Update(&this->skelAnime)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_194 = 50; func_808D0C14(this); } @@ -713,7 +713,7 @@ void func_808D217C(EnFloormas* this, Player* player) { Vec3f* ptr; Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 36.0f, 45.0f, ANIMMODE_ONCE, -3.0f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; func_808D08D0(this); @@ -756,7 +756,7 @@ void func_808D22C8(EnFloormas* this, PlayState* play) { this->actor.shape.rot.x = 0; this->actor.velocity.y = 6.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.speed = -3.0f; func_808D1740(this); } else if ((this->unk_190 % 20) == 0) { @@ -899,7 +899,7 @@ void func_808D2A20(EnFloormas* this) { Actor_Kill(&this->actor); } else { this->actor.draw = NULL; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); this->actionFunc = func_808D2AA8; } } @@ -1025,7 +1025,7 @@ void func_808D2E34(EnFloormas* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_DEAD); } Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (this->actor.colChkInfo.damage != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE); } 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 268ea9626..f106aa406 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -7,7 +7,7 @@ #include "z_en_fsn.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFsn*)thisx) @@ -1424,7 +1424,7 @@ void EnFsn_IdleBackroom(EnFsn* this, PlayState* play) { this->textId = 0; EnFsn_HandleConversationBackroom(this, play); this->actionFunc = EnFsn_ConverseBackroom; - } else if (this->actor.xzDistToPlayer < 100.0f || this->actor.isTargeted) { + } else if (this->actor.xzDistToPlayer < 100.0f || this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -1479,7 +1479,7 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { if (ENFSN_IS_SHOP(&this->actor)) { this->actor.shape.rot.y = BINANG_ROT180(this->actor.shape.rot.y); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnFsn_GetCutscenes(this); EnFsn_InitShop(this, play); } else { @@ -1491,8 +1491,8 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->blinkTimer = 20; this->eyeTexIndex = 0; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->animIndex = FSN_ANIM_IDLE; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnFsn_IdleBackroom; 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 4881e38a7..b0a5200e2 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -11,7 +11,8 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnFu*)thisx) @@ -217,7 +218,7 @@ void EnFu_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.gravity = -0.2f; this->actor.shape.rot.y += 0x4000; this->actor.world.rot = this->actor.shape.rot; @@ -230,7 +231,7 @@ void EnFu_Init(Actor* thisx, PlayState* play) { this->unk_54E = 0; this->unk_550 = 0; func_809622FC(this); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; func_809619D0(this, play); if (CURRENT_DAY == 2) { Vec3f sp40 = this->actor.child->home.pos; @@ -757,7 +758,7 @@ void func_80962EBC(EnFu* this, PlayState* play) { void func_80962F10(EnFu* this) { this->unk_548 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SET_WEEKEVENTREG(WEEKEVENTREG_08_01); this->actionFunc = func_80962F4C; } @@ -856,7 +857,7 @@ void func_809632D0(EnFu* this) { mizu->unk_160 = 0; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80963350; } 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 d56a8f9bf..0bf2f3544 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -9,7 +9,7 @@ #include "objects/object_fz/object_fz.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFz*)thisx) @@ -157,7 +157,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_FREEZARD, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -180,7 +180,7 @@ void EnFz_Init(Actor* thisx, PlayState* play) { this->actor.gravity = 0.0f; this->actor.velocity.y = 0.0f; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_BC8 = 0; this->unk_BCF = 0; this->unk_BCC = 1; @@ -472,7 +472,7 @@ void func_80933014(EnFz* this) { void func_809330D4(EnFz* this) { this->unk_BD6 = 2; this->unk_BCE = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80933104; } @@ -543,7 +543,7 @@ void func_80933324(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_80933368; } @@ -653,7 +653,7 @@ void func_809336C0(EnFz* this, PlayState* play) { this->unk_BCC = 1; this->unk_BCE = 0; this->unk_BD8 = 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_BD7 = 0; this->unk_BCA = 60; func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_PROP); @@ -671,7 +671,7 @@ void func_80933790(EnFz* this) { this->unk_BD6 = 3; this->unk_BCE = 0; this->unk_BD8 = 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->unk_BBC = 0.0f; this->actionFunc = func_809337D4; @@ -702,7 +702,7 @@ void func_8093389C(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_809338E0; } @@ -763,7 +763,7 @@ void func_80933AF4(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_80933B38; } 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 63f5a6736..9b96771be 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -7,7 +7,7 @@ #include "z_en_gb2.h" #include "objects/object_ps/object_ps.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnGb2*)thisx) @@ -380,7 +380,7 @@ void func_80B0FEBC(EnGb2* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, this->unk_26E, &this->actor); this->actionFunc = func_80B0FFA8; - } else if ((this->actor.xzDistToPlayer < 300.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -670,7 +670,7 @@ void func_80B10A48(EnGb2* this, PlayState* play) { this->actor.draw = NULL; this->unk_26C |= 0x100; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; break; } @@ -697,7 +697,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { this->csIdIndex = 1; this->unk_26C &= ~0x40; this->actionFunc = func_80B10DAC; - } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isLockedOn) { this->unk_26C |= 0x40; Actor_OfferTalk(&this->actor, play, 300.0f); } @@ -844,7 +844,7 @@ void func_80B11268(EnGb2* this, PlayState* play) { if (Flags_GetClear(play, 2) && Flags_GetClear(play, 3) && Flags_GetClear(play, 4) && Flags_GetClear(play, 5)) { this->unk_28A = 0xFF; this->unk_26C &= ~0x100; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnGb2_Draw; this->unk_26E = 0x14F9; this->actionFunc = func_80B11048; @@ -861,7 +861,7 @@ void func_80B11344(EnGb2* this, PlayState* play) { } static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 4, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_4, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 2200, ICHAIN_STOP), }; @@ -943,7 +943,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_80)) { this->actor.draw = NULL; this->unk_26C |= 0x100; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; } else { this->unk_28A = 255; 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 c78f14048..25556fdf7 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -6,7 +6,7 @@ #include "z_en_ge1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGe1*)thisx) @@ -86,7 +86,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) { this->morphTable, GERUDO_WHITE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; - this->picto.actor.targetMode = 6; + this->picto.actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->picto.actor, 0.01f); this->animIndex = this->cueId = -1; // GERUDO_WHITE_ANIM_NONE this->stateFlags = 0; @@ -112,7 +112,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnGe1_PerformCutsceneActions; this->picto.actor.draw = NULL; this->picto.actor.flags |= ACTOR_FLAG_20 | ACTOR_FLAG_10; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; break; } 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 0ed4cac86..eeacf00a5 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -6,7 +6,7 @@ #include "z_en_ge2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_80000000) #define THIS ((EnGe2*)thisx) @@ -97,7 +97,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) { this->picto.actor.world.rot.x = this->picto.actor.shape.rot.x = 0; this->picto.actor.world.rot.z = this->picto.actor.shape.rot.z = 0; - this->picto.actor.targetMode = 6; + this->picto.actor.targetMode = TARGET_MODE_6; this->stateFlags = 0; this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; this->cueId = -1; @@ -464,7 +464,7 @@ void EnGe2_KnockedOut(EnGe2* this, PlayState* play) { this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); this->stateFlags &= ~GERUDO_PURPLE_STATE_KO; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -515,7 +515,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_KnockedOut; Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->stateFlags |= GERUDO_PURPLE_STATE_KO; } } else if (this->picto.actor.home.rot.x == 0) { diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index 1f680e9e8..8baf9c0a3 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -6,7 +6,7 @@ #include "z_en_ge3.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_80000000) #define THIS ((EnGe3*)thisx) 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 ced79c782..a01bfbd19 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -12,7 +12,7 @@ #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGeg*)thisx) @@ -420,7 +420,7 @@ void func_80BB217C(EnGeg* this, PlayState* play) { this->actor.gravity = -1.0f; func_80BB1C1C(this); this->actionFunc = func_80BB221C; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; } } @@ -459,7 +459,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { Message_StartTextbox(play, this->unk_496, &this->actor); this->unk_230 &= ~8; this->actionFunc = func_80BB27D4; - } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 300.0f); this->unk_230 |= 8; } 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 fe7d0198f..ab1f8b539 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_gg/object_gg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnGg*)thisx) @@ -685,17 +685,17 @@ void EnGg_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { if (play->csCtx.state == CS_STATE_IDLE) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } 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 c933d4e39..abb80780d 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -7,7 +7,7 @@ #include "z_en_gg2.h" #include "objects/object_gg/object_gg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnGg2*)thisx) @@ -129,7 +129,7 @@ void func_80B3AE60(EnGg2* this, PlayState* play) { case 1: case 8: this->unk_2EE = 5; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); this->actionFunc = func_80B3B120; break; @@ -423,13 +423,13 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else { this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } this->actionFunc(this, play); 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 974bf929f..387763de1 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 @@ -7,7 +7,7 @@ #include "z_en_ginko_man.h" #include "objects/object_boj/object_boj.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGinkoMan*)thisx) @@ -61,7 +61,7 @@ static AnimationInfo sAnimationInfo[] = { void EnGinkoMan_Init(Actor* thisx, PlayState* play) { EnGinkoMan* this = THIS; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.uncullZoneForward = 400.0f; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.cylRadius = 100; @@ -79,7 +79,7 @@ void EnGinkoMan_Destroy(Actor* thisx, PlayState* play) { } void EnGinkoMan_SetupIdle(EnGinkoMan* this) { - this->actor.flags |= ACTOR_FLAG_1; // targetable + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); this->actionFunc = EnGinkoMan_Idle; } 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 bc2042f9e..495f4712c 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -6,7 +6,7 @@ #include "z_en_girla.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGirlA*)thisx) @@ -585,7 +585,7 @@ void EnGirlA_InitalUpdate(EnGirlA* this, PlayState* play) { this->itemParams = shopItem->params; this->drawFunc = shopItem->drawFunc; this->getItemDrawId = shopItem->getItemDrawId; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.25f); this->actor.shape.yOffset = 24.0f; this->actor.shape.shadowScale = 4.0f; 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 16b4c2993..dd87be400 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -7,7 +7,7 @@ #include "z_en_gk.h" #include "objects/object_gk/object_gk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGk*)thisx) @@ -646,7 +646,7 @@ void func_80B51760(EnGk* this, PlayState* play) { this->unk_2E4 = 0; this->unk_1E4 |= 2; } - } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (gSaveContext.save.entrance != ENTRANCE(GORON_RACETRACK, 1))) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } @@ -851,7 +851,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { SET_WEEKEVENTREG(WEEKEVENTREG_24_80); this->actionFunc = func_80B51698; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (player->transformation == PLAYER_FORM_GORON) { this->actor.textId = 0xE74; @@ -1049,7 +1049,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B51FD0; this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { Actor_Kill(&this->actor); } 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 82b4bfce7..787ce43b9 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_in2/object_in2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGm*)thisx) @@ -1036,7 +1036,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3B8 = scheduleOutput->time1 - scheduleOutput->time0; this->unk_3BA = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; func_8094E054(this, play, 7); @@ -1229,14 +1229,14 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951DD0); Math_Vec3s_Copy(&this->actor.world.rot, &D_80951DDC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x1000 | 0x100); this->unk_3A4 |= 0x200; this->unk_3C8 = 3; this->unk_3CA = 3; this->unk_3CC = 8; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_3B4 = 60.0f; func_8094E054(this, play, 10); return true; @@ -1245,8 +1245,8 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80950280(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 phi_v1; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_3A4 = 0; this->unk_3C8 = 0; this->unk_3CA = 0; @@ -1587,11 +1587,11 @@ void func_80950CDC(EnGm* this, PlayState* play) { if (!Schedule_RunScript(play, D_80951820, &sp20) || ((this->unk_258 != sp20.result) && !func_80950280(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_258 = sp20.result; this->unk_268 = func_8094F074(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 212065a31..10dda353c 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -20,7 +20,8 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) + #define THIS ((EnGo*)thisx) #define ENGO_STANDING_Y_OFFSET 0.0f // Actor shape offset in use when a Goron is in any standing state. @@ -953,7 +954,7 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { if (!this->springArrivalCutsceneActive) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = true; this->interruptedActionFunc = this->actionFunc; @@ -961,7 +962,7 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = EnGo_HandleSpringArrivalCutscene; } else if (this->springArrivalCutsceneActive) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = false; SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -1657,7 +1658,7 @@ void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &newSittingStretcherPos); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, this->scaleFactor); this->sleepState = ENGO_AWAKE; this->actionFlags = 0; @@ -1681,7 +1682,7 @@ void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { animFrame = Rand_ZeroOne() * this->skelAnime.endFrame; this->skelAnime.curFrame = animFrame; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, this->scaleFactor); this->sleepState = ENGO_AWAKE; this->actionFlags = 0; @@ -1875,8 +1876,8 @@ void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE); this->scaleFactor *= ENGO_MEDIGORON_SCALE_MULTIPLIER; Actor_SetScale(&this->actor, this->scaleFactor); - this->actor.flags &= ~ACTOR_FLAG_1; - this->actor.targetMode = 3; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_3; this->actionFlags = 0; this->actor.gravity = -1.0f; SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -1907,7 +1908,7 @@ void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Effect_Add(play, &this->indexEffect, EFFECT_TIRE_MARK, 0, 0, &tireMarkInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->scaleFactor = ENGO_NORMAL_SCALE; this->msgEventFunc = NULL; 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 949e50142..461a1969f 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGrasshopper*)thisx) @@ -264,7 +264,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { s32 i; this->actor.hintId = TATL_HINT_ID_DRAGONFLY; - this->actor.targetMode = 4; + this->actor.targetMode = TARGET_MODE_4; this->actor.colChkInfo.mass = 60; this->actor.colChkInfo.health = 2; @@ -770,7 +770,7 @@ void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) { EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_DAMAGE); this->actor.speed = 0.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->approachSpeed = 0.0f; this->collider.elements[1].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD); Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); 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 d4ae8ed26..e3ddfee6a 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -10,7 +10,7 @@ #include "objects/object_gs/object_gs.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnGs*)thisx) @@ -148,7 +148,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) { this->actor.world.rot.z = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_216 = 0; this->unk_218 = 0; this->unk_200 = 1.0f; @@ -927,7 +927,7 @@ void func_80999BC8(Actor* thisx, PlayState* play2) { EnGs* this = THIS; s32 pad; - if (this->actor.isTargeted && !func_801A5100()) { + if (this->actor.isLockedOn && !func_801A5100()) { this->unk_19D = 0; this->unk_19A |= 1; func_80999AC0(this); 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 48b08c7ff..d51cf7703 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 @@ -7,7 +7,7 @@ #include "z_en_guard_nuts.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) #define THIS ((EnGuardNuts*)thisx) @@ -101,7 +101,7 @@ void EnGuardNuts_Init(Actor* thisx, PlayState* play) { SkelAnime_Init(play, &this->skelAnime, &gDekuPalaceGuardSkel, &gDekuPalaceGuardWaitAnim, this->jointTable, this->morphTable, DEKU_PALACE_GUARD_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Actor_SetScale(&this->actor, 0.015f); Math_Vec3f_Copy(&this->guardPos, &this->actor.world.pos); 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 bdcf620ef..28b37cc91 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -7,7 +7,7 @@ #include "z_en_guruguru.h" #include "objects/object_fu/object_fu.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGuruguru*)thisx) @@ -75,7 +75,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable, this->morphTable, 16); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; if (this->actor.params != 2) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); } @@ -85,7 +85,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { } else if (this->actor.params == 2) { this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnGuruguru_DoNothing; } else { Actor_Kill(&this->actor); 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 a335e39d2..83973d9e9 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -6,7 +6,7 @@ #include "z_en_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnHeishi*)thisx) @@ -84,7 +84,7 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) { } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; 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 6b0124b00..2c652f11c 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -6,7 +6,7 @@ #include "z_en_hg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnHg*)thisx) @@ -145,7 +145,7 @@ void EnHg_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.colChkInfo.health = 0; this->actor.gravity = -1.0f; for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index bbdb2c387..15bfd598b 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -6,7 +6,7 @@ #include "z_en_hgo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnHgo*)thisx) @@ -102,7 +102,7 @@ void EnHgo_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&thisx->colChkInfo, NULL, &sColChkInfoInit); - thisx->targetMode = 6; + thisx->targetMode = TARGET_MODE_6; this->eyeIndex = 0; this->blinkTimer = 0; @@ -124,7 +124,7 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play) { } void EnHgo_SetupDoNothing(EnHgo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnHgo_DoNothing; } 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 2bb10c351..e07dfb8a9 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 @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_hintnuts/object_hintnuts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) #define THIS ((EnHiddenNuts*)thisx) @@ -83,7 +83,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); 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 cb9812390..5ad3e9dcf 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 @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnHintSkb*)thisx) @@ -586,8 +586,8 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { (this->actionFunc == func_80C1FE80)) { if (this->actionFunc != func_80C2077C) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if (this->actionFunc == func_80C1FE80) { @@ -596,8 +596,8 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { func_80C2075C(this); } } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.textId = 0; if (this->skelAnime.animation == &object_skb_Anim_00697C) { 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 e4026dfe5..5146f4fcd 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -6,7 +6,7 @@ #include "z_en_hs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnHs*)thisx) @@ -87,7 +87,7 @@ void EnHs_Init(Actor* thisx, PlayState* play) { } this->stateFlags = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; func_80952C50(this, play); } diff --git a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c index 8273d8789..07a6748af 100644 --- a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c +++ b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c @@ -6,7 +6,7 @@ #include "z_en_hs2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnHs2*)thisx) 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 16c19e3ec..bd90f48c1 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_dai/object_dai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnIg*)thisx) @@ -573,7 +573,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3E0 = scheduleOutput->time1 - scheduleOutput->time0; this->unk_3E2 = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D0 |= 0x100; func_80BF1284(this, 3); this->actor.gravity = 0.0f; @@ -681,9 +681,9 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF2368(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_3D0 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; switch (scheduleOutput->result) { case 5: @@ -880,11 +880,11 @@ void func_80BF2AF8(EnIg* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BF3260, &sp20) || ((this->scheduleResult != sp20.result) && !func_80BF2368(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_2A8 = func_80BF146C(this, play); this->scheduleResult = sp20.result; 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 80fe5a8e1..96ce3db8c 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnIk*)thisx) 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 2631d3a89..1c0fc091d 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -8,7 +8,7 @@ #include "z64horse.h" #include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnIn*)thisx) @@ -1374,7 +1374,7 @@ s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) { if (yawDiff >= 0x4300) { return 0; } - if (this->actor.xyzDistToPlayerSq > SQ(160.0f) && !this->actor.isTargeted) { + if (this->actor.xyzDistToPlayerSq > SQ(160.0f) && !this->actor.isLockedOn) { return 0; } if (this->actor.xyzDistToPlayerSq <= SQ(80.0f)) { diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 6a73eceec..014eea08e 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -50,7 +50,7 @@ static InitChainEntry D_80C1AA88[] = { ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; 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 fe3ca06c8..8cf9ce0e9 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -7,7 +7,7 @@ #include "z_en_ja.h" #include "objects/object_boj/object_boj.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJa*)thisx) @@ -306,11 +306,11 @@ void func_80BC21A8(EnJa* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BC35F0, &sp18) || ((this->unk_1D8.unk_00 != sp18.result) && !func_80BC20D0(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1D8.unk_00 = sp18.result; func_80BC2150(this, play); @@ -354,7 +354,7 @@ void EnJa_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.uncullZoneForward = 800.0f; this->actor.gravity = 0.0f; SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); 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 dae36a035..20be1b6c8 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -7,7 +7,7 @@ #include "z_en_jg.h" #include "overlays/actors/ovl_En_S_Goro/z_en_s_goro.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJg*)thisx) @@ -352,7 +352,7 @@ void EnJg_GoronShrineIdle(EnJg* this, PlayState* play) { this->flags |= FLAG_LOOKING_AT_PLAYER; Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnJg_GoronShrineTalk; - } else if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->textId = EnJg_GetStartingConversationTextId(this, play); } @@ -594,7 +594,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x236, &this->actor); // The old Goron is frozen solid! this->actionFunc = EnJg_EndFrozenInteraction; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -917,7 +917,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnJg_SetupTalk; } else { - if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { + if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (this->action == EN_JG_ACTION_FIRST_THAW) { this->textId = EnJg_GetStartingConversationTextId(this, play); 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 2674c8dfb..013fb5050 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 @@ -7,7 +7,7 @@ #include "z_en_jgame_tsn.h" #include "overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnJgameTsn*)thisx) @@ -90,7 +90,7 @@ void EnJgameTsn_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.velocity.y = 0.0f; 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 6045da07b..c0f5bc3fd 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -6,7 +6,7 @@ #include "z_en_js.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJs*)thisx) diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.c b/src/overlays/actors/ovl_En_Jso/z_en_jso.c index f36629d27..43a27759f 100644 --- a/src/overlays/actors/ovl_En_Jso/z_en_jso.c +++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.c @@ -6,7 +6,7 @@ #include "z_en_jso.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJso*)thisx) diff --git a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c index b7ad94d93..b9bdbe6b9 100644 --- a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c +++ b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c @@ -6,7 +6,9 @@ #include "z_en_jso2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | \ + ACTOR_FLAG_80000000) #define THIS ((EnJso2*)thisx) 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 e54b7ff26..cee6b38fa 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -7,7 +7,7 @@ #include "z_en_kaizoku.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_100000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000) #define THIS ((EnKaizoku*)thisx) @@ -253,7 +253,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { EffectBlureInit1 blureInit; this->picto.actor.hintId = TATL_HINT_ID_PIRATE; - this->picto.actor.targetMode = 3; + this->picto.actor.targetMode = TARGET_MODE_3; this->picto.actor.colChkInfo.mass = 80; ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawFeet, 0.0f); this->unk_2CA = this->picto.actor.world.rot.z; @@ -286,7 +286,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { Effect_Add(play, &this->blureIndex, EFFECT_BLURE1, 0, 0, &blureInit); Actor_SetScale(&this->picto.actor, 0.0125f); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->switchFlag == 127) { this->switchFlag = -1; } @@ -499,7 +499,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->picto.actor.world.pos.z = this->picto.actor.home.pos.z; Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor); this->unk_2C8++; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8); @@ -615,7 +615,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags &= ~ACTOR_FLAG_100000; this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; func_80B872A4(this); } break; @@ -677,7 +677,7 @@ void func_80B86804(EnKaizoku* this, PlayState* play) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_96); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->unk_2B2 = 30; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_598 = 0; this->unk_59C = 0; this->unk_2D8 = 0; @@ -1687,7 +1687,7 @@ void func_80B8960C(EnKaizoku* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->picto.actor); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->picto.actor.flags &= ~ACTOR_FLAG_400; this->unk_598 = 0; this->unk_59C = 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 9e3e56828..06409d524 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -8,7 +8,7 @@ #include "z_en_kakasi.h" #include "objects/object_ka/object_ka.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnKakasi*)thisx) @@ -156,7 +156,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { this->unkHeight = (this->picto.actor.world.rot.z * 20.0f) + 60.0f; this->picto.actor.world.rot.z = 0; - this->picto.actor.targetMode = 0; + this->picto.actor.targetMode = TARGET_MODE_0; if ((this->picto.actor.world.rot.x > 0) && (this->picto.actor.world.rot.x < 8)) { this->picto.actor.targetMode = KAKASI_GET_TARGETMODE(thisx); } 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 91c4ac9d4..51f44abec 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -7,7 +7,7 @@ #include "z_en_kame.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnKame*)thisx) @@ -555,7 +555,7 @@ void func_80AD8148(EnKame* this, PlayState* play) { } } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD); this->unk_29E = 0; 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 4decf9ee6..8e5aa5802 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -8,7 +8,7 @@ #include "objects/object_kanban/object_kanban.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnKanban*)thisx) @@ -145,8 +145,8 @@ void EnKanban_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if (this->actor.params != ENKANBAN_PIECE) { - this->actor.targetMode = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.targetMode = TARGET_MODE_0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_19A = Rand_ZeroFloat(1.9f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -226,7 +226,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } if (this->zTargetTimer == 1) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (this->partFlags == 0xFFFF) { @@ -377,7 +377,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->direction = -1; } piece->airTimer = 100; - piece->actor.flags &= ~ACTOR_FLAG_1; + piece->actor.flags &= ~ACTOR_FLAG_TARGETABLE; piece->actor.flags |= ACTOR_FLAG_2000000; this->cutMarkTimer = 5; Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_STRIKE); @@ -393,7 +393,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); if (this->actor.xzDistToPlayer > 500.0f) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->partFlags = 0xFFFF; } @@ -877,7 +877,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { ((pDiff + yDiff + rDiff + this->spinRot.x + this->spinRot.z) == 0) && (this->floorRot.x == 0.0f) && (this->floorRot.z == 0.0f)) { signpost->partFlags |= this->partFlags; - signpost->actor.flags |= ACTOR_FLAG_1; + signpost->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_Kill(&this->actor); return; } 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 8c234e1ae..903b1232b 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -9,7 +9,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnKarebaba*)thisx) @@ -138,7 +138,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 2500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; void EnKarebaba_Init(Actor* thisx, PlayState* play) { @@ -420,7 +420,7 @@ void EnKarebaba_Dying(EnKarebaba* this, PlayState* play) { this->actor.scale.y = 0.0f; this->actor.scale.x = 0.0f; this->actor.speed = 0.0f; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); } @@ -452,7 +452,7 @@ void EnKarebaba_Dying(EnKarebaba* this, PlayState* play) { void EnKarebaba_SetupShrinkDie(EnKarebaba* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD); this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->timer = 3; } @@ -551,7 +551,7 @@ void EnKarebaba_Regrow(EnKarebaba* this, PlayState* play) { if (this->timer == 20) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->actor.params == ENKAREBABA_1) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); } 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 da83290a9..76d88fa94 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -6,7 +6,7 @@ #include "z_en_kbt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKbt*)thisx) @@ -64,7 +64,7 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { this->unk_282 = 0; this->actionFunc = func_80B34598; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnKbt_Destroy(Actor* thisx, PlayState* play) { 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 0b4fe5e68..ce3011e6d 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 @@ -8,7 +8,8 @@ #include "overlays/actors/ovl_En_Maruta/z_en_maruta.h" #include "objects/object_js/object_js.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnKendoJs*)thisx) @@ -133,7 +134,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { this->unk_274 = Lib_SegmentedToVirtual(path->points); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; this->actor.child = NULL; 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 f015ddc5f..694b9271d 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -8,7 +8,7 @@ #include "objects/object_kgy/object_kgy.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKgy*)thisx) @@ -100,7 +100,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.z, 255, 64, 64, -1); this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); this->unk_300 = -1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnKgy_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c index c9d40c1e7..d1edd3880 100644 --- a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c +++ b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c @@ -6,7 +6,7 @@ #include "z_en_kitan.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKitan*)thisx) diff --git a/src/overlays/actors/ovl_En_Knight/z_en_knight.c b/src/overlays/actors/ovl_En_Knight/z_en_knight.c index 0d80d6020..fd4bc7a5b 100644 --- a/src/overlays/actors/ovl_En_Knight/z_en_knight.c +++ b/src/overlays/actors/ovl_En_Knight/z_en_knight.c @@ -7,7 +7,7 @@ #include "z_en_knight.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnKnight*)thisx) 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 2700aa1f8..ca2dfac2b 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -9,7 +9,7 @@ #include "z_en_kujiya.h" #include "objects/object_kujiya/object_kujiya.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnKujiya*)thisx) @@ -59,8 +59,8 @@ void EnKujiya_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); - this->actor.flags &= ~ACTOR_FLAG_1; - this->actor.targetMode = 6; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; 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 e61db843a..b9044ea38 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 @@ -7,7 +7,7 @@ #include "z_en_lift_nuts.h" #include "overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnLiftNuts*)thisx) @@ -286,7 +286,7 @@ void EnLiftNuts_Init(Actor* thisx, PlayState* play) { this->actor.home.pos = bgActor->actor.world.pos; } } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->timer = 0; this->autotalk = false; this->isFirstTimeHiding = false; @@ -1069,7 +1069,7 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) { EnLiftNuts_TryHide(this, play); if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_RUNNING)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 2eafabd8f..880f48e82 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -109,7 +109,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.damageTable = &sDamageTable; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor); @@ -361,7 +361,7 @@ void EnLookNuts_Update(Actor* thisx, PlayState* play) { Audio_PlaySfx(NA_SE_SY_FOUND); func_800B7298(play, &this->actor, PLAYER_CSMODE_26); D_80A6862C = 1; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); this->actor.gravity = 0.0f; EnLookNuts_DetectedPlayer(this, play); } else { 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 be08288b2..241260524 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -6,7 +6,7 @@ #include "z_en_ma4.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnMa4*)thisx) @@ -193,7 +193,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; this->unk_334 = 0; this->hasBow = true; 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 fe552a124..72fcc61d6 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 @@ -7,7 +7,7 @@ #include "z_en_ma_yto.h" #include "overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnMaYto*)thisx) @@ -147,7 +147,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { EnMaYto* this = THIS; s32 pad; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk200 = 0; this->unk310 = 0; this->unk320 = 0; @@ -268,7 +268,7 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_DINNER: - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; EnMaYto_SetupDinnerWait(this); break; 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 8bded501d..651f8115f 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 @@ -6,7 +6,7 @@ #include "z_en_ma_yts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnMaYts*)thisx) @@ -137,12 +137,12 @@ void func_80B8D12C(EnMaYts* this, PlayState* play) { void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { switch (this->type) { case MA_YTS_TYPE_BARN: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnMaYts_ChangeAnim(this, 0); break; case MA_YTS_TYPE_SITTING: - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; // Day 1 or "Winning" the alien invasion if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_ChangeAnim(this, 14); @@ -152,13 +152,13 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { break; case MA_YTS_TYPE_SLEEPING: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.draw = EnMaYts_DrawSleeping; EnMaYts_ChangeAnim(this, 0); break; case MA_YTS_TYPE_ENDCREDITS: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnMaYts_ChangeAnim(this, 0); break; diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c index 659ef4cb3..f19dbae14 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h" #include "objects/object_maruta/object_maruta.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10) #define THIS ((EnMaruta*)thisx) @@ -214,7 +214,7 @@ void EnMaruta_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 50.0f; @@ -285,7 +285,7 @@ void func_80B372CC(EnMaruta* this, PlayState* play) { if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) { EnKendoJs* kendoJs = (EnKendoJs*)this->actor.parent; - kendoJs->unk_292 = this->actor.isTargeted; + kendoJs->unk_292 = this->actor.isLockedOn; } } @@ -322,7 +322,7 @@ void func_80B37428(EnMaruta* this, PlayState* play) { } void func_80B374B8(EnMaruta* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->actionFunc != func_80B37428) { this->unk_21E = 0; this->actor.gravity = -2.0f; @@ -422,7 +422,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) { this->unk_21A |= 0xFF; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B37950; } diff --git a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c index d47992114..f4e66b7b4 100644 --- a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c +++ b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c @@ -6,7 +6,7 @@ #include "z_en_minideath.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMinideath*)thisx) 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 3ea137783..8495411d5 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -7,7 +7,7 @@ #include "z_en_minifrog.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMinifrog*)thisx) @@ -132,7 +132,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->frog = NULL; } else { this->frog = EnMinifrog_GetFrog(play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Frog has been returned if (CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->frogIndex])) { diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index ee0558064..0f44becad 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -7,7 +7,7 @@ #include "z_en_minislime.h" #include "overlays/actors/ovl_En_Bigslime/z_en_bigslime.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) #define THIS ((EnMinislime*)thisx) @@ -121,7 +121,7 @@ static DamageTable sDamageTable = { void EnMinislime_Init(Actor* thisx, PlayState* play) { EnMinislime* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); this->id = this->actor.params; 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 23f28262c..ac816517c 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -6,7 +6,7 @@ #include "z_en_mk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMk*)thisx) @@ -95,7 +95,7 @@ void EnMk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80959E18; this->unk_27A = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; if (func_80959524(play) < 7) { this->unk_27A |= 2; 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 5387b94b6..a6d8eb8bb 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -7,7 +7,7 @@ #include "z_en_mkk.h" #include "objects/object_mkk/object_mkk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnMkk*)thisx) @@ -195,7 +195,7 @@ void EnMkk_Destroy(Actor* thisx, PlayState* play) { void func_80A4E0CC(EnMkk* this) { this->alpha = 0; this->unk_14B |= 3; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80A4E100; } @@ -211,7 +211,7 @@ void func_80A4E100(EnMkk* this, PlayState* play) { this->primColorSelect = 3; this->collider.base.acFlags |= AC_ON; this->alpha = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->unk_14B &= ~4; func_80A4E190(this); @@ -310,7 +310,7 @@ void func_80A4E60C(EnMkk* this, PlayState* play) { void func_80A4E67C(EnMkk* this) { this->unk_14B |= 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags &= ~AC_ON; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD); @@ -442,7 +442,7 @@ void EnMkk_Update(Actor* thisx, PlayState* play) { void func_80A4EDF0(EnMkk* this) { this->alpha = 0; this->unk_14B |= 3; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->actor.update = func_80A4F16C; this->actor.gravity = -0.5f; 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 7065985e8..f544dd2d2 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -7,7 +7,7 @@ #include "z_en_mm3.h" #include "objects/object_mm/object_mm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMm3*)thisx) @@ -94,7 +94,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit); Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.parent = NULL; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_1DC = 1; this->unk_2B4 = 0; this->unk_2AE = 0; diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index fef78d7cd..04b5b73b8 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -6,7 +6,7 @@ #include "z_en_mnk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMnk*)thisx) @@ -231,7 +231,7 @@ void EnMnk_Monkey_SetupWaitToRunAndWaitAtEachPoint(EnMnk* this, PlayState* play) void EnMnk_Monkey_StartInvisible(EnMnk* this, PlayState* play) { this->picto.actor.draw = NULL; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.dim.radius = 100; this->flags |= MONKEY_FLAGS_8; this->flags |= MONKEY_FLAGS_20; @@ -421,7 +421,7 @@ void EnMnk_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnMnk_Monkey_WaitToFollowPath; this->unk_3C8 = 0; this->flags |= MONKEY_FLAGS_2; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->picto.actor.velocity.y = 0.0f; this->picto.actor.terminalVelocity = 0.0f; this->picto.actor.gravity = 0.0f; @@ -1141,7 +1141,7 @@ void EnMnk_Monkey_SetupDrop(EnMnk* this) { this->actionFunc = EnMnk_Monkey_Drop; this->picto.actor.velocity.y = -10.0f; this->picto.actor.terminalVelocity = -10.0f; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; this->picto.actor.draw = EnMnk_Draw; Animation_Change(&this->skelAnime, &object_mnk_Anim_008814, 1.0f, 10.0f, Animation_GetLastFrame(&object_mnk_Anim_008814), ANIMMODE_ONCE, 0.0f); @@ -1726,7 +1726,7 @@ void EnMnk_MonkeyHanging_WaitAfterDunk(EnMnk* this, PlayState* play) { this->unk_3E0 = 5; } else if (this->unk_3C8 > 0) { this->unk_3C8--; - if (this->picto.actor.isTargeted && (this->picto.actor.csId != CS_ID_NONE)) { + if (this->picto.actor.isLockedOn && (this->picto.actor.csId != CS_ID_NONE)) { Actor_OfferTalk(&this->picto.actor, play, 1000.0f); } } else { @@ -1794,7 +1794,7 @@ void EnMnk_MonkeyHanging_StruggleBeforeDunk(EnMnk* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_83_08); } else if (this->unk_3C8 > 0) { this->unk_3C8--; - if (this->picto.actor.isTargeted) { + if (this->picto.actor.isLockedOn) { Actor_OfferTalk(&this->picto.actor, play, 1000.0f); } } else { @@ -1863,7 +1863,7 @@ void EnMnk_Monkey_WaitToGuideThroughWoods(EnMnk* this, PlayState* play) { func_80AB5F6C(this); if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { EnMnk_Monkey_SetupTalkBeforeGuideThroughWoods(this); - } else if (this->picto.actor.isTargeted || (this->picto.actor.xzDistToPlayer < 100.0f)) { + } else if (this->picto.actor.isLockedOn || (this->picto.actor.xzDistToPlayer < 100.0f)) { Actor_OfferTalk(&this->picto.actor, play, 120.0f); } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { 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 1e3a3d8bd..d17a8b98c 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -7,7 +7,7 @@ #include "z_en_ms.h" #include "objects/object_ms/object_ms.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnMs*)thisx) @@ -53,7 +53,7 @@ static ColliderCylinderInitType1 sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; 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 f86530ed9..5ed82cbc2 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -7,7 +7,7 @@ #include "z_en_muto.h" #include "objects/object_toryo/object_toryo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnMuto*)thisx) @@ -87,7 +87,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); EnMuto_SetupIdle(this); diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 2c5417c7d..1720954a2 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -7,7 +7,7 @@ #include "z_en_nb.h" #include "objects/object_nb/object_nb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnNb*)thisx) @@ -595,8 +595,8 @@ s32 func_80BC0C0C(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 EnNb_ProcessScheduleOutput(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 success; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->stateFlags = EN_NB_FLAG_NONE; this->unk_274 = 40.0f; @@ -640,16 +640,16 @@ void EnNb_FollowSchedule(EnNb* this, PlayState* play) { scheduleOutput.result = EN_NB_SCH_1; EnNb_ProcessScheduleOutput(this, play, &scheduleOutput); this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else if (!Schedule_RunScript(play, sScheduleScript, &scheduleOutput) || ((this->scheduleResult != scheduleOutput.result) && !EnNb_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = EN_NB_SCH_NONE; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; 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 2b05945d9..a6301a495 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 @@ -7,7 +7,7 @@ #include "z_en_neo_reeba.h" #include "objects/object_rb/object_rb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnNeoReeba*)thisx) @@ -133,7 +133,7 @@ void EnNeoReeba_Init(Actor* thisx, PlayState* play) { } this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; this->actor.hintId = TATL_HINT_ID_LEEVER; this->actor.gravity = -0.5f; @@ -160,7 +160,7 @@ void EnNeoReeba_Destroy(Actor* thisx, PlayState* play) { } void EnNeoReeba_SetupWaitUnderground(EnNeoReeba* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->actionTimer = 10; this->actionFunc = EnNeoReeba_WaitUnderground; @@ -248,7 +248,7 @@ void EnNeoReeba_SetupRise(EnNeoReeba* this) { this->sinkRiseRate = 300.0f; this->skelAnime.playSpeed = 2.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNeoReeba_RiseOutOfGround; } @@ -446,7 +446,7 @@ void EnNeoReeba_SetupDeathEffects(EnNeoReeba* this) { this->rotationSpeed = 3640.0f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD); this->actionFunc = EnNeoReeba_PlayDeathEffects; 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 d3edbce76..fa93cfb26 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -88,7 +88,7 @@ static ColliderCylinderInit sCylinderInit = { void EnNiw_Init(Actor* thisx, PlayState* play) { static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -104,7 +104,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { this->niwType = this->actor.params; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f); @@ -133,7 +133,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); this->sfxTimer1 = 30; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actionFunc = EnNiw_Held; this->actor.speed = 0.0f; @@ -349,7 +349,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow this->sfxTimer1 = 30; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actor.speed = 0.0f; this->actionFunc = EnNiw_Held; @@ -446,7 +446,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->actor.shape.rot.z = 0; rotZ = this->actor.shape.rot.z; this->niwState = NIW_STATE_FALLING; - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNiw_Thrown; this->actor.shape.rot.y = rotZ; this->actor.shape.rot.x = rotZ; @@ -464,7 +464,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->actor.shape.rot.x = rotZ; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Math_Vec3f_Copy(&this->unk2BC, &D_808934DC); - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNiw_Thrown; } @@ -502,7 +502,7 @@ void EnNiw_Thrown(EnNiw* this, PlayState* play) { this->sfxTimer1 = 30; this->unk2EC = 0; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actionFunc = EnNiw_Held; this->actor.speed = 0.0f; @@ -614,7 +614,7 @@ void EnNiw_SetupCuccoStorm(EnNiw* this, PlayState* play) { if (this->cuccoStormTimer == 0) { this->cuccoStormTimer = 10; this->yawTowardsPlayer = this->actor.yawTowardsPlayer; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_ANGRY3; this->actionFunc = EnNiw_CuccoStorm; } diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index e7ac95d3e..f5e35f478 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -7,7 +7,7 @@ #include "z_en_nnh.h" #include "objects/object_nnh/object_nnh.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnNnh*)thisx) @@ -59,7 +59,7 @@ void EnNnh_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; EnNnh_SetupWaitForDialogue(this); 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 7344e07d0..c65ca03ba 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 @@ -37,7 +37,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { f32 zRot = 0.0f; s32 i = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk148 = ENOKARINATAG_GET_F800(thisx); this->unk14A = ENOKARINATAG_GET_780(thisx); this->switchFlags = ENOKARINATAG_GET_SWITCHFLAGS(thisx); @@ -56,7 +56,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { if (this->unk14A == 0xF) { this->unk14A = -1; } - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actionFunc = func_8093E518; } diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 8241c7e5c..3263d9b71 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -6,7 +6,7 @@ #include "z_en_okuta.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnOkuta*)thisx) 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 dbc42f0d8..4bac34933 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -6,7 +6,7 @@ #include "z_en_onpuman.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnOnpuman*)thisx) @@ -56,7 +56,7 @@ void EnOnpuman_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_2A4 = 0; this->unk_2A0 = NULL; this->actionFunc = func_80B121D8; diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index 426a93e16..c9828e0ff 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_ikn_demo/object_ikn_demo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnOsk*)thisx) @@ -67,7 +67,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BF5F60; this->unk_254 = -1; this->cueId = -1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (ENOSK_GET_F(&this->actor)) { case ENOSK_1: 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 72c71f878..9046f613a 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -7,7 +7,7 @@ #include "z_en_osn.h" #include "objects/object_osn/object_osn.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOsn*)thisx) @@ -176,7 +176,7 @@ static DamageTable sDamageTable = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnOsn_UpdateCollider(EnOsn* this, PlayState* play) { @@ -724,7 +724,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { !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) && + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (yaw < 0x4000) && (yaw > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xFFFF; @@ -733,7 +733,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { this->textId = EnOsn_GetInitialText(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnOsn_Talk; - } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && (yaw > -0x4000)) { + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (yaw < 0x4000) && (yaw > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -948,7 +948,7 @@ void EnOsn_Init(Actor* thisx, PlayState* play) { break; case OSN_TYPE_CUTSCENE: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnOsn_HandleCsAction; break; @@ -976,12 +976,12 @@ void EnOsn_Update(Actor* thisx, PlayState* play) { if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) { if (isFlagSet) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnOsn_UpdateCollider(this, play); this->actor.draw = EnOsn_Draw; } else { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 21d80e177..15648514e 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -7,7 +7,7 @@ #include "z_en_ossan.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOssan*)thisx) @@ -1576,7 +1576,7 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnOssan_WaitForBlink; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnOssan_SetupAction(this, EnOssan_Idle); } } 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 48e3c3c03..4e9b7a162 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -8,7 +8,7 @@ #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOt*)thisx) @@ -141,7 +141,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { if (this->type == SEAHORSE_TYPE_0) { D_80B5E880 = this; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.update = func_80B5DB6C; this->actor.draw = NULL; return; @@ -265,7 +265,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { case SEAHORSE_TYPE_3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Actor_SetScale(&this->actor, 0.0064999997f); this->collider.dim.radius *= 0.5f; this->collider.dim.height *= 0.5f; @@ -416,9 +416,9 @@ void func_80B5C25C(EnOt* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 2, &this->animIndex); SubS_ChangeAnimationBySpeedInfo(&this->unk_360->skelAnime, sAnimations, 2, &this->unk_360->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_360->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->unk_360->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->unk_360->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80B5C9A8(this->unk_360, play); func_80B5C3B8(this, play); } @@ -898,7 +898,7 @@ void func_80B5D648(EnOt* this, PlayState* play) { this->actor.speed = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Flags_SetSwitch(play, SEAHORSE_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80B5D750; } @@ -926,7 +926,7 @@ void func_80B5D750(EnOt* this, PlayState* play) { if ((this->unk_32C & 1) && (this->actor.xzDistToPlayer <= 180.0f)) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (D_80B5E884 != 0) { func_80B5C9A8(this, play); } else { 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 be751400f..011738668 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -7,7 +7,7 @@ #include "z_en_owl.h" #include "objects/object_owl/object_owl.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOwl*)thisx) @@ -120,7 +120,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); this->actor.update = func_8095CCF4; this->actor.draw = func_8095D074; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D8 = 0; this->unk_3DA = 0x320; this->unk_3DC = 0x12C; @@ -741,7 +741,7 @@ void func_8095BE0C(EnOwl* this, PlayState* play) { this->csIdIndex = 1; this->actionFlags |= 0x40; } else if (this->actor.textId == 0xBF0) { - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { Actor_OfferTalkExchange(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } } else if (this->actor.xzDistToPlayer < 200.0f) { 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 5b42b2bfd..be1c95685 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPamera*)thisx) @@ -140,7 +140,7 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit2); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_312 = 0; this->unk_310 = 0; this->unk_314 = 0; @@ -233,7 +233,7 @@ void EnPamera_Destroy(Actor* thisx, PlayState* play) { void func_80BD8700(EnPamera* this) { this->hideInisdeTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); this->actionFunc = func_80BD8758; } @@ -275,7 +275,7 @@ void func_80BD8758(EnPamera* this, PlayState* play) { void func_80BD8908(EnPamera* this) { this->actor.draw = EnPamera_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); this->actionFunc = func_80BD8964; } @@ -585,7 +585,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) { } void func_80BD9904(EnPamera* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = &func_80BD9928; } @@ -709,7 +709,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { case 2: if (this->actor.draw == NULL) { this->actor.draw = EnPamera_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } func_80BD9EE0(this); break; 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 88e0aea16..37c234538 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -11,7 +11,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnPametfrog*)thisx) @@ -169,7 +169,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(targetArrowOffset, -13221, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -1000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 7, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 10, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_10, ICHAIN_STOP), }; static s32 sIsFrogReturnedFlags[] = { @@ -425,7 +425,7 @@ void EnPametfrog_SetupRearOnSnapper(EnPametfrog* this) { Animation_PlayOnce(&this->skelAnime, &gGekkoStandingIdleAnim); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.params = GEKKO_ON_SNAPPER; this->actionFunc = EnPametfrog_RearOnSnapper; } @@ -502,7 +502,7 @@ void EnPametfrog_SetupFallOffSnapper(EnPametfrog* this, PlayState* play) { this->actor.velocity.y = 15.0f; this->actor.world.rot.y = BINANG_ROT180(this->actor.child->world.rot.y); this->actor.shape.rot.y = this->actor.world.rot.y; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->timer = 30; this->collider.base.ocFlags1 |= OC1_ON; yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); @@ -1172,7 +1172,7 @@ void EnPametfrog_SetupCallSnapper(EnPametfrog* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 3.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_GREET); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.colChkInfo.health = 6; this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y; @@ -1312,7 +1312,7 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, PlayState* play) { this->collider.base.acFlags &= ~AC_ON; EnPametfrog_ApplyMagicArrowEffects(this, play); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Audio_RestorePrevBgm(); EnPametfrog_SetupCutscene(this); } else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ZORA_BARRIER) { 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 94936a7b1..77d33673b 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -10,7 +10,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_ph/object_ph.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPeehat*)thisx) @@ -298,7 +298,7 @@ void func_80897498(EnPeehat* this) { void func_80897520(EnPeehat* this, PlayState* play) { if (!gSaveContext.save.isNight) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->colliderSphere.base.acFlags |= AC_ON; if (this->actor.xzDistToPlayer < 740.0f) { func_80897648(this); @@ -306,7 +306,7 @@ void func_80897520(EnPeehat* this, PlayState* play) { Math_StepToF(&this->actor.shape.yOffset, -1000.0f, 10.0f); } } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->colliderSphere.base.acFlags &= ~AC_ON; Math_StepToF(&this->actor.shape.yOffset, -1000.0f, 50.0f); if (this->unk_2B0 != 0) { 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 715021ebe..ab80d3d57 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_mm/object_mm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnPm*)thisx) @@ -1265,7 +1265,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_36C = scheduleOutput->time1 - scheduleOutput->time0; this->unk_36E = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; } @@ -1501,7 +1501,7 @@ s32 func_80AF992C(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80AFB8F8); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -1.0f; this->unk_368 = 80.0f; if (scheduleOutput->result == 14) { @@ -1571,8 +1571,8 @@ s32 func_80AF9B54(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AF9BF8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_394 = PLAYER_IA_NONE; this->unk_356 = 0; this->unk_368 = 40.0f; @@ -2004,11 +2004,11 @@ void func_80AFA4D0(EnPm* this, PlayState* play) { if (!Schedule_RunScript(play, D_80AFB900[this->unk_38C], &sp2C) || ((this->unk_258 != sp2C.result) && !func_80AF9BF8(this, play, &sp2C))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp2C.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_258 = sp2C.result; diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c index 6d14ca25a..0772249ba 100644 --- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c +++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c @@ -6,7 +6,7 @@ #include "z_en_po_composer.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnPoComposer*)thisx) 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 b1f43e9cc..d5174f66a 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 @@ -102,7 +102,7 @@ void EnPoFusen_Init(Actor* thisx, PlayState* play) { f32 flyingHeightMin; this->actor.scale.x = this->actor.scale.y = this->actor.scale.z = 0.007f; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.damageTable = &sDamageTable; Collider_InitSphere(play, &this->collider); 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 3ba0cad85..bc0a3610c 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 @@ -8,7 +8,8 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnPoSisters*)thisx) @@ -185,7 +186,7 @@ void EnPoSisters_Init(Actor* thisx, PlayState* play) { this->fireCount = 1; this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES; this->megDistToPlayer = 110.0f; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; if (POE_SISTERS_GET_OBSERVER_FLAG(&this->actor)) { // "Flagged observer": non-enemy floating prop spawned by EnGb2 (Poe Hut Proprieter) for display @@ -290,7 +291,7 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) { // check for z target void EnPoSisters_CheckZTarget(EnPoSisters* this, PlayState* play) { - if (this->actor.isTargeted && (this->color.a == 255)) { + if (this->actor.isLockedOn && (this->color.a == 255)) { DECR(this->zTargetTimer); } else { this->zTargetTimer = 20; @@ -661,7 +662,7 @@ void EnPoSisters_SetupDeathStage1(EnPoSisters* this) { this->actor.speed = 0.0f; this->actor.world.pos.y += 42.0f; this->actor.shape.yOffset = -6000.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->poSisterFlags = POE_SISTERS_FLAG_CLEAR; this->actionFunc = EnPoSisters_DeathStage1; } @@ -764,7 +765,7 @@ void EnPoSisters_MegCloneVanish(EnPoSisters* this, PlayState* play) { Vec3f pos; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->invisibleTimer = 100; // 5 seconds this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES; this->collider.base.colType = COLTYPE_HIT3; @@ -811,7 +812,7 @@ void EnPoSisters_SetupMegSurroundPlayer(EnPoSisters* this) { this->megSurroundTimer = 300; // 15 seconds this->megClonesRemaining = 3; this->poSisterFlags |= (POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_CHECK_AC); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnPoSisters_MegSurroundPlayer; } @@ -889,7 +890,7 @@ void EnPoSisters_SetupSpawnPo(EnPoSisters* this) { void EnPoSisters_PoeSpawn(EnPoSisters* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { this->color.a = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->poSisterFlags |= (POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO | POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT); if (this->type == POE_SISTERS_TYPE_MEG) { EnPoSisters_MegCloneVanish(this, play); 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 c79e6910e..1c301a8bf 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_po/object_po.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnPoh*)thisx) @@ -365,7 +365,7 @@ void func_80B2D07C(EnPoh* this, PlayState* play) { void func_80B2D0E8(EnPoh* this) { this->unk_197 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Animation_PlayOnceSetSpeed(&this->skelAnime, &object_po_Anim_0011C4, 0.0f); this->actionFunc = func_80B2D140; } @@ -374,7 +374,7 @@ void func_80B2D140(EnPoh* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { this->unk_197 = 255; this->unk_190 = Rand_S16Offset(700, 300); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; func_80B2CB60(this); } else if (this->skelAnime.curFrame > 10.0f) { this->unk_197 = (this->skelAnime.curFrame - 10.0f) * 0.05f * 255.0f; @@ -391,7 +391,7 @@ void func_80B2D2C0(EnPoh* this) { this->actor.world.rot.y = this->actor.shape.rot.y; this->unk_18E = 0; this->actor.hintId = TATL_HINT_ID_NONE; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B2D300; } @@ -579,7 +579,7 @@ void func_80B2DC50(EnPoh* this, PlayState* play) { this->actor.world.pos.y -= 15.0f; this->actor.shape.rot.x = -0x8000; func_800BC154(play, &play->actorCtx, &this->actor, 8); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actionFunc = func_80B2DD2C; } @@ -648,7 +648,7 @@ void func_80B2E1D8(EnPoh* this) { Actor_SetFocus(&this->actor, -10.0f); this->unk_18E = 200; this->unk_18D = 32; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B2E230; } @@ -729,7 +729,7 @@ void func_80B2E55C(EnPoh* this) { } if (this->unk_197 == 255) { - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { this->unk_18C++; this->unk_18C = CLAMP_MAX(this->unk_18C, 20); } else { 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 48de2c4a8..7d0aae02f 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnPp*)thisx) @@ -235,7 +235,7 @@ void EnPp_Init(Actor* thisx, PlayState* play) { EnPp* this = THIS; EffectBlureInit1 blureInit; - this->actor.targetMode = 4; + this->actor.targetMode = TARGET_MODE_4; this->actor.colChkInfo.mass = 60; this->actor.colChkInfo.health = 3; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -998,7 +998,7 @@ void EnPp_SetupDead(EnPp* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_HIPLOOP_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->action = EN_PP_ACTION_DEAD; this->actionFunc = EnPp_Dead; } @@ -1093,7 +1093,7 @@ void EnPp_Mask_SetupDetach(EnPp* this, PlayState* play) { this->actor.gravity = 0.0f; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionVar.maskDetachState = EN_PP_MASK_DETACH_STATE_START; EnPp_ChangeAnim(this, EN_PP_ANIM_IDLE); SkelAnime_Update(&this->skelAnime); 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 67ad65198..74efc10ca 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Prz/z_en_prz.h" #include "objects/object_pr/object_pr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPr*)thisx) @@ -134,7 +134,7 @@ void EnPr_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_2B8 = this->actor.world.pos.y; this->actor.shape.yOffset = 1500.0f; this->actor.colChkInfo.damageTable = &sDamageTable; 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 a4dd96d4b..73f1111a5 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -8,7 +8,7 @@ #include "objects/object_pr/object_pr.h" #include "overlays/actors/ovl_En_Encount1/z_en_encount1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPr2*)thisx) @@ -108,7 +108,7 @@ s16 D_80A75C3C[] = { void EnPr2_Init(Actor* thisx, PlayState* play) { EnPr2* this = THIS; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->actor.hintId = TATL_HINT_ID_SKULLFISH; this->unk_1EC = 255; this->actor.colChkInfo.health = 1; @@ -518,7 +518,7 @@ void func_80A74E90(EnPr2* this, PlayState* play) { void func_80A751B4(EnPr2* this) { this->unk_1EC = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_1E0 < 10) { func_80A74510(this, 2); } else { 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 a6fbdba12..f314ebef0 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -8,7 +8,7 @@ #include "objects/object_pr/object_pr.h" #include "overlays/actors/ovl_En_Pr/z_en_pr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPrz*)thisx) @@ -114,7 +114,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_1E8 = 255; this->actor.hintId = TATL_HINT_ID_SKULLFISH; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -126,7 +126,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { this->unk_1E6 = ENPRZ_GET(&this->actor); this->actor.shape.yOffset = 500.0f; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Math_Vec3f_Copy(&this->unk_1D8, &this->actor.world.pos); @@ -367,7 +367,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) { void func_80A76A1C(EnPrz* this) { this->unk_1E8 = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEWALK_DEAD); 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 92edec67a..c3a7d9a78 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -6,7 +6,7 @@ #include "z_en_pst.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnPst*)thisx) @@ -342,11 +342,11 @@ void EnPst_FollowSchedule(EnPst* this, PlayState* play) { ((this->scheduleResult != scheduleOutput.result) && !EnPst_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = POSTBOX_SCH_NONE; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; EnPst_HandleSchedule(this, play); @@ -390,7 +390,7 @@ void EnPst_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.02f); this->actionFunc = EnPst_FollowSchedule; Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); 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 ebede99a3..cb9449b32 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -210,7 +210,7 @@ void EnRaf_Init(Actor* thisx, PlayState* play) { CollisionHeader_GetVirtual(&gCarnivorousLilyPadCol, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; SkelAnime_InitFlex(play, &this->skelAnime, &gCarnivorousLilyPadSkel, &gCarnivorousLilyPadSpitAnim, this->jointTable, this->morphTable, CARNIVOROUS_LILY_PAD_LIMB_MAX); @@ -538,7 +538,7 @@ void EnRaf_Explode(EnRaf* this, PlayState* play) { this->timer = 5; if (this->grabTarget == EN_RAF_GRAB_TARGET_EXPLOSIVE) { func_800BC154(play, &play->actorCtx, &this->dyna.actor, 5); - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); } this->actionFunc = EnRaf_PostDetonation; @@ -552,7 +552,7 @@ void EnRaf_PostDetonation(EnRaf* this, PlayState* play) { this->collider.dim.radius = 50; this->collider.dim.height = 10; func_800BC154(play, &play->actorCtx, &this->dyna.actor, 6); - this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->dyna.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EnRaf_SetupDormant(this); } else if (this->grabTarget == EN_RAF_GRAB_TARGET_EXPLOSIVE) { this->collider.dim.radius = 80; 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 a8e7d52d4..e6d37cfe4 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 @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnRailSkb*)thisx) @@ -428,7 +428,7 @@ void func_80B713A4(EnRailSkb* this, PlayState* play) { void func_80B71488(EnRailSkb* this) { this->unk_402 |= 0x40; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_2E0 != 0) { this->unk_2E4 = this->unk_2E0 - 1; } else { @@ -451,7 +451,7 @@ void func_80B7151C(EnRailSkb* this) { this->actor.shape.yOffset = -5000.0f; this->actor.colChkInfo.health = 2; this->unk_402 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); this->actor.draw = EnRailSkb_Draw; this->actor.shape.shadowAlpha = 0; @@ -666,7 +666,7 @@ void func_80B71DF0(EnRailSkb* this) { this->actor.shape.yOffset = -5000.0f; this->actor.colChkInfo.health = 2; this->unk_402 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnRailSkb_Draw; this->actor.shape.shadowAlpha = 0; this->actor.shape.rot.y = this->actor.world.rot.y; @@ -822,8 +822,8 @@ void func_80B72190(EnRailSkb* this, PlayState* play) { } void func_80B723F8(EnRailSkb* this) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags |= ACTOR_FLAG_100000; this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; @@ -923,17 +923,17 @@ void func_80B72880(EnRailSkb* this, PlayState* play) { if ((this->actionFunc == func_80B70FF8) || (this->actionFunc == func_80B716A8)) { if (this->actionFunc != func_80B716A8) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags |= ACTOR_FLAG_100000; this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; func_80B71650(this); } } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags &= ~ACTOR_FLAG_100000; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.textId = 0; func_80B70FA0(this); 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 7eef8759b..d4a1eaa1c 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnRailgibud*)thisx) @@ -246,7 +246,7 @@ void EnRailgibud_Init(Actor* thisx, PlayState* play) { s32 pad; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.hintId = TATL_HINT_ID_GIBDO; this->actor.textId = 0; if (ENRAILGIBUD_IS_CUTSCENE_TYPE(&this->actor)) { @@ -420,7 +420,7 @@ void EnRailgibud_WalkToPlayer(EnRailgibud* this, PlayState* play) { void EnRailgibud_SetupGrab(EnRailgibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_START); this->grabDamageTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_START; this->actionFunc = EnRailgibud_Grab; } @@ -438,7 +438,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_ATTACK); } else if (!(player->stateFlags2 & PLAYER_STATE2_80)) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -467,7 +467,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -618,7 +618,7 @@ void EnRailgibud_Stunned(EnRailgibud* this, PlayState* play) { void EnRailgibud_SetupDead(EnRailgibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_DEATH); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->deathTimer = 0; this->actionFunc = EnRailgibud_Dead; @@ -635,7 +635,7 @@ void EnRailgibud_Dead(EnRailgibud* this, PlayState* play) { // stop drawing it, and make its Update function only check to see if // the Gibdos should move forward. this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.update = EnRailgibud_MainGibdo_DeadUpdate; } } else { @@ -931,10 +931,10 @@ void EnRailgibud_CheckForGibdoMask(EnRailgibud* this, PlayState* play) { if ((this->actionFunc != EnRailgibud_Grab) && (this->actionFunc != EnRailgibud_Damage) && (this->actionFunc != EnRailgibud_GrabFail) && (this->actionFunc != EnRailgibud_TurnAwayAndShakeHead) && (this->actionFunc != EnRailgibud_Dead)) { - if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_4))) { + if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY))) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_8 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if ((this->actionFunc != EnRailgibud_WalkInCircles) && (this->actionFunc != EnRailgibud_WalkToHome)) { @@ -942,8 +942,8 @@ void EnRailgibud_CheckForGibdoMask(EnRailgibud* this, PlayState* play) { } } } else if (Player_GetMask(play) != PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->type == EN_RAILGIBUD_TYPE_REDEAD) { this->actor.hintId = TATL_HINT_ID_REDEAD; } else { @@ -964,7 +964,7 @@ void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play) { this->textId = 0x13B2; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM); this->actor.speed = 0.0f; - } else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_8)) && + } else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)) && !(this->collider.base.acFlags & AC_HIT)) { Actor_OfferTalk(&this->actor, play, 100.0f); } 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 946483a89..1dea0c2ee 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnRat*)thisx) @@ -535,7 +535,7 @@ void EnRat_SetupRevive(EnRat* this) { this->actor.shape.rot.z = this->actor.home.rot.z; EnRat_InitializeAxes(this); EnRat_UpdateRotation(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Animation_PlayLoopSetSpeed(&this->skelAnime, &gRealBombchuSpotAnim, 0.0f); this->revivePosY = 2666.6667f; @@ -552,7 +552,7 @@ void EnRat_Revive(EnRat* this, PlayState* play) { if (this->timer > 0) { this->timer--; if (this->timer == 0) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnRat_Draw; this->skelAnime.playSpeed = 1.0f; } 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 24bbc9e06..0cf7ec733 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -26,7 +26,7 @@ #include "z64rumble.h" #include "objects/object_rd/object_rd.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnRd*)thisx) @@ -188,7 +188,7 @@ void EnRd_Init(Actor* thisx, PlayState* play) { s32 pad; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.colChkInfo.damageTable = &sDamageTable; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); this->upperBodyYRotation = this->headYRotation = 0; @@ -688,7 +688,7 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) { EnRd_SetupWalkToHome(this, play); } } else if (play->grabPlayer(play, player)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnRd_SetupGrab(this); } } else if (EN_RD_GET_TYPE(&this->actor) > EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING) { @@ -740,7 +740,7 @@ void EnRd_WalkToHome(EnRd* this, PlayState* play) { !(player->stateFlags2 & (0x4000 | 0x80)) && (player->transformation != PLAYER_FORM_GORON) && (player->transformation != PLAYER_FORM_DEKU) && (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) < 150.0f)) { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnRd_SetupWalkToPlayer(this, play); } else if (EN_RD_GET_TYPE(&this->actor) > EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING) { if (this->actor.parent != NULL) { @@ -895,8 +895,8 @@ void EnRd_Grab(EnRd* this, PlayState* play) { if (player->transformation != PLAYER_FORM_FIERCE_DEITY) { Math_SmoothStepToF(&this->actor.shape.yOffset, 0.0f, 1.0f, 400.0f, 0.0f); } - this->actor.targetMode = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.targetMode = TARGET_MODE_0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->playerStunWaitTimer = 10; this->grabWaitTimer = 15; EnRd_SetupWalkToPlayer(this, play); @@ -1008,7 +1008,7 @@ void EnRd_SetupDamage(EnRd* this) { this->actor.speed = -2.0f; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE); this->action = EN_RD_ACTION_DAMAGE; this->actionFunc = EnRd_Damage; @@ -1042,7 +1042,7 @@ void EnRd_SetupDead(EnRd* this) { Animation_MorphToPlayOnce(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f); this->action = EN_RD_ACTION_DEAD; this->deathTimer = 300; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->actionFunc = EnRd_Dead; diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 6b2f86f53..6ac728a31 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -7,7 +7,7 @@ #include "z_en_recepgirl.h" #include "objects/object_bg/object_bg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnRecepgirl*)thisx) @@ -37,7 +37,7 @@ static TexturePtr sEyeTextures[] = { object_bg_Tex_00F8F0, object_bg_Tex_00FCF0, object_bg_Tex_00FCF0 }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP), }; 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 cb22f557a..856070fba 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -747,7 +747,7 @@ void EnRg_Init(Actor* thisx, PlayState* play) { this->unk_33C = 1; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_310 = 8; this->actor.gravity = -1.0f; 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 d1493583a..43b60256b 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_rr/object_rr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnRr*)thisx) @@ -120,7 +120,7 @@ static CollisionCheckInfoInit sColChkInfoInit = { 3, 45, 60, 250 }; static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_LIKE_LIKE, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -400, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), @@ -269,7 +269,7 @@ void func_808FA3F8(EnRr* this, Player* player) { this->unk_1EA = 100; this->unk_1FC = 20; this->collider1.base.ocFlags1 &= ~OC1_TYPE_PLAYER; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 8; this->unk_1E1 = 0; this->actor.speed = 0.0f; @@ -300,7 +300,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; player->unk_AE8 = 100; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 110; this->unk_1F6 = 2500; this->unk_210 = 0.0f; @@ -417,7 +417,7 @@ void func_808FA910(EnRr* this) { this->actionFunc = func_808FB42C; Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void func_808FA9CC(EnRr* this) { diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c index 0d9ada5e0..b1632ecc8 100644 --- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c +++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c @@ -7,7 +7,7 @@ #include "z_en_rsn.h" #include "objects/object_rs/object_rs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnRsn*)thisx) @@ -45,7 +45,7 @@ void EnRsn_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gBombShopkeeperSkel, &gBombShopkeeperWalkAnim, NULL, NULL, 0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80C25D40(this); } 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 4ff7b52fe..66ee8f546 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -6,7 +6,7 @@ #include "z_en_ru.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnRu*)thisx) 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 e94bc851b..f22a78ec2 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -494,7 +494,7 @@ void EnRuppecrow_UpdateDamage(EnRuppecrow* this, PlayState* play) { if (this->actor.colChkInfo.damageEffect != 0x1) { this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); EnRuppecrow_HandleDeath(this); } 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 520a01f82..a7bfd13f0 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -7,7 +7,7 @@ #include "z_en_rz.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnRz*)thisx) @@ -112,7 +112,7 @@ void EnRz_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BFC058; EnRz_SetupPath(this, play); this->animIndex = EN_RZ_ANIM_MAX; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.terminalVelocity = -9.0f; this->actor.gravity = -1.0f; 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 ecc9017c5..6b2e06f0b 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 @@ -36,7 +36,7 @@ Week Event Flags: #include "overlays/actors/ovl_En_Jg/z_en_jg.h" // Goron Elder #include "objects/object_taisou/object_taisou.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSGoro*)thisx) #define EN_S_GORO_ROLLEDUP_YOFFSET 14.0f @@ -1048,7 +1048,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { this->actor.gravity = -1.0f; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) { case EN_S_GORO_TYPE_SHRINE_WINTER_A: @@ -1113,7 +1113,7 @@ void EnSGoro_WinterShrineGoron_Idle(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_ShrineGoron_NextTextId(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_WinterShrineGoron_Talk; - } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1144,7 +1144,7 @@ void EnSGoro_SpringShrineGoron_Idle(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_ShrineGoron_NextTextId(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_SpringShrineGoron_Talk; - } else if ((this->actor.xzDistToPlayer < 250.0f) || (this->actor.isTargeted)) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1185,7 +1185,7 @@ void EnSGoro_ShopGoron_Idle(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_ShopGoron_Talk; } - } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1279,7 +1279,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x23A, &this->actor); this->actionFunc = EnSGoro_SleepTalk; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } EnSGoro_UpdateSleeping(this, play); 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 38d82ed9a..08b1ad240 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -7,7 +7,7 @@ #include "z_en_sb.h" #include "objects/object_sb/object_sb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSb*)thisx) @@ -93,7 +93,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_SHELLBLADE, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; 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 fdab2ca4f..c8bc7d660 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnScopenuts*)thisx) @@ -95,7 +95,7 @@ Gfx* D_80BCCCDC[] = { gKakeraLeafMiddle, gKakeraLeafTip }; Vec3f D_80BCCCE4 = { 0.0f, -0.5f, 0.0f }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -301,7 +301,7 @@ void func_80BCB52C(EnScopenuts* this, PlayState* play) { this->actionFunc = func_80BCB6D0; } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { @@ -320,7 +320,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { this->unk_328 &= ~1; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_328 &= ~4; this->unk_348 = 8; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 8); 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 885ab2717..2e05f0f57 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -11,7 +11,7 @@ #include "objects/object_sekihiz/object_sekihiz.h" #include "objects/object_zog/object_zog.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSekihi*)thisx) 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 d03f411cf..fbd757bd5 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -7,7 +7,7 @@ #include "z_en_sellnuts.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnSellnuts*)thisx) @@ -107,7 +107,7 @@ static AnimationInfoS sAnimationInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -381,7 +381,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { } } else if (((this->actor.xzDistToPlayer < 80.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 80.0f, PLAYER_IA_MOONS_TEAR); if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { @@ -519,7 +519,7 @@ void func_80ADBD64(EnSellnuts* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_338 &= ~2; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_34C = 8; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 8); this->actionFunc = func_80ADBE80; @@ -876,7 +876,7 @@ void func_80ADCD3C(EnSellnuts* this, PlayState* play) { this->unk_338 |= 2; this->unk_338 |= 1; this->unk_340 = 0x626; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actor.draw = EnSellnuts_Draw; this->unk_34A = 50; @@ -1003,7 +1003,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { this->actor.gravity = 0.0f; this->actor.draw = NULL; this->unk_34C = 20; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_35C = 1.0f; this->unk_358 = 1.0f; this->unk_354 = 1.0f; @@ -1013,7 +1013,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { } else { this->unk_338 |= 2; this->unk_338 &= ~1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.gravity = 0.0f; this->actor.draw = NULL; this->unk_34C = 4; diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 6c232e2f8..158c80087 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -8,7 +8,7 @@ #include "z_en_shn.h" #include "z64snap.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnShn*)thisx) @@ -354,7 +354,7 @@ void EnShn_Init(Actor* thisx, PlayState* play) { } else { func_80AE615C(this, 2); } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_2E0 = 0; this->unk_2D8 = 0; diff --git a/src/overlays/actors/ovl_En_Si/z_en_si.c b/src/overlays/actors/ovl_En_Si/z_en_si.c index cf44d641b..b75de6359 100644 --- a/src/overlays/actors/ovl_En_Si/z_en_si.c +++ b/src/overlays/actors/ovl_En_Si/z_en_si.c @@ -6,7 +6,7 @@ #include "z_en_si.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_200) #define THIS ((EnSi*)thisx) 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 5057777d4..9d57b9638 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Encount4/z_en_encount4.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSkb*)thisx) @@ -288,7 +288,7 @@ void func_80994DA8(EnSkb* this, PlayState* play) { void func_80994E2C(EnSkb* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); this->unk_3D0 = 0; this->unk_3DE = 0; @@ -300,7 +300,7 @@ void func_80994E94(EnSkb* this, PlayState* play) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } Math_ApproachZeroF(&this->actor.shape.yOffset, 1.0f, 800.0f); @@ -351,8 +351,8 @@ void func_80995068(EnSkb* this, PlayState* play) { this->actionFunc = func_80995190; this->actor.speed = 0.0f; } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.colChkInfo.mass = MASS_HEAVY; func_80995A30(this); @@ -388,8 +388,8 @@ void func_80995190(EnSkb* this, PlayState* play) { } void func_80995244(EnSkb* this, PlayState* play) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->unk_3E2 = 0; switch (this->unk_3DE) { @@ -423,8 +423,8 @@ void func_809952D8(EnSkb* this) { void func_8099533C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f)) { this->actor.hintId = TATL_HINT_ID_STALCHILD; @@ -445,8 +445,8 @@ void func_809953E8(EnSkb* this) { void func_8099544C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f)) { this->actor.hintId = TATL_HINT_ID_STALCHILD; @@ -482,8 +482,8 @@ void func_8099556C(EnSkb* this, PlayState* play) { this->actor.shape.rot.x = Math_SinS(this->unk_3D4 * sp26) * 20000.0f; if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f) && (this->skelAnime.curFrame > 24.0f) && (this->skelAnime.curFrame < 28.0f)) { @@ -538,7 +538,7 @@ void func_809958F4(EnSkb* this) { Animation_Change(&this->skelAnime, &object_skb_Anim_003584, -1.0f, Animation_GetLastFrame(&object_skb_Anim_003584), 0.0f, ANIMMODE_ONCE, -4.0f); this->unk_3E4 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); this->unk_3DE = 1; @@ -569,8 +569,8 @@ void func_80995A30(EnSkb* this) { void func_80995A8C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.colChkInfo.mass = MASS_HEAVY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); @@ -735,7 +735,7 @@ void func_809961E4(EnSkb* this, PlayState* play) { this->actor.speed = -6.0f; } this->unk_3E4 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD); this->unk_3DE = 7; this->actionFunc = func_80996284; @@ -795,7 +795,7 @@ void func_809963D8(EnSkb* this, PlayState* play) { void func_80996474(EnSkb* this) { this->unk_3D0 = 0; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_809964A0; } 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 98da2425d..79dfe2ced 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -7,7 +7,7 @@ #include "z_en_slime.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200) #define THIS ((EnSlime*)thisx) @@ -816,7 +816,7 @@ f32 EnSlime_SnapIceBlockPosition(f32 currentPosition, f32 homePosition) { */ void EnSlime_SetupSpawnIceBlock(EnSlime* this) { this->collider.base.acFlags &= ~AC_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->drawDmgEffAlpha = 0.0f; this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; @@ -853,7 +853,7 @@ void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play) { this->actor.colorFilterTimer = 0; this->collider.base.acFlags |= AC_ON; this->iceBlockTimer = ICE_BLOCK_UNUSED; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -2.0f; EnSlime_SetupIdle(this); } @@ -941,7 +941,7 @@ void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play) { if (this->iceBlockTimer == ICE_BLOCK_UNUSED) { this->collider.base.acFlags |= AC_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_10; EnSlime_SetupIdle(this); } @@ -1003,7 +1003,7 @@ void EnSlime_Revive(EnSlime* this, PlayState* play) { this->timer++; if (this->timer == 28) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_ON; this->actor.shape.rot.y = this->actor.home.rot.y; EnSlime_SetupMoveInDirection(this); @@ -1065,7 +1065,7 @@ void EnSlime_UpdateDamage(EnSlime* this, PlayState* play) { if (Actor_ApplyDamage(&this->actor) == 0) { Actor_SetDropFlag(&this->actor, &this->collider.info); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_BLUNT) { 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 b935b46d4..f030885b1 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -7,7 +7,7 @@ #include "z_en_snowman.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSnowman*)thisx) @@ -241,7 +241,7 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) { } else { Player* player = GET_PLAYER(play); - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, thisx, &sSnowballCylinderInit); thisx->world.rot.y = Actor_WorldYawTowardActor(thisx, &player->actor); thisx->velocity.y = (Actor_WorldDistXZToActor(thisx, &player->actor) * 0.035f) + -5.0f; @@ -603,7 +603,7 @@ void EnSnowman_SetupMelt(EnSnowman* this) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 50); this->collider.base.acFlags &= ~AC_ON; this->work.timer = 50; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; this->actor.scale.y = this->actor.scale.x; this->actor.speed = 0.0f; @@ -787,7 +787,7 @@ void EnSnowman_SetupSplitDoNothing(EnSnowman* this) { this->combineState = EN_SNOWMAN_COMBINE_STATE_NO_ABSORPTION; } - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); if ((this->actor.parent != NULL) && (((EnSnowman*)this->actor.parent)->actionFunc == EnSnowman_SplitDoNothing)) { if ((this->actor.child != NULL) && (((EnSnowman*)this->actor.child)->actionFunc == EnSnowman_SplitDoNothing)) { EnSnowman_SetupKill((EnSnowman*)this->actor.parent); @@ -822,7 +822,7 @@ void EnSnowman_Kill(EnSnowman* this, PlayState* play) { * Creates a small split Eeno with a certain Y-rotation and at a certain offset from basePos. */ void EnSnowman_CreateSplitEeno(EnSnowman* this, Vec3f* basePos, s32 yRot) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actor.shape.rot.y = yRot; this->actor.world.rot.y = this->actor.shape.rot.y; 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 ebe1589c3..9c197223c 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -9,7 +9,7 @@ #include "objects/object_masterzoora/object_masterzoora.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSob1*)thisx) @@ -1482,7 +1482,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnSob1_WaitForBlink; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } 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 26f5b4e24..605761711 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -8,7 +8,7 @@ #include "objects/object_ssh/object_ssh.h" #include "objects/object_st/object_st.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnSsh*)thisx) 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 dd8d21f65..2491ec4ed 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -9,7 +9,9 @@ #include "objects/object_st/object_st.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000 | ACTOR_FLAG_1000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000 | \ + ACTOR_FLAG_1000000) #define THIS ((EnSt*)thisx) @@ -621,7 +623,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (this->actor.colChkInfo.damageEffect) { case 4: 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 c19dc5b36..97aa3ed7b 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -9,7 +9,7 @@ #include "z_en_sth.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnSth*)thisx) @@ -161,7 +161,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnSth_MoonLookingIdle; this->sthFlags |= STH_FLAG_DISABLE_HEAD_TRACK; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->actor.uncullZoneForward = 800.0f; break; @@ -453,7 +453,7 @@ void EnSth_MoonLookingIdle(EnSth* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnSth_HandleMoonLookingConversation; - } else if (EnSth_CanSpeakToPlayer(this, play) || this->actor.isTargeted) { + } else if (EnSth_CanSpeakToPlayer(this, play) || this->actor.isLockedOn) { if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) { this->actor.textId = 0x1130; // Huh? The Moon... } else { @@ -607,7 +607,7 @@ void EnSth_UpdateOceansideSpiderHouseWaitForTokens(Actor* thisx, PlayState* play if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) { this->actor.update = EnSth_Update; this->actor.draw = EnSth_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -665,7 +665,7 @@ void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play) { (Inventory_GetSkullTokenCount(play->sceneId) < SPIDER_HOUSE_TOKENS_REQUIRED)) { this->actor.update = EnSth_UpdateOceansideSpiderHouseWaitForTokens; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } } diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index 723f7634f..66b87c998 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -6,7 +6,7 @@ #include "z_en_sth2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnSth2*)thisx) 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 534f77cb4..c0d9e1197 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 @@ -6,7 +6,7 @@ #include "z_en_stone_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnStoneheishi*)thisx) @@ -111,7 +111,7 @@ void EnStoneheishi_Init(Actor* thisx, PlayState* play) { SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); 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 fae0a1246..8be9f715a 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 @@ -7,7 +7,7 @@ #include "z_en_stop_heishi.h" #include "z64quake.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnStopheishi*)thisx) @@ -114,7 +114,7 @@ void EnStopheishi_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->rotYTarget = this->actor.world.rot.y; 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 b88f7f6c6..29f53ae7c 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -10,7 +10,7 @@ #include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSuttari*)thisx) @@ -993,7 +993,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, &object_boj_Anim_00071C, this->jointTable, this->morphTable, 16); this->actor.draw = EnSuttari_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (play->sceneId == SCENE_IKANA) { this->flags1 |= 1; if ((gSaveContext.save.day == 1) || (gSaveContext.save.day == 2)) { @@ -1157,10 +1157,10 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1181,17 +1181,17 @@ void func_80BAD004(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A3A, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 200.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 200.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Actor_MoveWithGravity(&this->actor); @@ -1308,10 +1308,10 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1324,7 +1324,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -1346,10 +1346,10 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1361,7 +1361,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -1508,7 +1508,7 @@ void EnSuttari_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnSuttari_GetPaths(this, play); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = func_80BAC6E8; 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 3842afa88..8cab11988 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_st/object_st.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSw*)thisx) @@ -674,7 +674,7 @@ s32 func_808DA08C(EnSw* this, PlayState* play) { } else if (!func_808D90C4(this)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!ENSW_GET_3(&this->actor)) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 3); } @@ -1165,7 +1165,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { break; case 1: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; if (this->actor.world.rot.z < 0) { @@ -1186,7 +1186,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { case 2: case 3: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; if (this->actor.world.rot.z < 0) { 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 bfb3081de..d3b88bb2d 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 @@ -13,7 +13,7 @@ #include "overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h" #include "overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnSyatekiMan*)thisx) @@ -205,7 +205,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { Path* path = &play->setupPathList[SG_MAN_GET_PATH_INDEX(&this->actor)]; s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex]; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Actor_SetScale(&this->actor, 0.01f); if (play->sceneId == SCENE_SYATEKI_MORI) { SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHeadScratchLoopAnim, this->jointTable, 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 0a324592b..364d8874b 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_tab/object_tab.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTab*)thisx) @@ -372,7 +372,7 @@ s32 func_80BE0F04(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3f_Copy(&this->actor.world.pos, &D_80BE1AF0); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1AFC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 30; @@ -389,7 +389,7 @@ s32 func_80BE0FC4(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3f_Copy(&this->actor.world.pos, &D_80BE1B04); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1B10); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 0x50; @@ -476,11 +476,11 @@ void func_80BE127C(EnTab* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BE18D0, &sp18) || ((this->unk_1D8 != sp18.result) && !func_80BE1060(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1D8 = sp18.result; func_80BE1224(this, play); diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c index 9bc0cd1b9..a2c39f16b 100644 --- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c +++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c @@ -6,7 +6,7 @@ #include "z_en_takaraya.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTakaraya*)thisx) @@ -30,7 +30,7 @@ ActorInit En_Takaraya_InitVars = { // static InitChainEntry sInitChain[] = { static InitChainEntry D_80ADFB20[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Talk/z_en_talk.c b/src/overlays/actors/ovl_En_Talk/z_en_talk.c index 1dac7592b..832a1313e 100644 --- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c +++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c @@ -6,7 +6,7 @@ #include "z_en_talk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTalk*)thisx) @@ -32,7 +32,7 @@ void EnTalk_Init(Actor* thisx, PlayState* play) { EnTalk* this = THIS; s8 targetMode = this->actor.home.rot.x - 0x1; - if ((targetMode >= 0) && (targetMode < 7)) { + if ((targetMode >= TARGET_MODE_0) && (targetMode < TARGET_MODE_7)) { this->actor.targetMode = targetMode; } @@ -57,7 +57,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) { } if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 120.0f); } } 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 fcf0d8985..9faa6664a 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 @@ -7,7 +7,7 @@ #include "z_en_talk_gibud.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnTalkGibud*)thisx) @@ -228,7 +228,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { s32 i; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.hintId = TATL_HINT_ID_GIBDO; this->actor.textId = 0; @@ -383,7 +383,7 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupGrab(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_START); this->grabDamageTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->grabState = EN_TALK_GIBUD_GRAB_START; this->actionFunc = EnTalkGibud_Grab; } @@ -425,7 +425,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_TALK_GIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -569,8 +569,8 @@ void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) { if ((this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) && (this->type == EN_TALK_GIBUD_TYPE_GIBDO)) { this->actor.hintId = TATL_HINT_ID_REDEAD; - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); SkelAnime_InitFlex(play, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable, GIBDO_LIMB_MAX); this->type = EN_TALK_GIBUD_TYPE_REDEAD; @@ -586,7 +586,7 @@ void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupDead(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_DEATH); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->deathTimer = 0; this->actionFunc = EnTalkGibud_Dead; @@ -612,7 +612,7 @@ void EnTalkGibud_Dead(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupRevive(EnTalkGibud* this) { Animation_Change(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f, Animation_GetLastFrame(&gGibdoRedeadDeathAnim), 0.0f, ANIMMODE_ONCE, -8.0f); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_REVERSE); this->deathTimer = 0; this->actor.world.rot.y = this->actor.shape.rot.y; @@ -852,7 +852,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupDisappear(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_IDLE); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->disappearanceTimer = 40; this->actionFunc = EnTalkGibud_Disappear; } @@ -934,15 +934,15 @@ void EnTalkGibud_CheckForGibdoMask(EnTalkGibud* this, PlayState* play) { (this->actionFunc != EnTalkGibud_Damage) && (this->actionFunc != EnTalkGibud_Talk)) { if (this->actionFunc != EnTalkGibud_PassiveIdle) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_8 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; EnTalkGibud_SetupPassiveIdle(this); } } else if (Player_GetMask(play) != PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->type == EN_TALK_GIBUD_TYPE_REDEAD) { this->actor.hintId = TATL_HINT_ID_REDEAD; } else { diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 798844bb8..876b433d4 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -6,7 +6,7 @@ #include "z_en_tanron1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron1*)thisx) @@ -37,7 +37,7 @@ static s32 sPad = 0; void EnTanron1_Init(Actor* thisx, PlayState* play) { EnTanron1* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!ENTANRON1_GET_100(&this->actor)) { this->unk_144 = 0; } else { 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 785308dad..a539e82f5 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -9,7 +9,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_boss04/object_boss04.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron2*)thisx) @@ -124,7 +124,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { EnTanron2* this = THIS; D_80BB8450 = (Boss04*)this->actor.parent; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->actor.params == 100) { this->actor.update = func_80BB7B90; @@ -138,7 +138,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { this->actor.draw = NULL; this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); @@ -207,7 +207,7 @@ void func_80BB6B80(EnTanron2* this) { this->actor.velocity.x = 0.0f; this->unk_158 = 0; this->unk_159 = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider1.dim.radius = 30; this->collider1.dim.height = 50; this->collider1.dim.yShift = -25; @@ -428,10 +428,10 @@ void func_80BB7578(EnTanron2* this, PlayState* play) { func_80BB6B80(this); this->unk_158 = 1; Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_DAMAGE); - if ((player->targetedActor != NULL) && (&this->actor != player->targetedActor)) { - player->targetedActor = &this->actor; - play->actorCtx.targetContext.arrowPointedActor = &this->actor; - play->actorCtx.targetContext.targetedActor = &this->actor; + if ((player->lockOnActor != NULL) && (&this->actor != player->lockOnActor)) { + player->lockOnActor = &this->actor; + play->actorCtx.targetCtx.fairyActor = &this->actor; + play->actorCtx.targetCtx.lockOnActor = &this->actor; } } else { this->unk_154 = 15; @@ -550,10 +550,10 @@ void EnTanron2_Update(Actor* thisx, PlayState* play) { if (ABS_ALT(BINANG_SUB(D_80BB8450->actor.yawTowardsPlayer, atan)) > 0x3000) { this->unk_159 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { this->unk_159 = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } } 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 81a4ac2af..2c7a9fd55 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_Boss_03/z_boss_03.h" #include "objects/object_boss03/object_boss03.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron3*)thisx) @@ -117,7 +117,7 @@ void EnTanron3_Init(Actor* thisx, PlayState* play) { this->morphTable, GYORG_SMALL_FISH_LIMB_MAX); Actor_SetScale(&this->actor, 0.02f); EnTanron3_SetupLive(this, play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->currentRotationAngle = Rand_ZeroFloat(500000.0f); this->waterSurfaceYPos = 430.0f; sGyorg = (Boss03*)this->actor.parent; diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index d8b061fd4..ab190b38c 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -50,7 +50,7 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) { SkelAnime_InitFlex(play, &this->skelAnime, &gSeagullSkel, &gSeagullFlapAnim, this->jointTable, this->morphTable, SEAGULL_LIMB_RIGHT_WING_MAX); - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; thisx->speed = 3.0f + KREG(48); thisx->uncullZoneForward = 10000.0f + KREG(70); this->randRollTimer = Rand_ZeroFloat(10.0f); 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 875f36a61..8ed4c36f3 100644 --- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c +++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c @@ -6,7 +6,7 @@ #include "z_en_tanron6.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnTanron6*)thisx) @@ -72,7 +72,7 @@ void EnTanron6_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 19.0f); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; EnTanron6_DoNothing(this); } 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 b5742b7d6..e897ffefb 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -353,7 +353,7 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) { Actor* hideoutDoor = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_IKNV_OBJ); if (hideoutDoor != NULL) { - this->player.targetedActor = hideoutDoor; + this->player.lockOnActor = hideoutDoor; } } if (this->unk_D78->unk_1 != 0) { @@ -377,7 +377,7 @@ s32 func_80A3EAF8(EnTest3* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->csId = CS_ID_GLOBAL_TALK; CutsceneManager_Queue(this->csId); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; } return 1; } @@ -389,7 +389,7 @@ s32 func_80A3EB8C(EnTest3* this, PlayState* play) { Actor* hideoutObject = SubS_FindActor(play, NULL, ACTORCAT_ITEMACTION, ACTOR_OBJ_NOZOKI); if (hideoutObject != NULL) { - this->player.targetedActor = hideoutObject; + this->player.lockOnActor = hideoutObject; } play->msgCtx.msgMode = 0x44; return 1; @@ -654,7 +654,7 @@ s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul s32 func_80A3F73C(EnTest3* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { func_80A3E7E0(this, func_80A4084C); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; this->player.stateFlags2 &= ~PLAYER_STATE2_40000; D_80A41D5C = true; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { @@ -677,7 +677,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { func_80A3F5A4(this, play); } this->player.actor.textId = this->unk_D78->textId; - this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } return false; } @@ -1007,7 +1007,7 @@ void func_80A4084C(EnTest3* this, PlayState* play) { } else { func_80A3E7E0(this, func_80A40678); } - this->player.targetedActor = NULL; + this->player.lockOnActor = NULL; } } else if (func_80A3ED24(this, play)) { func_80A3E7E0(this, func_80A40908); @@ -1017,7 +1017,7 @@ void func_80A4084C(EnTest3* this, PlayState* play) { void func_80A40908(EnTest3* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { func_80A3E7E0(this, func_80A4084C); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; SET_WEEKEVENTREG(WEEKEVENTREG_51_08); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); @@ -1025,7 +1025,7 @@ void func_80A40908(EnTest3* this, PlayState* play) { Actor_OfferTalkExchange(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); this->unk_D78 = &D_80A41854[6]; this->player.actor.textId = this->unk_D78->textId; - this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } } @@ -1055,7 +1055,7 @@ void EnTest3_Update(Actor* thisx, PlayState* play2) { play->actorCtx.flags &= ~ACTORCTX_FLAG_7; this->player.actor.draw = EnTest3_Draw; D_80A41D48 = false; - this->player.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_506) && !((this->player.actor.category == ACTORCAT_PLAYER) && ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)))) { @@ -1196,7 +1196,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL (this->player.bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + this->player.leftHandWorld.pos.z) / 2.0f; } } else if (limbIndex == OBJECT_TEST3_LIMB_0B) { - Actor* actor730 = this->player.targetedActor; + Actor* actor730 = this->player.lockOnActor; if ((*dList1 != NULL) && this->player.currentMask && !(this->player.stateFlags2 & PLAYER_STATE2_1000000)) { // this->player.currentMask != PLAYER_MASK_NONE 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 0672bd4bf..efdc48713 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -7,7 +7,7 @@ #include "z_en_tg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTg*)thisx) 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 c3cdc7e5e..3671693c7 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -8,7 +8,8 @@ #include "z_en_thiefbird.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) #define THIS ((EnThiefbird*)thisx) @@ -641,7 +642,7 @@ void func_80C11D14(EnThiefbird* this, PlayState* play) { } void func_80C11DC0(EnThiefbird* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80C11DF0; this->actor.gravity = -0.5f; } @@ -834,7 +835,7 @@ void func_80C124B0(EnThiefbird* this, PlayState* play) { } void func_80C126A8(EnThiefbird* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags &= ~AC_ON; this->actionFunc = func_80C126D8; } diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 5243b5c47..ded290262 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -163,7 +163,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) { } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) || CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_OfferTalk(&this->actor, play, 110.0f); } } 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 dbf446aa5..bf861c2da 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_tite/object_tite.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnTite*)thisx) @@ -163,7 +163,7 @@ void EnTite_Init(Actor* thisx, PlayState* play) { if (this->actor.params == ENTITE_MINUS_3) { this->actor.params = ENTITE_MINUS_2; this->unk_2BE = 240; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.yOffset = -3000.0f; this->actor.shape.shadowDraw = NULL; func_80895A10(this); @@ -353,7 +353,7 @@ void func_8089408C(EnTite* this, PlayState* play) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.velocity.y = 10.0f; } else { this->actor.velocity.y = 8.0f; @@ -640,7 +640,7 @@ void func_80895020(EnTite* this, PlayState* play) { this->collider.base.acFlags &= ~AC_ON; this->actor.colorFilterTimer = 0; SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_TEKU_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; this->unk_2BA = 1; Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, this->unk_2BE); @@ -929,7 +929,7 @@ void func_80895E28(EnTite* this, PlayState* play) { func_800B0DE0(play, &sp44, &sp38, &D_80896B44, &D_80896B3C, &D_80896B40, 500, 50); if (Math_StepToF(&this->actor.shape.yOffset, 0.0f, 200.0f)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.world.rot.y = this->actor.shape.rot.y; this->collider.base.acFlags |= AC_ON; func_808945EC(this); @@ -1022,7 +1022,7 @@ void func_80895FF8(EnTite* this, PlayState* play) { } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->collider.base.acFlags & AC_ON) && (this->actor.colChkInfo.health != 0) && (play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f))) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (this->actor.shape.yOffset < 0.0f) { this->actor.shape.yOffset = 0.0f; this->actor.shape.shadowDraw = ActorShadow_DrawCircle; 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 ccc5e4489..61540eec0 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_tk/object_tk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTk*)thisx) @@ -218,7 +218,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) { } if ((this->unk_2B0 == 1) || (this->unk_2B0 == 3)) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.update = func_80AEF2C8; this->actor.draw = NULL; return; @@ -231,7 +231,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) { this->unk_318 = 0; this->unk_2D4 = -1; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.colChkInfo.mass = MASS_IMMOVABLE; if (this->unk_2B0 == 2) { @@ -358,9 +358,9 @@ void func_80AECB6C(EnTk* this, PlayState* play) { if (!temp4 && (this->unk_3CC != 0)) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (temp4 && (this->unk_3CC == 0)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnTk_Draw; } @@ -368,7 +368,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { func_80AECE0C(this, play); if (this->unk_3CE & 8) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; } } @@ -1074,7 +1074,7 @@ s32 func_80AEEA4C(EnTk* this, PlayState* play) { ret = 3; } else if (this->actor.xyzDistToPlayerSq < SQ(60.0f)) { ret = 0; - } else if (this->actor.isTargeted || (play->actorCtx.targetContext.unk_94 == &this->actor) || + } else if (this->actor.isLockedOn || (play->actorCtx.targetCtx.arrowPointedActor == &this->actor) || (this->actor.xyzDistToPlayerSq < SQ(80.0f))) { ret = 1; } else { diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 39ac19dba..c5fdf30af 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -7,7 +7,7 @@ #include "z_en_toto.h" #include "objects/object_zm/object_zm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnToto*)thisx) @@ -89,7 +89,7 @@ static EnTotoActionFunc D_80BA501C[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; static EnTotoText D_80BA502C[] = { 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 d61786e6f..bf5a0900a 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -8,7 +8,7 @@ #include "objects/object_trt/object_trt.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTrt*)thisx) @@ -1577,7 +1577,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->flags |= ENTRT_GIVEN_MUSHROOM; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnTrt_GetCutscenes(EnTrt* this, PlayState* play) { 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 e56369ce4..40d1946fc 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -7,7 +7,7 @@ #include "z_en_trt2.h" #include "objects/object_trt/object_trt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTrt2*)thisx) @@ -240,7 +240,7 @@ void func_80AD381C(EnTrt2* this, PlayState* play) { this->actor.world.pos.y -= 50.0f; this->unk_3D9 = 0; this->unk_3B2 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; } } else { @@ -701,7 +701,7 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) { s16 sp1E = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; Player* player = GET_PLAYER(play); - if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isTargeted && + if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isLockedOn && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_FIERCE_DEITY))) { this->actor.speed = 0.0f; @@ -710,7 +710,7 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) { return true; } - if (func_80AD4C4C(this) && this->actor.isTargeted && (sp1E < 0x4000) && (sp1E > -0x4000)) { + if (func_80AD4C4C(this) && this->actor.isLockedOn && (sp1E < 0x4000) && (sp1E > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } @@ -801,7 +801,7 @@ void func_80AD4FE4(EnTrt2* this, PlayState* play) { } static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 3, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_3, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; 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 ba1a8c983..a5938d4cf 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -7,7 +7,7 @@ #include "z_en_tru.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTru*)thisx) @@ -1046,7 +1046,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { } if (ret == true) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->unk_378 = NULL; this->unk_34E = 0; @@ -1144,7 +1144,7 @@ void EnTru_Init(Actor* thisx, PlayState* play) { this->unk_384 = 1; } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.008f); this->unk_34E = 0; 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 f877a26a8..0297339d9 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 @@ -7,7 +7,7 @@ #include "z_en_tru_mt.h" #include "overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTruMt*)thisx) @@ -432,7 +432,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->collider.dim.worldSphere.radius = 22; this->actor.colChkInfo.damageTable = &sDamageTable; this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), ENTRUMT_PATH_INDEX_NONE); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.008f); Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); 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 6f27da823..f95b1a8e8 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -8,7 +8,7 @@ #include "z64snap.h" #include "objects/object_tsn/object_tsn.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnTsn*)thisx) @@ -83,7 +83,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { this->actor.update = func_80AE0F84; this->actor.destroy = NULL; this->actor.draw = NULL; - this->actor.targetMode = 7; + this->actor.targetMode = TARGET_MODE_7; switch (ENTSN_GET_F(&this->actor)) { case ENTSN_F_0: @@ -536,7 +536,7 @@ void func_80AE0C88(EnTsn* this, PlayState* play) { this->unk_220 |= 4; ENTSN_SET_Z(&this->unk_1D8->actor, true); } - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 1000.0f); } } @@ -553,7 +553,7 @@ void func_80AE0D78(EnTsn* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80AE0D10; this->unk_220 |= 4; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 1000.0f); } } 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 51dee7da0..cc1df3cdb 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 @@ -236,7 +236,7 @@ void EnTuboTrap_Idle(EnTuboTrap* this, PlayState* play) { if ((startingRotation == 0) || (this->actor.playerHeightRel <= (startingRotation * 10.0f))) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); currentHeight = this->actor.world.pos.y; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); // always update and can target + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); // always update and can target transformationHeight = sTransformationHeight[player->transformation]; 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 68f7411f3..1866a2381 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -9,7 +9,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_vm/object_vm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnVm*)thisx) 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 2d9a12b54..29f5793d2 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Encount1/z_en_encount1.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnWallmas*)thisx) @@ -219,7 +219,7 @@ void EnWallmas_ThawIfFrozen(EnWallmas* this, PlayState* play) { void EnWallmas_TimerInit(EnWallmas* this, PlayState* play) { Player* player = GET_PLAYER(play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_20; this->timer = 130; this->actor.velocity.y = 0.0f; @@ -270,7 +270,7 @@ void EnWallmas_SetupDrop(EnWallmas* this, PlayState* play) { this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.floorHeight = player->actor.floorHeight; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_20; this->actionFunc = EnWallmas_Drop; } @@ -504,7 +504,7 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { void EnWallmas_ProximityOrSwitchInit(EnWallmas* this) { this->timer = 0; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_PROXIMITY) { this->actionFunc = EnWallmas_WaitForProximity; } else { @@ -563,7 +563,7 @@ void EnWallmas_UpdateDamage(EnWallmas* this, PlayState* play) { if (Actor_ApplyDamage(&this->actor) == 0) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_REVERSE); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (this->actor.colChkInfo.damage != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE); } diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c index fd68a22ce..b5603e613 100644 --- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c +++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c @@ -7,7 +7,7 @@ #include "z_en_warp_uzu.h" #include "objects/object_warp_uzu/object_warp_uzu.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnWarpUzu*)thisx) @@ -65,7 +65,7 @@ void EnWarpUzu_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitAndSetCylinder(play, &this->collider, thisx, &sCylinderInit); - thisx->targetMode = 0; + thisx->targetMode = TARGET_MODE_0; func_80A66208(this, play); } 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 e4cb566ab..cbb095279 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 @@ -8,7 +8,7 @@ #include "z_en_warp_tag.h" #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnWarptag*)thisx) @@ -52,7 +52,7 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->dyna.actor, 0.0f); if (WARPTAG_GET_3C0_MAX(thisx) == WARPTAG_3C0_MAX) { - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (WARPTAG_GET_INVISIBLE(&this->dyna.actor)) { this->actionFunc = EnWarpTag_WaitForPlayer; 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 c8ec8f8c4..6901fbffd 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 @@ -16,7 +16,7 @@ #include "objects/object_water_effect/object_water_effect.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnWaterEffect*)thisx) @@ -90,7 +90,7 @@ void EnWaterEffect_Init(Actor* thisx, PlayState* play) { s32 pad; EnWaterEffect* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_DC4 = Rand_ZeroFloat(100.0f); if (this->actor.params == ENWATEREFFECT_TYPE_FALLING_ROCK_SPAWNER) { diff --git a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c index 83cf47291..221ff557c 100644 --- a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c +++ b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c @@ -6,7 +6,7 @@ #include "z_en_wdhand.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnWdhand*)thisx) diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index 84f621915..97c381beb 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -67,7 +67,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { s32 pathID; // flag: is targetable. Should do nothing as not set by default above - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (WEATHER_TAG_TYPE(&this->actor)) { case WEATHERTAG_TYPE_UNK0: 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 6e31192b2..b1332885e 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnWf*)thisx) @@ -527,7 +527,7 @@ void func_80990F0C(EnWf* this) { this->collider2.base.acFlags &= ~AC_ON; this->actor.shape.shadowScale = 0.0f; this->actor.scale.y = 0.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2A0 = 60; this->actionFunc = func_80990F50; } @@ -553,7 +553,7 @@ void func_80990F50(EnWf* this, PlayState* play) { void func_80990FC8(EnWf* this) { Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f); this->unk_2A0 = 5; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80991040; } @@ -1164,7 +1164,7 @@ void func_80992D6C(EnWf* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -6.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2A0 = 25; Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD); this->actionFunc = func_80992E0C; 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 9bd3a0bcc..2d7d12782 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -9,9 +9,9 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h" -#define FLAGS \ - (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_100000 | \ - ACTOR_FLAG_CANT_LOCK_ON | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE | \ + ACTOR_FLAG_100000 | ACTOR_FLAG_CANT_LOCK_ON | ACTOR_FLAG_80000000) #define THIS ((EnWiz*)thisx) @@ -330,7 +330,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { this->platformLightAlpha = 0; this->alpha = 255; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_450 = 1.0f; this->actor.shape.yOffset = 700.0f; Collider_InitAndSetJntSph(play, &this->ghostColliders, &this->actor, &sJntSphInit, this->ghostColliderElements); @@ -1011,7 +1011,7 @@ void EnWiz_SetupDisappear(EnWiz* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR); Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); this->actor.world.rot.y += this->rotationalVelocity; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_Disappear; } @@ -1051,7 +1051,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) { this->ghostColliders.elements[0].info.bumper.dmgFlags = 0x1000202; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_SetupAppear; } } @@ -1066,7 +1066,7 @@ void EnWiz_SetupDamaged(EnWiz* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DEAD); this->timer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DAMAGE); } 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 12d06e487..02aa83ab8 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 @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Wiz/z_en_wiz.h" #include "objects/object_wiz/object_wiz.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnWizFire*)thisx) @@ -74,10 +74,10 @@ void EnWizFire_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->type = EN_WIZ_FIRE_GET_TYPE(&this->actor); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->wallCheckTimer = 10; this->alpha = 255.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!Player_HasMirrorShieldEquipped(play)) { this->collider.info.toucher.dmgFlags = 0x20000000; 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 037ca93d6..c9881a5e0 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -7,7 +7,7 @@ #include "z_en_yb.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnYb*)thisx) @@ -120,7 +120,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) { } else { // else (night 6pm to midnight): wait to appear this->alpha = 0; this->actionFunc = EnYb_WaitForMidnight; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_04)) { @@ -396,7 +396,7 @@ void EnYb_WaitForMidnight(EnYb* this, PlayState* play) { this->alpha += 5; if (this->alpha > 250) { this->alpha = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnYb_Idle; } EnYb_EnableProximityMusic(this); @@ -407,11 +407,11 @@ void EnYb_Update(Actor* thisx, PlayState* play) { s32 pad; EnYb* this = THIS; - if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TARGETABLE)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } - if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TARGETABLE)) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c index e77aace23..1e813813e 100644 --- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c +++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c @@ -6,7 +6,7 @@ #include "z_en_zl1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZl1*)thisx) 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 b89d6a5fb..95e8f2ceb 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -6,7 +6,7 @@ #include "z_en_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZo*)thisx) 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 c963df55b..b54986829 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -7,7 +7,7 @@ #include "z_en_zob.h" #include "objects/object_zob/object_zob.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZob*)thisx) 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 df67493d6..5d352e734 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -6,7 +6,7 @@ #include "z_en_zod.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZod*)thisx) 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 15c8a0017..2e99ccb7b 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -7,7 +7,7 @@ #include "z_en_zog.h" #include "objects/object_zog/object_zog.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZog*)thisx) 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 632292857..662543774 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -144,8 +144,8 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { switch (ZORA_EGG_GET_TYPE(&this->actor)) { case ZORA_EGG_TYPE_00: this->actionFunc = func_80B320E0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.targetMode = 3; + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.targetMode = TARGET_MODE_3; break; case ZORA_EGG_TYPE_01: @@ -344,13 +344,13 @@ void func_80B320E0(EnZoraegg* this, PlayState* play) { Message_StartTextbox(play, 0x24B, &this->actor); } else { Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 60.0f); - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 110.0f); } } - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.targetMode = 3; + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.targetMode = TARGET_MODE_3; func_80B31C40(this, 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 19ecd207f..4be070d25 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -6,7 +6,7 @@ #include "z_en_zos.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) #define THIS ((EnZos*)thisx) 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 8a02b3b8c..e9e86668a 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -8,7 +8,7 @@ #include "z64snap.h" #include "objects/object_zo/object_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZot*)thisx) @@ -96,7 +96,7 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { this->unk_2F4 = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.world.rot.z = this->actor.shape.rot.z = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.terminalVelocity = -4.0f; this->actor.gravity = -4.0f; 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 cf8c30dc7..6342c38d3 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -8,7 +8,7 @@ #include "objects/object_zov/object_zov.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZov*)thisx) 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 c6f8f2560..dfcf7225e 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -7,7 +7,7 @@ #include "z_en_zow.h" #include "objects/object_zo/object_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZow*)thisx) @@ -324,7 +324,7 @@ void EnZow_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.textId = 0; this->actor.world.rot.z = this->actor.shape.rot.z; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnZow_Destroy(Actor* thisx, PlayState* play) { @@ -410,7 +410,7 @@ void func_80BDD350(EnZow* this, PlayState* play) { if (this->unk_2CA & 2) { Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_WATER); func_80BDCDA8(this, this->unk_2D0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; this->actor.velocity.y = -4.0f; } @@ -517,7 +517,7 @@ void func_80BDD6BC(EnZow* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER); func_80BDCDA8(this, this->unk_2D0); func_80BDD04C(this, 1, ANIMMODE_ONCE); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.velocity.y = 0.0f; this->actionFunc = func_80BDD634; } else if (this->actor.depthInWater < 80.0f) { diff --git a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c index 0599e117d..0b554f665 100644 --- a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c +++ b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c @@ -6,7 +6,7 @@ #include "z_item_inbox.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ItemInbox*)thisx) 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 c7fbab2d6..12afce508 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -298,7 +298,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { Actor_SetScale(&this->dyna.actor, 0.01f); this->dyna.actor.scale.y = 0.02f; this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; break; case DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE: @@ -311,7 +311,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->oscillationTimer = 30; this->bounceOscillationScale = 0.0f; this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; break; default: 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 09dbd8dab..5668021e3 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -7,7 +7,7 @@ #include "z_obj_ghaka.h" #include "objects/object_ghaka/object_ghaka.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_20) #define THIS ((ObjGhaka*)thisx) @@ -39,7 +39,7 @@ ActorInit Obj_Ghaka_InitVars = { static Vec3f D_80B3C960 = { 0.0f, 0.0f, 0.0f }; static InitChainEntry D_80B3C96C[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -74,7 +74,7 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { func_80B3C29C(this); - } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) || this->dyna.actor.isTargeted) { + } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) || this->dyna.actor.isLockedOn) { if ((yaw <= -0x5556) || (yaw >= 0x5556)) { Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play); if (player->transformation == PLAYER_FORM_GORON) { 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 5201c1de8..6db03e1ca 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -7,7 +7,7 @@ #include "z_obj_hakaisi.h" #include "objects/object_hakaisi/object_hakaisi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_20) #define THIS ((ObjHakaisi*)thisx) @@ -98,7 +98,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { } Actor_SetScale(&this->dyna.actor, 1.0f); - this->dyna.actor.targetMode = 0; + this->dyna.actor.targetMode = TARGET_MODE_0; this->dyna.actor.colChkInfo.health = 30; if (OBJHAKAISI_GET_FF(&this->dyna.actor) == 3) { this->dyna.actor.draw = NULL; @@ -208,7 +208,7 @@ void func_80B1456C(ObjHakaisi* this, PlayState* play) { void func_80B145F4(ObjHakaisi* this) { this->unk_19A = 0; this->dyna.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN); this->actionFunc = func_80B14648; } @@ -375,7 +375,7 @@ void func_80B151E0(ObjHakaisi* this, PlayState* play) { this->dyna.actor.destroy = func_80B15254; Actor_SetScale(&this->dyna.actor, 0.1f); this->dyna.actor.shape.yOffset = 100.0f; - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80B15264(this); } diff --git a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c index 5bf35d48d..c6529625c 100644 --- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c +++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c @@ -42,11 +42,11 @@ void ObjKinoko_Update(Actor* thisx, PlayState* play) { if (player->currentMask != PLAYER_MASK_SCENTS) { thisx->draw = NULL; thisx->hintId = TATL_HINT_ID_NONE; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; } else { thisx->draw = ObjKinoko_Draw; thisx->hintId = TATL_HINT_ID_MUSHROOM; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; if (Actor_HasParent(thisx, play)) { Flags_SetCollectible(play, OBJ_KINOKO_GET_FLAG(thisx)); Actor_Kill(thisx); diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index c40d03f6a..dddbaa256 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -42,19 +42,19 @@ void ObjMoonStone_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.3f); this->unk194 = (this->actor.params & 0xF000) >> 0xC; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.shape.yOffset = 25.0f; this->actor.focus.pos.y += 10.0f; if (this->unk194 == 0) { this->actor.colChkInfo.health = 0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80C0662C(this); } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -1); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80C0673C(this); } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c index 3e93f15bc..f0315a16e 100644 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c +++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c @@ -6,7 +6,7 @@ #include "z_obj_mu_pict.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ObjMuPict*)thisx) @@ -46,7 +46,7 @@ void ObjMuPict_Init(Actor* thisx, PlayState* play) { func_80C06D90(this, play); this->unk14A = OBJMUPICT_GET_F000(&this->actor); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; this->unk148 = 0; 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 fc4d2ecf5..d783c88e8 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -46,7 +46,7 @@ ActorInit Obj_Nozoki_InitVars = { static InitChainEntry sInitChain[] = { ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; s16 D_80BA34B8[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ }; @@ -413,10 +413,10 @@ void func_80BA3230(ObjNozoki* this, PlayState* play) { if ((test3 != NULL) && (test3->draw != NULL)) { if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); this->dyna.actor.textId = 0x297A; } else { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { this->dyna.actor.textId = 0; } else { 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 2a2d3a611..17a277e82 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -44,8 +44,8 @@ ActorInit Obj_Ocarinalift_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; @@ -197,7 +197,7 @@ void func_80AC9A7C(ObjOcarinalift* this, PlayState* play) { } void func_80AC9AB8(ObjOcarinalift* this) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); this->actionFunc = func_80AC9AE0; } @@ -234,7 +234,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { } void func_80AC9C20(ObjOcarinalift* this) { - this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); + this->dyna.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); this->actionFunc = func_80AC9C48; } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index 281c813e2..edc780007 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -478,10 +478,10 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) { if (sp34) { this->actor.textId = 0x238; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.targetArrowOffset = 1400.0f / 3.0f; Actor_SetFocus(&this->actor, 24.0f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; } Collider_InitJntSph(play, &this->collider); @@ -537,7 +537,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { (0x80000000 | 0x4000 | 0x800 | 0x400 | 0x100 | 0x8))) { this->actor.flags |= ACTOR_FLAG_10; if (this->actor.home.rot.y == 1) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } if (this->collider.elements->info.acHitInfo->toucher.dmgFlags & 0x4000) { @@ -763,7 +763,7 @@ void ObjSnowball_Update(Actor* thisx, PlayState* play) { } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags |= ACTOR_FLAG_10; this->unk_211 = 1; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { sp24 = true; } } 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 1cab193db..295181b8d 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -381,7 +381,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) { ObjSwitch_InitJntSphCollider(this, play, &sJntSphInit); } if (type == OBJSWITCH_TYPE_CRYSTAL_TARGETABLE) { - this->dyna.actor.targetMode = 4; + this->dyna.actor.targetMode = TARGET_MODE_4; this->dyna.actor.flags |= 1; } this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; 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 e860d381a..09b95d3a0 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_In/z_en_in.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((ObjUm*)thisx) @@ -708,7 +708,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { return; } - this->dyna.actor.targetMode = 6; + this->dyna.actor.targetMode = TARGET_MODE_6; this->unk_2B4 = 0; ObjUm_SetupAction(this, ObjUm_RanchWait); } @@ -965,7 +965,7 @@ s32 func_80B7984C(PlayState* play, ObjUm* this, s32 arg2, s32* arg3) { return 0; } - if ((this->dyna.actor.xyzDistToPlayerSq > SQ(100.0f)) && !this->dyna.actor.isTargeted) { + if ((this->dyna.actor.xyzDistToPlayerSq > SQ(100.0f)) && !this->dyna.actor.isLockedOn) { return 0; } @@ -995,7 +995,7 @@ s32 func_80B79A24(s32 arg0) { void ObjUm_RanchWait(ObjUm* this, PlayState* play) { Player* player = GET_PLAYER(play); - this->dyna.actor.flags |= ACTOR_FLAG_1; + this->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; SkelAnime_Update(&this->skelAnime); ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE); this->flags |= OBJ_UM_FLAG_WAITING; 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 4ae133dd3..e3d11f2fc 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -8,7 +8,7 @@ #include "objects/object_sek/object_sek.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ObjWarpstone*)thisx) @@ -55,7 +55,7 @@ static ColliderCylinderInit sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; static Gfx* sOwlStatueDLs[] = { gOwlStatueClosedDL, gOwlStatueOpenedDL }; diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index e128e7263..4130dcb74 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ShotSun*)thisx) @@ -66,7 +66,7 @@ void ShotSun_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actionFunc = ShotSun_UpdateHyliaSun; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 89ba05a86..435406885 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3494,7 +3494,8 @@ void func_8082FA5C(PlayState* play, Player* this, PlayerMeleeWeaponState meleeWe } s32 func_8082FB68(Player* this) { - if ((this->targetedActor != NULL) && CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + if ((this->lockOnActor != NULL) && + CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags3 |= PLAYER_STATE3_80000000; return true; } @@ -4019,7 +4020,7 @@ s32 func_80830FD4(PlayState* play) { s32 func_80831010(Player* this, PlayState* play) { if ((this->unk_AA5 == PLAYER_UNKAA5_0) || (this->unk_AA5 == PLAYER_UNKAA5_3)) { - if (func_8082FBE8(this) || (this->targetedActor != NULL) || + if (func_8082FBE8(this) || (this->lockOnActor != NULL) || (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_BOWARROW) == 0)) { return true; } @@ -4534,12 +4535,12 @@ void func_80832578(Player* this, PlayState* play) { s16 previousYaw = this->actor.shape.rot.y; if (!(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; - if ((targetedActor != NULL) && ((play->actorCtx.targetContext.unk4B != 0) || (this != GET_PLAYER(play))) && - (targetedActor->id != ACTOR_OBJ_NOZOKI)) { + if ((lockOnActor != NULL) && ((play->actorCtx.targetCtx.rotZTick != 0) || (this != GET_PLAYER(play))) && + (lockOnActor->id != ACTOR_OBJ_NOZOKI)) { Math_ScaledStepToS(&this->actor.shape.rot.y, - Math_Vec3f_Yaw(&this->actor.world.pos, &targetedActor->focus.pos), 0xFA0); + Math_Vec3f_Yaw(&this->actor.world.pos, &lockOnActor->focus.pos), 0xFA0); } else if ((this->stateFlags1 & PLAYER_STATE1_20000) && !(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetYaw, 0xFA0); @@ -4597,7 +4598,7 @@ s16 func_80832754(Player* this, s32 arg1) { } void func_80832888(Player* this, PlayState* play) { - s32 var_v1 = 0; + s32 ignoreLeash = false; Actor* var_v1_2; s32 heldZ = CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_Z); s32 temp_v0_3; @@ -4623,7 +4624,7 @@ void func_80832888(Player* this, PlayState* play) { } if (this->unk_738 > 5) { - var_v1 = 1; + ignoreLeash = true; } temp_v0_3 = func_8082DAFC(play); @@ -4632,28 +4633,27 @@ void func_80832888(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_2000000) && ((this->heldItemAction != PLAYER_IA_FISHING_ROD) || (this->unk_B28 == 0)) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_Z)) { - var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetContext.arrowPointedActor - : &GET_PLAYER(play)->actor; + var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetCtx.fairyActor : &GET_PLAYER(play)->actor; var_a1 = (gSaveContext.options.zTargetSetting != 0) || (this != GET_PLAYER(play)); this->stateFlags1 |= PLAYER_STATE1_8000; if ((this->currentMask != PLAYER_MASK_GIANT) && (var_v1_2 != NULL) && !(var_v1_2->flags & ACTOR_FLAG_CANT_LOCK_ON) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { - if ((var_v1_2 == this->targetedActor) && (this == GET_PLAYER(play))) { - var_v1_2 = play->actorCtx.targetContext.unk_94; + if ((var_v1_2 == this->lockOnActor) && (this == GET_PLAYER(play))) { + var_v1_2 = play->actorCtx.targetCtx.arrowPointedActor; } if ((var_v1_2 != NULL) && - (((var_v1_2 != this->targetedActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) { + (((var_v1_2 != this->lockOnActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) { var_v1_2->flags &= ~ACTOR_FLAG_80000; if (!var_a1) { this->stateFlags2 |= PLAYER_STATE2_2000; } - this->targetedActor = var_v1_2; + this->lockOnActor = var_v1_2; this->unk_738 = 0xF; this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); } else if (!var_a1) { - func_80123DA4(this); + Player_Untarget(this); } this->stateFlags1 &= ~PLAYER_STATE1_40000000; } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) && @@ -4662,23 +4662,23 @@ void func_80832888(Player* this, PlayState* play) { } } - if (this->targetedActor != NULL) { - if ((this == GET_PLAYER(play)) && (this->targetedActor != this->unk_A78) && - func_800B83F8(this->targetedActor, this, var_v1)) { - func_80123DA4(this); + if (this->lockOnActor != NULL) { + if ((this == GET_PLAYER(play)) && (this->lockOnActor != this->unk_A78) && + Target_OutsideLeashRange(this->lockOnActor, this, ignoreLeash)) { + Player_Untarget(this); this->stateFlags1 |= PLAYER_STATE1_40000000; - } else if (this->targetedActor != NULL) { - this->targetedActor->targetPriority = 0x28; + } else if (this->lockOnActor != NULL) { + this->lockOnActor->targetPriority = 0x28; } } else if (this->unk_A78 != NULL) { - this->targetedActor = this->unk_A78; + this->lockOnActor = this->unk_A78; } } - if ((this->targetedActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { + if ((this->lockOnActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { this->stateFlags1 &= ~(PLAYER_STATE1_10000 | PLAYER_STATE1_20000); if ((this->stateFlags1 & PLAYER_STATE1_800) || - !CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + !CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags1 |= PLAYER_STATE1_10000; } } else if (this->stateFlags1 & PLAYER_STATE1_20000) { @@ -4722,7 +4722,7 @@ s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg f32 var_fa1; if (this->unk_AB8 != 0.0f) { - var_fa1 = (this->targetedActor != NULL) ? 0.002f : 0.008f; + var_fa1 = (this->lockOnActor != NULL) ? 0.002f : 0.008f; var_fa0 -= this->unk_AB8 * var_fa1; var_fa0 = CLAMP_MIN(var_fa0, 2.0f); @@ -4745,9 +4745,9 @@ s32 func_80832F78(Player* this, f32* arg1, s16* outYaw, f32 arg3, PlayState* pla if (!func_80832CAC(play, this, arg1, outYaw, arg3)) { *outYaw = this->actor.shape.rot.y; - if (this->targetedActor != NULL) { - if ((play->actorCtx.targetContext.unk4B != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) { - *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->targetedActor->focus.pos); + if (this->lockOnActor != NULL) { + if ((play->actorCtx.targetCtx.rotZTick != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) { + *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->lockOnActor->focus.pos); } } else if (func_80123434(this)) { *outYaw = this->targetYaw; @@ -4850,8 +4850,8 @@ void func_808332A0(PlayState* play, Player* this, s32 magicCost, s32 isSwordBeam Actor* thunder; if (isSwordBeam) { - if (this->targetedActor != NULL) { - pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->targetedActor->focus.pos); + if (this->lockOnActor != NULL) { + pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->lockOnActor->focus.pos); } if (gSaveContext.save.saveInfo.playerData.magic == 0) { return; @@ -6676,7 +6676,7 @@ void func_80837B60(PlayState* play, Player* this) { if (this->actor.textId != 0) { Message_StartTextbox(play, this->actor.textId, this->talkActor); } - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } void func_80837BD0(PlayState* play, Player* this) { @@ -7225,14 +7225,14 @@ s32 func_80838A90(Player* this, PlayState* play) { this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_AE8 = 80; this->unk_AE7 = -1; - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } else { this->csId = CS_ID_GLOBAL_TALK; } talkActor->flags |= ACTOR_FLAG_TALK_REQUESTED; this->actor.textId = 0; - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } else { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]; @@ -7324,15 +7324,15 @@ s32 func_80838A90(Player* this, PlayState* play) { s32 func_808391D8(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* talkActor = this->talkActor; - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; Actor* var_a1 = NULL; s32 var_t1 = false; s32 var_t2 = false; if (this->tatlActor != NULL) { - var_t2 = - (targetedActor != NULL) && (CHECK_FLAG_ALL(targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || - (targetedActor->hintId != TATL_HINT_ID_NONE)); + var_t2 = (lockOnActor != NULL) && + (CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || + (lockOnActor->hintId != TATL_HINT_ID_NONE)); if (var_t2 || (this->tatlTextId != 0)) { //! @bug The comparison `((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000)` always evaluates to `true` @@ -7341,17 +7341,17 @@ s32 func_808391D8(Player* this, PlayState* play) { if (var_t1 || !var_t2) { var_a1 = this->tatlActor; if (var_t1) { - targetedActor = NULL; + lockOnActor = NULL; talkActor = NULL; } } else { - var_a1 = targetedActor; + var_a1 = lockOnActor; } } } if ((talkActor != NULL) || (var_a1 != NULL)) { - if ((targetedActor == NULL) || (targetedActor == talkActor) || (targetedActor == var_a1)) { + if ((lockOnActor == NULL) || (lockOnActor == talkActor) || (lockOnActor == var_a1)) { if (!(this->stateFlags1 & PLAYER_STATE1_800) || ((this->heldActor != NULL) && (var_t1 || (talkActor == this->heldActor) || (var_a1 == this->heldActor) || @@ -7359,7 +7359,7 @@ s32 func_808391D8(Player* this, PlayState* play) { if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & PLAYER_STATE1_800000) || func_801242B4(this))) { if (talkActor != NULL) { - if ((targetedActor == NULL) || (targetedActor == talkActor)) { + if ((lockOnActor == NULL) || (lockOnActor == talkActor)) { this->stateFlags2 |= PLAYER_STATE2_2; } @@ -7411,9 +7411,9 @@ s32 func_80839518(Player* this, PlayState* play) { if (this->unk_AA5 != PLAYER_UNKAA5_0) { func_80838A90(this, play); return true; - } else if ((this->targetedActor != NULL) && - (CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || - (this->targetedActor->hintId != TATL_HINT_ID_NONE))) { + } else if ((this->lockOnActor != NULL) && + (CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || + (this->lockOnActor->hintId != TATL_HINT_ID_NONE))) { this->stateFlags2 |= PLAYER_STATE2_200000; } else if ((this->tatlTextId == 0) && !func_80123420(this) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) && @@ -7696,7 +7696,7 @@ s32 func_8083A274(Player* this, PlayState* play) { if (Player_IsGoronOrDeku(this) || ((((this->transformation == PLAYER_FORM_ZORA) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) || ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) && - !func_80123434(this) && (this->targetedActor == NULL))) { + !func_80123434(this) && (this->lockOnActor == NULL))) { func_8082DC38(this); func_8082DCA0(play, this); if (Player_SetAction(play, this, Player_Action_18, 0)) { @@ -8454,7 +8454,7 @@ void func_8083BF54(PlayState* play, Player* this) { } s32 func_8083C62C(Player* this, s32 arg1) { - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; Vec3f headPos; s16 pitchTarget; s16 yawTarget; @@ -8463,8 +8463,8 @@ s32 func_8083C62C(Player* this, s32 arg1) { headPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; headPos.z = this->actor.world.pos.z; - pitchTarget = Math_Vec3f_Pitch(&headPos, &targetedActor->focus.pos); - yawTarget = Math_Vec3f_Yaw(&headPos, &targetedActor->focus.pos); + pitchTarget = Math_Vec3f_Pitch(&headPos, &lockOnActor->focus.pos); + yawTarget = Math_Vec3f_Yaw(&headPos, &lockOnActor->focus.pos); Math_SmoothStepToS(&this->actor.focus.rot.y, yawTarget, 4, 0x2710, 0); Math_SmoothStepToS(&this->actor.focus.rot.x, pitchTarget, 4, 0x2710, 0); @@ -8477,7 +8477,7 @@ s32 func_8083C62C(Player* this, s32 arg1) { Vec3f D_8085D218 = { 0.0f, 100.0f, 40.0f }; void func_8083C6E8(Player* this, PlayState* play) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { if (func_800B7128(this) || func_8082EF20(this)) { func_8083C62C(this, true); } else { @@ -9154,7 +9154,7 @@ s32 func_8083E404(Player* this, f32 arg1, s16 arg2) { f32 sp1C = BINANG_SUB(arg2, this->actor.shape.rot.y); f32 temp_fv1; - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_8083C62C(this, func_800B7128(this) || func_8082EF20(this)); } @@ -9173,7 +9173,7 @@ s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) { s16 temp_v1 = *arg3 - this->targetYaw; u16 var_a2 = ABS_ALT(temp_v1); - if ((func_800B7128(this) || func_8082EF20(this)) && (this->targetedActor == NULL)) { + if ((func_800B7128(this) || func_8082EF20(this)) && (this->lockOnActor == NULL)) { *arg2 *= Math_SinS(var_a2); if (*arg2 != 0.0f) { @@ -9182,14 +9182,14 @@ s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) { *arg3 = this->actor.shape.rot.y; } - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_8083C62C(this, true); } else { Math_SmoothStepToS(&this->actor.focus.rot.x, (sPlayerControlInput->rel.stick_y * 240.0f), 0xE, 0xFA0, 0x1E); func_80832754(this, true); } } else { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { return func_8083E404(this, *arg2, *arg3); } @@ -9314,7 +9314,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || ((this->actor.id == ACTOR_PLAYER) && - (((this->targetedActor != NULL) || + (((this->lockOnActor != NULL) || ((this->transformation != PLAYER_FORM_FIERCE_DEITY) && (this->transformation != PLAYER_FORM_HUMAN)) || (this->currentMask == PLAYER_MASK_SCENTS)) || (!(healthIsCritical = LifeMeter_IsCritical()) && (this->unk_AA4 = ((this->unk_AA4 + 1) & 1)))))) { @@ -10788,7 +10788,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { (this->transformation == PLAYER_FORM_ZORA)) && ((this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) || ((this->stateFlags2 & PLAYER_STATE2_100000) && - (play->actorCtx.targetContext.arrowPointedActor == NULL)))) { + (play->actorCtx.targetCtx.fairyActor == NULL)))) { doActionA = DO_ACTION_PUTAWAY; if (play->msgCtx.currentTextId == 0) {} //! FAKE @@ -10808,7 +10808,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { // Set Tatl state if (!Play_InCsMode(play) && (this->stateFlags2 & PLAYER_STATE2_200000) && !(this->stateFlags3 & PLAYER_STATE3_100)) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_80115764(play, 0x2B); } else { func_80115764(play, 0x2A); @@ -11183,7 +11183,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { } } else if (this->stateFlags2 & PLAYER_STATE2_100) { camMode = CAM_MODE_PUSHPULL; - } else if (this->targetedActor != NULL) { + } else if (this->lockOnActor != NULL) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED)) { camMode = CAM_MODE_TALK; } else if (this->stateFlags1 & PLAYER_STATE1_10000) { @@ -11195,7 +11195,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { } else { camMode = CAM_MODE_BATTLE; } - Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->targetedActor); + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->lockOnActor); } else if (this->stateFlags1 & PLAYER_STATE1_1000) { camMode = CAM_MODE_CHARGE; } else if (this->stateFlags3 & PLAYER_STATE3_100) { @@ -11249,9 +11249,9 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { Camera_ChangeMode(camera, camMode); } - if (play->actorCtx.targetContext.bgmEnemy != NULL) { + if (play->actorCtx.targetCtx.bgmEnemy != NULL) { seqMode = SEQ_MODE_ENEMY; - Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetContext.bgmEnemy->xyzDistToPlayerSq)); + Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetCtx.bgmEnemy->xyzDistToPlayerSq)); } Audio_SetSequenceMode(seqMode); @@ -11863,8 +11863,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Lights_PointSetPosition(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z); - if (((this->targetedActor == NULL) || (this->targetedActor == this->talkActor) || - (this->targetedActor->hintId == TATL_HINT_ID_NONE)) && + if (((this->lockOnActor == NULL) || (this->lockOnActor == this->talkActor) || + (this->lockOnActor->hintId == TATL_HINT_ID_NONE)) && (this->tatlTextId == 0)) { this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); } @@ -13252,13 +13252,13 @@ s32 Player_UpperAction_14(Player* this, PlayState* play) { untargetedRotY = this->actor.shape.rot.y - 0x190; this->boomerangActor = Actor_Spawn( &play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, - (this->targetedActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT); + (this->lockOnActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT); if (this->boomerangActor != NULL) { EnBoom* leftBoomerang = (EnBoom*)this->boomerangActor; EnBoom* rightBoomerang; - leftBoomerang->moveTo = this->targetedActor; + leftBoomerang->moveTo = this->lockOnActor; if (leftBoomerang->moveTo != NULL) { leftBoomerang->unk_1CF = 0x10; } @@ -13269,11 +13269,11 @@ s32 Player_UpperAction_14(Player* this, PlayState* play) { untargetedRotY = (this->actor.shape.rot.y + 0x190); rightBoomerang = (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, - (this->targetedActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY, - 0, ZORA_BOOMERANG_RIGHT); + (this->lockOnActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY, 0, + ZORA_BOOMERANG_RIGHT); if (rightBoomerang != NULL) { - rightBoomerang->moveTo = this->targetedActor; + rightBoomerang->moveTo = this->lockOnActor; if (rightBoomerang->moveTo != NULL) { rightBoomerang->unk_1CF = 0x10; } @@ -13816,7 +13816,7 @@ void Player_Action_10(Player* this, PlayState* play) { } func_80832F78(this, &sp34, &sp32, 0.018f, play); - if ((this != GET_PLAYER(play)) && (this->targetedActor == NULL)) { + if ((this != GET_PLAYER(play)) && (this->lockOnActor == NULL)) { sp32 = this->actor.home.rot.y; } @@ -14928,7 +14928,7 @@ void Player_Action_35(Player* this, PlayState* play) { if (play->unk_1887C != 0) { play->func_18780(this, play); Player_SetAction(play, this, Player_Action_80, 0); - if (play->sceneId == 0x45) { + if (play->sceneId == SCENE_20SICHITAI) { play->unk_1887C = 0; } } else if (!func_808391D8(this, play)) { @@ -15121,7 +15121,7 @@ void Player_Action_43(Player* this, PlayState* play) { if (((this->unk_AA5 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || ((this->unk_AA5 != PLAYER_UNKAA5_2) && ((((this->csMode != PLAYER_CSMODE_NONE) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) || - (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->targetedActor != NULL) || + (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->lockOnActor != NULL) || (func_8083868C(play, this) == CAM_MODE_NORMAL) || ((this->unk_AA5 == PLAYER_UNKAA5_3) && (((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && @@ -15152,7 +15152,7 @@ void Player_Action_44(Player* this, PlayState* play) { func_8083216C(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; - if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags2 &= ~PLAYER_STATE2_2000; } @@ -15197,7 +15197,7 @@ void Player_Action_44(Player* this, PlayState* play) { } } - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { this->currentYaw = func_8083C62C(this, false); this->actor.shape.rot.y = this->currentYaw; if (this->unk_AE7 != 0) { @@ -15629,7 +15629,7 @@ void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { } s32 func_8084FE48(Player* this) { - return (this->targetedActor == NULL) && !func_8082FC24(this); + return (this->lockOnActor == NULL) && !func_8082FC24(this); } PlayerAnimationHeader* D_8085D688[] = { @@ -15820,7 +15820,7 @@ void Player_Action_52(Player* this, PlayState* play) { } else if ((this->csMode != PLAYER_CSMODE_NONE) || (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && !func_80847BF0(this, play) && !func_80838A90(this, play))) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { if (func_800B7128(this)) { this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA); @@ -17085,7 +17085,7 @@ void Player_Action_71(Player* this, PlayState* play) { Player_PlayAnimSfx(this, D_8085D840); } - if ((this->unk_AE7 == 0) && (this->targetedActor != NULL)) { + if ((this->unk_AE7 == 0) && (this->lockOnActor != NULL)) { this->currentYaw = func_8083C62C(this, 0); this->actor.shape.rot.y = this->currentYaw; } @@ -19091,7 +19091,7 @@ void func_80859248(Player* this) { if ((this->csActor == NULL) || (this->csActor->update == NULL)) { this->csActor = NULL; } - this->targetedActor = this->csActor; + this->lockOnActor = this->csActor; if (this->csActor != NULL) { this->actor.shape.rot.y = func_8083C62C(this, 0); } @@ -20167,13 +20167,13 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) { func_808323C0(player, CS_ID_GLOBAL_TALK); if ((player->talkActor != NULL) || (actor == player->tatlActor) || - CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000)) { + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000)) { actor->flags |= ACTOR_FLAG_TALK_REQUESTED; } player->talkActor = actor; player->exchangeItemAction = PLAYER_IA_NONE; - player->targetedActor = actor; + player->lockOnActor = actor; if (actor->textId == 0xFFFF) { func_800B7298(play, actor, PLAYER_CSMODE_1); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 686ce3002..1b33b3a5f 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -669,12 +669,12 @@ 0x800B4AEC:("func_800B4AEC",), 0x800B4B50:("func_800B4B50",), 0x800B4EDC:("Actor_GetProjectedPos",), - 0x800B4F40:("Target_SetPos",), - 0x800B4F78:("func_800B4F78",), - 0x800B5040:("Target_SetColors",), - 0x800B51A4:("Actor_TargetContextInit",), - 0x800B5208:("Actor_DrawZTarget",), - 0x800B5814:("func_800B5814",), + 0x800B4F40:("Target_SetLockOnPos",), + 0x800B4F78:("Target_InitLockOn",), + 0x800B5040:("Target_SetFairyState",), + 0x800B51A4:("Target_Init",), + 0x800B5208:("Target_Draw",), + 0x800B5814:("Target_Update",), 0x800B5BB0:("Flags_GetSwitch",), 0x800B5BF4:("Flags_SetSwitch",), 0x800B5C34:("Flags_UnsetSwitch",), @@ -766,9 +766,9 @@ 0x800B81E0:("Actor_GetFocus",), 0x800B8214:("Actor_GetWorld",), 0x800B8248:("Actor_GetWorldPosShapeRot",), - 0x800B82EC:("func_800B82EC",), - 0x800B83BC:("func_800B83BC",), - 0x800B83F8:("func_800B83F8",), + 0x800B82EC:("Target_GetAdjustedDistSq",), + 0x800B83BC:("Target_IsActorInRange",), + 0x800B83F8:("Target_OutsideLeashRange",), 0x800B84D0:("Actor_ProcessTalkRequest",), 0x800B8500:("Actor_OfferTalkExchange",), 0x800B85E0:("Actor_OfferTalkExchangeEquiCylinder",), @@ -840,9 +840,9 @@ 0x800BB140:("Actor_SpawnTransitionActors",), 0x800BB2D0:("Actor_SpawnEntry",), 0x800BB498:("Actor_Delete",), - 0x800BB59C:("func_800BB59C",), - 0x800BB604:("func_800BB604",), - 0x800BB8EC:("func_800BB8EC",), + 0x800BB59C:("Target_InTargetableScreenRegion",), + 0x800BB604:("Target_FindTargetableActorForCategory",), + 0x800BB8EC:("Target_GetTargetActor",), 0x800BBA88:("Enemy_StartFinishingBlow",), 0x800BBAC0:("func_800BBAC0",), 0x800BBB74:("func_800BBB74",), @@ -2208,7 +2208,7 @@ 0x80123C58:("func_80123C58",), 0x80123C90:("Player_SetEquipmentData",), 0x80123D50:("Player_UpdateBottleHeld",), - 0x80123DA4:("func_80123DA4",), + 0x80123DA4:("Player_Untarget",), 0x80123DC0:("func_80123DC0",), 0x80123E90:("func_80123E90",), 0x80123F14:("func_80123F14",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 8a0c74f95..5047e9804 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -433,7 +433,7 @@ 0x801AED48:("D_801AED48","s16","[8]",0x10), 0x801AED58:("sCategoryFreezeMasks","UNK_TYPE4","",0x4), 0x801AED88:("actorDefaultHitColor","Color_RGBA8","",0x4), - 0x801AED8C:("D_801AED8C","UNK_TYPE1","",0x1), + 0x801AED8C:("sTargetableActorCategories","UNK_TYPE1","",0x1), 0x801AED98:("D_801AED98","Vec3f","",0xC), 0x801AEDA4:("D_801AEDA4","UNK_TYPE4","",0x4), 0x801AEDB0:("sArrowDmgFlags","UNK_TYPE1","",0x1), @@ -3804,17 +3804,17 @@ 0x801ED8A0:("sActorFaultClient","UNK_TYPE1","",0x1), 0x801ED8B0:("D_801ED8B0","UNK_TYPE1","",0x1), 0x801ED8B4:("D_801ED8B4","UNK_TYPE1","",0x1), - 0x801ED8B8:("D_801ED8B8","UNK_TYPE1","",0x1), - 0x801ED8BC:("D_801ED8BC","UNK_TYPE1","",0x1), + 0x801ED8B8:("sTargetableNearestActor","UNK_TYPE1","",0x1), + 0x801ED8BC:("sTargetablePrioritizedActor","UNK_TYPE1","",0x1), 0x801ED8C0:("D_801ED8C0","UNK_TYPE1","",0x1), 0x801ED8C4:("D_801ED8C4","UNK_TYPE1","",0x1), - 0x801ED8C8:("D_801ED8C8","f32","",0x4), + 0x801ED8C8:("sTargetableNearestActorDistSq","f32","",0x4), 0x801ED8CC:("sBgmEnemyDistSq","f32","",0x4), 0x801ED8D0:("D_801ED8D0","f32","",0x4), - 0x801ED8D4:("D_801ED8D4","UNK_TYPE1","",0x1), + 0x801ED8D4:("sTargetablePrioritizedPriority","UNK_TYPE1","",0x1), 0x801ED8D8:("D_801ED8D8","UNK_TYPE1","",0x1), - 0x801ED8DC:("D_801ED8DC","UNK_TYPE1","",0x1), - 0x801ED8E0:("D_801ED8E0","Mtx","",0x40), + 0x801ED8DC:("sTargetPlayerRotY","UNK_TYPE1","",0x1), + 0x801ED8E0:("sActorHiliteMtx","Mtx","",0x40), 0x801ED920:("D_801ED920","Actor*","",0x1), 0x801ED930:("D_801ED930","FaultClient","",0x10), 0x801ED940:("sActorOverlayTableFaultAddrConvClient","FaultAddrConvClient","",0xC), diff --git a/tools/namefixer.py b/tools/namefixer.py index e4343cf31..fa4efc6d3 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -104,6 +104,7 @@ wordReplace = { "func_800B78B8": "Actor_UpdateBgCheckInfo", "func_80123D50": "Player_UpdateBottleHeld", + "func_80123DA4": "Player_Untarget", "func_8012403C": "Player_GetMask", "func_8012404c": "Player_RemoveMask", "func_80123AA4": "Player_SetModels", @@ -929,6 +930,8 @@ wordReplace = { "actor.yDistToPlayer": "actor.playerHeightRel", "actor.cutscene": "actor.csId", "actor.speedXZ": "actor.speed", + "actor.isTargeted": "actor.isLockedOn", + "actor->isTargeted": "actor->isLockedOn", "thisx->speedXZ": "thisx->speed", "gSaveContext.unk_3F1E": "gSaveContext.hudVisibilityForceButtonAlphasByStatus", @@ -1049,7 +1052,8 @@ wordReplace = { "player->unk_B84": "player->pushedYaw", "player->targetActor": "player->talkActor", "player->targetActorDistance": "player->talkActorDistance", - "player->unk_730": "player->targetedActor", + "player->unk_730": "player->lockOnActor", + "player->targetedActor": "player->lockOnActor", "ageProperties->unk_04": "ageProperties->shadowScale", "ageProperties->unk_92": "ageProperties->voiceSfxOffset", @@ -1096,6 +1100,15 @@ wordReplace = { "play->msgCtx.unk11F04": "play->msgCtx.currentTextId", "play->actorCtx.unk3": "play->actorCtx.lensActive", "play->actorCtx.unk4": "play->actorCtx.lensMaskSize", + "play->actorCtx.targetContext": "play->actorCtx.targetCtx", + "play->actorCtx.targetCtx.unk0": "play->actorCtx.targetCtx.fairyPos", + "play->actorCtx.targetCtx.unk40": "play->actorCtx.targetCtx.fairyMoveProgressFactor", + "play->actorCtx.targetCtx.unk44": "play->actorCtx.targetCtx.lockOnRadius", + "play->actorCtx.targetCtx.unk48": "play->actorCtx.targetCtx.lockOnAlpha", + "play->actorCtx.targetCtx.unk4B": "play->actorCtx.targetCtx.rotation", + "play->actorCtx.targetCtx.unk4C": "play->actorCtx.targetCtx.lockOnIndex", + "play->actorCtx.targetCtx.unk50": "play->actorCtx.targetCtx.lockOnTriangleSets", + "play->actorCtx.targetCtx.unk8C": "play->actorCtx.targetCtx.nextTarget", "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", @@ -1157,6 +1170,9 @@ wordReplace = { "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_ON", + "ACTOR_FLAG_1": "ACTOR_FLAG_TARGETABLE", + "ACTOR_FLAG_4": "ACTOR_FLAG_UNFRIENDLY", + "ACTOR_FLAG_8": "ACTOR_FLAG_FRIENDLY", "ACTOR_FLAG_100": "ACTOR_FLAG_TALK_REQUESTED", "ACTOR_FLAG_8000000": "ACTOR_FLAG_CANT_LOCK_ON", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index b7da3ff1c..ba509ef78 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -183,12 +183,12 @@ asm/non_matchings/code/z_actor/Actor_SetFeetPos.s,Actor_SetFeetPos,0x800B4A98,0x asm/non_matchings/code/z_actor/func_800B4AEC.s,func_800B4AEC,0x800B4AEC,0x19 asm/non_matchings/code/z_actor/func_800B4B50.s,func_800B4B50,0x800B4B50,0xE3 asm/non_matchings/code/z_actor/Actor_GetProjectedPos.s,Actor_GetProjectedPos,0x800B4EDC,0x19 -asm/non_matchings/code/z_actor/Target_SetPos.s,Target_SetPos,0x800B4F40,0xE -asm/non_matchings/code/z_actor/func_800B4F78.s,func_800B4F78,0x800B4F78,0x32 -asm/non_matchings/code/z_actor/Target_SetColors.s,Target_SetColors,0x800B5040,0x59 -asm/non_matchings/code/z_actor/Actor_TargetContextInit.s,Actor_TargetContextInit,0x800B51A4,0x19 -asm/non_matchings/code/z_actor/Actor_DrawZTarget.s,Actor_DrawZTarget,0x800B5208,0x183 -asm/non_matchings/code/z_actor/func_800B5814.s,func_800B5814,0x800B5814,0xE7 +asm/non_matchings/code/z_actor/Target_SetLockOnPos.s,Target_SetLockOnPos,0x800B4F40,0xE +asm/non_matchings/code/z_actor/Target_InitLockOn.s,Target_InitLockOn,0x800B4F78,0x32 +asm/non_matchings/code/z_actor/Target_SetFairyState.s,Target_SetFairyState,0x800B5040,0x59 +asm/non_matchings/code/z_actor/Target_Init.s,Target_Init,0x800B51A4,0x19 +asm/non_matchings/code/z_actor/Target_Draw.s,Target_Draw,0x800B5208,0x183 +asm/non_matchings/code/z_actor/Target_Update.s,Target_Update,0x800B5814,0xE7 asm/non_matchings/code/z_actor/Flags_GetSwitch.s,Flags_GetSwitch,0x800B5BB0,0x11 asm/non_matchings/code/z_actor/Flags_SetSwitch.s,Flags_SetSwitch,0x800B5BF4,0x10 asm/non_matchings/code/z_actor/Flags_UnsetSwitch.s,Flags_UnsetSwitch,0x800B5C34,0x11 @@ -280,9 +280,9 @@ asm/non_matchings/code/z_actor/func_800B8118.s,func_800B8118,0x800B8118,0x32 asm/non_matchings/code/z_actor/Actor_GetFocus.s,Actor_GetFocus,0x800B81E0,0xD asm/non_matchings/code/z_actor/Actor_GetWorld.s,Actor_GetWorld,0x800B8214,0xD asm/non_matchings/code/z_actor/Actor_GetWorldPosShapeRot.s,Actor_GetWorldPosShapeRot,0x800B8248,0x29 -asm/non_matchings/code/z_actor/func_800B82EC.s,func_800B82EC,0x800B82EC,0x34 -asm/non_matchings/code/z_actor/func_800B83BC.s,func_800B83BC,0x800B83BC,0xF -asm/non_matchings/code/z_actor/func_800B83F8.s,func_800B83F8,0x800B83F8,0x36 +asm/non_matchings/code/z_actor/Target_GetAdjustedDistSq.s,Target_GetAdjustedDistSq,0x800B82EC,0x34 +asm/non_matchings/code/z_actor/Target_IsActorInRange.s,Target_IsActorInRange,0x800B83BC,0xF +asm/non_matchings/code/z_actor/Target_OutsideLeashRange.s,Target_OutsideLeashRange,0x800B83F8,0x36 asm/non_matchings/code/z_actor/Actor_ProcessTalkRequest.s,Actor_ProcessTalkRequest,0x800B84D0,0xC asm/non_matchings/code/z_actor/Actor_OfferTalkExchange.s,Actor_OfferTalkExchange,0x800B8500,0x38 asm/non_matchings/code/z_actor/Actor_OfferTalkExchangeEquiCylinder.s,Actor_OfferTalkExchangeEquiCylinder,0x800B85E0,0xD @@ -354,9 +354,9 @@ asm/non_matchings/code/z_actor/Actor_SpawnAsChild.s,Actor_SpawnAsChild,0x800BB0C asm/non_matchings/code/z_actor/Actor_SpawnTransitionActors.s,Actor_SpawnTransitionActors,0x800BB140,0x64 asm/non_matchings/code/z_actor/Actor_SpawnEntry.s,Actor_SpawnEntry,0x800BB2D0,0x72 asm/non_matchings/code/z_actor/Actor_Delete.s,Actor_Delete,0x800BB498,0x41 -asm/non_matchings/code/z_actor/func_800BB59C.s,func_800BB59C,0x800BB59C,0x1A -asm/non_matchings/code/z_actor/func_800BB604.s,func_800BB604,0x800BB604,0xBA -asm/non_matchings/code/z_actor/func_800BB8EC.s,func_800BB8EC,0x800BB8EC,0x67 +asm/non_matchings/code/z_actor/Target_InTargetableScreenRegion.s,Target_InTargetableScreenRegion,0x800BB59C,0x1A +asm/non_matchings/code/z_actor/Target_FindTargetableActorForCategory.s,Target_FindTargetableActorForCategory,0x800BB604,0xBA +asm/non_matchings/code/z_actor/Target_GetTargetActor.s,Target_GetTargetActor,0x800BB8EC,0x67 asm/non_matchings/code/z_actor/Enemy_StartFinishingBlow.s,Enemy_StartFinishingBlow,0x800BBA88,0xE asm/non_matchings/code/z_actor/func_800BBAC0.s,func_800BBAC0,0x800BBAC0,0x2D asm/non_matchings/code/z_actor/func_800BBB74.s,func_800BBB74,0x800BBB74,0x2B @@ -1722,7 +1722,7 @@ asm/non_matchings/code/z_player_lib/Player_SetModelGroup.s,Player_SetModelGroup, asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30 asm/non_matchings/code/z_player_lib/Player_UpdateBottleHeld.s,Player_UpdateBottleHeld,0x80123D50,0x15 -asm/non_matchings/code/z_player_lib/func_80123DA4.s,func_80123DA4,0x80123DA4,0x7 +asm/non_matchings/code/z_player_lib/Player_Untarget.s,Player_Untarget,0x80123DA4,0x7 asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x34 asm/non_matchings/code/z_player_lib/func_80123E90.s,func_80123E90,0x80123E90,0x21 asm/non_matchings/code/z_player_lib/func_80123F14.s,func_80123F14,0x80123F14,0x6 From 4fa13e4132cf8adb2f07bb34927e62e525c8cc79 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 2 Sep 2023 15:34:29 -0400 Subject: [PATCH 075/121] Move libultra function declarations to libultra headers (#1196) * Delete unused headers * Move PR and io to ultra64 * move headers to ultra64 * more cleanups * more reorganizing * i think that should be all * format * ifdef guards cleanup * Add IO_READ and IO_WRITE macros for future use * warnings * review Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * warnings again * warn * ifdef guards * fix merge * fix merge * fix merge * bss * padutils.h * bss * bss * bss * fix merge * bss * bss * bss * fix merge * fixes * fixes * bss * bss * fix merge * fix * fix * fix includepaths * fix paths * bss * fix * ultra64/ -> PR/ * header guards * fix ehader guards * fix * fix++ * format * bss is borken * prevent 2 * :despair: * bss * rename assert to dbg_hungup * fix * a * fix * bss * fix * bss * bss --------- Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> --- include/PR/abi.h | 4 +- include/{io => PR}/controller.h | 69 ++--- include/{ultra64 => PR}/controller_voice.h | 10 +- include/PR/gbi.h | 16 +- include/{ultra64 => PR}/gs2dex.h | 6 +- include/PR/gu.h | 79 ++++-- include/{ultra64 => PR}/hardware.h | 2 + include/PR/mbi.h | 4 +- include/PR/os.h | 27 ++ include/PR/os_ai.h | 12 + include/PR/os_cache.h | 12 + include/PR/os_cont.h | 79 ++++++ .../{ultra64/convert.h => PR/os_convert.h} | 5 +- include/PR/os_exception.h | 21 ++ include/PR/os_flash.h | 23 ++ include/PR/os_host.h | 9 + include/{ => PR}/os_internal.h | 9 +- include/PR/os_internal_error.h | 9 + include/PR/os_internal_reg.h | 24 ++ include/PR/os_internal_si.h | 13 + include/PR/os_libc.h | 15 ++ .../{ultra64/message.h => PR/os_message.h} | 42 +-- include/{ultra64/motor.h => PR/os_motor.h} | 10 +- include/PR/{pfs.h => os_pfs.h} | 16 +- include/{os.h => PR/os_pi.h} | 193 ++++++-------- include/PR/os_reg.h | 9 + include/PR/os_system.h | 10 + include/{ultra64/thread.h => PR/os_thread.h} | 68 +++-- include/PR/os_time.h | 25 ++ include/PR/os_tlb.h | 9 + include/{ultra64/vi.h => PR/os_vi.h} | 37 ++- include/{ultra64 => PR}/os_voice.h | 13 +- include/PR/osint.h | 38 +++ include/PR/piint.h | 20 ++ include/{ultra64 => PR}/r4300.h | 6 +- include/{ultra64 => PR}/rcp.h | 8 +- include/{ultra64 => PR}/rdp.h | 9 +- include/{ultra64 => PR}/rsp.h | 15 +- include/PR/sched.h | 15 +- include/PR/siint.h | 12 + include/{ultra64 => PR}/sptask.h | 10 +- include/{ultra64 => PR}/ucode.h | 4 +- include/PR/ultratypes.h | 26 +- include/PR/viint.h | 73 ++++++ include/{ => PR}/xstdio.h | 9 +- include/audio/load.h | 4 +- include/bstring.h | 4 - include/debug.h | 7 + include/fault.h | 2 +- include/functions.h | 240 ------------------ include/gfx.h | 1 + include/gfxprint.h | 3 +- include/irqmgr.h | 8 +- include/libc/alloca.h | 4 +- include/libc/assert.h | 4 - include/libc/math.h | 10 +- include/libc/stdarg.h | 6 +- include/libc/stdbool.h | 4 +- include/libc/stddef.h | 4 +- include/libc/stdint.h | 4 +- include/libc/stdlib.h | 7 +- include/libc/string.h | 12 + include/macros.h | 2 +- include/os_malloc.h | 6 +- include/osint.h | 26 -- include/padmgr.h | 10 +- include/padutils.h | 14 + include/ramrom.h | 13 - include/rdb.h | 10 - include/regs.h | 2 + include/rmon.h | 4 - include/scheduler.h | 4 +- include/ultra64.h | 32 +-- include/ultra64/viint.h | 37 --- include/ultraerror.h | 6 - include/ultralog.h | 28 -- include/variables.h | 6 +- include/viint.h | 28 -- include/z64.h | 7 +- include/z64actor.h | 1 + include/z64audio.h | 3 +- include/z64bombers_notebook.h | 3 +- include/z64frameadvance.h | 8 +- include/z64game.h | 3 +- include/z64jpeg.h | 2 +- include/z64math.h | 11 + include/z64player.h | 2 +- include/z64rumble.h | 2 +- include/z64save.h | 2 +- spec | 2 +- src/boot_O2/{assert.c => debug.c} | 4 +- src/boot_O2/loadfragment.c | 1 + src/boot_O2/mtxuty-cvt.c | 2 +- src/boot_O2/padutils.c | 2 +- src/boot_O2_g3/fault.c | 1 + src/boot_O2_g3/yaz0.c | 1 - src/code/game.c | 5 +- src/code/padmgr.c | 4 +- src/code/z_actor_dlftbls.c | 1 + src/code/z_bgcheck.c | 1 - src/code/z_camera.c | 1 + src/code/z_demo.c | 3 +- src/code/z_eventmgr.c | 2 + src/code/z_pause.c | 2 + src/code/z_play.c | 5 +- src/code/z_player_lib.c | 1 + src/code/z_room.c | 7 +- src/code/z_vimode.c | 5 +- src/libultra/gu/guS2DInitBg.c | 1 + src/libultra/gu/lookathil.c | 2 - src/libultra/io/contreaddata.c | 4 +- src/libultra/io/motor.c | 4 +- src/libultra/io/osViModeMpalLan1.c | 2 +- src/libultra/io/osViModeNtscHpf1.c | 2 +- src/libultra/io/osViModeNtscLan1.c | 2 +- src/libultra/io/osViModePalLan1.c | 2 +- src/libultra/io/pfschecker.c | 2 +- src/libultra/io/pfsdeletefile.c | 2 +- src/libultra/io/pfsfilestate.c | 2 +- src/libultra/io/pfsfreeblocks.c | 2 +- src/libultra/io/pfsinitpak.c | 2 +- src/libultra/io/pfsisplug.c | 4 +- src/libultra/io/pfsselectbank.c | 2 +- src/libultra/io/vigetcurrframebuf.c | 4 +- src/libultra/io/vimgr.c | 3 +- src/libultra/os/gethwinterrupt.c | 5 +- src/libultra/os/initialize.c | 12 +- src/libultra/os/resetglobalintmask.c | 2 +- src/libultra/os/seteventmesg.c | 3 +- src/libultra/os/setglobalintmask.c | 2 +- src/libultra/os/sethwinterrupt.c | 3 +- src/libultra/os/virtualtophysical.c | 2 +- src/libultra/rmon/sprintf.c | 3 +- src/libultra/rmon/xldtob.c | 1 + src/libultra/rmon/xlitob.c | 1 + src/libultra/rmon/xprintf.c | 3 + src/libultra/voice/voicecheckresult.c | 7 +- src/libultra/voice/voicecheckword.c | 2 +- src/libultra/voice/voicecleardictionary.c | 6 +- src/libultra/voice/voicecontread2.c | 4 +- src/libultra/voice/voicecontread36.c | 4 +- src/libultra/voice/voicecontrolgain.c | 6 +- src/libultra/voice/voicecontwrite20.c | 4 +- src/libultra/voice/voicecontwrite4.c | 4 +- src/libultra/voice/voicegetreaddata.c | 6 +- src/libultra/voice/voicegetstatus.c | 4 +- src/libultra/voice/voiceinit.c | 8 +- src/libultra/voice/voicemaskdictionary.c | 8 +- src/libultra/voice/voicesetadconverter.c | 4 +- src/libultra/voice/voicesetword.c | 6 +- src/libultra/voice/voicestartreaddata.c | 6 +- src/libultra/voice/voicestopread.c | 6 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 1 - src/overlays/actors/ovl_Boss_02/z_boss_02.c | 1 - src/overlays/actors/ovl_En_Az/z_en_az.c | 1 + .../z_en_horse_game_check.c | 5 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 1 - .../actors/ovl_player_actor/z_player.c | 1 - .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 3 +- tools/disasm/files.txt | 4 +- tools/disasm/functions.txt | 6 +- tools/sizes/boot_functions.csv | 6 +- 162 files changed, 1058 insertions(+), 906 deletions(-) rename include/{io => PR}/controller.h (79%) rename include/{ultra64 => PR}/controller_voice.h (92%) rename include/{ultra64 => PR}/gs2dex.h (99%) rename include/{ultra64 => PR}/hardware.h (98%) create mode 100644 include/PR/os.h create mode 100644 include/PR/os_ai.h create mode 100644 include/PR/os_cache.h create mode 100644 include/PR/os_cont.h rename include/{ultra64/convert.h => PR/os_convert.h} (90%) create mode 100644 include/PR/os_exception.h create mode 100644 include/PR/os_flash.h create mode 100644 include/PR/os_host.h rename include/{ => PR}/os_internal.h (80%) create mode 100644 include/PR/os_internal_error.h create mode 100644 include/PR/os_internal_reg.h create mode 100644 include/PR/os_internal_si.h create mode 100644 include/PR/os_libc.h rename include/{ultra64/message.h => PR/os_message.h} (79%) rename include/{ultra64/motor.h => PR/os_motor.h} (68%) rename include/PR/{pfs.h => os_pfs.h} (86%) rename include/{os.h => PR/os_pi.h} (69%) create mode 100644 include/PR/os_reg.h create mode 100644 include/PR/os_system.h rename include/{ultra64/thread.h => PR/os_thread.h} (81%) create mode 100644 include/PR/os_time.h create mode 100644 include/PR/os_tlb.h rename include/{ultra64/vi.h => PR/os_vi.h} (86%) rename include/{ultra64 => PR}/os_voice.h (84%) create mode 100644 include/PR/osint.h create mode 100644 include/PR/piint.h rename include/{ultra64 => PR}/r4300.h (99%) rename include/{ultra64 => PR}/rcp.h (83%) rename include/{ultra64 => PR}/rdp.h (94%) rename include/{ultra64 => PR}/rsp.h (86%) create mode 100644 include/PR/siint.h rename include/{ultra64 => PR}/sptask.h (94%) rename include/{ultra64 => PR}/ucode.h (93%) create mode 100644 include/PR/viint.h rename include/{ => PR}/xstdio.h (74%) delete mode 100644 include/bstring.h create mode 100644 include/debug.h delete mode 100644 include/libc/assert.h create mode 100644 include/libc/string.h delete mode 100644 include/osint.h create mode 100644 include/padutils.h delete mode 100644 include/ramrom.h delete mode 100644 include/rdb.h delete mode 100644 include/rmon.h delete mode 100644 include/ultra64/viint.h delete mode 100644 include/ultraerror.h delete mode 100644 include/ultralog.h delete mode 100644 include/viint.h rename src/boot_O2/{assert.c => debug.c} (67%) diff --git a/include/PR/abi.h b/include/PR/abi.h index 15ae5d911..7d3113022 100644 --- a/include/PR/abi.h +++ b/include/PR/abi.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_ABI_H -#define ULTRA64_ABI_H +#ifndef PR_ABI_H +#define PR_ABI_H /* Audio commands: */ /* diff --git a/include/io/controller.h b/include/PR/controller.h similarity index 79% rename from include/io/controller.h rename to include/PR/controller.h index d29c11f1f..40dc48b8d 100644 --- a/include/io/controller.h +++ b/include/PR/controller.h @@ -1,14 +1,14 @@ -#ifndef _CONTROLLER_H_ -#define _CONTROLLER_H_ +#ifndef PR_CONTROLLER_H +#define PR_CONTROLLER_H -#include "PR/ultratypes.h" -#include "PR/pfs.h" +#include "ultratypes.h" +#include "os_cont.h" +#include "os_pfs.h" #define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) #define SIAccessQueueSize 2 #define BLOCKSIZE 32 -#define MAXCONTROLLERS 4 #define PFS_ONE_PAGE 8 #define PFS_PAGE_SIZE (BLOCKSIZE*PFS_ONE_PAGE) @@ -104,27 +104,6 @@ #define PFS_ERR_NOPACK 1 -/* controller errors */ -#define CONT_NO_RESPONSE_ERROR 0x8 -#define CONT_OVERRUN_ERROR 0x4 - -/* Controller type */ -#define CONT_ABSOLUTE 0x0001 -#define CONT_RELATIVE 0x0002 -#define CONT_JOYPORT 0x0004 -#define CONT_EEPROM 0x8000 -#define CONT_EEP16K 0x4000 -#define CONT_TYPE_MASK 0x1F07 -#define CONT_TYPE_NORMAL 0x0005 -#define CONT_TYPE_MOUSE 0x0002 -#define CONT_TYPE_VOICE 0x0100 - -/* Controller status */ -#define CONT_CARD_ON 0x01 -#define CONT_CARD_PULL 0x02 -#define CONT_ADDR_CRC_ER 0x04 -#define CONT_EEPROM_BUSY 0x80 - // Accessory detection #define CONT_ADDR_DETECT 0x8000 // Rumble @@ -145,22 +124,6 @@ #define CONT_BLOCK_GB_BANK CONT_BLOCKS(CONT_ADDR_GB_BANK) #define CONT_BLOCK_GB_STATUS CONT_BLOCKS(CONT_ADDR_GB_STATUS) -/* Buttons */ -#define BTN_CRIGHT 0x0001 -#define BTN_CLEFT 0x0002 -#define BTN_CDOWN 0x0004 -#define BTN_CUP 0x0008 -#define BTN_R 0x0010 -#define BTN_L 0x0020 -#define BTN_RESET 0x0080 -#define BTN_DRIGHT 0x0100 -#define BTN_DLEFT 0x0200 -#define BTN_DDOWN 0x0400 -#define BTN_DUP 0x0800 -#define BTN_START 0x1000 -#define BTN_Z 0x2000 -#define BTN_B 0x4000 -#define BTN_A 0x8000 typedef struct { /* 0x00 */ u32 ramarray[15]; @@ -213,6 +176,28 @@ typedef struct { #define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr)) +s32 __osCheckPackId(OSPfs* pfs, __OSPackId* check); +s32 __osGetId(OSPfs* pfs); +u16 __osSumcalc(u8* ptr, s32 length); +s32 __osIdCheckSum(u16* ptr, u16* checkSum, u16* idSum); +s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid); +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *check); +s32 __osCheckId(OSPfs* pfs); +s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank); +s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); +s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared, s32* finalPage); +s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 initialPage, u8 bank, __OSInodeUnit *finalPage); +s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer); +s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force); +void __osContGetInitData(u8* pattern, OSContStatus* data); +void __osPackRequestData(u8 poll); +void __osPfsRequestData(u8 poll); +void __osPfsGetInitData(u8* pattern, OSContStatus* contData); +u8 __osContAddressCrc(u16 addr); +u8 __osContDataCrc(u8* data); +s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); +s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); + extern OSPifRam __osContPifRam; // extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; diff --git a/include/ultra64/controller_voice.h b/include/PR/controller_voice.h similarity index 92% rename from include/ultra64/controller_voice.h rename to include/PR/controller_voice.h index a5480d877..022e69c03 100644 --- a/include/ultra64/controller_voice.h +++ b/include/PR/controller_voice.h @@ -1,9 +1,9 @@ -#ifndef CONTROLLER_VOICE_H -#define CONTROLLER_VOICE_H +#ifndef PR_CONTROLLER_VOICE_H +#define PR_CONTROLLER_VOICE_H -#include "PR/ultratypes.h" -#include "ultra64/os_voice.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_voice.h" +#include "os_message.h" #include "libc/stddef.h" typedef struct { diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 1b57c6a34..c6fcdc1e2 100644 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -1,7 +1,9 @@ #include "mbi.h" -#ifndef _ULTRA64_GBI_H_ -#define _ULTRA64_GBI_H_ +#ifndef PR_GBI_H +#define PR_GBI_H + +#include "ultratypes.h" /* To enable Fast3DEX grucode support, define F3DEX_GBI. */ @@ -1054,6 +1056,16 @@ typedef struct { unsigned char v[3]; } Tri; +typedef long int Mtx_t[4][4]; +typedef union { + Mtx_t m; + struct { + u16 intPart[4][4]; + u16 fracPart[4][4]; + }; + long long int force_structure_alignment; +} Mtx; // size = 0x40 + /* * Viewport */ diff --git a/include/ultra64/gs2dex.h b/include/PR/gs2dex.h similarity index 99% rename from include/ultra64/gs2dex.h rename to include/PR/gs2dex.h index 1e77f1cd3..55ef95238 100644 --- a/include/ultra64/gs2dex.h +++ b/include/PR/gs2dex.h @@ -1,5 +1,7 @@ -#ifndef GS2DEX_H -#define GS2DEX_H +#ifndef PR_GS2DEX_H +#define PR_GS2DEX_H + +#include "ultratypes.h" #ifdef _LANGUAGE_C_PLUS_PLUS extern "C" { diff --git a/include/PR/gu.h b/include/PR/gu.h index 8bafcf7d3..51beaf97b 100644 --- a/include/PR/gu.h +++ b/include/PR/gu.h @@ -1,26 +1,63 @@ -#ifndef _GU_H_ -#define _GU_H_ +#ifndef PR_GU_H +#define PR_GU_H -typedef struct { - /* 0x0 */ unsigned char* base; - /* 0x4 */ int fmt; - /* 0x8 */ int siz; - /* 0xC */ int xsize; - /* 0x10 */ int ysize; - /* 0x14 */ int lsize; - /* 0x18 */ int addr; - /* 0x1C */ int w; - /* 0x20 */ int h; - /* 0x24 */ int s; - /* 0x28 */ int t; -} Image; +#include "ultratypes.h" +#include "gbi.h" -typedef struct { - /* 0x0 */ float col[3]; - /* 0xC */ float pos[3]; - /* 0x18 */ float a1; - /* 0x1C */ float a2; -} PositionalLight; +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif + +#define M_DTOR (3.14159265358979323846/180.0) + +#define FTOFIX32(x) (long)((x) * (float)0x00010000) +#define FIX32TOF(x) ((float)(x) * (1.0f / (float)0x00010000)) +#define FTOFRAC8(x) ((int) MIN(((x) * (128.0f)), 127.0f) & 0xff) + + +void guMtxIdent(Mtx* mtx); +void guMtxIdentF(float mf[4][4]); + +void guOrtho(Mtx* m, f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); +void guOrthoF(float m[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); + +void guPerspective(Mtx* m, u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); +void guPerspectiveF(float mf[4][4], u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); + +void guLookAt(Mtx* m, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); +void guLookAtF(float mf[4][4], f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); + +void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); +void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); + +void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); +void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); + +void guScale(Mtx* mtx, f32 x, f32 y, f32 z); +void guTranslate(Mtx* mtx, f32 x, f32 y, f32 z); + +void guPosition(Mtx* m, f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); +void guPositionF(float mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); + +void guMtxF2L(float mf[4][4], Mtx* m); +void guMtxL2F(float m1[4][4], Mtx* m2); + +void guNormalize(float* x, float* y, float* z); + + +f32 sinf(f32 __x); +f32 cosf(f32 __x); + +s16 sins(u16 x); +s16 coss(u16 x); + +f32 sqrtf(f32 f); +#ifdef __sgi +#pragma intrinsic(sqrtf); +#endif #endif diff --git a/include/ultra64/hardware.h b/include/PR/hardware.h similarity index 98% rename from include/ultra64/hardware.h rename to include/PR/hardware.h index 57d560ab0..3bcf1b7fc 100644 --- a/include/ultra64/hardware.h +++ b/include/PR/hardware.h @@ -1,6 +1,8 @@ #ifndef _ULTRA64_HARDWARE_H_ #define _ULTRA64_HARDWARE_H_ +// TODO: not real libultra header. Refactor to R4300.h + // Segment Wrapper // Uncached RDRAM #define KSEG1 0xA0000000 // 0xA0000000 - 0xBFFFFFFF Physical memory, uncached, unmapped diff --git a/include/PR/mbi.h b/include/PR/mbi.h index 0577165e7..f72ad9acd 100644 --- a/include/PR/mbi.h +++ b/include/PR/mbi.h @@ -1,5 +1,5 @@ -#ifndef _MBI_H_ -#define _MBI_H_ +#ifndef PR_MBI_H +#define PR_MBI_H /************************************************************************** * * diff --git a/include/PR/os.h b/include/PR/os.h new file mode 100644 index 000000000..1b39d79a1 --- /dev/null +++ b/include/PR/os.h @@ -0,0 +1,27 @@ +#ifndef PR_OS_H +#define PR_OS_H + +#include "os_ai.h" +#include "os_cache.h" +#include "os_cont.h" +#include "os_convert.h" +#include "os_exception.h" +#include "os_flash.h" +#include "os_host.h" +#include "os_internal_error.h" +#include "os_internal_reg.h" +#include "os_internal_si.h" +#include "os_internal.h" +#include "os_libc.h" +#include "os_message.h" +#include "os_pfs.h" +#include "os_pi.h" +#include "os_reg.h" +#include "os_system.h" +#include "os_thread.h" +#include "os_time.h" +#include "os_tlb.h" +#include "os_vi.h" +#include "os_voice.h" + +#endif diff --git a/include/PR/os_ai.h b/include/PR/os_ai.h new file mode 100644 index 000000000..22f50d41e --- /dev/null +++ b/include/PR/os_ai.h @@ -0,0 +1,12 @@ +#ifndef PR_OS_AI_H +#define PR_OS_AI_H + +#include "ultratypes.h" + + +u32 osAiGetLength(void); +s32 osAiSetFrequency(u32 frequency); +s32 osAiSetNextBuffer(void* buf, u32 size); + + +#endif diff --git a/include/PR/os_cache.h b/include/PR/os_cache.h new file mode 100644 index 000000000..8a920c728 --- /dev/null +++ b/include/PR/os_cache.h @@ -0,0 +1,12 @@ +#ifndef PR_OS_CACHE_H +#define PR_OS_CACHE_H + +#include "ultratypes.h" +#include "libc/stddef.h" + +void osInvalDCache(void* vaddr, size_t nbytes); +void osInvalICache(void* vaddr, size_t nbytes); +void osWritebackDCache(void* vaddr, s32 nbytes); +void osWritebackDCacheAll(void); + +#endif diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h new file mode 100644 index 000000000..6a63b8901 --- /dev/null +++ b/include/PR/os_cont.h @@ -0,0 +1,79 @@ +#ifndef PR_OS_CONT_H +#define PR_OS_CONT_H + +#include "ultratypes.h" +#include "os_message.h" + + +typedef struct { + /* 0x0 */ u16 type; + /* 0x2 */ u8 status; + /* 0x3 */ u8 errno; +} OSContStatus; // size = 0x4 + +typedef struct { + /* 0x0 */ u16 button; + /* 0x2 */ s8 stick_x; + /* 0x3 */ s8 stick_y; + /* 0x4 */ u8 errno; +} OSContPad; // size = 0x6 + +#define MAXCONTROLLERS 4 + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 + +/* Controller type */ +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1F07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 +#define CONT_TYPE_VOICE 0x0100 + +/* Controller status */ +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +// TODO: use real libultra button defines instead of this +/* Buttons */ +#define BTN_CRIGHT 0x0001 +#define BTN_CLEFT 0x0002 +#define BTN_CDOWN 0x0004 +#define BTN_CUP 0x0008 +#define BTN_R 0x0010 +#define BTN_L 0x0020 +#define BTN_RESET 0x0080 +#define BTN_DRIGHT 0x0100 +#define BTN_DLEFT 0x0200 +#define BTN_DDOWN 0x0400 +#define BTN_DUP 0x0800 +#define BTN_START 0x1000 +#define BTN_Z 0x2000 +#define BTN_B 0x4000 +#define BTN_A 0x8000 + +#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */ +#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */ +#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */ +#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */ +#define CONT_ERR_NOT_READY 12 +#define CONT_ERR_VOICE_MEMORY 13 +#define CONT_ERR_VOICE_WORD 14 +#define CONT_ERR_VOICE_NO_RESPONSE 15 + + +s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); +s32 osContStartQuery(OSMesgQueue* mq); +s32 osContStartReadData(OSMesgQueue* mq); +s32 osContSetCh(u8 ch); +void osContGetQuery(OSContStatus* data); +void osContGetReadData(OSContPad* data); + +#endif diff --git a/include/ultra64/convert.h b/include/PR/os_convert.h similarity index 90% rename from include/ultra64/convert.h rename to include/PR/os_convert.h index 68e91a85a..468d77f9a 100644 --- a/include/ultra64/convert.h +++ b/include/PR/os_convert.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_CONVERT_H -#define ULTRA64_CONVERT_H +#ifndef PR_CONVERT_H +#define PR_CONVERT_H #include "libc/stdint.h" @@ -24,6 +24,5 @@ /* Functions */ extern uintptr_t osVirtualToPhysical(void*); -extern void* osPhysicalToVirtual(uintptr_t); #endif diff --git a/include/PR/os_exception.h b/include/PR/os_exception.h new file mode 100644 index 000000000..b5c2e7ba8 --- /dev/null +++ b/include/PR/os_exception.h @@ -0,0 +1,21 @@ +#ifndef PR_OS_EXCEPTION_H +#define PR_OS_EXCEPTION_H + +#include "ultratypes.h" + + +typedef u32 OSIntMask; +typedef u32 OSHWIntr; + +OSIntMask osGetIntMask(void); +OSIntMask osSetIntMask(OSIntMask im); + + +// Internal +void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg); +void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg); +void __osSetGlobalIntMask(OSHWIntr mask); +void __osResetGlobalIntMask(OSHWIntr mask); + + +#endif diff --git a/include/PR/os_flash.h b/include/PR/os_flash.h new file mode 100644 index 000000000..36e728c5a --- /dev/null +++ b/include/PR/os_flash.h @@ -0,0 +1,23 @@ +#ifndef PR_OS_FLASH_H +#define PR_OS_FLASH_H + +#include "ultratypes.h" +#include "os_pi.h" + + +OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); +OSPiHandle* osFlashInit(void); +void osFlashReadStatus(u8* flashStatus); +void osFlashReadId(u32* flashType, u32* flashVendor); +void osFlashClearStatus(void); +s32 osFlashAllErase(void); +s32 osFlashSectorErase(u32 pageNum); +s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq); +s32 osFlashWriteArray(u32 pageNum); +s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq); +void osFlashChange(u32 flashNum); +void osFlashAllEraseThrough(void); +void osFlashSectorEraseThrough(u32 pageNum); +s32 osFlashCheckEraseEnd(void); + +#endif diff --git a/include/PR/os_host.h b/include/PR/os_host.h new file mode 100644 index 000000000..5d0ad482f --- /dev/null +++ b/include/PR/os_host.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_HOST_H +#define PR_OS_HOST_H + +void __osInitialize_common(void); +void __osInitialize_autodetect(void); + +#define osInitialize() __osInitialize_common() + +#endif diff --git a/include/os_internal.h b/include/PR/os_internal.h similarity index 80% rename from include/os_internal.h rename to include/PR/os_internal.h index 2d82b41a9..eadd0182b 100644 --- a/include/os_internal.h +++ b/include/PR/os_internal.h @@ -1,5 +1,10 @@ -#ifndef _OS_INTERNAL_H_ -#define _OS_INTERNAL_H_ +#ifndef PR_OS_INTERNAL_H +#define PR_OS_INTERNAL_H + +#include "ultratypes.h" +#include "os_message.h" +#include "os_pi.h" + typedef struct { /* 0x00 */ OSMesgQueue* queue; diff --git a/include/PR/os_internal_error.h b/include/PR/os_internal_error.h new file mode 100644 index 000000000..db2c8b981 --- /dev/null +++ b/include/PR/os_internal_error.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_INTERNAL_ERROR_H +#define PR_OS_INTERNAL_ERROR_H + +#include "os_thread.h" + + +OSThread* __osGetCurrFaultedThread(void); + +#endif diff --git a/include/PR/os_internal_reg.h b/include/PR/os_internal_reg.h new file mode 100644 index 000000000..753692017 --- /dev/null +++ b/include/PR/os_internal_reg.h @@ -0,0 +1,24 @@ +#ifndef PR_OS_INTERNAL_REG +#define PR_OS_INTERNAL_REG + +#include "ultratypes.h" +#include "os_exception.h" + + +u32 __osGetCause(void); +void __osSetCause(u32); +u32 __osGetCompare(void); +void __osSetCompare(u32 value); +u32 __osGetConfig(void); +void __osSetConfig(u32); +u32 __osGetSR(void); +void __osSetSR(u32 value); +OSIntMask __osDisableInt(void); +void __osRestoreInt(OSIntMask im); +u32 __osGetWatchLo(void); +void __osSetWatchLo(u32 value); + +u32 __osSetFpcCsr(u32 value); +u32 __osGetFpcCsr(void); + +#endif diff --git a/include/PR/os_internal_si.h b/include/PR/os_internal_si.h new file mode 100644 index 000000000..e1d88acca --- /dev/null +++ b/include/PR/os_internal_si.h @@ -0,0 +1,13 @@ +#ifndef PR_OS_INTERNAL_SI_H +#define PR_OS_INTERNAL_SI_H + +#include "ultratypes.h" +#include "libc/stdint.h" + + +s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data); +s32 __osSiRawReadIo(uintptr_t devAddr, u32* data); +s32 __osSiRawStartDma(s32 direction, void* dramAddr); + + +#endif diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h new file mode 100644 index 000000000..755f24692 --- /dev/null +++ b/include/PR/os_libc.h @@ -0,0 +1,15 @@ +#ifndef PR_OS_LIBC_H +#define PR_OS_LIBC_H + +#include "libc/stdarg.h" + + +void bcopy(void* __src, void* __dest, int __n); +int bcmp(void* __s1, void* __s2, int __n); +void bzero(void* begin, int length); + +s32 vsprintf(char* dst, char* fmt, va_list args); +int sprintf(char* dst, const char* fmt, ...); +void osSyncPrintf(const char* fmt, ...); + +#endif diff --git a/include/ultra64/message.h b/include/PR/os_message.h similarity index 79% rename from include/ultra64/message.h rename to include/PR/os_message.h index de0c39b83..bb577f57b 100644 --- a/include/ultra64/message.h +++ b/include/PR/os_message.h @@ -1,7 +1,19 @@ -#ifndef ULTRA64_MESSAGE_H -#define ULTRA64_MESSAGE_H +#ifndef PR_OS_MESSAGE_H +#define PR_OS_MESSAGE_H -#include "ultra64/thread.h" +#include "os_thread.h" + +typedef void* OSMesg; +typedef u32 OSEvent; + +typedef struct OSMesgQueue { + /* 0x00 */ OSThread* mtQueue; + /* 0x04 */ OSThread* fullQueue; + /* 0x08 */ s32 validCount; + /* 0x0C */ s32 first; + /* 0x10 */ s32 msgCount; + /* 0x14 */ OSMesg* msg; +} OSMesgQueue; // size = 0x18 #define OS_NUM_EVENTS 15 @@ -30,24 +42,20 @@ #define OS_EVENT_RDB_FLUSH_PROF 21 #define OS_EVENT_RDB_ACK_PROF 22 -typedef void* OSMesg; -typedef u32 OSEvent; - #define OS_MESG_NOBLOCK 0 #define OS_MESG_BLOCK 1 -typedef struct OSMesgQueue { - /* 0x00 */ OSThread* mtQueue; - /* 0x04 */ OSThread* fullQueue; - /* 0x08 */ s32 validCount; - /* 0x0C */ s32 first; - /* 0x10 */ s32 msgCount; - /* 0x14 */ OSMesg* msg; -} OSMesgQueue; // size = 0x18 +#define MQ_GET_COUNT(mq) ((mq)->validCount) -#define MQ_COUNT(mq) ((mq)->validCount) +#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) +#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) + +void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count); +s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags); +s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); +s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); + +void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); -#define MQ_IS_EMPTY(mq) (MQ_COUNT(mq) == 0) -#define MQ_IS_FULL(mq) (MQ_COUNT(mq) >= (mq)->msgCount) #endif diff --git a/include/ultra64/motor.h b/include/PR/os_motor.h similarity index 68% rename from include/ultra64/motor.h rename to include/PR/os_motor.h index ed969b3de..378768588 100644 --- a/include/ultra64/motor.h +++ b/include/PR/os_motor.h @@ -1,9 +1,9 @@ -#ifndef ULTRA64_MOTOR_H -#define ULTRA64_MOTOR_H +#ifndef PR_OS_MOTOR_H +#define PR_OS_MOTOR_H -#include "PR/ultratypes.h" -#include "PR/pfs.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_pfs.h" +#include "os_message.h" #define MOTOR_START 1 #define MOTOR_STOP 0 diff --git a/include/PR/pfs.h b/include/PR/os_pfs.h similarity index 86% rename from include/PR/pfs.h rename to include/PR/os_pfs.h index 596fafbfe..4ce1acd52 100644 --- a/include/PR/pfs.h +++ b/include/PR/os_pfs.h @@ -1,5 +1,5 @@ -#ifndef _ULTRA64_PFS_H_ -#define _ULTRA64_PFS_H_ +#ifndef PR_OS_PFS_H +#define PR_OS_PFS_H #include "os.h" @@ -134,8 +134,16 @@ typedef struct { /* 0x101 */ u8 map[PFS_INODE_DIST_MAP]; } __OSInodeCache; // size = 0x202 -s32 __osCheckPackId(OSPfs* pfs, __OSPackId* check); -s32 __osGetId(OSPfs* pfs); + +s32 osPfsInitPak(OSMesgQueue* queue, OSPfs* pfs, s32 channel); s32 osPfsChecker(OSPfs* pfs); +s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32 fileSize, s32* fileNo); +s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo); +s32 osPfsDeleteFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName); +s32 osPfsReadWriteFile(OSPfs* pfs, s32 fileNo, u8 flag, s32 offset, s32 size, u8* data); +s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state); +s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); +s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes); + #endif diff --git a/include/os.h b/include/PR/os_pi.h similarity index 69% rename from include/os.h rename to include/PR/os_pi.h index 47fed80a0..2e67ca840 100644 --- a/include/os.h +++ b/include/PR/os_pi.h @@ -1,10 +1,76 @@ -#ifndef _OS_H_ -#define _OS_H_ +#ifndef PR_OS_PI_H +#define PR_OS_PI_H +#include "ultratypes.h" +#include "os_message.h" +#include "libc/stddef.h" #include "libc/stdint.h" -#include "libc/stdlib.h" -#include "ultra64/thread.h" -#include "ultra64/message.h" + + +typedef struct { + /* 0x00 */ u32 errStatus; + /* 0x04 */ void* dramAddr; + /* 0x08 */ void* C2Addr; + /* 0x0C */ u32 sectorSize; + /* 0x10 */ u32 C1ErrNum; + /* 0x14 */ u32 C1ErrSector[4]; +} __OSBlockInfo; // size = 0x24 + +typedef struct { + /* 0x00 */ u32 cmdType; + /* 0x04 */ u16 transferMode; + /* 0x06 */ u16 blockNum; + /* 0x08 */ s32 sectorNum; + /* 0x0C */ uintptr_t devAddr; + /* 0x10 */ u32 bmCtlShadow; + /* 0x14 */ u32 seqCtlShadow; + /* 0x18 */ __OSBlockInfo block[2]; +} __OSTranxInfo; // size = 0x60 + +typedef struct OSPiHandle { + /* 0x00 */ struct OSPiHandle* next; + /* 0x04 */ u8 type; + /* 0x05 */ u8 latency; + /* 0x06 */ u8 pageSize; + /* 0x07 */ u8 relDuration; + /* 0x08 */ u8 pulse; + /* 0x09 */ u8 domain; + /* 0x0C */ uintptr_t baseAddress; + /* 0x10 */ u32 speed; + /* 0x14 */ __OSTranxInfo transferInfo; +} OSPiHandle; // size = 0x74 + +typedef struct { + /* 0x0 */ u8 type; + /* 0x4 */ uintptr_t address; +} OSPiInfo; // size = 0x8 + +typedef struct { + /* 0x0 */ u16 type; + /* 0x2 */ u8 pri; + /* 0x3 */ u8 status; + /* 0x4 */ OSMesgQueue* retQueue; +} OSIoMesgHdr; // size = 0x8 + +typedef struct { + /* 0x00 */ OSIoMesgHdr hdr; + /* 0x08 */ void* dramAddr; + /* 0x0C */ uintptr_t devAddr; + /* 0x10 */ size_t size; + /* 0x14 */ OSPiHandle* piHandle; +} OSIoMesg; // size = 0x88 + +typedef struct { + /* 0x00 */ s32 active; // u32 maybe? need to check + /* 0x04 */ OSThread* thread; + /* 0x08 */ OSMesgQueue* cmdQueue; + /* 0x0C */ OSMesgQueue* evtQueue; + /* 0x10 */ OSMesgQueue* acsQueue; + /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t); + /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t); +} OSDevMgr; // size = 0x1C + + #define OS_READ 0 #define OS_WRITE 1 @@ -28,118 +94,13 @@ #define OS_MESG_PRI_HIGH 1 -typedef u32 OSIntMask; +void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); -typedef u32 OSPageMask; +OSPiHandle* osCartRomInit(void); -typedef struct { - /* 0x00 */ u32 errStatus; - /* 0x04 */ void* dramAddr; - /* 0x08 */ void* C2Addr; - /* 0x0C */ u32 sectorSize; - /* 0x10 */ u32 C1ErrNum; - /* 0x14 */ u32 C1ErrSector[4]; -} __OSBlockInfo; // size = 0x24 - - -typedef struct { - /* 0x00 */ u32 cmdType; - /* 0x04 */ u16 transferMode; - /* 0x06 */ u16 blockNum; - /* 0x08 */ s32 sectorNum; - /* 0x0C */ uintptr_t devAddr; - /* 0x10 */ u32 bmCtlShadow; - /* 0x14 */ u32 seqCtlShadow; - /* 0x18 */ __OSBlockInfo block[2]; -} __OSTranxInfo; // size = 0x60 - - -typedef struct OSPiHandle { - /* 0x00 */ struct OSPiHandle* next; - /* 0x04 */ u8 type; - /* 0x05 */ u8 latency; - /* 0x06 */ u8 pageSize; - /* 0x07 */ u8 relDuration; - /* 0x08 */ u8 pulse; - /* 0x09 */ u8 domain; - /* 0x0C */ uintptr_t baseAddress; - /* 0x10 */ u32 speed; - /* 0x14 */ __OSTranxInfo transferInfo; -} OSPiHandle; // size = 0x74 - - -typedef struct { - /* 0x0 */ u8 type; - /* 0x4 */ uintptr_t address; -} OSPiInfo; // size = 0x8 - - -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u8 pri; - /* 0x3 */ u8 status; - /* 0x4 */ OSMesgQueue* retQueue; -} OSIoMesgHdr; // size = 0x8 - - -typedef struct { - /* 0x00 */ OSIoMesgHdr hdr; - /* 0x08 */ void* dramAddr; - /* 0x0C */ uintptr_t devAddr; - /* 0x10 */ size_t size; - /* 0x14 */ OSPiHandle* piHandle; -} OSIoMesg; // size = 0x88 - - -typedef struct { - /* 0x00 */ s32 active; // u32 maybe? need to check - /* 0x04 */ OSThread* thread; - /* 0x08 */ OSMesgQueue* cmdQueue; - /* 0x0C */ OSMesgQueue* evtQueue; - /* 0x10 */ OSMesgQueue* acsQueue; - /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t); - /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t); -} OSDevMgr; // size = 0x1C - -typedef u64 OSTime; - -typedef struct OSTimer_s { - /* 0x00 */ struct OSTimer_s* next; - /* 0x04 */ struct OSTimer_s* prev; - /* 0x08 */ OSTime interval; - /* 0x10 */ OSTime value; - /* 0x18 */ OSMesgQueue* mq; - /* 0x1C */ OSMesg msg; -} OSTimer; // size = 0x20 - -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u8 status; - /* 0x3 */ u8 errno; -} OSContStatus; // size = 0x4 - - -typedef struct { - /* 0x0 */ u16 button; - /* 0x2 */ s8 stick_x; - /* 0x3 */ s8 stick_y; - /* 0x4 */ u8 errno; -} OSContPad; // size = 0x6 - - -typedef struct { - /* 0x00 */ void* address; - /* 0x04 */ u8 databuffer[32]; - /* 0x24 */ u8 addressCrc; - /* 0x25 */ u8 dataCrc; - /* 0x26 */ u8 errno; -} OSContRamIo; // size = 0x28 - -typedef struct { - /* 0x0 */ u16* histo_base; - /* 0x4 */ u32 histo_size; - /* 0x8 */ u32* text_start; - /* 0xC */ u32* text_end; -} OSProf; // size = 0x10 +s32 osEPiWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); +s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); +s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); +s32 osEPiLinkHandle(OSPiHandle* handle); #endif diff --git a/include/PR/os_reg.h b/include/PR/os_reg.h new file mode 100644 index 000000000..043c7ce9f --- /dev/null +++ b/include/PR/os_reg.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_REG_H +#define PR_OS_REG_H + +#include "ultratypes.h" + + +u32 osGetCount(void); + +#endif diff --git a/include/PR/os_system.h b/include/PR/os_system.h new file mode 100644 index 000000000..21f06f164 --- /dev/null +++ b/include/PR/os_system.h @@ -0,0 +1,10 @@ +#ifndef PR_OS_SYSTEM_H +#define PR_OS_SYSTEM_H + +#include "ultratypes.h" + + +u32 osGetMemSize(void); +s32 osAfterPreNMI(void); + +#endif diff --git a/include/ultra64/thread.h b/include/PR/os_thread.h similarity index 81% rename from include/ultra64/thread.h rename to include/PR/os_thread.h index 4adf025e1..b88520087 100644 --- a/include/ultra64/thread.h +++ b/include/PR/os_thread.h @@ -1,31 +1,7 @@ -#ifndef _ULTRA64_THREAD_H_ -#define _ULTRA64_THREAD_H_ +#ifndef PR_OS_THREAD_H +#define PR_OS_THREAD_H -#include "PR/ultratypes.h" - -#define OS_PRIORITY_IDLE 0 -#define OS_PRIORITY_MAIN 10 -#define OS_PRIORITY_GRAPH 11 -#define OS_PRIORITY_AUDIOMGR 12 -#define OS_PRIORITY_PADMGR 14 -#define OS_PRIORITY_SCHED 15 -#define OS_PRIORITY_DMAMGR 16 -#define OS_PRIORITY_IRQMGR 17 -#define OS_PRIORITY_PIMGR 150 -#define OS_PRIORITY_FAULTCLIENT 126 -#define OS_PRIORITY_FAULT 127 -#define OS_PRIORITY_APPMAX 127 -#define OS_PRIORITY_RMONSPIN 200 -#define OS_PRIORITY_RMON 250 -#define OS_PRIORITY_VIMGR 254 -#define OS_PRIORITY_MAX 255 - -#define OS_PRIORITY_THREADTAIL -1 - -#define OS_STATE_STOPPED (1 << 0) -#define OS_STATE_RUNNABLE (1 << 1) -#define OS_STATE_RUNNING (1 << 2) -#define OS_STATE_WAITING (1 << 3) +#include "ultratypes.h" #define OS_FLAG_CPU_BREAK 1 #define OS_FLAG_FAULT 2 @@ -71,4 +47,42 @@ typedef struct OSThread { /* 0x20 */ __OSThreadContext context; } OSThread; // size = 0x1B0 +#define OS_STATE_STOPPED (1 << 0) +#define OS_STATE_RUNNABLE (1 << 1) +#define OS_STATE_RUNNING (1 << 2) +#define OS_STATE_WAITING (1 << 3) + + +#define OS_PRIORITY_IDLE 0 +#define OS_PRIORITY_MAIN 10 +#define OS_PRIORITY_GRAPH 11 +#define OS_PRIORITY_AUDIOMGR 12 +#define OS_PRIORITY_PADMGR 14 +#define OS_PRIORITY_SCHED 15 +#define OS_PRIORITY_DMAMGR 16 +#define OS_PRIORITY_IRQMGR 17 +#define OS_PRIORITY_PIMGR 150 +#define OS_PRIORITY_FAULTCLIENT 126 +#define OS_PRIORITY_FAULT 127 +#define OS_PRIORITY_APPMAX 127 +#define OS_PRIORITY_RMONSPIN 200 +#define OS_PRIORITY_RMON 250 +#define OS_PRIORITY_VIMGR 254 +#define OS_PRIORITY_MAX 255 + +#define OS_PRIORITY_THREADTAIL -1 + + +void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p); +void osDestroyThread(OSThread* t); +void osYieldThread(void); +void osStartThread(OSThread* t); +void osStopThread(OSThread* t); +OSId osGetThreadId(OSThread* t); +void osSetThreadPri(OSThread* thread, OSPri p); +OSPri osGetThreadPri(OSThread* t); + +// internal +OSThread* __osGetActiveQueue(void); + #endif diff --git a/include/PR/os_time.h b/include/PR/os_time.h new file mode 100644 index 000000000..31702c0bb --- /dev/null +++ b/include/PR/os_time.h @@ -0,0 +1,25 @@ +#ifndef PR_OS_TIME_H +#define PR_OS_TIME_H + +#include "ultratypes.h" +#include "os_message.h" + + +typedef u64 OSTime; + +typedef struct OSTimer_s { + /* 0x00 */ struct OSTimer_s* next; + /* 0x04 */ struct OSTimer_s* prev; + /* 0x08 */ OSTime interval; + /* 0x10 */ OSTime value; + /* 0x18 */ OSMesgQueue* mq; + /* 0x1C */ OSMesg msg; +} OSTimer; // size = 0x20 + +OSTime osGetTime(void); +void osSetTime(OSTime ticks); +s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); +s32 osStopTimer(OSTimer* t); + + +#endif diff --git a/include/PR/os_tlb.h b/include/PR/os_tlb.h new file mode 100644 index 000000000..7d0b5a341 --- /dev/null +++ b/include/PR/os_tlb.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_TLB_H +#define PR_OS_TLB_H + +#include "ultratypes.h" + +void osMapTLBRdb(void); +void osUnmapTLBAll(void); + +#endif diff --git a/include/ultra64/vi.h b/include/PR/os_vi.h similarity index 86% rename from include/ultra64/vi.h rename to include/PR/os_vi.h index 7737b58b4..e4098e97e 100644 --- a/include/ultra64/vi.h +++ b/include/PR/os_vi.h @@ -1,8 +1,8 @@ -#ifndef _ULTRA64_VI_H_ -#define _ULTRA64_VI_H_ +#ifndef PR_OS_VI_H +#define PR_OS_VI_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" /* Special Features */ #define OS_VI_GAMMA_ON (1 << 0) @@ -52,23 +52,6 @@ typedef struct { /* 0x24 */ OSViFieldRegs fldRegs[2]; } OSViMode; // size = 0x4C -typedef struct { - /* 0x0 */ f32 factor; - /* 0x4 */ u16 offset; - /* 0x8 */ u32 scale; -} __OSViScale; // size = 0x0C - -typedef struct { - /* 0x00 */ u16 state; - /* 0x02 */ u16 retraceCount; - /* 0x04 */ void* buffer; - /* 0x08 */ OSViMode* modep; - /* 0x0C */ u32 features; - /* 0x10 */ OSMesgQueue* mq; - /* 0x14 */ OSMesg* msg; - /* 0x18 */ __OSViScale x; - /* 0x24 */ __OSViScale y; -} __OSViContext; // size = 0x30 #define OS_VI_NTSC_LPN1 0 /* NTSC */ #define OS_VI_NTSC_LPF1 1 @@ -135,4 +118,18 @@ typedef struct { #define OS_TV_MPAL 2 #define OS_VI_UNK28 28 + +void* osViGetCurrentFramebuffer(void); +void* osViGetNextFramebuffer(void); +void osViSetXScale(f32 value); +void osViSetYScale(f32 value); +void osViExtendVStart(u32 a0); +void osViSetSpecialFeatures(u32 func); +void osViSetMode(OSViMode* modep); +void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); +void osViSwapBuffer(void* frameBufPtr); +void osViBlack(u8 active); +void osCreateViManager(OSPri pri); + + #endif diff --git a/include/ultra64/os_voice.h b/include/PR/os_voice.h similarity index 84% rename from include/ultra64/os_voice.h rename to include/PR/os_voice.h index 8452ed45c..c6317a28c 100644 --- a/include/ultra64/os_voice.h +++ b/include/PR/os_voice.h @@ -1,8 +1,8 @@ -#ifndef OS_VOICE_H -#define OS_VOICE_H +#ifndef PR_OS_VOICE_H +#define PR_OS_VOICE_H -#include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_message.h" typedef enum OsVoiceHandleMode { /* 0 */ VOICE_HANDLE_MODE_0, @@ -29,14 +29,15 @@ typedef struct { /* 0x14 */ u16 distance[5]; // Distance value } OSVoiceData; // size = 0x20 -s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel); + +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, int channel); s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word); s32 osVoiceCheckWord(u8* word); s32 osVoiceStartReadData(OSVoiceHandle* hd); s32 osVoiceStopReadData(OSVoiceHandle* hd); s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result); s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords); -s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size); +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, int size); s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital); #endif diff --git a/include/PR/osint.h b/include/PR/osint.h new file mode 100644 index 000000000..c2e1a2b90 --- /dev/null +++ b/include/PR/osint.h @@ -0,0 +1,38 @@ +#ifndef PR_OSINT_H +#define PR_OSINT_H + +#include "ultratypes.h" +#include "os_message.h" +#include "os.h" +#include "os_internal.h" + +typedef struct __OSEventState { + /* 0x0 */ OSMesgQueue* messageQueue; + /* 0x4 */ OSMesg message; +} __OSEventState; // size = 0x8 + +typedef struct __OSThreadTail { + /* 0x0 */ OSThread* next; + /* 0x4 */ OSPri priority; +} __OSThreadTail; // size = 0x8 + +void __osEnqueueAndYield(OSThread** param_1); +void __osDequeueThread(OSThread** queue, OSThread* t); +void __osEnqueueThread(OSThread** param_1, OSThread* param_2); +OSThread* __osPopThread(OSThread** param_1); +void __osDispatchThread(void); +void __osCleanupThread(void); + +void __osSetTimerIntr(OSTime tim); +OSTime __osInsertTimer(OSTimer* t); +void __osTimerInterrupt(void); +u32 __osProbeTLB(void* param_1); +s32 __osSpDeviceBusy(void); + +void __osTimerServicesInit(void); + +extern __osHwInt __osHwIntTable[]; +extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; + + +#endif diff --git a/include/PR/piint.h b/include/PR/piint.h new file mode 100644 index 000000000..0ca1f0d2e --- /dev/null +++ b/include/PR/piint.h @@ -0,0 +1,20 @@ +#ifndef PR_PIINT_H +#define PR_PIINT_H + +#include "ultratypes.h" +#include "os_pi.h" +#include "libc/stdint.h" + + +void __osDevMgrMain(void* arg); +void __osPiCreateAccessQueue(void); +void __osPiRelAccess(void); +void __osPiGetAccess(void); +s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size); +s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); +s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); +s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); +OSMesgQueue* osPiGetCmdQueue(void); + + +#endif diff --git a/include/ultra64/r4300.h b/include/PR/r4300.h similarity index 99% rename from include/ultra64/r4300.h rename to include/PR/r4300.h index 30e8a9ea8..37d7e8946 100644 --- a/include/ultra64/r4300.h +++ b/include/PR/r4300.h @@ -1,8 +1,8 @@ -#ifndef ULTRA64_R4300_H -#define ULTRA64_R4300_H +#ifndef PR_R4300_H +#define PR_R4300_H #ifdef _LANGUAGE_C -#include "PR/ultratypes.h" +#include "ultratypes.h" #define U32(x) ((u32)x) #define C_REG(x) (x) #else diff --git a/include/ultra64/rcp.h b/include/PR/rcp.h similarity index 83% rename from include/ultra64/rcp.h rename to include/PR/rcp.h index 7a336be28..1c97c64e3 100644 --- a/include/ultra64/rcp.h +++ b/include/PR/rcp.h @@ -1,5 +1,5 @@ -#ifndef _ULTRA64_RCP_H_ -#define _ULTRA64_RCP_H_ +#ifndef PR_RCP_H +#define PR_RCP_H #define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ #define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ @@ -11,7 +11,6 @@ #define DEVICE_TYPE_SRAM 3 /* SRAM */ #define DEVICE_TYPE_INIT 7 /* initial value */ - #define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ #define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ #define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */ @@ -19,4 +18,7 @@ #define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ +#define IO_READ(addr) (*(vu32*)PHYS_TO_K1(addr)) +#define IO_WRITE(addr,data) (*(vu32*)PHYS_TO_K1(addr)=(u32)(data)) + #endif diff --git a/include/ultra64/rdp.h b/include/PR/rdp.h similarity index 94% rename from include/ultra64/rdp.h rename to include/PR/rdp.h index b4b3bb532..4bd6bc99d 100644 --- a/include/ultra64/rdp.h +++ b/include/PR/rdp.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_RDP_H -#define ULTRA64_RDP_H +#ifndef PR_RDP_H +#define PR_RDP_H /* DP Command Registers */ #define DPC_START_REG 0x04100000 @@ -42,4 +42,9 @@ #define DPC_CLR_CMD_CTR (1 << 8) #define DPC_CLR_CLOCK_CTR (1 << 9) + +u32 osDpGetStatus(void); +void osDpSetStatus(u32 data); + + #endif diff --git a/include/ultra64/rsp.h b/include/PR/rsp.h similarity index 86% rename from include/ultra64/rsp.h rename to include/PR/rsp.h index f8ec4ef51..467db831c 100644 --- a/include/ultra64/rsp.h +++ b/include/PR/rsp.h @@ -1,5 +1,9 @@ -#ifndef _ULTRA64_RSP_H_ -#define _ULTRA64_RSP_H_ +#ifndef PR_RSP_H +#define PR_RSP_H + +#include "ultratypes.h" +#include "libc/stddef.h" + /* SP Status Flags */ #define SP_STATUS_HALT (1 << 0) @@ -44,4 +48,11 @@ #define SP_CLR_SIG7 (1 << 23) #define SP_SET_SIG7 (1 << 24) + +u32 __osSpGetStatus(void); +void __osSpSetStatus(u32 data); +s32 __osSpSetPc(void* pc); +s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); + + #endif diff --git a/include/PR/sched.h b/include/PR/sched.h index d0aac1d0e..7db228a5d 100644 --- a/include/PR/sched.h +++ b/include/PR/sched.h @@ -1,9 +1,16 @@ -#ifndef SCHED_H -#define SCHED_H +#ifndef PR_SCHED_H +#define PR_SCHED_H #include "PR/ultratypes.h" -#include "ultra64/vi.h" -#include "ultra64/sptask.h" +#include "PR/os_vi.h" +#include "PR/sptask.h" + +#define OS_SC_STACKSIZE 0x2000 + +#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 +#define OS_SC_PRE_NMI_MSG 4 #define OS_SC_NEEDS_RDP 0x0001 #define OS_SC_NEEDS_RSP 0x0002 diff --git a/include/PR/siint.h b/include/PR/siint.h new file mode 100644 index 000000000..a6d16323e --- /dev/null +++ b/include/PR/siint.h @@ -0,0 +1,12 @@ +#ifndef PR_SIINT_H +#define PR_SIINT_H + +#include "ultratypes.h" + + +void __osSiGetAccess(void); +void __osSiRelAccess(void); +s32 __osSiDeviceBusy(void); +void __osSiCreateAccessQueue(void); + +#endif diff --git a/include/ultra64/sptask.h b/include/PR/sptask.h similarity index 94% rename from include/ultra64/sptask.h rename to include/PR/sptask.h index ef4aa4d04..3ec4bf1bf 100644 --- a/include/ultra64/sptask.h +++ b/include/PR/sptask.h @@ -1,5 +1,5 @@ -#ifndef _SPTASK_H_ -#define _SPTASK_H_ +#ifndef PR_SPTASK_H +#define PR_SPTASK_H #include "PR/ultratypes.h" #include "libc/stddef.h" @@ -109,4 +109,10 @@ typedef union { typedef u32 OSYieldResult; +void osSpTaskLoad(OSTask* intp); +void osSpTaskStartGo(OSTask* tp); + +void osSpTaskYield(void); +OSYieldResult osSpTaskYielded(OSTask* task); + #endif diff --git a/include/ultra64/ucode.h b/include/PR/ucode.h similarity index 93% rename from include/ultra64/ucode.h rename to include/PR/ucode.h index 8a1d89037..2314222ba 100644 --- a/include/ultra64/ucode.h +++ b/include/PR/ucode.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_UCODE_H -#define ULTRA64_UCODE_H +#ifndef PR_UCODE_H +#define PR_UCODE_H #include "PR/ultratypes.h" diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h index 8b4e1a82c..530f30755 100644 --- a/include/PR/ultratypes.h +++ b/include/PR/ultratypes.h @@ -1,5 +1,5 @@ -#ifndef _ULTRATYPES_H_ -#define _ULTRATYPES_H_ +#ifndef PR_ULTRATYPES_H +#define PR_ULTRATYPES_H typedef signed char s8; typedef unsigned char u8; @@ -22,27 +22,7 @@ typedef volatile s64 vs64; typedef float f32; typedef double f64; +// TODO: move this somewhere else typedef void* TexturePtr; -typedef long int Mtx_t[4][4]; -typedef union { - Mtx_t m; - struct { - u16 intPart[4][4]; - u16 fracPart[4][4]; - }; - long long int forc_structure_alignment; -} Mtx; // size = 0x40 - -typedef float MtxF_t[4][4]; -typedef union { - MtxF_t mf; - struct { - float xx, yx, zx, wx, - xy, yy, zy, wy, - xz, yz, zz, wz, - xw, yw, zw, ww; - }; -} MtxF; // size = 0x40 - #endif diff --git a/include/PR/viint.h b/include/PR/viint.h new file mode 100644 index 000000000..29d4fffc6 --- /dev/null +++ b/include/PR/viint.h @@ -0,0 +1,73 @@ +#ifndef PR_VIINT_H +#define PR_VIINT_H + +#include "ultratypes.h" + +#define OS_TV_TYPE_PAL 0 +#define OS_TV_TYPE_NTSC 1 +#define OS_TV_TYPE_MPAL 2 + +#define VI_STATE_MODE_UPDATED (1 << 0) +#define VI_STATE_XSCALE_UPDATED (1 << 1) +#define VI_STATE_YSCALE_UPDATED (1 << 2) +#define VI_STATE_CTRL_UPDATED (1 << 3) // related to control regs changing +#define VI_STATE_BUFFER_UPDATED (1 << 4) // swap buffer +#define VI_STATE_BLACK (1 << 5) // probably related to a black screen +#define VI_STATE_REPEATLINE (1 << 6) // repeat line? +#define VI_STATE_FADE (1 << 7) // fade + +#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */ + +#define VI_SCALE_MASK 0xFFF +#define VI_2_10_FPART_MASK 0x3FF +#define VI_SUBPIXEL_SH 0x10 + +// For use in initializing OSViMode structures + +#define BURST(hsync_width, color_width, vsync_width, color_start) \ + (((u32)(hsync_width) & 0xFF) | (((u32)(color_width) & 0xFF) << 8) | (((u32)(vsync_width) & 0xF) << 16) | (((u32)(color_start) & 0xFFFF) << 20)) +#define WIDTH(v) (v) +#define VSYNC(v) (v) +#define HSYNC(duration, leap) (((u32)(leap) << 16) | ((u32)(duration) & 0xFFFF)) +#define LEAP(upper, lower) (((u32)(upper) << 16) | ((u32)(lower) & 0xFFFF)) +#define START(start, end) (((u32)(start) << 16) | ((u32)(end) & 0xFFFF)) + +#define FTOFIX(val, i, f) ((u32)((val) * (f32)(1 << (f))) & ((1 << ((i) + (f))) - 1)) + +#define F210(val) FTOFIX(val, 2, 10) +#define SCALE(scaleup, off) (F210((1.0f / (f32)(scaleup))) | (F210((f32)(off)) << 16)) + +#define VCURRENT(v) v +#define ORIGIN(v) v +#define VINTR(v) v +#define HSTART START + + +typedef struct { + /* 0x0 */ f32 factor; + /* 0x4 */ u16 offset; + /* 0x8 */ u32 scale; +} __OSViScale; // size = 0x0C + +typedef struct { + /* 0x00 */ u16 state; + /* 0x02 */ u16 retraceCount; + /* 0x04 */ void* buffer; + /* 0x08 */ OSViMode* modep; + /* 0x0C */ u32 features; + /* 0x10 */ OSMesgQueue* mq; + /* 0x14 */ OSMesg* msg; + /* 0x18 */ __OSViScale x; + /* 0x24 */ __OSViScale y; +} __OSViContext; // size = 0x30 + +void __osViSwapContext(void); +extern __OSViContext* __osViCurr; +extern __OSViContext* __osViNext; +extern u32 __additional_scanline; +__OSViContext* __osViGetCurrentContext(void); +void __osViInit(void); + +#endif diff --git a/include/xstdio.h b/include/PR/xstdio.h similarity index 74% rename from include/xstdio.h rename to include/PR/xstdio.h index 102a25ee4..9850d88f8 100644 --- a/include/xstdio.h +++ b/include/PR/xstdio.h @@ -1,6 +1,7 @@ -#ifndef _XSTDIO_H_ -#define _XSTDIO_H_ +#ifndef PR_XSTDIO_H +#define PR_XSTDIO_H +#include "ultratypes.h" #include "libc/stdarg.h" typedef struct { @@ -30,4 +31,8 @@ typedef void* (*PrintCallback)(void*, const char*, size_t); #define FLAGS_HASH 8 #define FLAGS_ZERO 16 +s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap); +void _Litob(_Pft* args, u8 type); +void _Ldtob(_Pft* args, u8 type); + #endif diff --git a/include/audio/load.h b/include/audio/load.h index b5bc01594..1e896d744 100644 --- a/include/audio/load.h +++ b/include/audio/load.h @@ -5,9 +5,9 @@ #include "PR/ultratypes.h" #include "libc/stddef.h" #include "libc/stdint.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "unk.h" -#include "os.h" +#include "PR/os.h" struct Sample; diff --git a/include/bstring.h b/include/bstring.h deleted file mode 100644 index e8d6a66cf..000000000 --- a/include/bstring.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _BSTRING_H_ -#define _BSTRING_H_ - -#endif diff --git a/include/debug.h b/include/debug.h new file mode 100644 index 000000000..96d3d11c7 --- /dev/null +++ b/include/debug.h @@ -0,0 +1,7 @@ +#ifndef DEBUG_H +#define DEBUG_H + +void _dbg_hungup(const char* file, int lineNum); +void Reset(void); + +#endif diff --git a/include/fault.h b/include/fault.h index c93feee25..8affde4ae 100644 --- a/include/fault.h +++ b/include/fault.h @@ -5,7 +5,7 @@ #include "unk.h" #include "libc/stdarg.h" #include "libc/stdint.h" -#include "io/controller.h" +#include "PR/controller.h" #include "padmgr.h" #include "stack.h" diff --git a/include/functions.h b/include/functions.h index 6c7bc067a..7eb67e3ba 100644 --- a/include/functions.h +++ b/include/functions.h @@ -41,7 +41,6 @@ void CIC6105_AddRomInfoFaultPage(void); void CIC6105_RemoveRomInfoFaultPage(void); void func_800818F4(void); void __osSyncVPrintf(const char* fmt, ...); -void osSyncPrintf(const char* fmt, ...); void rmonPrintf(const char* fmt, ...); void func_80084940(void); @@ -68,8 +67,6 @@ void PadUtils_UpdateRelXY(Input* input); void MtxConv_F2L(Mtx* mtx, MtxF* mf); void MtxConv_L2F(MtxF* mtx, Mtx* mf); -void __assert(const char* file, u32 lineNum); -// void func_800862B4(void); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); u32 Rand_Next(void); @@ -81,9 +78,6 @@ u32 Rand_Next_Variable(u32* rndNum); f32 Rand_ZeroOne_Variable(u32* rndNum); f32 Rand_Centered_Variable(u32* rndNum); -void* proutSprintf(void* dst, const char* fmt, size_t size); -s32 vsprintf(char* dst, char* fmt, va_list args); -s32 sprintf(char* dst, char* fmt, ...); s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args); s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...); void Sleep_Cycles(OSTime time); @@ -91,223 +85,7 @@ void Sleep_Nsec(u32 nsec); void Sleep_Usec(u32 usec); void Sleep_Msec(u32 ms); void Sleep_Sec(u32 sec); -// void __osSetCause(void); -s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags); -s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes); -void osViExtendVStart(u32 a0); -void osStopThread(OSThread* t); -s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); -OSIntMask osSetIntMask(OSIntMask im); -// OSIntMask osGetIntMask(void); -void guScale(Mtx* mtx, f32 x, f32 y, f32 z); -f32 sinf(f32 __x); -s16 sins(u16 x); -OSTask* _VirtualToPhysicalTask(OSTask* intp); -void osSpTaskLoad(OSTask* intp); -void osSpTaskStartGo(OSTask* tp); -long long __ull_rshift(unsigned long long left, unsigned long long right); -unsigned long long __ull_rem(unsigned long long left, unsigned long long right); -unsigned long long __ull_div(unsigned long long left, unsigned long long right); -long long __ll_lshift(long long left, long long right); -long long __ll_rem(long long left, unsigned long long right); -long long __ll_div(long long left, long long right); -long long __ll_mul(long long left, long long right); -void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder, unsigned long long dividend, unsigned short divisor); -long long __ll_mod(long long left, long long right); -long long __ll_rshift(long long left, long long right); -void __osExceptionPreamble(void); -void __osException(void); -// void send_mesg(void); -// void handle_CpU(void); -void __osEnqueueAndYield(OSThread** param_1); -void __osEnqueueThread(OSThread** param_1, OSThread* param_2); -OSThread* __osPopThread(OSThread** param_1); -// void __osNop(void); -void __osDispatchThread(void); -void __osCleanupThread(void); -void __osDequeueThread(OSThread** queue, OSThread* t); -void osDestroyThread(OSThread* t); -void bzero(void* begin, s32 length); -void __osSiCreateAccessQueue(void); -void __osSiGetAccess(void); -void __osSiRelAccess(void); -s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); -void __osContGetInitData(u8* pattern, OSContStatus* data); -void __osPackRequestData(u8 poll); -void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p); -s32 osContStartReadData(OSMesgQueue* mq); -void osContGetReadData(OSContPad* data); -void __osPackReadData(void); -uintptr_t osVirtualToPhysical(void* virtualAddress); -u32 __osGetSR(void); -void __osSetSR(u32 value); -void osWritebackDCache(void* vaddr, s32 nbytes); -void __createSpeedParam(void); -void osInitialize(void); -void __osInitialize_autodetect(void); -void* osViGetNextFramebuffer(void); -void guPerspectiveF(float mf[4][4], u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); -void guPerspective(Mtx* m, u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); -s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); -s32 __osSiRawStartDma(s32 direction, void* dramAddr); -s32 osEPiLinkHandle(OSPiHandle* handle); -void osViBlack(u8 active); -s32 __osSiRawReadIo(uintptr_t devAddr, u32* data); -OSId osGetThreadId(OSThread* t); -void osSpTaskYield(void); -s32 __osPfsGetNextPage(OSPfs* pfs, u8* bank, __OSInode* inode, __OSInodeUnit* page); -s32 osPfsReadWriteFile(OSPfs* pfs, s32 fileNo, u8 flag, s32 offset, s32 size, u8* data); -s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); -// void __osPfsRequestOneChannel(void); -// void __osPfsGetOneChannelData(void); -void guMtxIdentF(float mf[4][4]); -void osViSetMode(OSViMode* modep); -// void __osGetConfig(void); -// void __osSetConfig(void); -void guLookAtF(float mf[4][4], f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); -void guLookAt(Mtx* m, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); -s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32 fileSize, s32* fileNo); -s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared, s32* finalPage); -s32 osStopTimer(OSTimer* t); -u32 __osProbeTLB(void* param_1); -void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); -void __osPiCreateAccessQueue(void); -void __osPiGetAccess(void); -void __osPiRelAccess(void); -void __osDevMgrMain(void* arg); -// void func_8008C640(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16, UNK_TYPE4 param_17, UNK_TYPE4 param_18); -s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size); -u16 __osSumcalc(u8* ptr, s32 length); -s32 __osIdCheckSum(u16* ptr, u16* checkSum, u16* idSum); -s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid); -// void __osCheckPackId(void); -s32 __osCheckId(OSPfs* pfs); -s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank); -u32 osGetCount(void); -void guMtxL2F(MtxF* m1, Mtx* m2); -u32 osGetMemSize(void); -s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo); -void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); -f32 sqrtf(f32 f); -s32 osAfterPreNMI(void); -s32 osContStartQuery(OSMesgQueue* mq); -void osContGetQuery(OSContStatus* data); -void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); -void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); -s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap); -void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac); -void osUnmapTLBAll(void); -s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); -const char* strchr(const char* s, s32 c); -size_t strlen(const char* s); -void* memcpy(void* s1, const void* s2, size_t n); -void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count); -void osInvalICache(void* vaddr, size_t nbytes); -void osInvalDCache(void* vaddr, size_t nbytes); -void __osTimerServicesInit(void); -void __osTimerInterrupt(void); -void __osSetTimerIntr(OSTime tim); -OSTime __osInsertTimer(OSTimer* t); -s32 __osSpDeviceBusy(void); -s32 __osSiDeviceBusy(void); -void guMtxIdent(Mtx* mtx); -s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); -void osSetThreadPri(OSThread* thread, OSPri p); -OSPri osGetThreadPri(OSThread* t); -s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); -void osViSwapBuffer(void* frameBufPtr); -void guPositionF(float mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); -void guPosition(Mtx* m, f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); -s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); -OSYieldResult osSpTaskYielded(OSTask* task); -s32 bcmp(void* __s1, void* __s2, size_t __n); -OSTime osGetTime(void); -void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); -void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); -void __osSetGlobalIntMask(u32 mask); -s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); -s32 osAiSetFrequency(u32 frequency); -s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer); -u8 __osContAddressCrc(u16 addr); -u8 __osContDataCrc(u8* data); -OSThread* __osGetActiveQueue(void); -void guNormalize(float* x, float* y, float* z); -void __osSetCompare(u32 value); -// u32 __osGetCompare(void); -u32 osDpGetStatus(void); -void osDpSetStatus(u32 data); -void bcopy(void* __src, void* __dest, size_t __n); -void __osResetGlobalIntMask(u32 mask); -// void osPfsDeleteFile(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void __osPfsReleasePages(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -void guOrthoF(float m[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); -void guOrtho(Mtx* m, f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); -OSIntMask __osDisableInt(void); -void __osRestoreInt(OSIntMask im); -void __osViInit(void); -void __osViSwapContext(void); -OSMesgQueue* osPiGetCmdQueue(void); -f32 cosf(f32 __x); -s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); -void osViSetSpecialFeatures(u32 func); -s16 coss(u16 x); -void osSetTime(OSTime ticks); -void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); -s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); -// void __osPfsRequestData(void); -// void __osPfsGetInitData(void); -OSPiHandle* osCartRomInit(void); -// void guS2DInitBg(void); -s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); -s32 osContSetCh(u8 ch); -u32 __osSetFpcCsr(u32 value); -u32 __osGetFpcCsr(void); -// void osPfsFileState(void); -// void osPfsInitPak(void); -// void __osPfsCheckRamArea(void); -// void osPfsChecker(void); -u32 osAiGetLength(void); -s32 osEPiWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); -void osMapTLBRdb(void); -void osYieldThread(void); -void guTranslate(Mtx* mtx, f32 x, f32 y, f32 z); -u32 __osGetCause(void); -s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force); -s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); -s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); -void _Ldtob(_Pft* args, u8 type); -// void _Ldunscale(void); -void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp); -ldiv_t ldiv(long numer, long denom); -lldiv_t lldiv(long long numer, long long denom); -void _Litob(_Pft* args, u8 type); -s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data); -u32 __osSpGetStatus(void); -void __osSpSetStatus(u32 data); -void osCreateViManager(OSPri pri); -// void viMgrMain(OSDevMgr* iParm1); -__OSViContext* __osViGetCurrentContext(void); -void osWritebackDCacheAll(void); -OSThread* __osGetCurrFaultedThread(void); -void guMtxF2L(float mf[4][4], Mtx* m); -void osStartThread(OSThread* t); -void osViSetYScale(f32 value); -void osViSetXScale(f32 value); -long long __d_to_ll(double d); -long long __f_to_ll(float f); -unsigned long long __d_to_ull(double d); -unsigned long long __f_to_ull(float f); -double __ll_to_d(long long s); -float __ll_to_f(long long s); -double __ull_to_d(unsigned long long u); -float __ull_to_f(unsigned long long u); -u32* osViGetCurrentFramebuffer(void); -s32 __osSpSetPc(void* pc); -void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); -void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg); -u32 __osGetWatchLo(void); -void __osSetWatchLo(u32 value); f32 fmodf(f32 dividend, f32 divisor); void* __osMemset(void* ptr, s32 val, size_t size); s32 __osStrcmp(const char* str1, const char* str2); @@ -1625,22 +1403,6 @@ void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); s32 func_80185F90(u32 arg0); -u32 osFlashGetAddr(u32 pageNum); -OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); -void osFlashChange(u32 flashNum); -OSPiHandle* osFlashInit(void); -void osFlashReadStatus(u8* flashStatus); -void osFlashReadId(u32* flashType, u32* flashVendor); -void osFlashClearStatus(void); -s32 osFlashAllErase(void); -void osFlashAllEraseThrough(void); -s32 osFlashCheckEraseEnd(void); -s32 osFlashSectorErase(u32 pageNum); -void osFlashSectorEraseThrough(u32 pageNum); -s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq); -s32 osFlashWriteArray(u32 pageNum); -s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq); - Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32 numSamplesPerFrame); AudioTask* AudioThread_Update(void); @@ -1661,8 +1423,6 @@ void AudioThread_InitMesgQueues(void); void Audio_InvalDCache(void* buf, size_t size); void Audio_WritebackDCache(void* buf, size_t size); -s32 osAiSetNextBuffer(void* buf, u32 size); - void AudioPlayback_NoteDisable(Note* note); void AudioPlayback_ProcessNotes(void); TunedSample* AudioPlayback_GetInstrumentTunedSample(Instrument* instrument, s32 semitone); diff --git a/include/gfx.h b/include/gfx.h index b9bbb744d..790279368 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -5,6 +5,7 @@ #include "PR/sched.h" #include "thga.h" #include "alignment.h" +#include "unk.h" struct GameState; diff --git a/include/gfxprint.h b/include/gfxprint.h index b652cc132..6149a5c4a 100644 --- a/include/gfxprint.h +++ b/include/gfxprint.h @@ -4,7 +4,8 @@ #include "color.h" #include "PR/gbi.h" #include "PR/ultratypes.h" -#include "xstdio.h" +#include "PR/xstdio.h" +#include "unk.h" #define GFXP_UNUSED "\x8E" #define GFXP_UNUSED_CHAR 0x8E diff --git a/include/irqmgr.h b/include/irqmgr.h index ac2c74960..a19169dc7 100644 --- a/include/irqmgr.h +++ b/include/irqmgr.h @@ -1,14 +1,8 @@ #ifndef IRQMGR_H #define IRQMGR_H -#include "PR/sched.h" -#include "os.h" #include "ultra64.h" - -#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 -#define OS_SC_PRE_NMI_MSG 4 +#include "PR/sched.h" typedef struct IrqMgrClient { /* 0x0 */ struct IrqMgrClient* next; diff --git a/include/libc/alloca.h b/include/libc/alloca.h index 4e8720f7e..fa49dd133 100644 --- a/include/libc/alloca.h +++ b/include/libc/alloca.h @@ -1,5 +1,5 @@ -#ifndef ALLOCA_H -#define ALLOCA_H +#ifndef LIBC_ALLOCA_H +#define LIBC_ALLOCA_H void* alloca(u32); #define alloca __builtin_alloca diff --git a/include/libc/assert.h b/include/libc/assert.h deleted file mode 100644 index 1bc72e314..000000000 --- a/include/libc/assert.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef ASSERT_H -#define ASSERT_H - -#endif diff --git a/include/libc/math.h b/include/libc/math.h index 1cdac0fb3..618ab52b5 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -1,5 +1,5 @@ -#ifndef MATH_H -#define MATH_H +#ifndef LIBC_MATH_H +#define LIBC_MATH_H #include "PR/ultratypes.h" @@ -27,8 +27,10 @@ extern f32 __libm_qnan_f; float fabsf(float f); #pragma intrinsic(fabsf) -float sqrtf(float f); -#pragma intrinsic(sqrtf) +#ifdef __GNUC__ +#define fabsf(f) __builtin_fabsf((float)(f)) +#endif + double sqrt(double d); #pragma intrinsic(sqrt) diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h index 77b8b8866..55f694385 100644 --- a/include/libc/stdarg.h +++ b/include/libc/stdarg.h @@ -1,7 +1,5 @@ -#ifndef STDARG_H -#define STDARG_H - -#include "ultra64.h" +#ifndef LIBC_STDARG_H +#define LIBC_STDARG_H // When building with GCC, use the official vaarg macros to avoid warnings // and possibly bad codegen. diff --git a/include/libc/stdbool.h b/include/libc/stdbool.h index d441054c1..52546edb3 100644 --- a/include/libc/stdbool.h +++ b/include/libc/stdbool.h @@ -1,5 +1,5 @@ -#ifndef STDBOOL -#define STDBOOL +#ifndef LIBC_STDBOOL_H +#define LIBC_STDBOOL_H #define __bool_true_false_are_defined 1 diff --git a/include/libc/stddef.h b/include/libc/stddef.h index 4f55e5725..e867d8e2a 100644 --- a/include/libc/stddef.h +++ b/include/libc/stddef.h @@ -1,5 +1,5 @@ -#ifndef STDDEF_H -#define STDDEF_H +#ifndef LIBC_STDDEF_H +#define LIBC_STDDEF_H #include "PR/ultratypes.h" diff --git a/include/libc/stdint.h b/include/libc/stdint.h index 20288d40d..854fd2546 100644 --- a/include/libc/stdint.h +++ b/include/libc/stdint.h @@ -1,5 +1,5 @@ -#ifndef STDINT_H -#define STDINT_H +#ifndef LIBC_STDINT_H +#define LIBC_STDINT_H #include "PR/ultratypes.h" diff --git a/include/libc/stdlib.h b/include/libc/stdlib.h index 57d352a13..ec15b4f6c 100644 --- a/include/libc/stdlib.h +++ b/include/libc/stdlib.h @@ -1,5 +1,5 @@ -#ifndef STDLIB_H -#define STDLIB_H +#ifndef LIBC_STDLIB_H +#define LIBC_STDLIB_H #include "libc/stddef.h" @@ -22,4 +22,7 @@ typedef int ssize_t; typedef long wchar_t; +ldiv_t ldiv(long numer, long denom); +lldiv_t lldiv(long long numer, long long denom); + #endif /* STDLIB_H */ diff --git a/include/libc/string.h b/include/libc/string.h new file mode 100644 index 000000000..9c6a1cb08 --- /dev/null +++ b/include/libc/string.h @@ -0,0 +1,12 @@ +#ifndef LIBC_STRING_H +#define LIBC_STRING_H + +#include "libc/stddef.h" + + +const char* strchr(const char* s, int c); +size_t strlen(const char* s); +void* memcpy(void* s1, const void* s2, size_t n); + + +#endif diff --git a/include/macros.h b/include/macros.h index b03d01b3e..ff764f644 100644 --- a/include/macros.h +++ b/include/macros.h @@ -2,7 +2,7 @@ #define MACROS_H #include "libc/stdint.h" -#include "ultra64/convert.h" +#include "PR/os_convert.h" #include "main.h" #define SCREEN_WIDTH 320 diff --git a/include/os_malloc.h b/include/os_malloc.h index 6f6bbf900..4106d42e8 100644 --- a/include/os_malloc.h +++ b/include/os_malloc.h @@ -1,8 +1,8 @@ -#ifndef OS_MALLOC -#define OS_MALLOC +#ifndef OS_MALLOC_H +#define OS_MALLOC_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "libc/stddef.h" typedef struct ArenaNode { diff --git a/include/osint.h b/include/osint.h deleted file mode 100644 index fa74a82eb..000000000 --- a/include/osint.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _OSINT_H_ -#define _OSINT_H_ - -// TODO should be in libultra/os - -#include "libc/stdarg.h" -#include "os.h" -#include "os_internal.h" -#include "ultraerror.h" -#include "ultralog.h" - -typedef struct { - /* 0x0 */ OSMesgQueue* messageQueue; - /* 0x4 */ OSMesg message; -} __OSEventState; - - -typedef struct { - /* 0x0 */ OSThread* next; - /* 0x4 */ OSPri priority; -} __OSThreadTail; - -extern __osHwInt __osHwIntTable[]; -extern __OSEventState __osEventStateTab[]; - -#endif diff --git a/include/padmgr.h b/include/padmgr.h index 7cb3cc800..59157dd81 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -2,15 +2,9 @@ #define PADMGR_H #include "libc/stdbool.h" -#include "io/controller.h" +#include "ultra64.h" #include "irqmgr.h" - -typedef struct Input { - /* 0x00 */ OSContPad cur; - /* 0x06 */ OSContPad prev; - /* 0x0C */ OSContPad press; // X/Y store delta from last frame - /* 0x12 */ OSContPad rel; // X/Y store adjusted -} Input; // size = 0x18 +#include "padutils.h" typedef enum { /* 0 */ PADMGR_CONT_NONE, diff --git a/include/padutils.h b/include/padutils.h new file mode 100644 index 000000000..4531bc010 --- /dev/null +++ b/include/padutils.h @@ -0,0 +1,14 @@ +#ifndef PADUTILS_H +#define PADUTILS_H + +#include "PR/controller.h" + + +typedef struct Input { + /* 0x00 */ OSContPad cur; + /* 0x06 */ OSContPad prev; + /* 0x0C */ OSContPad press; // X/Y store delta from last frame + /* 0x12 */ OSContPad rel; // X/Y store adjusted +} Input; // size = 0x18 + +#endif diff --git a/include/ramrom.h b/include/ramrom.h deleted file mode 100644 index 6671b9931..000000000 --- a/include/ramrom.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _RAMROM_H_ -#define _RAMROM_H_ - -#include "PR/ultratypes.h" - -typedef struct { - /* 0x0 */ long type; - /* 0x4 */ long length; - /* 0x8 */ long magic; - /* 0xC */ unsigned char userdata[24564]; -} RamRomBuffer; - -#endif diff --git a/include/rdb.h b/include/rdb.h deleted file mode 100644 index 04b3ed5bc..000000000 --- a/include/rdb.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _RDB_H_ -#define _RDB_H_ - -typedef struct { - /* 0x0 */ unsigned int type : 2; - /* 0x0 */ unsigned int length : 2; - /* 0x1 */ unsigned char buf[3]; -} rdbPacket; - -#endif diff --git a/include/regs.h b/include/regs.h index bc8bacb1b..2d113ea48 100644 --- a/include/regs.h +++ b/include/regs.h @@ -5,6 +5,8 @@ #define REGS_H #include "ultra64.h" +#include "unk.h" + #define REG_GROUPS 29 // number of REG groups, i.e. REG, SREG, OREG, etc. #define REG_PAGES 6 diff --git a/include/rmon.h b/include/rmon.h deleted file mode 100644 index efdd555c6..000000000 --- a/include/rmon.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _RMON_H_ -#define _RMON_H_ - -#endif diff --git a/include/scheduler.h b/include/scheduler.h index 3cf588b1f..1aeae07ec 100644 --- a/include/scheduler.h +++ b/include/scheduler.h @@ -3,8 +3,8 @@ #include "PR/ultratypes.h" #include "PR/sched.h" -#include "ultra64/vi.h" -#include "ultra64/sptask.h" +#include "PR/os_vi.h" +#include "PR/sptask.h" #include "irqmgr.h" #define TASK_FRAMEBUFFER(task) ((CfbInfo*)(task)->framebuffer) diff --git a/include/ultra64.h b/include/ultra64.h index f7baade42..54bb66d69 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -1,21 +1,23 @@ -#ifndef _ULTRA64_H_ -#define _ULTRA64_H_ +#ifndef ULTRA64_H +#define ULTRA64_H #include "PR/ultratypes.h" #include "PR/gbi.h" -#include "unk.h" - -#include "ultra64/controller_voice.h" -#include "ultra64/hardware.h" -#include "ultra64/message.h" -#include "ultra64/sptask.h" -#include "ultra64/thread.h" -#include "ultra64/rcp.h" -#include "ultra64/rdp.h" -#include "ultra64/rsp.h" -#include "ultra64/r4300.h" -#include "ultra64/ucode.h" -#include "ultra64/vi.h" +#include "PR/gu.h" +#include "PR/controller_voice.h" +#include "PR/hardware.h" +#include "PR/os.h" +#include "PR/osint.h" +#include "PR/piint.h" +#include "PR/siint.h" +#include "PR/sptask.h" +#include "PR/rcp.h" +#include "PR/rdp.h" +#include "PR/rsp.h" +#include "PR/r4300.h" +#include "PR/ucode.h" +#include "PR/viint.h" +#include "PR/xstdio.h" #endif diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h deleted file mode 100644 index 6f61307eb..000000000 --- a/include/ultra64/viint.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ULTRA64_VIINT_H -#define ULTRA64_VIINT_H - -#define VI_STATE_MODE_SET (1 << 0) -#define VI_STATE_XSCALE_SET (1 << 1) -#define VI_STATE_YSCALE_FACTOR_SET (1 << 2) -#define VI_STATE_CTRL_SET (1 << 3) -#define VI_STATE_BUFFER_SET (1 << 4) -#define VI_STATE_BLACK (1 << 5) -#define VI_STATE_REPEATLINE (1 << 6) -#define VI_STATE_FADE (1 << 7) - -#define VI_SCALE_MASK 0xFFF -#define VI_2_10_FPART_MASK 0x3FF -#define VI_SUBPIXEL_SH 0x10 - -// For use in initializing OSViMode structures - -#define BURST(hsync_width, color_width, vsync_width, color_start) \ - (((u32)(hsync_width) & 0xFF) | (((u32)(color_width) & 0xFF) << 8) | (((u32)(vsync_width) & 0xF) << 16) | (((u32)(color_start) & 0xFFFF) << 20)) -#define WIDTH(v) (v) -#define VSYNC(v) (v) -#define HSYNC(duration, leap) (((u32)(leap) << 16) | ((u32)(duration) & 0xFFFF)) -#define LEAP(upper, lower) (((u32)(upper) << 16) | ((u32)(lower) & 0xFFFF)) -#define START(start, end) (((u32)(start) << 16) | ((u32)(end) & 0xFFFF)) - -#define FTOFIX(val, i, f) ((u32)((val) * (f32)(1 << (f))) & ((1 << ((i) + (f))) - 1)) - -#define F210(val) FTOFIX(val, 2, 10) -#define SCALE(scaleup, off) (F210((1.0f / (f32)(scaleup))) | (F210((f32)(off)) << 16)) - -#define VCURRENT(v) v -#define ORIGIN(v) v -#define VINTR(v) v -#define HSTART START - -#endif diff --git a/include/ultraerror.h b/include/ultraerror.h deleted file mode 100644 index 030b05af6..000000000 --- a/include/ultraerror.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ULTRAERROR_H_ -#define _ULTRAERROR_H_ - -typedef void (*OSErrorHandler)(/* ECOFF does not store param types */); - -#endif diff --git a/include/ultralog.h b/include/ultralog.h deleted file mode 100644 index ae052d91d..000000000 --- a/include/ultralog.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _ULTRALOG_H_ -#define _ULTRALOG_H_ - -#include "PR/ultratypes.h" - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 len; - /* 0x8 */ u32* base; - /* 0xC */ s32 startCount; - /* 0x10 */ s32 writeOffset; -} OSLog; - - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 timeStamp; - /* 0x8 */ u16 argCount; - /* 0xA */ u16 eventID; -} OSLogItem; - - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 version; -} OSLogFileHdr; - -#endif diff --git a/include/variables.h b/include/variables.h index 1614d922b..0f499fde4 100644 --- a/include/variables.h +++ b/include/variables.h @@ -34,7 +34,6 @@ extern s32 sIrqMgrRetraceCount; extern OSViMode osViModeNtscHpf1; extern OSViMode osViModePalLan1; extern s16 sintable[0x400]; -extern __osHwInt __osHwIntTable[]; // extern UNK_TYPE1 D_80097DE4; // extern UNK_TYPE4 D_80097E08; extern OSThread* __osThreadTail; @@ -63,14 +62,12 @@ extern s32 __osPfsLastChannel; extern OSViMode osViModeNtscLan1; extern OSViMode osViModeMpalLan1; // extern __OSViContext D_80098060[2]; -extern __OSViContext* __osViCurr; -extern __OSViContext* __osViNext; + // extern UNK_TYPE4 sCartRomNeedsInit; extern OSViMode osViModeFpalLan1; // extern u8 ldigs[]; // extern u8 udigs[]; // extern OSDevMgr __osViDevMgr; -extern u32 __additional_scanline; extern char bootThreadName[]; extern char idleThreadName[]; @@ -160,7 +157,6 @@ extern OSPiHandle D_8009D1A8; extern OSMesg D_8009E3F0[1]; extern OSMesgQueue __osPiAccessQueue; extern __OSInode __osPfsInodeCache; -extern __OSEventState __osEventStateTab[16]; extern OSTimer D_8009E590; extern OSTime __osCurrentTime; extern u32 __osBaseCounter; diff --git a/include/viint.h b/include/viint.h deleted file mode 100644 index fadd5d781..000000000 --- a/include/viint.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _VIINT_H_ -#define _VIINT_H_ - -// TODO should be in libultra/io - -#include "PR/ultratypes.h" -#include "os.h" - -// typedef struct { -// /* 0x0 */ f32 factor; -// /* 0x4 */ u16 offset; -// /* 0x8 */ u32 scale; -// } __OSViScale; - - -typedef struct { - /* 0x0 */ u16 state; - /* 0x2 */ u16 retraceCount; - /* 0x4 */ void* buffer; - /* 0x8 */ OSViMode* modep; - /* 0xC */ u32 control; - /* 0x10 */ OSMesgQueue* msgq; - /* 0x14 */ OSMesg msg; - /* 0x18 */ __OSViScale x; - /* 0x24 */ __OSViScale y; -} __OSViContext; // size = 0x30 - -#endif diff --git a/include/z64.h b/include/z64.h index c94bec081..69e7e01f2 100644 --- a/include/z64.h +++ b/include/z64.h @@ -9,14 +9,10 @@ #include "libc/stdlib.h" #include "ultra64.h" -#include "ultra64/gs2dex.h" -#include "io/controller.h" -#include "osint.h" -#include "os.h" + #include "irqmgr.h" #include "padmgr.h" #include "scheduler.h" -#include "xstdio.h" #include "color.h" #include "ichain.h" @@ -27,6 +23,7 @@ #include "gfx.h" #include "gfxprint.h" +#include "padutils.h" #include "sys_matrix.h" #include "tha.h" #include "thga.h" diff --git a/include/z64actor.h b/include/z64actor.h index d794b8dd1..5f0ea59ad 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -2,6 +2,7 @@ #define Z64ACTOR_H #include "PR/ultratypes.h" +#include "padutils.h" #include "z64math.h" #include "z64animation.h" #include "z64collision_check.h" diff --git a/include/z64audio.h b/include/z64audio.h index e09848e7a..d2a9afd08 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -2,7 +2,8 @@ #define Z64AUDIO_H #include "PR/ultratypes.h" -#include "ultra64/os_voice.h" +#include "PR/os_voice.h" +#include "audiothread_cmd.h" #include "libc/stddef.h" #include "unk.h" #include "audiothread_cmd.h" diff --git a/include/z64bombers_notebook.h b/include/z64bombers_notebook.h index 403f4a88a..5b89aaf70 100644 --- a/include/z64bombers_notebook.h +++ b/include/z64bombers_notebook.h @@ -2,9 +2,10 @@ #define Z64BOMBERS_NOTEBOOK_H #include "ultra64.h" -#include "io/controller.h" #include "z64dma.h" +struct PlayState; + #define DEFINE_PERSON(enum, _photo, _description, _metEnum, _metMessage, _metFlag) enum, typedef enum BombersNotebookPerson { #include "tables/bombers_notebook/person_table.h" diff --git a/include/z64frameadvance.h b/include/z64frameadvance.h index 179a1adba..a05ee8d58 100644 --- a/include/z64frameadvance.h +++ b/include/z64frameadvance.h @@ -1,15 +1,17 @@ #ifndef Z64FRAMEADVANCE_H #define Z64FRAMEADVANCE_H -#include "padmgr.h" +#include "ultra64.h" + +struct Input; + typedef struct FrameAdvanceContext { /* 0x0 */ s32 enabled; /* 0x4 */ s32 timer; } FrameAdvanceContext; // size = 0x8 - void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx); -s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input); +s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, struct Input* input); #endif diff --git a/include/z64game.h b/include/z64game.h index a0c57853a..8b63b701f 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -4,9 +4,10 @@ #include "ultra64.h" #include "libc/stdbool.h" #include "libc/stdint.h" -#include "io/controller.h" +#include "padutils.h" #include "tha.h" #include "padmgr.h" +#include "unk.h" struct GraphicsContext; struct GameState; diff --git a/include/z64jpeg.h b/include/z64jpeg.h index 60797af98..181140386 100644 --- a/include/z64jpeg.h +++ b/include/z64jpeg.h @@ -2,7 +2,7 @@ #define Z64JPEG_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "PR/sched.h" typedef struct { diff --git a/include/z64math.h b/include/z64math.h index a86cf9a20..6fa64f4f4 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -114,6 +114,17 @@ typedef enum { /* 2 */ OLIB_DIFF // Sub `a` and `b` to dest } OlibVec3fDiff; +typedef float MtxF_t[4][4]; +typedef union { + MtxF_t mf; + struct { + float xx, yx, zx, wx, + xy, yy, zy, wy, + xz, yz, zz, wz, + xw, yw, zw, ww; + }; +} MtxF; // size = 0x40 + #define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t))) #define F32_LERP(v0, v1, t) ((1.0f - (t)) * (f32)(v0) + (t) * (f32)(v1)) #define F32_LERPIMP(v0, v1, t) ((f32)(v0) + (((f32)(v1) - (f32)(v0)) * (t))) diff --git a/include/z64player.h b/include/z64player.h index 03bb71d94..f628cd0bc 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -2,7 +2,7 @@ #define Z64PLAYER_H #include "alignment.h" -#include "os.h" +#include "PR/os.h" #include "z64actor.h" struct Player; diff --git a/include/z64rumble.h b/include/z64rumble.h index cb422d2de..844d712db 100644 --- a/include/z64rumble.h +++ b/include/z64rumble.h @@ -2,7 +2,7 @@ #define Z64RUMBLE_H #include "PR/ultratypes.h" -#include "io/controller.h" +#include "PR/controller.h" typedef enum RumbleManagerState { /* 0 */ RUMBLEMANAGER_STATE_WIPE, // Disables the request processing and wipes every request. It can be either set manually or automatically by the system as fail-safe in case the Rumble Pak has been vibrating for 2 minutes diff --git a/include/z64save.h b/include/z64save.h index 5abf105e9..cdc46f023 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -2,9 +2,9 @@ #define Z64SAVE_H #include "ultra64.h" +#include "PR/os.h" #include "z64item.h" #include "z64math.h" -#include "os.h" struct GameState; struct PlayState; diff --git a/spec b/spec index 7ebf16cd9..4612c1801 100644 --- a/spec +++ b/spec @@ -33,7 +33,7 @@ beginseg include "build/src/boot_O2/gfxprint.o" include "build/data/boot/gfxprint.data.o" include "build/src/boot_O2/mtxuty-cvt.o" - include "build/src/boot_O2/assert.o" + include "build/src/boot_O2/debug.o" include "build/src/boot_O2/system_heap.o" include "build/src/boot_O2/padsetup.o" include "build/src/boot_O2/boot_80086760.o" diff --git a/src/boot_O2/assert.c b/src/boot_O2/debug.c similarity index 67% rename from src/boot_O2/assert.c rename to src/boot_O2/debug.c index 04fcf87fe..3933b585e 100644 --- a/src/boot_O2/assert.c +++ b/src/boot_O2/debug.c @@ -1,11 +1,11 @@ #include "global.h" #include "fault.h" -void __assert(const char* file, u32 lineNum) { +void _dbg_hungup(const char* file, int lineNum) { osGetThreadId(NULL); Fault_AddHungupAndCrash(file, lineNum); } -void func_800862B4(void) { +void Reset(void) { Fault_AddHungupAndCrash("Reset", 0); } diff --git a/src/boot_O2/loadfragment.c b/src/boot_O2/loadfragment.c index 517c82bbb..b22b1a692 100644 --- a/src/boot_O2/loadfragment.c +++ b/src/boot_O2/loadfragment.c @@ -9,6 +9,7 @@ * The main difference between them seems to be the lack of vramEnd arguments here. * Instead they are calculated on the fly. */ + #include "global.h" #include "system_malloc.h" #include "loadfragment.h" diff --git a/src/boot_O2/mtxuty-cvt.c b/src/boot_O2/mtxuty-cvt.c index 2c1634392..a5da24522 100644 --- a/src/boot_O2/mtxuty-cvt.c +++ b/src/boot_O2/mtxuty-cvt.c @@ -15,5 +15,5 @@ void MtxConv_F2L(Mtx* mtx, MtxF* mf) { } void MtxConv_L2F(MtxF* mtx, Mtx* mf) { - guMtxL2F(mtx, mf); + guMtxL2F(mtx->mf, mf); } diff --git a/src/boot_O2/padutils.c b/src/boot_O2/padutils.c index accd09e11..1c6bbe868 100644 --- a/src/boot_O2/padutils.c +++ b/src/boot_O2/padutils.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "padutils.h" void PadUtils_Init(Input* input) { bzero(input, sizeof(Input)); diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index b2afc3f95..f62dfb8b7 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -44,6 +44,7 @@ #include "fault.h" #include "global.h" #include "vt.h" +#include "PR/osint.h" #include "stackcheck.h" #include "z64thread.h" diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 31166c3b5..edb7fc5cc 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" diff --git a/src/code/game.c b/src/code/game.c index dc1e1b93e..4f2df63cd 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -11,6 +11,7 @@ #include "z64vismono.h" #include "z64viszbuf.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +#include "debug.h" s32 gFramerateDivisor = 1; f32 gFramerateDivisorF = 1.0f; @@ -168,7 +169,7 @@ void GameState_InitArena(GameState* gameState, size_t size) { } THA_Init(&gameState->heap, NULL, 0); - __assert("../game.c", 1035); + _dbg_hungup("../game.c", 1035); } void GameState_Realloc(GameState* gameState, size_t size) { @@ -192,7 +193,7 @@ void GameState_Realloc(GameState* gameState, size_t size) { THA_Init(&gameState->heap, gameArena, size); } else { THA_Init(&gameState->heap, NULL, 0); - __assert("../game.c", 1074); + _dbg_hungup("../game.c", 1074); } } diff --git a/src/code/padmgr.c b/src/code/padmgr.c index eb6a811b7..ae40fc1a4 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -32,8 +32,8 @@ */ #include "global.h" -#include "io/controller.h" -#include "ultra64/motor.h" +#include "PR/controller.h" +#include "PR/os_motor.h" #include "fault.h" #define PADMGR_RETRACE_MSG (1 << 0) diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 012c118fb..d48ed24bc 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 924000f92..ae871c8a6 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" #include "fixed_point.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 95d2e36f9..c2e00e206 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -44,6 +44,7 @@ */ #include "global.h" +#include "libc/string.h" #include "z64quake.h" #include "z64shrink_window.h" #include "z64view.h" diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 24371cdbe..ba9199dbb 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,5 +1,6 @@ -#include "prevent_bss_reordering.h" #include "PR/ultratypes.h" +#include "prevent_bss_reordering.h" +#include "prevent_bss_reordering2.h" // Variables are put before most headers as a hacky way to bypass bss reordering struct CutsceneCamera; diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 88ec794fc..fed5ec48c 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -3,8 +3,10 @@ * * Manages all cutscenes except for manual */ + #include "global.h" #include "z64shrink_window.h" +#include "libc/string.h" ActorCutscene sGlobalCutsceneList[] = { // CS_ID_GLOBAL_78 diff --git a/src/code/z_pause.c b/src/code/z_pause.c index 5f212b7ae..b16cc62c1 100644 --- a/src/code/z_pause.c +++ b/src/code/z_pause.c @@ -20,6 +20,8 @@ */ #include "z64frameadvance.h" +#include "libc/stdbool.h" +#include "padutils.h" #include "macros.h" void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx) { diff --git a/src/code/z_play.c b/src/code/z_play.c index ccbf1f0c4..48fbb1f2d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -32,6 +32,7 @@ u8 sMotionBlurStatus; #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +#include "debug.h" s32 gDbgCamEnabled = false; u8 D_801D0D54 = false; @@ -335,11 +336,11 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) { default: fbdemoType = -1; - __assert("../z_play.c", 1420); + _dbg_hungup("../z_play.c", 1420); } } else { fbdemoType = -1; - __assert("../z_play.c", 1423); + _dbg_hungup("../z_play.c", 1423); } transitionCtx->transitionType = transitionType; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index e272bbfea..a890090ff 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -3,6 +3,7 @@ * 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" diff --git a/src/code/z_room.c b/src/code/z_room.c index 78eb5f98e..28a297499 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -1,4 +1,5 @@ #include "global.h" +#include "debug.h" void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3) { } @@ -380,7 +381,7 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS bgEntry++; } - __assert("../z_room.c", 849); + _dbg_hungup("../z_room.c", 849); return NULL; } @@ -461,7 +462,7 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) { } else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) { Room_DrawImageMulti(play, room, flags); } else { - __assert("../z_room.c", 965); + _dbg_hungup("../z_room.c", 965); } } @@ -516,7 +517,7 @@ size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) { roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize); if (roomCtx->roomMemPages[0] == NULL) { - __assert("../z_room.c", 1078); + _dbg_hungup("../z_room.c", 1078); } roomCtx->roomMemPages[1] = (void*)((uintptr_t)roomCtx->roomMemPages[0] + maxRoomSize); roomCtx->activeMemPage = 0; diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 778c89c14..8e3d1c59f 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,6 +1,7 @@ #include "global.h" +#include "debug.h" #include "z64vimode.h" -#include "ultra64/viint.h" +#include "PR/viint.h" typedef struct { /* 0x00 */ u32 burst; @@ -143,7 +144,7 @@ void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 ant viMode->fldRegs[0].vBurst = ptr->vBurst; viMode->fldRegs[1].vBurst = ptr->vBurst; } else { - __assert("../z_vimode.c", 216); + _dbg_hungup("../z_vimode.c", 216); } viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust; diff --git a/src/libultra/gu/guS2DInitBg.c b/src/libultra/gu/guS2DInitBg.c index d2e5a2b04..c87176f49 100644 --- a/src/libultra/gu/guS2DInitBg.c +++ b/src/libultra/gu/guS2DInitBg.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" void guS2DInitBg(uObjBg* bg) { u32 size; diff --git a/src/libultra/gu/lookathil.c b/src/libultra/gu/lookathil.c index dcb05b3d9..22540337c 100644 --- a/src/libultra/gu/lookathil.c +++ b/src/libultra/gu/lookathil.c @@ -1,7 +1,5 @@ #include "global.h" -#define FTOFRAC8(x) ((s32)MIN(((x) * (128.0f)), 127.0f) & 0xFF) - void guLookAtHiliteF(f32 mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, /* light 1 direction */ f32 xl2, f32 yl2, f32 zl2, /* light 2 direction */ diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c index 27bd0b8ed..21a8b90ce 100644 --- a/src/libultra/io/contreaddata.c +++ b/src/libultra/io/contreaddata.c @@ -1,5 +1,7 @@ #include "global.h" +void __osPackReadData(void); + s32 osContStartReadData(OSMesgQueue* mq) { s32 ret; int i; @@ -37,7 +39,7 @@ void osContGetReadData(OSContPad* data) { } } -void __osPackReadData() { +void __osPackReadData(void) { u8* ptr; __OSContReadFormat readformat; int i; diff --git a/src/libultra/io/motor.c b/src/libultra/io/motor.c index 9e0eb127e..ba934d800 100644 --- a/src/libultra/io/motor.c +++ b/src/libultra/io/motor.c @@ -1,6 +1,6 @@ -#include "ultra64/motor.h" +#include "PR/os_motor.h" -#include "io/controller.h" +#include "PR/controller.h" #include "functions.h" #define BANK_ADDR 0x400 diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c index ccccf68ae..a7f5173a9 100644 --- a/src/libultra/io/osViModeMpalLan1.c +++ b/src/libultra/io/osViModeMpalLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeMpalLan1 = { OS_VI_MPAL_LAN1, // type diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c index 5f88f4e94..672a2a17f 100644 --- a/src/libultra/io/osViModeNtscHpf1.c +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeNtscHpf1 = { OS_VI_NTSC_HPF1, // type diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c index 86eb473b7..afbe46fab 100644 --- a/src/libultra/io/osViModeNtscLan1.c +++ b/src/libultra/io/osViModeNtscLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeNtscLan1 = { OS_VI_NTSC_LAN1, // type diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c index f875bb731..66ae4e6f1 100644 --- a/src/libultra/io/osViModePalLan1.c +++ b/src/libultra/io/osViModePalLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModePalLan1 = { OS_VI_PAL_LAN1, // type diff --git a/src/libultra/io/pfschecker.c b/src/libultra/io/pfschecker.c index d3a635768..79045ce1b 100644 --- a/src/libultra/io/pfschecker.c +++ b/src/libultra/io/pfschecker.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" #define CHECK_IPAGE(p) \ diff --git a/src/libultra/io/pfsdeletefile.c b/src/libultra/io/pfsdeletefile.c index 39e9aa898..3d6558a0d 100644 --- a/src/libultra/io/pfsdeletefile.c +++ b/src/libultra/io/pfsdeletefile.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsReleasePages(OSPfs* pfs, __OSInode* inode, u8 initialPage, u8 bank, __OSInodeUnit* finalPage); diff --git a/src/libultra/io/pfsfilestate.c b/src/libultra/io/pfsfilestate.c index f06c8d937..887eac1f6 100644 --- a/src/libultra/io/pfsfilestate.c +++ b/src/libultra/io/pfsfilestate.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state) { diff --git a/src/libultra/io/pfsfreeblocks.c b/src/libultra/io/pfsfreeblocks.c index b90979c59..2f8c6493f 100644 --- a/src/libultra/io/pfsfreeblocks.c +++ b/src/libultra/io/pfsfreeblocks.c @@ -1,5 +1,5 @@ #include "global.h" -#include "PR/pfs.h" +#include "PR/os_pfs.h" s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes) { s32 j; diff --git a/src/libultra/io/pfsinitpak.c b/src/libultra/io/pfsinitpak.c index cc226f834..f4d917b62 100644 --- a/src/libultra/io/pfsinitpak.c +++ b/src/libultra/io/pfsinitpak.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsCheckRamArea(OSPfs* pfs); diff --git a/src/libultra/io/pfsisplug.c b/src/libultra/io/pfsisplug.c index 474c7f914..99a2cbc42 100644 --- a/src/libultra/io/pfsisplug.c +++ b/src/libultra/io/pfsisplug.c @@ -1,5 +1,5 @@ -#include "PR/pfs.h" -#include "io/controller.h" +#include "PR/os_pfs.h" +#include "PR/controller.h" #include "global.h" void __osPfsRequestData(u8 poll); diff --git a/src/libultra/io/pfsselectbank.c b/src/libultra/io/pfsselectbank.c index 6cc43a470..59a69fccb 100644 --- a/src/libultra/io/pfsselectbank.c +++ b/src/libultra/io/pfsselectbank.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsSelectBank(OSPfs* pfs, u8 bank) { diff --git a/src/libultra/io/vigetcurrframebuf.c b/src/libultra/io/vigetcurrframebuf.c index bace58ded..8127a3f63 100644 --- a/src/libultra/io/vigetcurrframebuf.c +++ b/src/libultra/io/vigetcurrframebuf.c @@ -1,8 +1,8 @@ #include "global.h" -u32* osViGetCurrentFramebuffer(void) { +void* osViGetCurrentFramebuffer(void) { register u32 prevInt = __osDisableInt(); - u32* curBuf = __osViCurr->buffer; + void* curBuf = __osViCurr->buffer; __osRestoreInt(prevInt); diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index 13f63c90d..f38974b8a 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -1,6 +1,7 @@ #include "global.h" +#include "PR/osint.h" #include "stack.h" -#include "osint.h" +#include "PR/osint.h" OSThread viThread; STACK(sViStack, 0x1000); diff --git a/src/libultra/os/gethwinterrupt.c b/src/libultra/os/gethwinterrupt.c index dacd43910..711985df7 100644 --- a/src/libultra/os/gethwinterrupt.c +++ b/src/libultra/os/gethwinterrupt.c @@ -1,7 +1,8 @@ #include "global.h" -#include "os_internal.h" +#include "PR/os_internal.h" +#include "PR/osint.h" -void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg) { +void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg) { *outQueue = __osHwIntTable[idx].queue; *outMsg = __osHwIntTable[idx].msg; } diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 4fabb4c4d..8eb97c28c 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -9,6 +9,8 @@ typedef struct { /* 0xC */ u32 ins_0C; // nop } struct_exceptionPreamble; // size = 0x10 +extern struct_exceptionPreamble __osExceptionPreamble; + u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; UNK_TYPE4 __osShutdown = 0; @@ -30,7 +32,7 @@ void __createSpeedParam(void) { D_8009D1A8.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); } -void osInitialize(void) { +void __osInitialize_common(void) { u32 pifdata; D_8009CF70 = 1; @@ -43,10 +45,10 @@ void osInitialize(void) { while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {} - *(struct_exceptionPreamble*)0x80000000 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000080 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000100 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000180 = *((struct_exceptionPreamble*)__osExceptionPreamble); + *(struct_exceptionPreamble*)0x80000000 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000080 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000100 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000180 = __osExceptionPreamble; osWritebackDCache(0x80000000, 400); osInvalICache(0x80000000, 400); diff --git a/src/libultra/os/resetglobalintmask.c b/src/libultra/os/resetglobalintmask.c index c2561d712..6289a1d4c 100644 --- a/src/libultra/os/resetglobalintmask.c +++ b/src/libultra/os/resetglobalintmask.c @@ -1,6 +1,6 @@ #include "global.h" -void __osResetGlobalIntMask(u32 mask) { +void __osResetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); __OSGlobalIntMask &= ~(mask & ~0x401); diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index 26e837fcf..d5c8407f4 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -1,8 +1,9 @@ #include "global.h" +#include "PR/osint.h" UNK_TYPE4 D_80097F10 = 0; -__OSEventState __osEventStateTab[16]; +__OSEventState __osEventStateTab[OS_NUM_EVENTS]; void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { register u32 saveMask; diff --git a/src/libultra/os/setglobalintmask.c b/src/libultra/os/setglobalintmask.c index 6b7895d6d..067343f6e 100644 --- a/src/libultra/os/setglobalintmask.c +++ b/src/libultra/os/setglobalintmask.c @@ -1,6 +1,6 @@ #include "global.h" -void __osSetGlobalIntMask(u32 mask) { +void __osSetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); __OSGlobalIntMask |= mask; diff --git a/src/libultra/os/sethwinterrupt.c b/src/libultra/os/sethwinterrupt.c index 6ba72be7a..4f536cade 100644 --- a/src/libultra/os/sethwinterrupt.c +++ b/src/libultra/os/sethwinterrupt.c @@ -1,6 +1,7 @@ #include "global.h" +#include "PR/osint.h" -void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg) { +void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg) { register s32 prevInt = __osDisableInt(); __osHwIntTable[idx].queue = queue; diff --git a/src/libultra/os/virtualtophysical.c b/src/libultra/os/virtualtophysical.c index 6bdb2ccb3..403ab5f4f 100644 --- a/src/libultra/os/virtualtophysical.c +++ b/src/libultra/os/virtualtophysical.c @@ -1,5 +1,5 @@ #include "PR/ultratypes.h" -#include "osint.h" +#include "PR/osint.h" #include "libc/stdint.h" #include "global.h" diff --git a/src/libultra/rmon/sprintf.c b/src/libultra/rmon/sprintf.c index 446a74702..9f3610fe0 100644 --- a/src/libultra/rmon/sprintf.c +++ b/src/libultra/rmon/sprintf.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" void* proutSprintf(void* dst, const char* fmt, size_t size) { return (void*)((uintptr_t)memcpy(dst, fmt, size) + size); @@ -12,7 +13,7 @@ int vsprintf(char* dst, char* fmt, va_list args) { return ans; } -int sprintf(char* dst, char* fmt, ...) { +int sprintf(char* dst, const char* fmt, ...) { int ans; va_list args; va_start(args, fmt); diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index 66c058396..e30bf4b81 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define BUFF_LEN 0x20 diff --git a/src/libultra/rmon/xlitob.c b/src/libultra/rmon/xlitob.c index 6c53ee094..70b9c32a4 100644 --- a/src/libultra/rmon/xlitob.c +++ b/src/libultra/rmon/xlitob.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define BUFF_LEN 0x18 diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index 6caac436f..3fc6b5e2a 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define ATOI(i, a) \ for (i = 0; *a >= '0' && *a <= '9'; a++) \ @@ -28,6 +29,8 @@ char spaces[] = " "; char zeroes[] = "00000000000000000000000000000000"; +void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac); + int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) { _Pft x; x.nchar = 0; diff --git a/src/libultra/voice/voicecheckresult.c b/src/libultra/voice/voicecheckresult.c index 7d1e5c0a5..252472192 100644 --- a/src/libultra/voice/voicecheckresult.c +++ b/src/libultra/voice/voicecheckresult.c @@ -1,9 +1,10 @@ /** * File: voicecheckresult.c */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" + +#include "PR/controller_voice.h" +#include "PR/controller.h" +#include "PR/os_voice.h" s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status) { s32 errorCode = __osVoiceGetStatus(hd->mq, hd->channel, status); diff --git a/src/libultra/voice/voicecheckword.c b/src/libultra/voice/voicecheckword.c index 1a2695b51..b4c05d90c 100644 --- a/src/libultra/voice/voicecheckword.c +++ b/src/libultra/voice/voicecheckword.c @@ -3,7 +3,7 @@ * * Checks whether or not a word can be registered in the dictionary */ -#include "io/controller.h" +#include "PR/controller.h" // TODO: SJIS support s32 osVoiceCheckWord(u8* word) { diff --git a/src/libultra/voice/voicecleardictionary.c b/src/libultra/voice/voicecleardictionary.c index e474bc2fd..eceb9bb71 100644 --- a/src/libultra/voice/voicecleardictionary.c +++ b/src/libultra/voice/voicecleardictionary.c @@ -10,9 +10,9 @@ * is initialized with the osVoiceClearDictionary function */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" +#include "PR/os_voice.h" s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords) { s32 errorCode; diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c index 1477e570b..0f39ee308 100644 --- a/src/libultra/voice/voicecontread2.c +++ b/src/libultra/voice/voicecontread2.c @@ -2,8 +2,8 @@ * File: voicecontread2.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c index 83d0fdf2e..9f23bf979 100644 --- a/src/libultra/voice/voicecontread36.c +++ b/src/libultra/voice/voicecontread36.c @@ -2,8 +2,8 @@ * File: voicecontread36.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontrolgain.c b/src/libultra/voice/voicecontrolgain.c index 61cccde70..bac3871d7 100644 --- a/src/libultra/voice/voicecontrolgain.c +++ b/src/libultra/voice/voicecontrolgain.c @@ -4,9 +4,9 @@ * Adjusts the input gain of the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "macros.h" u8 sDigitalTable[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 }; diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c index cc3af385e..dd9d7e07f 100644 --- a/src/libultra/voice/voicecontwrite20.c +++ b/src/libultra/voice/voicecontwrite20.c @@ -2,8 +2,8 @@ * File: voicecontwrite20.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c index 06239219a..103d3e798 100644 --- a/src/libultra/voice/voicecontwrite4.c +++ b/src/libultra/voice/voicecontwrite4.c @@ -2,8 +2,8 @@ * File: voicecontwrite4.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicegetreaddata.c b/src/libultra/voice/voicegetreaddata.c index d271f71c7..5e5a2b62b 100644 --- a/src/libultra/voice/voicegetreaddata.c +++ b/src/libultra/voice/voicegetreaddata.c @@ -4,9 +4,9 @@ * Gets voice recognition result from the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result) { static u8 sHandleStatus; diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c index 444ae6233..b19348908 100644 --- a/src/libultra/voice/voicegetstatus.c +++ b/src/libultra/voice/voicegetstatus.c @@ -2,8 +2,8 @@ * File: voicegetstatus.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status) { diff --git a/src/libultra/voice/voiceinit.c b/src/libultra/voice/voiceinit.c index 2a777edaf..f8c965f70 100644 --- a/src/libultra/voice/voiceinit.c +++ b/src/libultra/voice/voiceinit.c @@ -4,9 +4,9 @@ * Initializes Voice Recognition System control structure and hardware */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" @@ -14,7 +14,7 @@ static u8 sCmds[] = { 0x1E, 0x6E, 0x08, 0x56, 0x03, }; -s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel) { +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, int channel) { s32 errorCode; s32 i; u8 status = 0; diff --git a/src/libultra/voice/voicemaskdictionary.c b/src/libultra/voice/voicemaskdictionary.c index a8f090329..225c45dee 100644 --- a/src/libultra/voice/voicemaskdictionary.c +++ b/src/libultra/voice/voicemaskdictionary.c @@ -4,13 +4,13 @@ * Mask words registered in the voice recognition system */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" -s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size) { +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, int size) { s32 errorCode; s32 i; s32 j; diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c index 2a6ebfbc7..55403dae6 100644 --- a/src/libultra/voice/voicesetadconverter.c +++ b/src/libultra/voice/voicesetadconverter.c @@ -2,8 +2,8 @@ * File: voicesetadconverter.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicesetword.c b/src/libultra/voice/voicesetword.c index 2dfe58b94..82b0f88aa 100644 --- a/src/libultra/voice/voicesetword.c +++ b/src/libultra/voice/voicesetword.c @@ -4,9 +4,9 @@ * Registers words to the Voice Recognition System dictionary */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" diff --git a/src/libultra/voice/voicestartreaddata.c b/src/libultra/voice/voicestartreaddata.c index 398d10a15..0ff35fd2b 100644 --- a/src/libultra/voice/voicestartreaddata.c +++ b/src/libultra/voice/voicestartreaddata.c @@ -4,9 +4,9 @@ * Start voice recognition by the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceStartReadData(OSVoiceHandle* hd) { s32 errorCode; diff --git a/src/libultra/voice/voicestopread.c b/src/libultra/voice/voicestopread.c index 570613428..905efb19f 100644 --- a/src/libultra/voice/voicestopread.c +++ b/src/libultra/voice/voicestopread.c @@ -4,9 +4,9 @@ * Forcibly stops voice recognition processing by the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceStopReadData(OSVoiceHandle* hd) { s32 errorCode; 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 47f0dec92..5d0ac3bc5 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 @@ -4,7 +4,6 @@ * Description: Great Bay Temple - Seesaw and Waterwheel w/ Platforms */ -#include "prevent_bss_reordering.h" #include "z_bg_dblue_balance.h" #include "objects/object_dblue_object/object_dblue_object.h" 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 751aa5523..bf3aa576d 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -4,7 +4,6 @@ * Description: Twinmold */ -#include "prevent_bss_reordering.h" #include "z_boss_02.h" #include "z64rumble.h" #include "z64shrink_window.h" 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 8d1e306bb..8b98808e1 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -4,6 +4,7 @@ * Description: Beaver Bros */ +#include "prevent_bss_reordering.h" #include "z_en_az.h" #include "overlays/actors/ovl_En_Twig/z_en_twig.h" #include "overlays/actors/ovl_En_Fish/z_en_fish.h" diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 7aae1c742..7fbd43a54 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -7,6 +7,7 @@ #include "z_en_horse_game_check.h" #include "z64horse.h" #include "objects/object_horse_game_check/object_horse_game_check.h" +#include "debug.h" #define FLAGS (ACTOR_FLAG_10) @@ -128,13 +129,13 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { this->horse1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_4)); if (this->horse1 == NULL) { - __assert("../z_en_horse_game_check.c", 1517); + _dbg_hungup("../z_en_horse_game_check.c", 1517); } this->horse2 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1376.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_5)); if (this->horse2 == NULL) { - __assert("../z_en_horse_game_check.c", 1526); + _dbg_hungup("../z_en_horse_game_check.c", 1526); } this->unk_17C = -1; 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 39e092e2f..8bbbaca14 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -4,7 +4,6 @@ * Description: Grass / Bush */ -#include "prevent_bss_reordering.h" #include "z_en_kusa.h" #include "objects/object_kusa/object_kusa.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 435406885..a1f238240 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,7 +4,6 @@ * Description: Player */ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" #include "z64quake.h" diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index 1104a28a3..c552e7c50 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -5,6 +5,7 @@ */ #include "z_eff_ss_kakera.h" +#include "debug.h" #define rReg0 regs[0] #define rGravity regs[1] @@ -62,7 +63,7 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa break; } } else { - __assert("../z_eff_kakera.c", 193); + _dbg_hungup("../z_eff_kakera.c", 193); } this->draw = EffectSsKakera_Draw; this->update = EffectSsKakera_Update; diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 562f4f42b..a7f421191 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -56,7 +56,7 @@ 0x80085320 : "stackcheck", 0x80085570 : "gfxprint", 0x80086110 : "mtxuty-cvt", - 0x80086280 : "assert", + 0x80086280 : "debug", 0x800862E0 : "system_heap", 0x80086620 : "padsetup", 0x80086760 : "boot_80086760", @@ -296,7 +296,7 @@ 0x800982B0 : "fault", 0x80098C50 : "fault_drawer", 0x80099090 : "gfxprint", - 0x800990B0 : "assert", + 0x800990B0 : "debug", 0x800990C0 : "boot_80086760", 0x80099110 : "__osMalloc", 0x800991A0 : "setintmask", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1b33b3a5f..13519cb06 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -155,8 +155,8 @@ 0x800860D8:("GfxPrint_Printf",), 0x80086110:("MtxConv_F2L",), 0x80086258:("MtxConv_L2F",), - 0x80086280:("__assert",), - 0x800862B4:("func_800862B4",), + 0x80086280:("_dbg_hungup",), + 0x800862B4:("Reset",), 0x800862E0:("SystemHeap_Malloc",), 0x80086310:("SystemHeap_Free",), 0x8008633C:("SystemHeap_RunBlockFunc",), @@ -299,7 +299,7 @@ 0x8008A5D0:("__osSetSR",), 0x8008A5E0:("osWritebackDCache",), 0x8008A660:("__createSpeedParam",), - 0x8008A6FC:("osInitialize",), + 0x8008A6FC:("__osInitialize_common",), 0x8008A9A8:("__osInitialize_autodetect",), 0x8008AA10:("osViGetNextFramebuffer",), 0x8008AA50:("guPerspectiveF",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 1c05ba562..f2aec1cb4 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -152,8 +152,8 @@ asm/non_matchings/boot/gfxprint/GfxPrint_VPrintf.s,GfxPrint_VPrintf,0x800860B8,0 asm/non_matchings/boot/gfxprint/GfxPrint_Printf.s,GfxPrint_Printf,0x800860D8,0xE asm/non_matchings/boot/mtxuty-cvt/MtxConv_F2L.s,MtxConv_F2L,0x80086110,0x52 asm/non_matchings/boot/mtxuty-cvt/MtxConv_L2F.s,MtxConv_L2F,0x80086258,0xA -asm/non_matchings/boot/assert/__assert.s,__assert,0x80086280,0xD -asm/non_matchings/boot/assert/func_800862B4.s,func_800862B4,0x800862B4,0xB +asm/non_matchings/boot/assert/_dbg_hungup.s,_dbg_hungup,0x80086280,0xD +asm/non_matchings/boot/assert/Reset.s,Reset,0x800862B4,0xB asm/non_matchings/boot/boot_800862E0/SystemHeap_Malloc.s,SystemHeap_Malloc,0x800862E0,0xC asm/non_matchings/boot/boot_800862E0/SystemArena_Free.s,SystemArena_Free,0x80086310,0xB asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc.s,SystemHeap_RunBlockFunc,0x8008633C,0x1C @@ -296,7 +296,7 @@ asm/non_matchings/boot/getsr/__osGetSR.s,__osGetSR,0x8008A5C0,0x4 asm/non_matchings/boot/setsr/__osSetSR.s,__osSetSR,0x8008A5D0,0x4 asm/non_matchings/boot/writebackdcache/osWritebackDCache.s,osWritebackDCache,0x8008A5E0,0x20 asm/non_matchings/boot/initialize/__createSpeedParam.s,__createSpeedParam,0x8008A660,0x27 -asm/non_matchings/boot/initialize/osInitialize.s,osInitialize,0x8008A6FC,0xAB +asm/non_matchings/boot/initialize/__osInitialize_common.s,__osInitialize_common,0x8008A6FC,0xAB asm/non_matchings/boot/initialize/__osInitialize_autodetect.s,__osInitialize_autodetect,0x8008A9A8,0x2 asm/non_matchings/boot/vigetnextframebuf/osViGetNextFramebuffer.s,osViGetNextFramebuffer,0x8008AA10,0x10 asm/non_matchings/boot/perspective/guPerspectiveF.s,guPerspectiveF,0x8008AA50,0x8C From c8304925da305f5d8fa43fc4ca93f95afd36bcab Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 8 Sep 2023 03:17:54 -0700 Subject: [PATCH 076/121] Subrepo Updates (#1368) * git subrepo pull --force tools/asm-processor subrepo: subdir: "tools/asm-processor" merged: "fed1e3ddb" upstream: origin: "git@github.com:simonlindholm/asm-processor.git" branch: "main" commit: "fed1e3ddb" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull tools/asm-differ subrepo: subdir: "tools/asm-differ" merged: "4ed847317" upstream: origin: "https://github.com/simonlindholm/asm-differ" branch: "main" commit: "4ed847317" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "7f398831f" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "7f398831f" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull (merge) --force tools/fado subrepo: subdir: "tools/fado" merged: "8ce048376" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "8ce048376" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" --- tools/ZAPD/.gitrepo | 4 +- tools/ZAPD/Makefile | 17 + tools/ZAPD/ZAPD/GameConfig.cpp | 1 + tools/ZAPD/ZAPDUtils/Utils/Directory.h | 9 +- tools/ZAPD/ZAPDUtils/Utils/File.h | 27 +- tools/ZAPD/ZAPDUtils/Utils/Path.h | 5 +- .../.github/workflows/check-poetry-lock.yml | 20 ++ .../.github/workflows/unit-tests.yml | 15 + tools/asm-differ/.gitignore | 1 - tools/asm-differ/.gitrepo | 6 +- tools/asm-differ/README.md | 2 +- tools/asm-differ/diff.py | 280 ++++++++++++--- tools/asm-differ/mypy.ini | 2 +- tools/asm-differ/poetry.lock | 321 ++++++++++++++++++ tools/asm-differ/test.py | 189 +++++++++++ tools/asm-processor/.gitrepo | 6 +- tools/asm-processor/asm_processor.py | 57 +++- tools/asm-processor/mypy.ini | 3 + tools/asm-processor/prelude.inc | 10 + tools/asm-processor/tests/static-global.c | 2 + .../asm-processor/tests/static-global.objdump | 2 + tools/fado/.gitrepo | 6 +- tools/fado/Makefile | 2 +- tools/fado/include/mips_elf.h | 6 +- 24 files changed, 905 insertions(+), 88 deletions(-) create mode 100644 tools/asm-differ/.github/workflows/check-poetry-lock.yml create mode 100644 tools/asm-differ/.github/workflows/unit-tests.yml create mode 100644 tools/asm-differ/poetry.lock create mode 100644 tools/asm-differ/test.py create mode 100644 tools/asm-processor/mypy.ini diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo index d021bc57e..c8d51d0cf 100644 --- a/tools/ZAPD/.gitrepo +++ b/tools/ZAPD/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/zeldaret/ZAPD.git branch = master - commit = 505024b33eb1fcd00e3e9bb71f1355fa2ae6e9cf - parent = 387d3597142ebdbebe1fbb99858ea831aa2752b4 + commit = 7f398831fbcf67210b37882b5017093a1d187d5c + parent = 71e36ae371f89b5f86a6d59c7ebc24b8a55ee43e method = merge cmdver = 0.4.6 diff --git a/tools/ZAPD/Makefile b/tools/ZAPD/Makefile index c97b7ce23..36331937a 100644 --- a/tools/ZAPD/Makefile +++ b/tools/ZAPD/Makefile @@ -8,6 +8,18 @@ COPYCHECK_ARGS ?= LLD ?= 0 WERROR ?= 0 +# On MacOS 10.14, use boost::filesystem, because +# the system doesn't supply std::filesystem. +ifneq ($(OS),Windows_NT) + ifeq ($(shell uname -s),Darwin) + MACOS_VERSION := $(shell sw_vers -productVersion | cut -d . -f 1,2) + ifeq ($(MACOS_VERSION),10.14) + USE_BOOST_FS ?= 1 + endif + endif +endif +USE_BOOST_FS ?= 0 + # Use clang++ if available, else use g++ ifeq ($(shell command -v clang++ >/dev/null 2>&1; echo $$?),0) CXX := clang++ @@ -46,6 +58,11 @@ endif LDFLAGS := -lm -ldl -lpng +ifneq ($(USE_BOOST_FS),0) + CXXFLAGS += -DUSE_BOOST_FS + LDFLAGS += -lboost_filesystem +endif + # Use LLD if available. Set LLD=0 to not use it ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0) LLD := 1 diff --git a/tools/ZAPD/ZAPD/GameConfig.cpp b/tools/ZAPD/ZAPD/GameConfig.cpp index b27e81600..638480875 100644 --- a/tools/ZAPD/ZAPD/GameConfig.cpp +++ b/tools/ZAPD/ZAPD/GameConfig.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "Utils/Directory.h" #include "Utils/File.h" diff --git a/tools/ZAPD/ZAPDUtils/Utils/Directory.h b/tools/ZAPD/ZAPDUtils/Utils/Directory.h index eaa6a26ab..2e782624e 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/Directory.h +++ b/tools/ZAPD/ZAPDUtils/Utils/Directory.h @@ -4,7 +4,10 @@ #include #include -#if __has_include() +#ifdef USE_BOOST_FS +#include +namespace fs = boost::filesystem; +#elif __has_include() #include namespace fs = std::filesystem; #else @@ -17,7 +20,11 @@ namespace fs = std::experimental::filesystem; class Directory { public: +#ifdef USE_BOOST_FS + static std::string GetCurrentDirectory() { return fs::current_path().string(); } +#else static std::string GetCurrentDirectory() { return fs::current_path().u8string(); } +#endif static bool Exists(const fs::path& path) { return fs::exists(path); } diff --git a/tools/ZAPD/ZAPDUtils/Utils/File.h b/tools/ZAPD/ZAPDUtils/Utils/File.h index bf2bb694e..707b1600f 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/File.h +++ b/tools/ZAPD/ZAPDUtils/Utils/File.h @@ -1,6 +1,11 @@ #pragma once +#ifdef USE_BOOST_FS +#include +#else #include +#endif + #include #include #include "Directory.h" @@ -8,16 +13,24 @@ class File { +#ifdef USE_BOOST_FS + typedef fs::ifstream ifstream; + typedef fs::ofstream ofstream; +#else + typedef std::ifstream ifstream; + typedef std::ofstream ofstream; +#endif + public: static bool Exists(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); return file.good(); } static std::vector ReadAllBytes(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); int32_t fileSize = (int32_t)file.tellg(); file.seekg(0); char* data = new char[fileSize]; @@ -31,7 +44,7 @@ public: static std::string ReadAllText(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); if (!file.is_open()) return ""; int32_t fileSize = (int32_t)file.tellg(); @@ -56,28 +69,28 @@ public: static void WriteAllBytes(const fs::path& filePath, const std::vector& data) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); file.close(); }; static void WriteAllBytes(const std::string& filePath, const std::vector& data) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); file.close(); }; static void WriteAllBytes(const std::string& filePath, const char* data, int dataSize) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data, dataSize); file.close(); }; static void WriteAllText(const fs::path& filePath, const std::string& text) { - std::ofstream file(filePath, std::ios::out); + ofstream file(filePath, std::ios::out); file.write(text.c_str(), text.size()); file.close(); } diff --git a/tools/ZAPD/ZAPDUtils/Utils/Path.h b/tools/ZAPD/ZAPDUtils/Utils/Path.h index 0f7ef2743..90f55380b 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/Path.h +++ b/tools/ZAPD/ZAPDUtils/Utils/Path.h @@ -4,7 +4,10 @@ #include #include "Utils/StringHelper.h" -#if __has_include() +#ifdef USE_BOOST_FS +#include +namespace fs = boost::filesystem; +#elif __has_include() #include namespace fs = std::filesystem; #else diff --git a/tools/asm-differ/.github/workflows/check-poetry-lock.yml b/tools/asm-differ/.github/workflows/check-poetry-lock.yml new file mode 100644 index 000000000..6104770e9 --- /dev/null +++ b/tools/asm-differ/.github/workflows/check-poetry-lock.yml @@ -0,0 +1,20 @@ +name: flake check + +on: + pull_request: + push: + +permissions: read-all + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # Install `nix` which is just a dead-simple way to get a stable `poetry` + # in scope. + - uses: cachix/install-nix-action@v20 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + # Check that poetry.lock is in sync with pyproject.toml + - run: nix run github:NixOS/nixpkgs/22.11#poetry -- lock --check diff --git a/tools/asm-differ/.github/workflows/unit-tests.yml b/tools/asm-differ/.github/workflows/unit-tests.yml new file mode 100644 index 000000000..a77498adf --- /dev/null +++ b/tools/asm-differ/.github/workflows/unit-tests.yml @@ -0,0 +1,15 @@ +name: unit tests + +on: + pull_request: + push: + +permissions: read-all + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: python3 -m pip install --user colorama watchdog levenshtein cxxfilt + - run: python3 test.py diff --git a/tools/asm-differ/.gitignore b/tools/asm-differ/.gitignore index a2b216fea..90df93b18 100644 --- a/tools/asm-differ/.gitignore +++ b/tools/asm-differ/.gitignore @@ -1,4 +1,3 @@ .mypy_cache/ __pycache__/ .vscode/ -poetry.lock diff --git a/tools/asm-differ/.gitrepo b/tools/asm-differ/.gitrepo index a23a9c1e4..21e3d185a 100644 --- a/tools/asm-differ/.gitrepo +++ b/tools/asm-differ/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/simonlindholm/asm-differ branch = main - commit = ae408664a89ea4dc70d005d0afc69ac26c938cbb - parent = c833969ea79ba31c3103e25e94ef88098c0287de + commit = 4ed8473173c5a4d6d62337ee4759fdbd93fcf20b + parent = 862e62040f70cb24d66e893ff4299b79fda9407d method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/asm-differ/README.md b/tools/asm-differ/README.md index 1d0932c9b..4e62b15b4 100644 --- a/tools/asm-differ/README.md +++ b/tools/asm-differ/README.md @@ -1,6 +1,6 @@ # asm-differ -Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, and ARM32; should be easy to hack to support other instruction sets. +Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, ARM32, SH2, SH4, and m68k; should be easy to hack to support other instruction sets. ![](screenshot.png) diff --git a/tools/asm-differ/diff.py b/tools/asm-differ/diff.py index 230dbaed7..d20fe4ed7 100755 --- a/tools/asm-differ/diff.py +++ b/tools/asm-differ/diff.py @@ -54,7 +54,7 @@ if __name__ == "__main__": argcomplete = None parser = argparse.ArgumentParser( - description="Diff MIPS, PPC, AArch64, or ARM32 assembly." + description="Diff MIPS, PPC, AArch64, ARM32, SH2, SH4, or m68k assembly." ) start_argument = parser.add_argument( @@ -120,11 +120,11 @@ if __name__ == "__main__": ) parser.add_argument( "-f", - "--objfile", - dest="objfile", + "--file", + dest="file", type=str, - help="""File path for an object file being diffed. When used - the map file isn't searched for the function given. Useful for dynamically + help="""File path for a file being diffed. When used the map + file isn't searched for the function given. Useful for dynamically linked libraries.""", ) parser.add_argument( @@ -212,9 +212,9 @@ if __name__ == "__main__": "-s", "--stop-at-ret", dest="stop_at_ret", - action="store_true", + action="count", help="""Stop disassembling at the first return instruction. - Some functions have multiple return points, so use with care!""", + You can also pass -ss to stop at the second return instruction, and so on.""", ) parser.add_argument( "-i", @@ -264,6 +264,14 @@ if __name__ == "__main__": help="""Automatically update when source/object files change. Recommended in combination with -m.""", ) + parser.add_argument( + "-y", + "--yes", + dest="agree", + action="store_true", + help="""Automatically agree to any yes/no questions asked. + Useful if you really want to use the -w option without -m.""" + ) parser.add_argument( "-0", "--diff_mode=single_base", @@ -407,7 +415,7 @@ class ProjectSettings: build_command: List[str] map_format: str build_dir: str - ms_map_address_offset: int + map_address_offset: int baseimg: Optional[str] myimg: Optional[str] mapfile: Optional[str] @@ -431,7 +439,7 @@ class Config: # Build/objdump options diff_obj: bool - objfile: Optional[str] + file: Optional[str] make: bool source_old_binutils: bool diff_section: str @@ -449,7 +457,7 @@ class Config: show_branches: bool show_line_numbers: bool show_source: bool - stop_at_ret: bool + stop_at_ret: Optional[int] ignore_large_imms: bool ignore_addr_diffs: bool algorithm: str @@ -481,7 +489,9 @@ def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings: objdump_flags=settings.get("objdump_flags", []), expected_dir=settings.get("expected_dir", "expected/"), map_format=settings.get("map_format", "gnu"), - ms_map_address_offset=settings.get("ms_map_address_offset", 0), + map_address_offset=settings.get( + "map_address_offset", settings.get("ms_map_address_offset", 0) + ), build_dir=settings.get("build_dir", settings.get("mw_build_dir", "build/")), show_line_numbers_default=settings.get("show_line_numbers_default", True), disassemble_all=settings.get("disassemble_all", False), @@ -522,7 +532,7 @@ def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config: arch=arch, # Build/objdump options diff_obj=args.diff_obj, - objfile=args.objfile, + file=args.file, make=args.make, source_old_binutils=args.source_old_binutils, diff_section=args.diff_section, @@ -557,6 +567,9 @@ def get_objdump_executable(objdump_executable: Optional[str]) -> str: "mips-linux-gnu-objdump", "mips64-elf-objdump", "mips-elf-objdump", + "sh-elf-objdump", + "sh4-linux-gnu-objdump", + "m68k-elf-objdump", ] for objdump_cand in objdump_candidates: try: @@ -590,7 +603,7 @@ BUFFER_CMD: List[str] = ["tail", "-c", str(10**9)] # -i ignores case when searching # -c something about how the screen gets redrawn; I don't remember the purpose # -#6 makes left/right arrow keys scroll by 6 characters -LESS_CMD: List[str] = ["less", "-SRic", "-#6"] +LESS_CMD: List[str] = ["less", "-SRic", "-+F", "-+X", "-#6"] DEBOUNCE_DELAY: float = 0.1 @@ -766,7 +779,6 @@ class AnsiFormatter(Formatter): BasicFormat.STACK: Fore.YELLOW, BasicFormat.REGISTER: Fore.YELLOW, BasicFormat.REGISTER_CATEGORY: Fore.LIGHTYELLOW_EX, - BasicFormat.DELAY_SLOT: Fore.LIGHTBLACK_EX, BasicFormat.DIFF_CHANGE: Fore.LIGHTBLUE_EX, BasicFormat.DIFF_ADD: Fore.GREEN, BasicFormat.DIFF_REMOVE: Fore.RED, @@ -1271,11 +1283,7 @@ def search_map_file( if len(find) == 1: names_find = re.search(r"(\S+) ... (\S+)", find[0]) assert names_find is not None - fileofs = ( - int(names_find.group(1), 16) - - load_address - + project.ms_map_address_offset - ) + fileofs = int(names_find.group(1), 16) - load_address if for_binary: return None, fileofs @@ -1462,7 +1470,7 @@ def dump_objfile( if start.startswith("0"): fail("numerical start address not supported with -o; pass a function name") - objfile = config.objfile + objfile = config.file if not objfile: objfile, _ = search_map_file(start, project, config, for_binary=False) @@ -1495,15 +1503,21 @@ def dump_objfile( def dump_binary( start: str, end: Optional[str], config: Config, project: ProjectSettings ) -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: - if not project.baseimg or not project.myimg: + binfile = config.file or project.myimg + if not project.baseimg or not binfile: fail("Missing myimg/baseimg in config.") if config.make: - run_make(project.myimg, project) + run_make(binfile, project) + if not os.path.isfile(binfile): + fail(f"Not able to find binary file: {binfile}") start_addr = maybe_eval_int(start) - if start_addr is None: + if start_addr is None and config.file is None: _, start_addr = search_map_file(start, project, config, for_binary=True) if start_addr is None: fail("Not able to find function in map file.") + start_addr += project.map_address_offset + elif start_addr is None: + fail("Start address must be an integer expression when using binary -f") if end is not None: end_addr = eval_int(end, "End address must be an integer expression.") else: @@ -1515,9 +1529,9 @@ def dump_binary( ] flags2 = [f"--start-address={start_addr}", f"--stop-address={end_addr}"] return ( - project.myimg, + binfile, (objdump_flags + flags1, project.baseimg, None), - (objdump_flags + flags2, project.myimg, None), + (objdump_flags + flags2, binfile, None), ) @@ -1569,7 +1583,8 @@ class AsmProcessorMIPS(AsmProcessor): # integer. return prev, None before, imm, after = parse_relocated_line(prev) - repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch) + addend = reloc_addend_from_imm(imm, before, self.config.arch) + repl = row.split()[-1] + addend if "R_MIPS_LO16" in row: repl = f"%lo({repl})" elif "R_MIPS_HI16" in row: @@ -1590,6 +1605,8 @@ class AsmProcessorMIPS(AsmProcessor): repl = f"%got({repl})" elif "R_MIPS_CALL16" in row: repl = f"%call16({repl})" + elif "R_MIPS_LITERAL" in row: + repl = repl[:-len(addend)] else: assert False, f"unknown relocation type '{row}' for line '{prev}'" return before + repl + after, repl @@ -1812,6 +1829,66 @@ class AsmProcessorI686(AsmProcessor): return mnemonic == "ret" +class AsmProcessorSH2(AsmProcessor): + def __init__(self, config: Config) -> None: + super().__init__(config) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + return prev, None + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "rts" + + +class AsmProcessorM68k(AsmProcessor): + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str] + ) -> Tuple[str, str]: + # replace objdump's syntax of pointer accesses with the equivilant in AT&T syntax for readability + return mnemonic, re.sub( + r"%(sp|a[0-7]|fp|pc)@(?:(?:\((-?(?:0x[0-9a-f]+|[0-9]+)) *(,%d[0-7]:[wl])?\))|(\+)|(-))?", + r"\5\2(%\1\3)\4", + args, + ) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + + addr_imm = re.search(r"(? bool: + return mnemonic == "rts" or mnemonic == "rte" or mnemonic == "rtr" + + @dataclass class ArchSettings: name: str @@ -2006,6 +2083,48 @@ I686_BRANCH_INSTRUCTIONS = { "jz", } +SH2_BRANCH_INSTRUCTIONS = { + "bf", + "bf.s", + "bt", + "bt.s", + "bra", + "bsr", +} + +M68K_CONDS = { + "ra", + "cc", + "cs", + "eq", + "ge", + "gt", + "hi", + "le", + "ls", + "lt", + "mi", + "ne", + "pl", + "vc", + "vs", +} + +M68K_BRANCH_INSTRUCTIONS = { + f"{prefix}{cond}{suffix}" + for prefix in {"b", "db"} + for cond in M68K_CONDS + for suffix in {"s", "w"} +}.union( + { + "dbt", + "dbf", + "bsrw", + "bsrs", + } +) + + MIPS_SETTINGS = ArchSettings( name="mips", re_int=re.compile(r"[0-9]+"), @@ -2127,6 +2246,72 @@ I686_SETTINGS = ArchSettings( proc=AsmProcessorI686, ) +SH2_SETTINGS = ArchSettings( + name="sh2", + # match -128-127 preceded by a '#' with a ',' after (8 bit immediates) + re_int=re.compile(r"(?<=#)(-?(?:1[01][0-9]|12[0-8]|[1-9][0-9]?|0))(?=,)"), + # match , match ! and after + re_comment=re.compile(r"<.*?>|!.*"), + # - r0-r15 general purpose registers, r15 is stack pointer during exceptions + # - sr, gbr, vbr - control registers + # - mach, macl, pr, pc - system registers + re_reg=re.compile(r"r1[0-5]|r[0-9]"), + # sh2 has pc-relative and gbr-relative but not stack-pointer-relative + re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"), + # max immediate size is 8-bit + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile(r"\b0[xX][0-9a-fA-F]+\b"), + # https://github.com/bminor/binutils-gdb/blob/master/bfd/elf32-sh-relocs.h#L21 + re_reloc=re.compile(r"R_SH_"), + arch_flags=["-m", "sh2"], + branch_instructions=SH2_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=SH2_BRANCH_INSTRUCTIONS.union( + {"bf", "bf.s", "bt", "bt.s", "bra", "bsr"} + ), + delay_slot_instructions=SH2_BRANCH_INSTRUCTIONS.union( + {"bf.s", "bt.s", "bra", "braf", "bsr", "bsrf", "jmp", "jsr", "rts"} + ), + proc=AsmProcessorSH2, +) + +SH4_SETTINGS = replace( + SH2_SETTINGS, + name="sh4", + # - fr0-fr15, dr0-dr14, xd0-xd14, fv0-fv12 FP registers + # dr/xd registers can only be even-numbered, and fv registers can only be a multiple of 4 + re_reg=re.compile( + r"r1[0-5]|r[0-9]|fr1[0-5]|fr[0-9]|dr[02468]|dr1[024]|xd[02468]|xd1[024]|fv[048]|fv12" + ), + arch_flags=["-m", "sh4"], +) + +SH4EL_SETTINGS = replace(SH4_SETTINGS, name="sh4el", big_endian=False) + +M68K_SETTINGS = ArchSettings( + name="m68k", + re_int=re.compile(r"[0-9]+"), + # '|' is used by assemblers, but is not used by objdump + re_comment=re.compile(r"<.*>"), + # Includes: + # - d0-d7 data registers + # - a0-a6 address registers + # - fp0-fp7 floating-point registers + # - usp (user sp) + # - fp, sr, ccr + # - fpcr, fpsr, fpiar + re_reg=re.compile(r"%\b(d[0-7]|a[0-6]|usp|fp([0-7]|cr|sr|iar)?|sr|ccr)(:[wl])?\b"), + # This matches all stack accesses that do not use an index register + re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%sp|%a7)\))"), + re_imm=re.compile(r"#?-?\b(0x[0-9a-f]+|[0-9]+)(?!\()"), + re_large_imm=re.compile(r"#?-?([1-9][0-9]{2,}|0x[0-9a-f]{3,})"), + re_reloc=re.compile(r"R_68K_"), + arch_flags=["-m", "m68k"], + branch_instructions=M68K_BRANCH_INSTRUCTIONS, + # Pretty much every instruction can take an address immediate + instructions_with_address_immediates=M68K_BRANCH_INSTRUCTIONS.union("jmp", "jsr"), + proc=AsmProcessorM68k, +) + ARCH_SETTINGS = [ MIPS_SETTINGS, MIPSEL_SETTINGS, @@ -2136,11 +2321,21 @@ ARCH_SETTINGS = [ AARCH64_SETTINGS, PPC_SETTINGS, I686_SETTINGS, + SH2_SETTINGS, + SH4_SETTINGS, + SH4EL_SETTINGS, + M68K_SETTINGS, ] def hexify_int(row: str, pat: Match[str], arch: ArchSettings) -> str: full = pat.group(0) + + # sh2/sh4 only has 8-bit immediates, just convert them uniformly without + # any -hex stuff + if arch.name == "sh2" or arch.name == "sh4" or arch.name == "sh4el": + return hex(int(full) & 0xFF) + if len(full) <= 1: # leave one-digit ints alone return full @@ -2220,16 +2415,15 @@ class Line: def process(dump: str, config: Config) -> List[Line]: arch = config.arch processor = arch.proc(config) - skip_next = False source_lines = [] source_filename = None source_line_num = None + rets_remaining = config.stop_at_ret i = 0 num_instr = 0 data_refs: Dict[int, Dict[str, List[int]]] = defaultdict(lambda: defaultdict(list)) output: List[Line] = [] - stop_after_delay_slot = False lines = dump.split("\n") while i < len(lines): row = lines[i] @@ -2364,17 +2558,8 @@ def process(dump: str, config: Config) -> List[Line]: if not config.score_stack_differences: scorable_line = re.sub(arch.re_sprel, "addr(sp)", scorable_line) - if skip_next: - skip_next = False - row = "" - mnemonic = "" - scorable_line = "" - if mnemonic in arch.branch_likely_instructions: - skip_next = True - row = re.sub(arch.re_reg, "", row) row = re.sub(arch.re_sprel, "addr(sp)", row) - row_with_imm = row if mnemonic in arch.instructions_with_address_immediates: row = row.strip() row, _ = split_off_address(row) @@ -2414,8 +2599,10 @@ def process(dump: str, config: Config) -> List[Line]: num_instr += 1 source_lines = [] - if config.stop_at_ret and processor.is_end_of_function(mnemonic, args): - break + if rets_remaining and processor.is_end_of_function(mnemonic, args): + rets_remaining -= 1 + if rets_remaining == 0: + break processor.post_process(output) return output @@ -2509,7 +2696,7 @@ def diff_sequences( try: rem1 = remap(seq1) rem2 = remap(seq2) - except ValueError as e: + except ValueError: if len(seq1) + len(seq2) < 0x110000: raise # If there are too many unique elements, chr() doesn't work. @@ -2776,13 +2963,6 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: # the diff, and don't just happen to have the are the same address # by accident. pass - elif line1.diff_row == "": - # Don't draw attention to differing branch-likely delay slots: they - # typically mirror the branch destination - 1 so the real difference - # is elsewhere. Still, do mark them as different to avoid confusion. - # No need to consider branches because delay slots can't branch. - out1 = out1.reformat(BasicFormat.DELAY_SLOT) - out2 = out2.reformat(BasicFormat.DELAY_SLOT) else: mnemonic = line1.original.split()[0] branchless1, address1 = out1.plain(), "" @@ -3131,7 +3311,7 @@ def align_diffs(old_diff: Diff, new_diff: Diff, config: Config) -> TableData: def diff_line_to_table_line(line: Tuple[OutputLine, ...]) -> TableLine: cells = [ - (line[0].base or Text(), line[0].line1) + (line[0].base or Text(), line[0].line1), ] for ol in line[1:]: cells.append((ol.fmt2, ol.line2)) @@ -3433,9 +3613,9 @@ def main() -> None: elif not args.watch: display.run_sync() else: - if not args.make: + if not args.make and not args.agree: yn = input( - "Warning: watch-mode (-w) enabled without auto-make (-m). " + "Warning: watch-mode (-w) enabled without auto-make (-m) or agree-all (-y). " "You will have to run make manually. Ok? (Y/n) " ) if yn.lower() == "n": diff --git a/tools/asm-differ/mypy.ini b/tools/asm-differ/mypy.ini index 138b93935..0559d9b8b 100644 --- a/tools/asm-differ/mypy.ini +++ b/tools/asm-differ/mypy.ini @@ -11,7 +11,7 @@ warn_return_any = True warn_unused_ignores = True ignore_missing_imports = True python_version = 3.6 -files = diff.py +files = diff.py, test.py [mypy-diff_settings] ignore_errors = True diff --git a/tools/asm-differ/poetry.lock b/tools/asm-differ/poetry.lock new file mode 100644 index 000000000..2826d784b --- /dev/null +++ b/tools/asm-differ/poetry.lock @@ -0,0 +1,321 @@ +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. + +[[package]] +name = "ansiwrap" +version = "0.8.4" +description = "textwrap, but savvy to ANSI colors and styles" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ansiwrap-0.8.4-py2.py3-none-any.whl", hash = "sha256:7b053567c88e1ad9eed030d3ac41b722125e4c1271c8a99ade797faff1f49fb1"}, + {file = "ansiwrap-0.8.4.zip", hash = "sha256:ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7"}, +] + +[package.dependencies] +textwrap3 = ">=0.9.2" + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cxxfilt" +version = "0.3.0" +description = "Python interface to c++filt / abi::__cxa_demangle" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "cxxfilt-0.3.0-py2.py3-none-any.whl", hash = "sha256:774e85a8d0157775ed43276d89397d924b104135762d86b3a95f81f203094e07"}, + {file = "cxxfilt-0.3.0.tar.gz", hash = "sha256:7df6464ba5e8efbf0d8974c0b2c78b32546676f06059a83515dbdfa559b34214"}, +] + +[package.extras] +test = ["pytest (>=3.0.0)"] + +[[package]] +name = "levenshtein" +version = "0.20.9" +description = "Python extension for computing string edit distances and similarities." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:105c239ec786750cd5136991c58196b440cc39b6acf3ec8227f6562c9a94e4b9"}, + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f7728bea7fe6dc55ceecde0dcda4287e74fe3b6733ad42530f46aaa8d2f81d0"}, + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc7eca755c13c92814c8cce8175524cf764ce38f39228b602f59eac58cfdc51a"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8a552e79d053dc1324fb90d342447fd4e15736f4cbc5363b6fbd5577f53dce9"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5474b2681ee0b7944fb1e7fe281cd44e2dfe75b03ba4558dca49c96fa0861b62"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:56e132c203b0dd8fc72a33e791c39ad0d5a25bcf24b130a1e202abbf489a3e75"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3badc94708ac05b405e795fde58a53272b90a9ee6099ecd54a345658b7b812e1"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48b9b3ae095b14dad7bc4bd219c7cd9113a7aa123a033337c85b00fe2ed565d3"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0d3a1f7328c91caeb1f857ddd2787e3f19d60cc2c688339d249ca8841da61454"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef67c50428c99caf67d31bd209da21d9378da5f0cc3ad4f7bafb6caa78aee6f2"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:47f6d1592c0891f7355e38a302becd233336ca2f55f9a8be3a8635f946a6784f"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2891019740e874f05e0349e9f27b6af8ad837b1612f42e9c90c296d54d1404fd"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c554704eec4f4ba742febdcc79a85491f8f9a1d493cb103bb2af18536d6cf122"}, + {file = "Levenshtein-0.20.9-cp310-cp310-win32.whl", hash = "sha256:7628e356b3f9c78ad7272c3b9137f0641a1368849e749ff6f2c8fe372795806b"}, + {file = "Levenshtein-0.20.9-cp310-cp310-win_amd64.whl", hash = "sha256:ba2bafe3511194a37044cae4e7d328cca70657933052691c37eba2ca428a379d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7605a94145198d19fdaaa7e29c0f8a56ad719b12386f3ae8cd8ed4cb9fa6c2e4"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29db4dabfad2ddf33c7986eb6fd525c7587cca4c4d9e187365cff0a5281f5a35"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:965336c1772a4fc5fb2686a2a0bfaf3455dced96f19f50f278da8bc139076d31"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67235753035ac898d6475c0b29540521018db2e0027a3c1deb9aa0af0a84fd74"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:120dca58136aee3d8c7b190e30db7b6a6eb9579ea5712df84ad076a389801743"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6496ea66a6f755e48c0d82f1eee396d16edcd5592d4b3677d26fa789a636a728"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0af20327acc2c904d11611cb3a0d8d17f80c279a12e0b84189eafc35297186d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d2f891ef53afbab6cf2eeb92ff13151884d17dc80a2d6d3c7ae74d7738b772"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2ab9c72380582bf4745d1c5b055b1df0c85f7a980a04bd7603a855dd91478c0f"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6de13be3eb5ac48053fb1635a7b4daa936b9114ad4b264942e9eb709fcaa41dd"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a9fc296860588251d8d72b4f4637cca4eef7351e042a7a23d44e6385aef1e160"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:35777b20fe35858248c22da37984469e6dd1278f55d17c53378312853d5d683d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b9e0642ddb4c431f77c38cec9edbd0317e26c3f37d072ccf281ab58926dce69"}, + {file = "Levenshtein-0.20.9-cp311-cp311-win32.whl", hash = "sha256:f88ec322d86d3cc9d3936dbf6b421ad813950c2658599d48ac4ede59f2a6047e"}, + {file = "Levenshtein-0.20.9-cp311-cp311-win_amd64.whl", hash = "sha256:2907a6888455f9915d5b656f5d058f63eaf6063b2c7f0f1ff6bc05706ae5bc39"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6bcebc79760be08488cb921732af34ade6abc7476a94866881c68b45ec4b6c82"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47d8d4f3825d1d8f3b19382537a8536e689cf57aaa224d2cb4f44cf844811885"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d40e18a5817ee7f0675401613a26c492fd4ea68d2103c1480fb5a6ab1b8763d"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d258f3d44f6bac17f33002fea34570049507d3476c3716b5267170c666b20b4"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c621e0c389546147ed43c33ca4168de0f91c920508ab8a94a400835fa084f486"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a31527dc7994353091626e62b7d82d53290cb00df48d3e5d29cb291fb4c03c"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:129c8f192e656b7c2c543bf0d704d677720771b8bc2f30c50db02fbc2001bac2"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5a01fca58255be6bf724a40af2575d7cf644c099c28a00d1f5f6a81675e60e7d"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:4c13749ea39a228f05d5bd9d473e76f726fc2dcd493cafc322f740921a6eeffb"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:69daa0f8eefa5b947255a81346741ed86fe7030e0909741dbd978e38b30da3fd"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fcc78a73ed423bbb09ac902dd2e1ff1094d159d1c6766e5e52da5f376a4cba18"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-win32.whl", hash = "sha256:d82ae57982a9f33c55778f1f0f63d5e51e291aee236abed3b90497578b944202"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-win_amd64.whl", hash = "sha256:4082379b406752fc1173ed1f8c3a122c5d5491e10e564ed721602e4e049e3d4c"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb499783b7126e6fc45c39ab34c8114148425c5d975b1ce35e6c47c0eda58a94"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce747b296aad3bd8a563cccf2119cf37bf72f668076bfdad6ec55f0a0596dd9"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1347c3ebbe8f42f7a487e8d23a95bde6529379b4939ad51d32246d001565c499"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a2f1c1e8360603a6da29416da61d1907a27656843e269413091c8c3a3e6286e"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73c1caaedbee3617fd29139aac8dab7743776b59c3c1fed2790308ecb43c7b25"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1f24133df69f8b618fc508d6023695130ad3c3c8968ef43aaeca21835eb337a"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cf7260722f8170c09af5cfa714bb45626a4dfc85d71d1c1c9c52c2a6901cc501"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:01668178fd9244df290db0340293982fe7641162a12a35ad9ffb3fe145ce6377"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e46f9d3483dc4991ac60ff3711b0d40f93e352cc8edc16b68df57ccc472bd6c"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:680cd250dc1875eb80cf2a0cca742bd13f6f9ab11c48317244fcc483eba1dd67"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2346e2f7dfbbc2936bd81e19f7734984e72486ffc086760c897b39b9f674b2fa"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-win32.whl", hash = "sha256:7f31bcf257fec9719d0d97185c419d315f6f20a194f0b442919e352d19418b2e"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-win_amd64.whl", hash = "sha256:48262bc9830ad60de96411fcb2e96a522c7206e7069169e04d89dd79364a7722"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eba5696e1f8e8da225498fd1d743886d639400cafd0e5be3c553978cbb54c345"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:679333188f9791c85109d2981e97e8721a99b2b975b5c52d16aca50ac9c70757"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:06c9cfc61cf66833692d1ed258ec5a0871221b0779f1281c32a10348c492e2c5"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5d80d949168df406f2ac9ade1a5d0419cef0a8df611c8c2efe88f0248c9d0c0"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9275c6e601ff7f659116e2235e8585950c9c39d72504006077be85bf27950b35"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6414eea342d9632045e12b66bef043dbc6557189a283dc4dcc5966f63fa48998"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56571c58700600a382ecdf3f9efcb132ed16a0476cbb4e23a9478ab0ae788fd9"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7ccb76ffd9b851384f9cf1595b90b17cae46f0ab895e234de11ea48f9d9f73a"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109172943cff7fb10f28a9eb819eb3eaf9c88fe38661fb1d0f230a8ae68a615c"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:534c8bbdfd033fa20575d57332d9ac0447b5afbeca7db975ba169762ece2051f"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:381a725963c392585135654caa3c7fc32cb1755ed977fb9db72e8838fee261be"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7e4a44b1223980a9880e6f2bbf19121a125928580df9e4e81207199190343e11"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc0ced58ee6d07351cde140a7ec88e5f2ceb053c805af1f90514d21914d21cad"}, + {file = "Levenshtein-0.20.9-cp38-cp38-win32.whl", hash = "sha256:5eec0868ffcd825564dd5e3399305eaa159220554d1aedbff13af0de1fe01f6c"}, + {file = "Levenshtein-0.20.9-cp38-cp38-win_amd64.whl", hash = "sha256:e9db476e40a3aa184631d102b716a019f70837eb0fcdd5b5d1504f099f91359c"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d5a20ecc20a09a32c72128c43d7df23877a2469b3c17780ae83f9a9d55873c08"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b7b772f2f62a19a15ccb1b09c6c7754ca7430bb7e19d4ca4ff232958786873b"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af92326b90ea6fe4521cf6a5dfe450e21150393c573ef3ad9ee446f1009fbfbd"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48554dad328e198a636f937e2f4c057aac8e4bfcb8467b10e0f5daa94307b17"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:82304821e128d5453d1755d1c2f3d9cdf75e9def3517cf913b09df174e20283b"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2052357c5da195ede7dbc81a4e3408ebd6374a1ff1b86a0a9d8b8ce9562b32c3"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d60c6b47ccd6841c990418f7f4f58c28f7da9b07b81eaafc99b836cf351df1"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dc2194c917e4466cb604580b16e42286f04e3fe0424489459e68f0834f5c527"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb1e20965d759d89318cac7ff7eb045eb1fafcb5c3fa3047a23f6ae20c810ad7"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74e959035da10a54e7a2eee28408eff672297ce96cdadd6f4a2f269a06e395c4"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4a441b23d9704f57eb34af6a300ae5c335b9e77e6a065ada36ca69d6fc582af9"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f59470c49114a5da064712a427317f2b1fa5bb89aa2dfd0e300f8289e26aec28"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:06191f5d0527e3224107aea260b5cffc8a78722e0efb4e793f0e45c449b813a2"}, + {file = "Levenshtein-0.20.9-cp39-cp39-win32.whl", hash = "sha256:3235c461904fe94b4f62fee78a1658c1316344411c81b02400c27d692a893f8f"}, + {file = "Levenshtein-0.20.9-cp39-cp39-win_amd64.whl", hash = "sha256:8b852def43d165c2f2b468239d66b847d9e6f52a775fc657773ced04d26062bd"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f674cc75f127692525563155e500a3fa16aaf24dafd33a9bcda46e2979f793a1"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a34e3fd21acb31fcd29a0c8353dca74dfbb59957210a6f142505907a9dff3d59"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0ddddf2beafd1a2e17a87f80be562a7f7478e6098ccfc15de4c879972dfa2f9"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9649af1a896a4a7fc7f6f1fd093e8a92f463297f56c7bd0f8d7d16dfabeb236d"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d7bd7f25336849027fbe5ed32b6ffd404436727d78a014e348dcd17347c73fd8"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0371d996ae81089296f42b6e886c7bf138d1cb0f002b0c724a9e5d689b29b5a0"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7e00e2fda9f225b5f4537647f6195cf220d468532739d3390eaf082b1d76c87"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1600f5ebe2f2aebf13e88cf488ec2e5ce25f7a42b5846335018693baf4ea63bd"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bcd59fcf06aaedda98da185ec289dc2c2c9922ce789f6a9c101709d4a22cac9"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1549e307028fa5c3a8cf28ae8bcb1f6072df2abf7f36b9d7adf7fd60690fe372"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:795f2e95d09a33c66c73cd49be3ee632fb4b8c41be72c0cb8df29a329ce7d111"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:726bfb361d3b6786bea31392752f0ffcca568db7dc3f1e274f1b529489b8ad05"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0fd315132786375de532355fa06b2f11c4b4af5784b7e064dc54b6ee0c3281"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0674bc0549d5ea9edb934b3b03a160a116cc410feb5739a51f9c4f618ee674e3"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1ef8f3ecdfca5d6f0538226338d58617270439a1cc9b6cacb30a388984bb1608"}, + {file = "Levenshtein-0.20.9.tar.gz", hash = "sha256:70a8ad5e28bb76d87da1eb3f31de940836596547d6d01317c2289f5b7cd0b0ea"}, +] + +[package.dependencies] +rapidfuzz = ">=2.3.0,<3.0.0" + +[[package]] +name = "rapidfuzz" +version = "2.15.1" +description = "rapid fuzzy string matching" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fc0bc259ebe3b93e7ce9df50b3d00e7345335d35acbd735163b7c4b1957074d3"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d59fb3a410d253f50099d7063855c2b95df1ef20ad93ea3a6b84115590899f25"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c525a3da17b6d79d61613096c8683da86e3573e807dfaecf422eea09e82b5ba6"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4deae6a918ecc260d0c4612257be8ba321d8e913ccb43155403842758c46fbe"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2577463d10811386e704a3ab58b903eb4e2a31b24dfd9886d789b0084d614b01"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f67d5f56aa48c0da9de4ab81bffb310683cf7815f05ea38e5aa64f3ba4368339"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7927722ff43690e52b3145b5bd3089151d841d350c6f8378c3cfac91f67573a"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6534afc787e32c4104f65cdeb55f6abe4d803a2d0553221d00ef9ce12788dcde"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d0ae6ec79a1931929bb9dd57bc173eb5ba4c7197461bf69e3a34b6dd314feed2"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be7ccc45c4d1a7dfb595f260e8022a90c6cb380c2a346ee5aae93f85c96d362b"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:8ba013500a2b68c64b2aecc5fb56a2dad6c2872cf545a0308fd044827b6e5f6a"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4d9f7d10065f657f960b48699e7dddfce14ab91af4bab37a215f0722daf0d716"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7e24a1b802cea04160b3fccd75d2d0905065783ebc9de157d83c14fb9e1c6ce2"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win32.whl", hash = "sha256:dffdf03499e0a5b3442951bb82b556333b069e0661e80568752786c79c5b32de"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d150d90a7c6caae7962f29f857a4e61d42038cfd82c9df38508daf30c648ae7"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win_arm64.whl", hash = "sha256:87c30e9184998ff6eb0fa9221f94282ce7c908fd0da96a1ef66ecadfaaa4cdb7"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6986413cb37035eb796e32f049cbc8c13d8630a4ac1e0484e3e268bb3662bd1b"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a72f26e010d4774b676f36e43c0fc8a2c26659efef4b3be3fd7714d3491e9957"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5cd54c98a387cca111b3b784fc97a4f141244bbc28a92d4bde53f164464112e"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7fac7c3da39f93e6b2ebe386ed0ffe1cefec91509b91857f6e1204509e931f"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f976e76ac72f650790b3a5402431612175b2ac0363179446285cb3c901136ca9"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abde47e1595902a490ed14d4338d21c3509156abb2042a99e6da51f928e0c117"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca8f1747007a3ce919739a60fa95c5325f7667cccf6f1c1ef18ae799af119f5e"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35da09ab9797b020d0d4f07a66871dfc70ea6566363811090353ea971748b5a"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a3a769ca7580686a66046b77df33851b3c2d796dc1eb60c269b68f690f3e1b65"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d50622efefdb03a640a51a6123748cd151d305c1f0431af762e833d6ffef71f0"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b7461b0a7651d68bc23f0896bffceea40f62887e5ab8397bf7caa883592ef5cb"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:074ee9e17912e025c72a5780ee4c7c413ea35cd26449719cc399b852d4e42533"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7025fb105a11f503943f17718cdb8241ea3bb4d812c710c609e69bead40e2ff0"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win32.whl", hash = "sha256:2084d36b95139413cef25e9487257a1cc892b93bd1481acd2a9656f7a1d9930c"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:5a738fcd24e34bce4b19126b92fdae15482d6d3a90bd687fd3d24ce9d28ce82d"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win_arm64.whl", hash = "sha256:dc3cafa68cfa54638632bdcadf9aab89a3d182b4a3f04d2cad7585ed58ea8731"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c53d57ba7a88f7bf304d4ea5a14a0ca112db0e0178fff745d9005acf2879f7d"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6ee758eec4cf2215dc8d8eafafcea0d1f48ad4b0135767db1b0f7c5c40a17dd"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d93ba3ae59275e7a3a116dac4ffdb05e9598bf3ee0861fecc5b60fb042d539e"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c3ff75e647908ddbe9aa917fbe39a112d5631171f3fcea5809e2363e525a59d"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d89c421702474c6361245b6b199e6e9783febacdbfb6b002669e6cb3ef17a09"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f69e6199fec0f58f9a89afbbaea78d637c7ce77f656a03a1d6ea6abdc1d44f8"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:41dfea282844d0628279b4db2929da0dacb8ac317ddc5dcccc30093cf16357c1"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2dd03477feefeccda07b7659dd614f6738cfc4f9b6779dd61b262a73b0a9a178"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5efe035aa76ff37d1b5fa661de3c4b4944de9ff227a6c0b2e390a95c101814c0"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ed2cf7c69102c7a0a06926d747ed855bc836f52e8d59a5d1e3adfd980d1bd165"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a0e441d4c2025110ec3eba5d54f11f78183269a10152b3a757a739ffd1bb12bf"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-win32.whl", hash = "sha256:a4a54efe17cc9f53589c748b53f28776dfdfb9bc83619685740cb7c37985ac2f"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:bb8318116ecac4dfb84841d8b9b461f9bb0c3be5b616418387d104f72d2a16d1"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e9296c530e544f68858c3416ad1d982a1854f71e9d2d3dcedb5b216e6d54f067"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:49c4bcdb9238f11f8c4eba1b898937f09b92280d6f900023a8216008f299b41a"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebb40a279e134bb3fef099a8b58ed5beefb201033d29bdac005bddcdb004ef71"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7381c11cb590bbd4e6f2d8779a0b34fdd2234dfa13d0211f6aee8ca166d9d05"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfdcdedfd12a0077193f2cf3626ff6722c5a184adf0d2d51f1ec984bf21c23c3"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85bece1ec59bda8b982bd719507d468d4df746dfb1988df11d916b5e9fe19e8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1b393f4a1eaa6867ffac6aef58cfb04bab2b3d7d8e40b9fe2cf40dd1d384601"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53de456ef020a77bf9d7c6c54860a48e2e902584d55d3001766140ac45c54bc7"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2492330bc38b76ed967eab7bdaea63a89b6ceb254489e2c65c3824efcbf72993"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:099e4c6befaa8957a816bdb67ce664871f10aaec9bebf2f61368cf7e0869a7a1"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:46599b2ad4045dd3f794a24a6db1e753d23304699d4984462cf1ead02a51ddf3"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:591f19d16758a3c55c9d7a0b786b40d95599a5b244d6eaef79c7a74fcf5104d8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed17359061840eb249f8d833cb213942e8299ffc4f67251a6ed61833a9f2ea20"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-win32.whl", hash = "sha256:aa1e5aad325168e29bf8e17006479b97024aa9d2fdbe12062bd2f8f09080acf8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:c2bb68832b140c551dbed691290bef4ee6719d4e8ce1b7226a3736f61a9d1a83"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3fac40972cf7b6c14dded88ae2331eb50dfbc278aa9195473ef6fc6bfe49f686"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0e456cbdc0abf39352800309dab82fd3251179fa0ff6573fa117f51f4e84be8"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:22b9d22022b9d09fd4ece15102270ab9b6a5cfea8b6f6d1965c1df7e3783f5ff"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46754fe404a9a6f5cbf7abe02d74af390038d94c9b8c923b3f362467606bfa28"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91abb8bf7610efe326394adc1d45e1baca8f360e74187f3fa0ef3df80cdd3ba6"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e40a2f60024f9d3c15401e668f732800114a023f3f8d8c40f1521a62081ff054"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a48ee83916401ac73938526d7bd804e01d2a8fe61809df7f1577b0b3b31049a3"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71580052f9dbac443c02f60484e5a2e5f72ad4351b84b2009fbe345b1f38422"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:82b86d5b8c1b9bcbc65236d75f81023c78d06a721c3e0229889ff4ed5c858169"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fc4528b7736e5c30bc954022c2cf410889abc19504a023abadbc59cdf9f37cae"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e1e0e569108a5760d8f01d0f2148dd08cc9a39ead79fbefefca9e7c7723c7e88"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:94e1c97f0ad45b05003806f8a13efc1fc78983e52fa2ddb00629003acf4676ef"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47e81767a962e41477a85ad7ac937e34d19a7d2a80be65614f008a5ead671c56"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win32.whl", hash = "sha256:79fc574aaf2d7c27ec1022e29c9c18f83cdaf790c71c05779528901e0caad89b"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:f3dd4bcef2d600e0aa121e19e6e62f6f06f22a89f82ef62755e205ce14727874"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win_arm64.whl", hash = "sha256:cac095cbdf44bc286339a77214bbca6d4d228c9ebae3da5ff6a80aaeb7c35634"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b89d1126be65c85763d56e3b47d75f1a9b7c5529857b4d572079b9a636eaa8a7"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7460e91168229768be882ea365ba0ac7da43e57f9416e2cfadc396a7df3c2"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c33c03e7092642c38f8a15ca2d8fc38da366f2526ec3b46adf19d5c7aa48ba"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040faca2e26d9dab5541b45ce72b3f6c0e36786234703fc2ac8c6f53bb576743"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6e2a3b23e1e9aa13474b3c710bba770d0dcc34d517d3dd6f97435a32873e3f28"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e597b9dfd6dd180982684840975c458c50d447e46928efe3e0120e4ec6f6686"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d14752c9dd2036c5f36ebe8db5f027275fa7d6b3ec6484158f83efb674bab84e"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558224b6fc6124d13fa32d57876f626a7d6188ba2a97cbaea33a6ee38a867e31"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c89cfa88dc16fd8c9bcc0c7f0b0073f7ef1e27cceb246c9f5a3f7004fa97c4d"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:509c5b631cd64df69f0f011893983eb15b8be087a55bad72f3d616b6ae6a0f96"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0f73a04135a03a6e40393ecd5d46a7a1049d353fc5c24b82849830d09817991f"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c99d53138a2dfe8ada67cb2855719f934af2733d726fbf73247844ce4dd6dd5"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f01fa757f0fb332a1f045168d29b0d005de6c39ee5ce5d6c51f2563bb53c601b"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60368e1add6e550faae65614844c43f8a96e37bf99404643b648bf2dba92c0fb"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:785744f1270828cc632c5a3660409dee9bcaac6931a081bae57542c93e4d46c4"}, + {file = "rapidfuzz-2.15.1.tar.gz", hash = "sha256:d62137c2ca37aea90a11003ad7dc109c8f1739bfbe5a9a217f3cdb07d7ac00f6"}, +] + +[package.extras] +full = ["numpy"] + +[[package]] +name = "textwrap3" +version = "0.9.2" +description = "textwrap from Python 3.6 backport (plus a few tweaks)" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "textwrap3-0.9.2-py2.py3-none-any.whl", hash = "sha256:bf5f4c40faf2a9ff00a9e0791fed5da7415481054cef45bb4a3cfb1f69044ae0"}, + {file = "textwrap3-0.9.2.zip", hash = "sha256:5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414"}, +] + +[[package]] +name = "watchdog" +version = "2.3.1" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"}, + {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"}, + {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"}, + {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"}, + {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"}, + {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"}, + {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"}, + {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"}, + {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"}, + {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "f48df5c526c5e9e9b6c8dd83bb06b628c347f616a66670800e3032a83ba50c08" diff --git a/tools/asm-differ/test.py b/tools/asm-differ/test.py new file mode 100644 index 000000000..b5f037f90 --- /dev/null +++ b/tools/asm-differ/test.py @@ -0,0 +1,189 @@ +import unittest +import diff +import json + + +class TestSh2(unittest.TestCase): + def get_config(self) -> diff.Config: + arch = diff.get_arch("sh2") + formatter = diff.JsonFormatter(arch_str="sh2") + config = diff.Config( + arch=arch, + diff_obj=True, + file='', + make=False, + source_old_binutils=True, + diff_section='.text', + inlines=False, + max_function_size_lines=25000, + max_function_size_bytes=100000, + formatter=formatter, + diff_mode=diff.DiffMode.NORMAL, + base_shift=0, + skip_lines=0, + compress=None, + show_rodata_refs=True, + show_branches=True, + show_line_numbers=False, + show_source=False, + stop_at_ret=None, + ignore_large_imms=False, + ignore_addr_diffs=True, + algorithm="levenshtein", + reg_categories={}, + ) + return config + + # check that comment <> regex has ? to avoid ",r1 ! 60e87d0" + # all being a comment for: + # mov.l 44 ,r1 ! 60e87d0 + def test_sh2_comment(self) -> None: + # parser specifically looks for tabs so make sure they are represented + + # 16: d1 0b mov.l 44 ,r1 ! 60e87d0 + sh2_theirs = ( + " 16:\td1 0b \tmov.l\t44 ,r1\t! 60e87d0\n" + ) + + # 16: d1 0b mov.l 44 <_func_060E8780+0x44>,r1 ! 0 <_func_060E8780> + sh2_ours = " 16:\td1 0b \tmov.l\t44 <_func_060E8780+0x44>,r1\t! 0 <_func_060E8780>\n" + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + curr = loaded["rows"][0]["current"]["src_comment"] + + assert curr != "<_func_060E8780+0x44>,r1 ! 0 <_func_060E8780>" + assert curr == "<_func_060E8780+0x44>" + + def test_sh2_immediates(self) -> None: + # test parsing these immediates + # func_0606B760(): + # 0: ec 01 mov #1,r12 + # 2: 71 01 add #1,r1 + # 4: ec ff mov #-1,r12 + # 6: 71 ff add #-1,r1 + # 8: ec 7f mov #127,r12 + # a: 71 7f add #127,r1 + # c: ec 80 mov #-128,r12 + # e: 71 80 add #-128,r1 + sh2_theirs = "func_0606B760():\n 0:\tec 01 \tmov\t#1,r12\n 2:\t71 01 \tadd\t#1,r1\n 4:\tec ff \tmov\t#-1,r12\n 6:\t71 ff \tadd\t#-1,r1\n 8:\tec 7f \tmov\t#127,r12\n a:\t71 7f \tadd\t#127,r1\n c:\tec 80 \tmov\t#-128,r12\n e:\t71 80 \tadd\t#-128,r1" + + # just diff with self + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + expected = [ + "0: mov #0x1,r12", + "2: add #0x1,r1", + "4: mov #0xff,r12", + "6: add #0xff,r1", + "8: mov #0x7f,r12", + "a: add #0x7f,r1", + "c: mov #0x80,r12", + "e: add #0x80,r1", + ] + + i = 0 + for text in loaded["rows"]: + assert text["base"]["text"][0]["text"] == expected[i] + i += 1 + + def test_more_sh2_immediates(self) -> None: + # test that the re_int regex is able to catch all these "boundary" numbers + # since we have to match 0-9 one digit at a time + # 0: 71 00 add #0,r1 + # 2: 71 01 add #1,r1 + # 4: 71 09 add #9,r1 + # 6: 71 0a add #10,r1 + # 8: 71 0b add #11,r1 + # a: 71 13 add #19,r1 + # c: 71 64 add #100,r1 + # e: 71 65 add #101,r1 + # 10: 71 6d add #109,r1 + # 12: 71 6f add #111,r1 + # 14: 71 77 add #119,r1 + # 16: 71 f7 add #-9,r1 + # 18: 71 f6 add #-10,r1 + # 1a: 71 f5 add #-11,r1 + # 1c: 71 ed add #-19,r1 + # 1e: 71 9c add #-100,r1 + # 20: 71 9b add #-101,r1 + # 22: 71 93 add #-109,r1 + # 24: 71 91 add #-111,r1 + # 26: 71 89 add #-119,r1 + sh2_theirs = "func_0606B760():\n 0:\t71 00 \tadd\t#0,r1\n 2:\t71 01 \tadd\t#1,r1\n 4:\t71 09 \tadd\t#9,r1\n 6:\t71 0a \tadd\t#10,r1\n 8:\t71 0b \tadd\t#11,r1\n a:\t71 13 \tadd\t#19,r1\n c:\t71 64 \tadd\t#100,r1\n e:\t71 65 \tadd\t#101,r1\n 10:\t71 6d \tadd\t#109,r1\n 12:\t71 6f \tadd\t#111,r1\n 14:\t71 77 \tadd\t#119,r1\n 16:\t71 f7 \tadd\t#-9,r1\n 18:\t71 f6 \tadd\t#-10,r1\n 1a:\t71 f5 \tadd\t#-11,r1\n 1c:\t71 ed \tadd\t#-19,r1\n 1e:\t71 9c \tadd\t#-100,r1\n 20:\t71 9b \tadd\t#-101,r1\n 22:\t71 93 \tadd\t#-109,r1\n 24:\t71 91 \tadd\t#-111,r1\n 26:\t71 89 \tadd\t#-119,r1" + + # just diff with self + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + expected = [ + "0: add #0x0,r1", + "2: add #0x1,r1", + "4: add #0x9,r1", + "6: add #0xa,r1", + "8: add #0xb,r1", + "a: add #0x13,r1", + "c: add #0x64,r1", + "e: add #0x65,r1", + "10: add #0x6d,r1", + "12: add #0x6f,r1", + "14: add #0x77,r1", + "16: add #0xf7,r1", + "18: add #0xf6,r1", + "1a: add #0xf5,r1", + "1c: add #0xed,r1", + "1e: add #0x9c,r1", + "20: add #0x9b,r1", + "22: add #0x93,r1", + "24: add #0x91,r1", + "26: add #0x89,r1", + ] + + i = 0 + for text in loaded["rows"]: + assert text["base"]["text"][0]["text"] == expected[i] + i += 1 + + def test_branch(self) -> None: + # test that bt.s and bra get ~> + # func(): + # 0: 8d 02 bt.s 8 + # 2: 6e f3 mov r15,r14 + # 4: a0 01 bra a + # 6: 00 09 nop + + # 00000008 : + # lab_0606B780(): + # 8: db 32 mov.l d4 ,r11 + + # 0000000a : + # lab_0606B8E0(): + # a: 00 0b rts + # c: 00 09 nop + sh2_theirs = "func():\n 0:\t8d 02 \tbt.s\t8 \n 2:\t6e f3 \tmov\tr15,r14\n 4:\ta0 01 \tbra\ta \n 6:\t00 09 \tnop\t\n\n00000008 :\nlab_0606B780():\n 8:\tdb 32 \tmov.l\td4 ,r11\n\n0000000a :\nlab_0606B8E0():\n a:\t00 0b \trts\t\n c:\t00 09 \tnop\t" + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + # bt.s 8 + print(loaded["rows"][0]["base"]["text"][1]["text"] == "~>") + print(loaded["rows"][0]["base"]["text"][1]["key"] == "8") + + # bra a + print(loaded["rows"][2]["base"]["text"][1]["text"] == "~>") + print(loaded["rows"][2]["base"]["text"][1]["key"] == "10") + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/asm-processor/.gitrepo b/tools/asm-processor/.gitrepo index e9ee1dd74..6265b2fc5 100644 --- a/tools/asm-processor/.gitrepo +++ b/tools/asm-processor/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:simonlindholm/asm-processor.git branch = main - commit = bbd86ea1faf84e6a7a0e101ab8068a00a3dfb2fc - parent = 8985197b6da23db874ac6e8a29ddec5636944bba + commit = fed1e3ddb9967bd427f4599b1b8ededa296bd9f9 + parent = 4fa13e4132cf8adb2f07bb34927e62e525c8cc79 method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/asm-processor/asm_processor.py b/tools/asm-processor/asm_processor.py index 0d62bc32a..317585291 100644 --- a/tools/asm-processor/asm_processor.py +++ b/tools/asm-processor/asm_processor.py @@ -2,7 +2,6 @@ import argparse import tempfile import struct -import copy import sys import re import os @@ -82,7 +81,14 @@ R_MIPS_HI16 = 5 R_MIPS_LO16 = 6 MIPS_DEBUG_ST_STATIC = 2 +MIPS_DEBUG_ST_PROC = 6 +MIPS_DEBUG_ST_BLOCK = 7 +MIPS_DEBUG_ST_END = 8 +MIPS_DEBUG_ST_FILE = 11 MIPS_DEBUG_ST_STATIC_PROC = 14 +MIPS_DEBUG_ST_STRUCT = 26 +MIPS_DEBUG_ST_UNION = 27 +MIPS_DEBUG_ST_ENUM = 28 class ElfFormat: @@ -605,11 +611,11 @@ class GlobalAsmBlock: line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line) changed_section = False emitting_double = False - if line.startswith('glabel ') and self.cur_section == '.text': + if (line.startswith('glabel ') or line.startswith('jlabel ')) and self.cur_section == '.text': self.text_glabels.append(line.split()[1]) if not line: pass # empty line - elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')): + elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('jlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')): pass # label elif line.startswith('.section') or line in ['.text', '.data', '.rdata', '.rodata', '.bss', '.late_rodata']: # section change @@ -651,19 +657,26 @@ class GlobalAsmBlock: emitting_double = True elif line.startswith('.space'): self.add_sized(int(line.split()[1], 0), real_line) - elif line.startswith('.balign') or line.startswith('.align'): + elif line.startswith('.balign'): align = int(line.split()[1]) if align != 4: self.fail("only .balign 4 is supported", real_line) self.align4() + elif line.startswith('.align'): + align = int(line.split()[1]) + if align != 2: + self.fail("only .align 2 is supported", real_line) + self.align4() elif line.startswith('.asci'): z = (line.startswith('.asciz') or line.startswith('.asciiz')) self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line) elif line.startswith('.byte'): self.add_sized(len(line.split(',')), real_line) - elif line.startswith('.half'): + elif line.startswith('.half') or line.startswith('.hword') or line.startswith(".short"): self.align2() self.add_sized(2*len(line.split(',')), real_line) + elif line.startswith('.size'): + pass elif line.startswith('.'): # .macro, ... self.fail("asm directive not supported", real_line) @@ -1268,6 +1281,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d # Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM if mdebug_section and convert_statics != "no": + static_name_count = {} strtab_index = len(objfile.symtab.strtab.data) new_strtab_data = [] ifd_max, cb_fd_offset = fmt.unpack('II', mdebug_section.data[18*4 : 20*4]) @@ -1276,20 +1290,28 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d for i in range(ifd_max): offset = cb_fd_offset + 18*4*i iss_base, _, isym_base, csym = fmt.unpack('IIII', objfile.data[offset + 2*4 : offset + 6*4]) + scope_level = 0 for j in range(csym): offset2 = cb_sym_offset + 12 * (isym_base + j) iss, value, st_sc_index = fmt.unpack('III', objfile.data[offset2 : offset2 + 12]) st = (st_sc_index >> 26) sc = (st_sc_index >> 21) & 0x1f - if st in [MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC]: + if st in (MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC): symbol_name_offset = cb_ss_offset + iss_base + iss symbol_name_offset_end = objfile.data.find(b'\0', symbol_name_offset) assert symbol_name_offset_end != -1 - symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end + 1] + symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end] + if scope_level > 1: + # For in-function statics, append an increasing counter to + # the name, to avoid duplicate conflicting symbols. + count = static_name_count.get(symbol_name, 0) + 1 + static_name_count[symbol_name] = count + symbol_name += b":" + str(count).encode("utf-8") emitted_symbol_name = symbol_name if convert_statics == "global-with-filename": # Change the emitted symbol name to include the filename, - # but don't let that affect deduplication logic. + # but don't let that affect deduplication logic (we still + # want to be able to reference statics from GLOBAL_ASM). emitted_symbol_name = objfile_name.encode("utf-8") + b":" + symbol_name section_name = {1: '.text', 2: '.data', 3: '.bss', 15: '.rodata'}[sc] section = objfile.find_section(section_name) @@ -1304,10 +1326,23 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d st_other=STV_DEFAULT, st_shndx=section.index, strtab=objfile.symtab.strtab, - name=symbol_name[:-1].decode('latin1')) - strtab_index += len(emitted_symbol_name) - new_strtab_data.append(emitted_symbol_name) + name=symbol_name.decode('latin1')) + strtab_index += len(emitted_symbol_name) + 1 + new_strtab_data.append(emitted_symbol_name + b'\0') new_syms.append(sym) + if st in ( + MIPS_DEBUG_ST_FILE, + MIPS_DEBUG_ST_STRUCT, + MIPS_DEBUG_ST_UNION, + MIPS_DEBUG_ST_ENUM, + MIPS_DEBUG_ST_BLOCK, + MIPS_DEBUG_ST_PROC, + MIPS_DEBUG_ST_STATIC_PROC, + ): + scope_level += 1 + if st == MIPS_DEBUG_ST_END: + scope_level -= 1 + assert scope_level == 0 objfile.symtab.strtab.data += b''.join(new_strtab_data) # Get rid of duplicate symbols, favoring ones that are not UNDEF. diff --git a/tools/asm-processor/mypy.ini b/tools/asm-processor/mypy.ini new file mode 100644 index 000000000..9a57d3c52 --- /dev/null +++ b/tools/asm-processor/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +files = asm_processor.py, build.py + diff --git a/tools/asm-processor/prelude.inc b/tools/asm-processor/prelude.inc index 3e58ff149..9bc893962 100644 --- a/tools/asm-processor/prelude.inc +++ b/tools/asm-processor/prelude.inc @@ -1,11 +1,21 @@ .set noat .set noreorder .set gp=64 + .macro glabel label .global \label \label: .endm +.macro dlabel label + .global \label + \label: +.endm + +.macro jlabel label + \label: +.endm + # Float register aliases (o32 ABI, odd ones are rarely used) diff --git a/tools/asm-processor/tests/static-global.c b/tools/asm-processor/tests/static-global.c index a7f616907..12b143462 100644 --- a/tools/asm-processor/tests/static-global.c +++ b/tools/asm-processor/tests/static-global.c @@ -25,9 +25,11 @@ nop ) static int xtext(int a, int b, int c) { + static int bss2; return 1; } void baz(void) { + { static int bss2; } xtext(bss2, rodata2[0], data2[0]); } diff --git a/tools/asm-processor/tests/static-global.objdump b/tools/asm-processor/tests/static-global.objdump index a519e4f48..c792e6a93 100644 --- a/tools/asm-processor/tests/static-global.objdump +++ b/tools/asm-processor/tests/static-global.objdump @@ -15,6 +15,8 @@ SYMBOL TABLE: 00000004 g O .data 00000000 data2 00000004 g O .bss 00000000 bss2 00000030 g F .text 00000000 xtext +00000008 g O .bss 00000000 bss2:1 +0000000c g O .bss 00000000 bss2:2 RELOCATION RECORDS FOR [.text]: diff --git a/tools/fado/.gitrepo b/tools/fado/.gitrepo index 042b904f1..f88c42275 100644 --- a/tools/fado/.gitrepo +++ b/tools/fado/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:EllipticEllipsis/fado.git branch = master - commit = 8d896ee97d565508755584803c409fc33bb0c953 - parent = b51c9f4d22d6e7db63700c163418654431a2a61a + commit = 8ce0483766e2857c6f2997880ab7a5381b2cc5c3 + parent = aa8be27d62d8485c61f88889faf6132e4f66590b method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/fado/Makefile b/tools/fado/Makefile index 135f51251..8f61a209e 100644 --- a/tools/fado/Makefile +++ b/tools/fado/Makefile @@ -57,7 +57,7 @@ clean: $(RM) -r build $(ELF) format: - clang-format-11 -i $(C_FILES) $(H_FILES) lib/fairy/* + clang-format-14 -i $(C_FILES) $(H_FILES) lib/fairy/* .PHONY: all clean format diff --git a/tools/fado/include/mips_elf.h b/tools/fado/include/mips_elf.h index 122e98d25..f76a69b79 100644 --- a/tools/fado/include/mips_elf.h +++ b/tools/fado/include/mips_elf.h @@ -476,9 +476,9 @@ typedef struct { /* Relocation table entry with addend (in section of type SHT_RELA). */ typedef struct { - Elf32_Addr r_offset; /* Address */ - Elf32_Word r_info; /* Relocation type and symbol index */ - Elf32_Sword r_addend; /* Addend */ + Elf32_Addr r_offset; /* Address */ + Elf32_Word r_info; /* Relocation type and symbol index */ + Elf32_Sword r_addend; /* Addend */ } Elf32_Rela; /* How to extract and insert information held in the r_info field. */ From 81424208e6559fe19e9ebdbaaf4dbb2d9173ba51 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 11 Sep 2023 02:27:23 -0300 Subject: [PATCH 077/121] document object_zov (lulu the zora vocalist) (#1357) * initial commit of object_zov documentation * morphFrames and mouth name change * sAnimations array name instead of sAnimationInfo * forgor format * separate categories --- assets/xml/objects/object_zos.xml | 2 +- assets/xml/objects/object_zov.xml | 163 ++++++++++++---------- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 43 +++--- src/overlays/actors/ovl_En_Zov/z_en_zov.h | 5 +- 5 files changed, 112 insertions(+), 103 deletions(-) diff --git a/assets/xml/objects/object_zos.xml b/assets/xml/objects/object_zos.xml index a1364a842..5b3b12345 100644 --- a/assets/xml/objects/object_zos.xml +++ b/assets/xml/objects/object_zos.xml @@ -6,7 +6,7 @@ - + diff --git a/assets/xml/objects/object_zov.xml b/assets/xml/objects/object_zov.xml index 440782f10..31b9bcd7b 100644 --- a/assets/xml/objects/object_zov.xml +++ b/assets/xml/objects/object_zov.xml @@ -1,81 +1,90 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 4be070d25..0e3262869 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -138,7 +138,7 @@ static AnimationHeader* sAnimations[] = { &gEvanLeanOnKeyboardAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD &gEvanLeanOnKeyboardAndSighAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD_AND_SIGH &gEvanHandsOnHipsAnim, // EN_ZOS_ANIM_HANDS_ON_HIPS - &gEeanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP + &gEvanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP &gEvanTalkLookDownAnim, // EN_ZOS_ANIM_TALK_LOOK_DOWN &gEvanTalkArmsOutAnim, // EN_ZOS_ANIM_TALK_ARMS_OUT &gEvanTalkHandsOnHipsAnim, // EN_ZOS_ANIM_TALK_HANDS_ON_HIPS 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 6342c38d3..8e85f4675 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -5,7 +5,6 @@ */ #include "z_en_zov.h" -#include "objects/object_zov/object_zov.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -60,20 +59,20 @@ static ColliderCylinderInit sCylinderInit = { { 20, 40, 0, { 0, 0, 0 } }, }; -static AnimationHeader* D_80BD270C[] = { - &object_zov_Anim_00D3EC, &object_zov_Anim_008120, &object_zov_Anim_00B4CC, &object_zov_Anim_00A888, - &object_zov_Anim_00C510, &object_zov_Anim_00CAA8, &object_zov_Anim_008120, &object_zov_Anim_00A888, - &object_zov_Anim_002B5C, &object_zov_Anim_00418C, &object_zov_Anim_005A6C, &object_zov_Anim_0066A4, - &object_zov_Anim_0017D4, &object_zov_Anim_0023F4, +static AnimationHeader* sAnimations[] = { + &gLuluLookDownAnim, &gLuluPutHandsDownAnim, &gLuluLookForwardAndDownAnim, &gLuluLookAroundAnim, + &gLuluAngleHeadAnim, &gLuluNodAnim, &gLuluPutHandsDownAnim, &gLuluLookAroundAnim, + &gLuluSingStartAnim, &gLuluSingLoopAnim, &gLuluLookForwardAndLeftAnim, &gLuluLookLeftLoopAnim, + &gLuluTurnAndWalkAnim, &gLuluWalkLoopAnim, }; static Vec3f D_80BD2744 = { 400.0f, 600.0f, 0.0f }; static Vec3f D_80BD2750 = { 400.0f, 600.0f, 0.0f }; -static TexturePtr D_80BD275C[] = { object_zov_Tex_013C38, object_zov_Tex_015138, object_zov_Tex_014138 }; +static TexturePtr sEyeTextures[] = { gLuluEyeOpenTex, gLuluEyeHalfTex, gLuluEyeClosedTex }; -static TexturePtr D_80BD2768[] = { object_zov_Tex_0135F8, object_zov_Tex_014538 }; +static TexturePtr sMouthTextures[] = { gLuluMouthClosedTex, gLuluMouthOpenTex }; static s8 D_80BD2770[] = { 1, 2, 1, 0, 0, 1, 2, 1, @@ -86,9 +85,9 @@ void EnZov_Init(Actor* thisx, PlayState* play) { this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->picto.actor, 0.01f); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); - SkelAnime_InitFlex(play, &this->skelAnime, &object_zov_Skel_016258, &object_zov_Anim_00D3EC, this->jontTable, - this->morphTable, 23); - Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC); + SkelAnime_InitFlex(play, &this->skelAnime, &gLuluSkel, &gLuluLookDownAnim, this->jointTable, this->morphTable, + LULU_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gLuluLookDownAnim); this->unk_320 = 0; this->csIdIndex = -1; @@ -147,10 +146,10 @@ void func_80BD1440(EnZov* this, s16 arg1) { this->csIdIndex = arg1; } -void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) { +void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 morphFrames) { f32 frame; - if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(D_80BD270C))) { + if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(sAnimations))) { switch (index) { case 6: frame = 30.0f; @@ -164,8 +163,8 @@ void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) { frame = 0.0f; break; } - Animation_Change(&this->skelAnime, D_80BD270C[index], 1.0f, frame, Animation_GetLastFrame(D_80BD270C[index]), - mode, transitionRate); + Animation_Change(&this->skelAnime, sAnimations[index], 1.0f, frame, Animation_GetLastFrame(sAnimations[index]), + mode, morphFrames); this->unk_322 = index; } } @@ -521,14 +520,14 @@ void EnZov_Update(Actor* thisx, PlayState* play) { s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnZov* this = THIS; - if (limbIndex == 12) { + if (limbIndex == LULU_LIMB_HEAD) { rot->x += this->unk_2F0.y; if ((this->unk_320 & 0x10) && (this->unk_322 == 0)) { rot->z += this->unk_2F0.x; } } - if (limbIndex == 11) { + if (limbIndex == LULU_LIMB_TORSO) { rot->x += this->unk_2F6.y; } return false; @@ -537,17 +536,17 @@ s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnZov_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnZov* this = THIS; - if (limbIndex == 12) { + if (limbIndex == LULU_LIMB_HEAD) { Matrix_MultVec3f(&D_80BD2744, &this->picto.actor.focus.pos); Math_Vec3f_Copy(&this->unk_2FC, &this->picto.actor.focus.pos); this->unk_2FC.y += 10.0f; } - if (limbIndex == 18) { + if (limbIndex == LULU_LIMB_RIGHT_UPPER_ARM) { Matrix_MultVec3f(&D_80BD2750, &this->unk_308); } - if (limbIndex == 13) { + if (limbIndex == LULU_LIMB_LEFT_UPPER_ARM) { Matrix_MultVec3f(&D_80BD2750, &this->unk_314); } } @@ -625,8 +624,8 @@ void EnZov_Draw(Actor* thisx, PlayState* play) { } gfx = POLY_OPA_DISP; - gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(D_80BD275C[phi_v1])); - gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(D_80BD2768[phi_a1])); + gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(sEyeTextures[phi_v1])); + gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(sMouthTextures[phi_a1])); POLY_OPA_DISP = &gfx[2]; CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.h b/src/overlays/actors/ovl_En_Zov/z_en_zov.h index 7e1204100..7637bb53e 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h @@ -3,6 +3,7 @@ #include "global.h" #include "z64snap.h" +#include "objects/object_zov/object_zov.h" struct EnZov; @@ -16,8 +17,8 @@ typedef void (*EnZovActionFunc)(struct EnZov*, PlayState*); typedef struct EnZov { /* 0x000 */ PictoActor picto; - /* 0x148 */ Vec3s jontTable[23]; - /* 0x1D2 */ Vec3s morphTable[23]; + /* 0x148 */ Vec3s jointTable[LULU_LIMB_MAX]; + /* 0x1D2 */ Vec3s morphTable[LULU_LIMB_MAX]; /* 0x25C */ SkelAnime skelAnime; /* 0x2A0 */ ColliderCylinder collider; /* 0x2EC */ s16 unk_2EC; From 39523baf8c52d59b8ca52832c22e70eadf518f8a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 10 Sep 2023 23:07:53 -0700 Subject: [PATCH 078/121] Add original asset names to all `object_i*` and `object_j*` files (#1365) * Add original asset names to all `object_i*` and `object_j*` files * Remove MM3D name from `object_ishi`; asset names that start with `zelda2_` almost certainly come from Grezzo. --- assets/xml/objects/object_ice_block.xml | 14 ++--- assets/xml/objects/object_icefloe.xml | 4 +- assets/xml/objects/object_icicle.xml | 4 +- assets/xml/objects/object_ik.xml | 36 +++++------ assets/xml/objects/object_ikana_obj.xml | 66 ++++++++++----------- assets/xml/objects/object_ikn_demo.xml | 66 ++++++++++----------- assets/xml/objects/object_ikninside_obj.xml | 36 +++++------ assets/xml/objects/object_iknv_obj.xml | 36 +++++------ assets/xml/objects/object_in.xml | 38 ++++++------ assets/xml/objects/object_in2.xml | 24 ++++---- assets/xml/objects/object_js.xml | 12 ++-- assets/xml/objects/object_jso.xml | 46 +++++++------- 12 files changed, 191 insertions(+), 191 deletions(-) diff --git a/assets/xml/objects/object_ice_block.xml b/assets/xml/objects/object_ice_block.xml index dd25c06d5..4b5cd47d4 100644 --- a/assets/xml/objects/object_ice_block.xml +++ b/assets/xml/objects/object_ice_block.xml @@ -1,23 +1,23 @@  - - + + - + - - + + - - + + diff --git a/assets/xml/objects/object_icefloe.xml b/assets/xml/objects/object_icefloe.xml index 2427052af..0440fa4bb 100644 --- a/assets/xml/objects/object_icefloe.xml +++ b/assets/xml/objects/object_icefloe.xml @@ -1,7 +1,7 @@  - + - + diff --git a/assets/xml/objects/object_icicle.xml b/assets/xml/objects/object_icicle.xml index 4f7bab8a2..ac0000471 100644 --- a/assets/xml/objects/object_icicle.xml +++ b/assets/xml/objects/object_icicle.xml @@ -1,7 +1,7 @@  - - + + diff --git a/assets/xml/objects/object_ik.xml b/assets/xml/objects/object_ik.xml index 352b82487..fcbb90620 100644 --- a/assets/xml/objects/object_ik.xml +++ b/assets/xml/objects/object_ik.xml @@ -1,34 +1,34 @@  - - - - - - - - - - - + + + + + + + + + + + - - + + - + - - - + + + - + diff --git a/assets/xml/objects/object_ikana_obj.xml b/assets/xml/objects/object_ikana_obj.xml index e0490a349..0b67e7757 100644 --- a/assets/xml/objects/object_ikana_obj.xml +++ b/assets/xml/objects/object_ikana_obj.xml @@ -1,38 +1,38 @@  - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - + + + + + + + + - + @@ -58,10 +58,10 @@ - - - - + + + + diff --git a/assets/xml/objects/object_ikn_demo.xml b/assets/xml/objects/object_ikn_demo.xml index 53d5c65a1..bbb803499 100644 --- a/assets/xml/objects/object_ikn_demo.xml +++ b/assets/xml/objects/object_ikn_demo.xml @@ -1,7 +1,7 @@  - + @@ -44,13 +44,13 @@ - - - - - - - + + + + + + + @@ -64,19 +64,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -90,18 +90,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_ikninside_obj.xml b/assets/xml/objects/object_ikninside_obj.xml index 98ae6d34f..26d1e1206 100644 --- a/assets/xml/objects/object_ikninside_obj.xml +++ b/assets/xml/objects/object_ikninside_obj.xml @@ -1,15 +1,15 @@  - - + + - + - + @@ -22,27 +22,27 @@ - - - - - - - - + + + + + + + + - - + + - - - + + + - + diff --git a/assets/xml/objects/object_iknv_obj.xml b/assets/xml/objects/object_iknv_obj.xml index 58926c0e3..5c54c71da 100644 --- a/assets/xml/objects/object_iknv_obj.xml +++ b/assets/xml/objects/object_iknv_obj.xml @@ -24,19 +24,19 @@ - - + + - - + + - - + + - - - - + + + + @@ -57,14 +57,14 @@ - + - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_in.xml b/assets/xml/objects/object_in.xml index 15b2382aa..ee7ceb3a0 100644 --- a/assets/xml/objects/object_in.xml +++ b/assets/xml/objects/object_in.xml @@ -1,10 +1,10 @@  - - - + + + - + @@ -113,21 +113,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_in2.xml b/assets/xml/objects/object_in2.xml index bcd04091b..e903185b4 100644 --- a/assets/xml/objects/object_in2.xml +++ b/assets/xml/objects/object_in2.xml @@ -1,6 +1,6 @@  - + @@ -67,16 +67,16 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/assets/xml/objects/object_js.xml b/assets/xml/objects/object_js.xml index 1335b8287..6d93f7ac2 100644 --- a/assets/xml/objects/object_js.xml +++ b/assets/xml/objects/object_js.xml @@ -1,10 +1,10 @@  - - - - - + + + + + @@ -40,6 +40,6 @@ - + diff --git a/assets/xml/objects/object_jso.xml b/assets/xml/objects/object_jso.xml index a397311c4..bfe271d69 100644 --- a/assets/xml/objects/object_jso.xml +++ b/assets/xml/objects/object_jso.xml @@ -50,26 +50,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -115,8 +115,8 @@ - - - + + + From 190b78549e0fa1a801786e73d914185e1fbca2a6 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 11 Sep 2023 17:38:31 -0700 Subject: [PATCH 079/121] Non libultra Boot Cleanup (#1370) * reorganize * math64 * rcp_utils * osSyncPrintfUnused * comment spacing --- Makefile | 11 +- include/PR/hardware.h | 85 ------ include/PR/os_internal.h | 1 + include/PR/os_internal_reg.h | 4 +- include/PR/os_internal_rsp.h | 13 + include/PR/rcp.h | 259 +++++++++++++++++- include/PR/rsp.h | 58 ---- include/functions.h | 6 +- include/ultra64.h | 1 - spec | 64 ++--- src/audio/lib/aisetnextbuf.c | 2 +- src/{boot_O2_g3 => boot}/CIC6105.c | 0 src/{boot_O2 => boot/O2}/__osMalloc.c | 0 src/{boot_O2 => boot/O2}/__osMemcpy.c | 0 src/{boot_O2 => boot/O2}/__osMemset.c | 0 src/{boot_O2 => boot/O2}/__osStrcmp.c | 0 src/{boot_O2 => boot/O2}/__osStrcpy.c | 0 src/{boot_O2 => boot/O2}/debug.c | 0 src/{boot_O2 => boot/O2}/fmodf.c | 0 src/{boot_O2 => boot/O2}/gfxprint.c | 0 src/{boot_O2 => boot/O2}/loadfragment.c | 0 src/{boot_O2 => boot/O2}/loadfragment2.c | 0 .../boot_80086760.c => boot/O2/math64.c} | 0 src/{boot_O2 => boot/O2}/mtxuty-cvt.c | 0 src/{boot_O2 => boot/O2}/padsetup.c | 0 src/{boot_O2 => boot/O2}/padutils.c | 0 src/{boot_O2 => boot/O2}/printutils.c | 0 src/{boot_O2 => boot/O2}/rand.c | 0 src/boot/O2/rcp_utils.c | 23 ++ src/{boot_O2 => boot/O2}/sleep.c | 0 src/{boot_O2 => boot/O2}/stackcheck.c | 0 src/{boot_O2 => boot/O2}/system_heap.c | 0 src/{boot_O2 => boot/O2}/system_malloc.c | 0 src/{boot_O2_g3 => boot}/boot_main.c | 0 src/{boot_O2_g3 => boot}/build.c | 0 src/{boot_O2_g3 => boot}/fault.c | 0 src/{boot_O2_g3 => boot}/fault_drawer.c | 0 src/{boot_O2_g3 => boot}/idle.c | 0 src/{boot_O2_g3 => boot}/irqmgr.c | 0 src/{boot_O2_g3 => boot}/syncprintf.c | 3 +- src/{boot_O2_g3 => boot}/viconfig.c | 0 src/{boot_O2_g3 => boot}/yaz0.c | 0 src/{boot_O2_g3 => boot}/z_std_dma.c | 0 src/boot_O2/boot_80084940.c | 15 - src/libultra/io/cartrominit.c | 2 +- src/libultra/io/devmgr.c | 2 +- src/libultra/io/epirawdma.c | 2 +- src/libultra/io/epirawread.c | 2 +- src/libultra/io/epirawwrite.c | 2 +- src/libultra/io/pirawdma.c | 2 +- src/libultra/io/sirawdma.c | 4 +- tools/disasm/files.txt | 8 +- tools/disasm/functions.txt | 6 +- tools/sizes/boot_functions.csv | 32 +-- 54 files changed, 366 insertions(+), 241 deletions(-) create mode 100644 include/PR/os_internal_rsp.h delete mode 100644 include/PR/rsp.h rename src/{boot_O2_g3 => boot}/CIC6105.c (100%) rename src/{boot_O2 => boot/O2}/__osMalloc.c (100%) rename src/{boot_O2 => boot/O2}/__osMemcpy.c (100%) rename src/{boot_O2 => boot/O2}/__osMemset.c (100%) rename src/{boot_O2 => boot/O2}/__osStrcmp.c (100%) rename src/{boot_O2 => boot/O2}/__osStrcpy.c (100%) rename src/{boot_O2 => boot/O2}/debug.c (100%) rename src/{boot_O2 => boot/O2}/fmodf.c (100%) rename src/{boot_O2 => boot/O2}/gfxprint.c (100%) rename src/{boot_O2 => boot/O2}/loadfragment.c (100%) rename src/{boot_O2 => boot/O2}/loadfragment2.c (100%) rename src/{boot_O2/boot_80086760.c => boot/O2/math64.c} (100%) rename src/{boot_O2 => boot/O2}/mtxuty-cvt.c (100%) rename src/{boot_O2 => boot/O2}/padsetup.c (100%) rename src/{boot_O2 => boot/O2}/padutils.c (100%) rename src/{boot_O2 => boot/O2}/printutils.c (100%) rename src/{boot_O2 => boot/O2}/rand.c (100%) create mode 100644 src/boot/O2/rcp_utils.c rename src/{boot_O2 => boot/O2}/sleep.c (100%) rename src/{boot_O2 => boot/O2}/stackcheck.c (100%) rename src/{boot_O2 => boot/O2}/system_heap.c (100%) rename src/{boot_O2 => boot/O2}/system_malloc.c (100%) rename src/{boot_O2_g3 => boot}/boot_main.c (100%) rename src/{boot_O2_g3 => boot}/build.c (100%) rename src/{boot_O2_g3 => boot}/fault.c (100%) rename src/{boot_O2_g3 => boot}/fault_drawer.c (100%) rename src/{boot_O2_g3 => boot}/idle.c (100%) rename src/{boot_O2_g3 => boot}/irqmgr.c (100%) rename src/{boot_O2_g3 => boot}/syncprintf.c (52%) rename src/{boot_O2_g3 => boot}/viconfig.c (100%) rename src/{boot_O2_g3 => boot}/yaz0.c (100%) rename src/{boot_O2_g3 => boot}/z_std_dma.c (100%) delete mode 100644 src/boot_O2/boot_80084940.c diff --git a/Makefile b/Makefile index d8878ac4b..e08d983c8 100644 --- a/Makefile +++ b/Makefile @@ -207,8 +207,7 @@ DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d) $(shell mkdir -p build/baserom $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(ASSET_BIN_DIRS),build/$(dir))) # directory flags -build/src/boot_O2/%.o: OPTFLAGS := -O2 -build/src/boot_O2_g3/%.o: OPTFLAGS := -O2 -g3 +build/src/boot/O2/%.o: OPTFLAGS := -O2 build/src/libultra/os/%.o: OPTFLAGS := -O1 build/src/libultra/voice/%.o: OPTFLAGS := -O2 @@ -225,8 +224,8 @@ build/assets/%.o: OPTFLAGS := -O1 build/assets/%.o: ASM_PROC_FLAGS := # file flags -build/src/boot_O2_g3/fault.o: CFLAGS += -trapuv -build/src/boot_O2_g3/fault_drawer.o: CFLAGS += -trapuv +build/src/boot/fault.o: CFLAGS += -trapuv +build/src/boot/fault_drawer.o: CFLAGS += -trapuv build/src/code/jpegutils.o: OPTFLAGS := -O2 build/src/code/jpegdecoder.o: OPTFLAGS := -O2 @@ -239,8 +238,8 @@ build/src/libultra/libc/llcvt.o: OPTFLAGS := -O1 build/src/libultra/libc/llcvt.o: MIPS_VERSION := -mips3 -32 # cc & asm-processor -build/src/boot_O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- -build/src/boot_O2_g3/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- +build/src/boot/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- +build/src/boot/O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/src/libultra/%.o: CC := $(CC_OLD) # Needed at least until voice is decompiled diff --git a/include/PR/hardware.h b/include/PR/hardware.h index 3bcf1b7fc..c6f27bdff 100644 --- a/include/PR/hardware.h +++ b/include/PR/hardware.h @@ -15,93 +15,8 @@ // Volatile access wrapper, enforcing uncached memory #define HW_REG(reg, type) *(volatile type*)((reg) | KSEG1) -#define AI_DRAM_ADDR_REG 0x04500000 -#define AI_LEN_REG 0x04500004 -#define AI_CONTROL_REG 0x04500008 -#define AI_STATUS_REG 0x0450000C -#define AI_DACRATE_REG 0x04500010 -#define AI_BITRATE_REG 0x04500014 - -#define AI_STATUS_AI_BUSY (1 << 30) -#define AI_STATUS_AI_FULL (1 << 31) - -#define VI_STATUS_REG 0x04400000 -#define VI_CONTROL_REG 0x04400000 -#define VI_ORIGIN_REG 0x04400004 -#define VI_DRAM_ADDR_REG 0x04400004 -#define VI_WIDTH_REG 0x04400008 -#define VI_H_WIDTH_REG 0x04400008 -#define VI_INTR_REG 0x0440000C -#define VI_V_INTER_REG 0x0440000C -#define VI_CURRENT_REG 0x04400010 -#define VI_V_CURRENT_LINE_REG 0x04400010 -#define VI_BURST_REG 0x04400014 -#define VI_TIMING_REG 0x04400014 -#define VI_V_SYNC_REG 0x04400018 //VI vertical sync -#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync -#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap -#define VI_H_SYNC_LEAP_REG 0x04400020 -#define VI_H_START_REG 0x04400024 //VI horizontal video -#define VI_H_VIDEO_REG 0x04400024 -#define VI_V_START_REG 0x04400028 //VI vertical video -#define VI_V_VIDEO_REG 0x04400028 -#define VI_V_BURST_REG 0x0440002C //VI vertical burst -#define VI_X_SCALE_REG 0x04400030 //VI x-scale -#define VI_Y_SCALE_REG 0x04400034 //VI y-scale - -#define SP_IMEM_START 0x04001000 -#define SP_IMEM_SIZE 0x1000 - -#define SP_DMEM_START 0x04000000 -#define SP_DMEM_SIZE 0x1000 - #define TMEM_SIZE 0x1000 -#define SP_MEM_ADDR_REG 0x04040000 -#define SP_DRAM_ADDR_REG 0x04040004 -#define SP_RD_LEN_REG 0x04040008 -#define SP_WR_LEN_REG 0x0404000C -#define SP_STATUS_REG 0x04040010 -#define SP_DMA_FULL_REG 0x04040014 -#define SP_DMA_BUSY_REG 0x04040018 -#define SP_PC_REG 0x04080000 - -#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address -#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address -#define PI_RD_LEN_REG 0x04600008 //PI read length -#define PI_WR_LEN_REG 0x0460000C //PI write length -#define PI_STATUS_REG 0x04600010 //PI status -#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency -#define PI_DOMAIN1_REG 0x04600014 -#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width -#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size -#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release -#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency -#define PI_DOMAIN2_REG 0x04600024 -#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width -#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size -#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release - -#define PI_STATUS_BUSY (1 << 0) -#define PI_STATUS_IOBUSY (1 << 1) -#define PI_STATUS_ERROR (1 << 2) - -#define PI_STATUS_RESET_CONTROLLER (1 << 0) -#define PI_STATUS_CLEAR_INTR (1 << 1) - -#define SI_DRAM_ADDR_REG 0x04800000 -#define SI_PIF_ADDR_RD64B_REG 0x04800004 -#define SI_PIF_ADDR_WR64B_REG 0x04800010 -#define SI_STATUS_REG 0x04800018 - -#define SI_STATUS_DMA_BUSY (1 << 0) -#define SI_STATUS_IO_READ_BUSY (1 << 1) -#define SI_STATUS_DMA_ERROR (1 << 3) -#define SI_STATUS_INTERRUPT (1 << 12) - -#define PIF_RAM_START 0x1FC007C0 -#define PIF_RAM_SIZE 0x40 - #define MI_INIT_MODE_REG 0x04300000 #define MI_MODE_REG MI_INIT_MODE_REG #define MI_VERSION_REG 0x04300004 diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index eadd0182b..944edfabf 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -4,6 +4,7 @@ #include "ultratypes.h" #include "os_message.h" #include "os_pi.h" +#include "os_internal_rsp.h" typedef struct { diff --git a/include/PR/os_internal_reg.h b/include/PR/os_internal_reg.h index 753692017..98e71cfe5 100644 --- a/include/PR/os_internal_reg.h +++ b/include/PR/os_internal_reg.h @@ -1,5 +1,5 @@ -#ifndef PR_OS_INTERNAL_REG -#define PR_OS_INTERNAL_REG +#ifndef PR_OS_INTERNAL_REG_H +#define PR_OS_INTERNAL_REG_H #include "ultratypes.h" #include "os_exception.h" diff --git a/include/PR/os_internal_rsp.h b/include/PR/os_internal_rsp.h new file mode 100644 index 000000000..d7b73096c --- /dev/null +++ b/include/PR/os_internal_rsp.h @@ -0,0 +1,13 @@ +#ifndef PR_OS_INTERNAL_RSP_H +#define PR_OS_INTERNAL_RSP_H + +#include "ultratypes.h" +#include "libc/stddef.h" + +u32 __osSpGetStatus(void); +void __osSpSetStatus(u32 data); +s32 __osSpSetPc(void* pc); +s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); + + +#endif diff --git a/include/PR/rcp.h b/include/PR/rcp.h index 1c97c64e3..1f2b57de5 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -1,15 +1,98 @@ #ifndef PR_RCP_H #define PR_RCP_H +/** + * PIF Physical memory map (total size = 2 KB) + * + * Size Description Mode + * 1FC007FF +-------+-----------------+-----+ + * | 64 B | JoyChannel RAM | R/W | + * 1FC007C0 +-------+-----------------+-----+ + * |1984 B | Boot ROM | * | * = Reserved + * 1FC00000 +-------+-----------------+-----+ + */ +#define PIF_ROM_START 0x1FC00000 +#define PIF_ROM_END 0x1FC007BF +#define PIF_RAM_START 0x1FC007C0 +#define PIF_RAM_END 0x1FC007FF + +/* + * Patterns to interpret VI_CONTROL_REG + */ +#define VI_CTRL_TYPE_16 0x00002 /* [1:0] pixel size: 16 bit */ +#define VI_CTRL_TYPE_32 0x00003 /* [1:0] pixel size: 32 bit */ +#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* 2: default = on */ +#define VI_CTRL_GAMMA_ON 0x00008 /* 3: default = on */ +#define VI_CTRL_DIVOT_ON 0x00010 /* 4: default = on */ +#define VI_CTRL_SERRATE_ON 0x00040 /* 6: on if interlaced */ +#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_PIXEL_ADV_MASK 0x01000 /* [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_1 0x01000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_2 0x02000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_3 0x03000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* 16: dither-filter mode */ + + #define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ #define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ #define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */ -#define DEVICE_TYPE_CART 0 /* ROM cartridge */ -#define DEVICE_TYPE_BULK 1 /* ROM bulk */ -#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ -#define DEVICE_TYPE_SRAM 3 /* SRAM */ -#define DEVICE_TYPE_INIT 7 /* initial value */ +/** + * Audio Interface (AI) Registers + */ +#define AI_BASE_REG 0x04500000 + +/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */ +#define AI_DRAM_ADDR_REG (AI_BASE_REG + 0x00) /* R0: DRAM address */ + +/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */ +/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */ +#define AI_LEN_REG (AI_BASE_REG + 0x04) /* R1: Length */ + +/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */ +#define AI_CONTROL_REG (AI_BASE_REG + 0x08) /* R2: DMA Control */ + +/* Value for control register */ +#define AI_CONTROL_DMA_ON 1 /* LSB = 1: DMA enable*/ +#define AI_CONTROL_DMA_OFF 0 /* LSB = 1: DMA enable*/ + +/* + * AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy + * Note that a 1->0 transition in ai_full will set interrupt + * (W): clear audio interrupt + */ +#define AI_STATUS_REG (AI_BASE_REG + 0x0C) /* R3: Status */ + +/* Value for status register */ +#define AI_STATUS_FIFO_FULL (1 << 31) +#define AI_STATUS_DMA_BUSY (1 << 30) + +/* + * AI DAC sample period register (W): [13:0] dac rate + * - vid_clock/(dperiod + 1) is the DAC sample rate + * - (dperiod + 1) >= 66 * (aclockhp + 1) must be true + */ +#define AI_DACRATE_REG (AI_BASE_REG + 0x10) /* R4: DAC rate 14-lsb*/ + +/* DAC rate = video clock / audio frequency + * - DAC rate >= (66 * Bit rate) must be true + */ +#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */ +#define AI_MIN_DAC_RATE 132 + +/* + * AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) + * - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate + * - The abus clock stops if aclockhp is zero + */ +#define AI_BITRATE_REG (AI_BASE_REG + 0x14) /* R5: Bit rate 4-lsb */ + +/* Bit rate <= (DAC rate / 66) */ +#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */ +#define AI_MIN_BIT_RATE 2 #define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ #define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ @@ -18,6 +101,172 @@ #define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ +#define DEVICE_TYPE_CART 0 /* ROM cartridge */ +#define DEVICE_TYPE_BULK 1 /* ROM bulk */ +#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ +#define DEVICE_TYPE_SRAM 3 /* SRAM */ +#define DEVICE_TYPE_INIT 7 /* initial value */ + +/** + * Signal Processor (SP) Memory + */ +#define SP_DMEM_START 0x04000000 +#define SP_DMEM_END 0x04000FFF +#define SP_IMEM_START 0x04001000 +#define SP_IMEM_END 0x04001FFF + +#define SP_MEM_ADDR_REG 0x04040000 +#define SP_DRAM_ADDR_REG 0x04040004 +#define SP_RD_LEN_REG 0x04040008 +#define SP_WR_LEN_REG 0x0404000C +#define SP_STATUS_REG 0x04040010 +#define SP_DMA_FULL_REG 0x04040014 +#define SP_DMA_BUSY_REG 0x04040018 +#define SP_PC_REG 0x04080000 + +/** + * SP_STATUS_REG: write bits + */ +#define SP_CLR_HALT (1 << 0) +#define SP_SET_HALT (1 << 1) +#define SP_CLR_BROKE (1 << 2) +#define SP_CLR_INTR (1 << 3) +#define SP_SET_INTR (1 << 4) +#define SP_CLR_SSTEP (1 << 5) +#define SP_SET_SSTEP (1 << 6) +#define SP_CLR_INTR_BREAK (1 << 7) +#define SP_SET_INTR_BREAK (1 << 8) +#define SP_CLR_SIG0 (1 << 9) +#define SP_SET_SIG0 (1 << 10) +#define SP_CLR_SIG1 (1 << 11) +#define SP_SET_SIG1 (1 << 12) +#define SP_CLR_SIG2 (1 << 13) +#define SP_SET_SIG2 (1 << 14) +#define SP_CLR_SIG3 (1 << 15) +#define SP_SET_SIG3 (1 << 16) +#define SP_CLR_SIG4 (1 << 17) +#define SP_SET_SIG4 (1 << 18) +#define SP_CLR_SIG5 (1 << 19) +#define SP_SET_SIG5 (1 << 20) +#define SP_CLR_SIG6 (1 << 21) +#define SP_SET_SIG6 (1 << 22) +#define SP_CLR_SIG7 (1 << 23) +#define SP_SET_SIG7 (1 << 24) + +/* + * SP_STATUS_REG: read bits + */ +#define SP_STATUS_HALT (1 << 0) +#define SP_STATUS_BROKE (1 << 1) +#define SP_STATUS_DMA_BUSY (1 << 2) +#define SP_STATUS_DMA_FULL (1 << 3) +#define SP_STATUS_IO_FULL (1 << 4) +#define SP_STATUS_SSTEP (1 << 5) +#define SP_STATUS_INTR_BREAK (1 << 6) +#define SP_STATUS_SIG0 (1 << 7) +#define SP_STATUS_SIG1 (1 << 8) +#define SP_STATUS_SIG2 (1 << 9) +#define SP_STATUS_SIG3 (1 << 10) +#define SP_STATUS_SIG4 (1 << 11) +#define SP_STATUS_SIG5 (1 << 12) +#define SP_STATUS_SIG6 (1 << 13) +#define SP_STATUS_SIG7 (1 << 14) + +/** + * SP_STATUS_REG: use of SIG bits + */ +#define SP_CLR_YIELD SP_CLR_SIG0 +#define SP_SET_YIELD SP_SET_SIG0 +#define SP_STATUS_YIELD SP_STATUS_SIG0 +#define SP_CLR_YIELDED SP_CLR_SIG1 +#define SP_SET_YIELDED SP_SET_SIG1 +#define SP_STATUS_YIELDED SP_STATUS_SIG1 +#define SP_CLR_TASKDONE SP_CLR_SIG2 +#define SP_SET_TASKDONE SP_SET_SIG2 +#define SP_STATUS_TASKDONE SP_STATUS_SIG2 +#define SP_CLR_RSPSIGNAL SP_CLR_SIG3 +#define SP_SET_RSPSIGNAL SP_SET_SIG3 +#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3 +#define SP_CLR_CPUSIGNAL SP_CLR_SIG4 +#define SP_SET_CPUSIGNAL SP_SET_SIG4 +#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4 + +#define VI_STATUS_REG 0x04400000 +#define VI_CONTROL_REG 0x04400000 +#define VI_ORIGIN_REG 0x04400004 +#define VI_DRAM_ADDR_REG 0x04400004 +#define VI_WIDTH_REG 0x04400008 +#define VI_H_WIDTH_REG 0x04400008 +#define VI_INTR_REG 0x0440000C +#define VI_V_INTER_REG 0x0440000C +#define VI_CURRENT_REG 0x04400010 +#define VI_V_CURRENT_LINE_REG 0x04400010 +#define VI_BURST_REG 0x04400014 +#define VI_TIMING_REG 0x04400014 +#define VI_V_SYNC_REG 0x04400018 // VI vertical sync +#define VI_H_SYNC_REG 0x0440001C // VI horizontal sync +#define VI_LEAP_REG 0x04400020 // VI horizontal sync leap +#define VI_H_SYNC_LEAP_REG 0x04400020 +#define VI_H_START_REG 0x04400024 // VI horizontal video +#define VI_H_VIDEO_REG 0x04400024 +#define VI_V_START_REG 0x04400028 // VI vertical video +#define VI_V_VIDEO_REG 0x04400028 +#define VI_V_BURST_REG 0x0440002C // VI vertical burst +#define VI_X_SCALE_REG 0x04400030 // VI x-scale +#define VI_Y_SCALE_REG 0x04400034 // VI y-scale + +#define PI_DRAM_ADDR_REG 0x04600000 // PI DRAM address +#define PI_CART_ADDR_REG 0x04600004 // PI pbus (cartridge) address +#define PI_RD_LEN_REG 0x04600008 // PI read length +#define PI_WR_LEN_REG 0x0460000C // PI write length +#define PI_STATUS_REG 0x04600010 // PI status +#define PI_BSD_DOM1_LAT_REG 0x04600014 // PI dom1 latency +#define PI_DOMAIN1_REG 0x04600014 +#define PI_BSD_DOM1_PWD_REG 0x04600018 // PI dom1 pulse width +#define PI_BSD_DOM1_PGS_REG 0x0460001C // PI dom1 page size +#define PI_BSD_DOM1_RLS_REG 0x04600020 // PI dom1 release +#define PI_BSD_DOM2_LAT_REG 0x04600024 // PI dom2 latency +#define PI_DOMAIN2_REG 0x04600024 +#define PI_BSD_DOM2_PWD_REG 0x04600028 // PI dom2 pulse width +#define PI_BSD_DOM2_PGS_REG 0x0460002C // PI dom2 page size +#define PI_BSD_DOM2_RLS_REG 0x04600030 // PI dom2 release + +#define PI_STATUS_DMA_BUSY (1 << 0) +#define PI_STATUS_IO_BUSY (1 << 1) +#define PI_STATUS_ERROR (1 << 2) + +/* + * PI_STATUS_REG: write bits + */ +#define PI_STATUS_RESET (1 << 0) +#define PI_SET_RESET PI_STATUS_RESET + +#define PI_STATUS_CLR_INTR (1 << 1) +#define PI_CLR_INTR PI_STATUS_CLR_INTR + +#define PI_DMA_BUFFER_SIZE 128 + +#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */ +#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */ +#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */ +#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */ +#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */ + +/** + * Serial Interface (SI) Registers + */ +#define SI_BASE_REG 0x04800000 + +#define SI_DRAM_ADDR_REG (SI_BASE_REG + 0x00) +#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG + 0x04) +#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG + 0x10) +#define SI_STATUS_REG (SI_BASE_REG + 0x18) + +#define SI_STATUS_DMA_BUSY (1 << 0) +#define SI_STATUS_IO_READ_BUSY (1 << 1) +#define SI_STATUS_DMA_ERROR (1 << 3) +#define SI_STATUS_INTERRUPT (1 << 12) + #define IO_READ(addr) (*(vu32*)PHYS_TO_K1(addr)) #define IO_WRITE(addr,data) (*(vu32*)PHYS_TO_K1(addr)=(u32)(data)) diff --git a/include/PR/rsp.h b/include/PR/rsp.h deleted file mode 100644 index 467db831c..000000000 --- a/include/PR/rsp.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef PR_RSP_H -#define PR_RSP_H - -#include "ultratypes.h" -#include "libc/stddef.h" - - -/* SP Status Flags */ -#define SP_STATUS_HALT (1 << 0) -#define SP_STATUS_BROKE (1 << 1) -#define SP_STATUS_DMA_BUSY (1 << 2) -#define SP_STATUS_DMA_FULL (1 << 3) -#define SP_STATUS_IO_FULL (1 << 4) -#define SP_STATUS_SSTEP (1 << 5) -#define SP_STATUS_INTR_BREAK (1 << 6) -#define SP_STATUS_YIELD (1 << 7) // SIG0 -#define SP_STATUS_YIELDED (1 << 8) // SIG1 -#define SP_STATUS_TASKDONE (1 << 9) // SIG2 -#define SP_STATUS_SIG3 (1 << 10) -#define SP_STATUS_SIG4 (1 << 11) -#define SP_STATUS_SIG5 (1 << 12) -#define SP_STATUS_SIG6 (1 << 13) -#define SP_STATUS_SIG7 (1 << 14) - -#define SP_CLR_HALT (1 << 0) -#define SP_SET_HALT (1 << 1) -#define SP_CLR_BROKE (1 << 2) -#define SP_CLR_INTR (1 << 3) -#define SP_SET_INTR (1 << 4) -#define SP_CLR_SSTEP (1 << 5) -#define SP_SET_SSTEP (1 << 6) -#define SP_CLR_INTR_BREAK (1 << 7) -#define SP_SET_INTR_BREAK (1 << 8) -#define SP_CLR_SIG0 (1 << 9) -#define SP_SET_SIG0 (1 << 10) -#define SP_CLR_SIG1 (1 << 11) -#define SP_SET_SIG1 (1 << 12) -#define SP_CLR_SIG2 (1 << 13) -#define SP_SET_SIG2 (1 << 14) -#define SP_CLR_SIG3 (1 << 15) -#define SP_SET_SIG3 (1 << 16) -#define SP_CLR_SIG4 (1 << 17) -#define SP_SET_SIG4 (1 << 18) -#define SP_CLR_SIG5 (1 << 19) -#define SP_SET_SIG5 (1 << 20) -#define SP_CLR_SIG6 (1 << 21) -#define SP_SET_SIG6 (1 << 22) -#define SP_CLR_SIG7 (1 << 23) -#define SP_SET_SIG7 (1 << 24) - - -u32 __osSpGetStatus(void); -void __osSpSetStatus(u32 data); -s32 __osSpSetPc(void* pc); -s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); - - -#endif diff --git a/include/functions.h b/include/functions.h index 7eb67e3ba..4c6c74cef 100644 --- a/include/functions.h +++ b/include/functions.h @@ -40,11 +40,11 @@ void CIC6105_PrintRomInfo(void); void CIC6105_AddRomInfoFaultPage(void); void CIC6105_RemoveRomInfoFaultPage(void); void func_800818F4(void); -void __osSyncVPrintf(const char* fmt, ...); +void osSyncPrintfUnused(const char* fmt, ...); void rmonPrintf(const char* fmt, ...); -void func_80084940(void); -void func_80084968(void); +void RcpUtils_PrintRegisterStatus(void); +void RcpUtils_Reset(void); void PadUtils_Init(Input* input); void func_80085150(void); diff --git a/include/ultra64.h b/include/ultra64.h index 54bb66d69..58431bde8 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -14,7 +14,6 @@ #include "PR/sptask.h" #include "PR/rcp.h" #include "PR/rdp.h" -#include "PR/rsp.h" #include "PR/r4300.h" #include "PR/ucode.h" #include "PR/viint.h" diff --git a/spec b/spec index 4612c1801..abc0da4ad 100644 --- a/spec +++ b/spec @@ -13,38 +13,38 @@ endseg beginseg name "boot" address 0x80080060 - include "build/src/boot_O2_g3/boot_main.o" + include "build/src/boot/boot_main.o" include "build/data/boot/rspboot.data.o" - include "build/src/boot_O2_g3/idle.o" - include "build/src/boot_O2_g3/viconfig.o" + include "build/src/boot/idle.o" + include "build/src/boot/viconfig.o" include "build/data/boot/viconfig.data.o" - include "build/src/boot_O2_g3/z_std_dma.o" - include "build/src/boot_O2_g3/yaz0.o" - include "build/src/boot_O2_g3/irqmgr.o" - include "build/src/boot_O2_g3/CIC6105.o" - include "build/src/boot_O2_g3/syncprintf.o" - include "build/src/boot_O2_g3/fault.o" - include "build/src/boot_O2_g3/fault_drawer.o" - include "build/src/boot_O2/boot_80084940.o" - include "build/src/boot_O2/loadfragment.o" - include "build/src/boot_O2/loadfragment2.o" - include "build/src/boot_O2/padutils.o" - include "build/src/boot_O2/stackcheck.o" - include "build/src/boot_O2/gfxprint.o" + include "build/src/boot/z_std_dma.o" + include "build/src/boot/yaz0.o" + include "build/src/boot/irqmgr.o" + include "build/src/boot/CIC6105.o" + include "build/src/boot/syncprintf.o" + include "build/src/boot/fault.o" + include "build/src/boot/fault_drawer.o" + include "build/src/boot/O2/rcp_utils.o" + include "build/src/boot/O2/loadfragment.o" + include "build/src/boot/O2/loadfragment2.o" + include "build/src/boot/O2/padutils.o" + include "build/src/boot/O2/stackcheck.o" + include "build/src/boot/O2/gfxprint.o" include "build/data/boot/gfxprint.data.o" - include "build/src/boot_O2/mtxuty-cvt.o" - include "build/src/boot_O2/debug.o" - include "build/src/boot_O2/system_heap.o" - include "build/src/boot_O2/padsetup.o" - include "build/src/boot_O2/boot_80086760.o" + include "build/src/boot/O2/mtxuty-cvt.o" + include "build/src/boot/O2/debug.o" + include "build/src/boot/O2/system_heap.o" + include "build/src/boot/O2/padsetup.o" + include "build/src/boot/O2/math64.o" include "build/asm/boot/fp.text.o" include "build/data/boot/fp.data.o" - include "build/src/boot_O2/system_malloc.o" - include "build/src/boot_O2/rand.o" - include "build/src/boot_O2/__osMalloc.o" + include "build/src/boot/O2/system_malloc.o" + include "build/src/boot/O2/rand.o" + include "build/src/boot/O2/__osMalloc.o" include "build/src/libultra/rmon/sprintf.o" - include "build/src/boot_O2/printutils.o" - include "build/src/boot_O2/sleep.o" + include "build/src/boot/O2/printutils.o" + include "build/src/boot/O2/sleep.o" include "build/asm/boot/setcause.text.o" include "build/src/libultra/os/sendmesg.o" include "build/src/libultra/io/pfsfreeblocks.o" @@ -232,12 +232,12 @@ beginseg include "build/src/libultra/os/sethwinterrupt.o" include "build/asm/boot/getwatchlo.text.o" include "build/asm/boot/setwatchlo.text.o" - include "build/src/boot_O2/fmodf.o" - include "build/src/boot_O2/__osMemset.o" - include "build/src/boot_O2/__osStrcmp.o" - include "build/src/boot_O2/__osStrcpy.o" - include "build/src/boot_O2/__osMemcpy.o" - include "build/src/boot_O2_g3/build.o" + include "build/src/boot/O2/fmodf.o" + include "build/src/boot/O2/__osMemset.o" + include "build/src/boot/O2/__osStrcmp.o" + include "build/src/boot/O2/__osStrcpy.o" + include "build/src/boot/O2/__osMemcpy.o" + include "build/src/boot/build.o" endseg beginseg diff --git a/src/audio/lib/aisetnextbuf.c b/src/audio/lib/aisetnextbuf.c index b82f28e6f..c3434b19a 100644 --- a/src/audio/lib/aisetnextbuf.c +++ b/src/audio/lib/aisetnextbuf.c @@ -19,7 +19,7 @@ s32 osAiSetNextBuffer(void* buf, u32 size) { // Originally a call to __osAiDeviceBusy status = HW_REG(AI_STATUS_REG, s32); - if (status & AI_STATUS_AI_FULL) { + if (status & AI_STATUS_FIFO_FULL) { return -1; } diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot/CIC6105.c similarity index 100% rename from src/boot_O2_g3/CIC6105.c rename to src/boot/CIC6105.c diff --git a/src/boot_O2/__osMalloc.c b/src/boot/O2/__osMalloc.c similarity index 100% rename from src/boot_O2/__osMalloc.c rename to src/boot/O2/__osMalloc.c diff --git a/src/boot_O2/__osMemcpy.c b/src/boot/O2/__osMemcpy.c similarity index 100% rename from src/boot_O2/__osMemcpy.c rename to src/boot/O2/__osMemcpy.c diff --git a/src/boot_O2/__osMemset.c b/src/boot/O2/__osMemset.c similarity index 100% rename from src/boot_O2/__osMemset.c rename to src/boot/O2/__osMemset.c diff --git a/src/boot_O2/__osStrcmp.c b/src/boot/O2/__osStrcmp.c similarity index 100% rename from src/boot_O2/__osStrcmp.c rename to src/boot/O2/__osStrcmp.c diff --git a/src/boot_O2/__osStrcpy.c b/src/boot/O2/__osStrcpy.c similarity index 100% rename from src/boot_O2/__osStrcpy.c rename to src/boot/O2/__osStrcpy.c diff --git a/src/boot_O2/debug.c b/src/boot/O2/debug.c similarity index 100% rename from src/boot_O2/debug.c rename to src/boot/O2/debug.c diff --git a/src/boot_O2/fmodf.c b/src/boot/O2/fmodf.c similarity index 100% rename from src/boot_O2/fmodf.c rename to src/boot/O2/fmodf.c diff --git a/src/boot_O2/gfxprint.c b/src/boot/O2/gfxprint.c similarity index 100% rename from src/boot_O2/gfxprint.c rename to src/boot/O2/gfxprint.c diff --git a/src/boot_O2/loadfragment.c b/src/boot/O2/loadfragment.c similarity index 100% rename from src/boot_O2/loadfragment.c rename to src/boot/O2/loadfragment.c diff --git a/src/boot_O2/loadfragment2.c b/src/boot/O2/loadfragment2.c similarity index 100% rename from src/boot_O2/loadfragment2.c rename to src/boot/O2/loadfragment2.c diff --git a/src/boot_O2/boot_80086760.c b/src/boot/O2/math64.c similarity index 100% rename from src/boot_O2/boot_80086760.c rename to src/boot/O2/math64.c diff --git a/src/boot_O2/mtxuty-cvt.c b/src/boot/O2/mtxuty-cvt.c similarity index 100% rename from src/boot_O2/mtxuty-cvt.c rename to src/boot/O2/mtxuty-cvt.c diff --git a/src/boot_O2/padsetup.c b/src/boot/O2/padsetup.c similarity index 100% rename from src/boot_O2/padsetup.c rename to src/boot/O2/padsetup.c diff --git a/src/boot_O2/padutils.c b/src/boot/O2/padutils.c similarity index 100% rename from src/boot_O2/padutils.c rename to src/boot/O2/padutils.c diff --git a/src/boot_O2/printutils.c b/src/boot/O2/printutils.c similarity index 100% rename from src/boot_O2/printutils.c rename to src/boot/O2/printutils.c diff --git a/src/boot_O2/rand.c b/src/boot/O2/rand.c similarity index 100% rename from src/boot_O2/rand.c rename to src/boot/O2/rand.c diff --git a/src/boot/O2/rcp_utils.c b/src/boot/O2/rcp_utils.c new file mode 100644 index 000000000..f587fad21 --- /dev/null +++ b/src/boot/O2/rcp_utils.c @@ -0,0 +1,23 @@ +#include "ultra64.h" + +void RcpUtils_PrintRegisterStatus(void) { + u32 spStatus = __osSpGetStatus(); + u32 dpStatus = osDpGetStatus(); + + if (spStatus) { + // stubbed debug prints + } + + if (dpStatus) { + // stubbed debug prints + } +} + +void RcpUtils_Reset(void) { + RcpUtils_PrintRegisterStatus(); + // Flush the RDP pipeline and freeze clock counter + osDpSetStatus(DPC_SET_FREEZE | DPC_SET_FLUSH); + // Halt the RSP, disable interrupt on break and set "task done" signal + __osSpSetStatus(SP_SET_HALT | SP_SET_TASKDONE | SP_CLR_INTR_BREAK); + RcpUtils_PrintRegisterStatus(); +} diff --git a/src/boot_O2/sleep.c b/src/boot/O2/sleep.c similarity index 100% rename from src/boot_O2/sleep.c rename to src/boot/O2/sleep.c diff --git a/src/boot_O2/stackcheck.c b/src/boot/O2/stackcheck.c similarity index 100% rename from src/boot_O2/stackcheck.c rename to src/boot/O2/stackcheck.c diff --git a/src/boot_O2/system_heap.c b/src/boot/O2/system_heap.c similarity index 100% rename from src/boot_O2/system_heap.c rename to src/boot/O2/system_heap.c diff --git a/src/boot_O2/system_malloc.c b/src/boot/O2/system_malloc.c similarity index 100% rename from src/boot_O2/system_malloc.c rename to src/boot/O2/system_malloc.c diff --git a/src/boot_O2_g3/boot_main.c b/src/boot/boot_main.c similarity index 100% rename from src/boot_O2_g3/boot_main.c rename to src/boot/boot_main.c diff --git a/src/boot_O2_g3/build.c b/src/boot/build.c similarity index 100% rename from src/boot_O2_g3/build.c rename to src/boot/build.c diff --git a/src/boot_O2_g3/fault.c b/src/boot/fault.c similarity index 100% rename from src/boot_O2_g3/fault.c rename to src/boot/fault.c diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot/fault_drawer.c similarity index 100% rename from src/boot_O2_g3/fault_drawer.c rename to src/boot/fault_drawer.c diff --git a/src/boot_O2_g3/idle.c b/src/boot/idle.c similarity index 100% rename from src/boot_O2_g3/idle.c rename to src/boot/idle.c diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot/irqmgr.c similarity index 100% rename from src/boot_O2_g3/irqmgr.c rename to src/boot/irqmgr.c diff --git a/src/boot_O2_g3/syncprintf.c b/src/boot/syncprintf.c similarity index 52% rename from src/boot_O2_g3/syncprintf.c rename to src/boot/syncprintf.c index 1cbceb595..7ceb04bb1 100644 --- a/src/boot_O2_g3/syncprintf.c +++ b/src/boot/syncprintf.c @@ -1,7 +1,6 @@ #include "global.h" -// This isn't a vprintf since it doesn't take a va_list -void __osSyncVPrintf(const char* fmt, ...) { +void osSyncPrintfUnused(const char* fmt, ...) { } void osSyncPrintf(const char* fmt, ...) { diff --git a/src/boot_O2_g3/viconfig.c b/src/boot/viconfig.c similarity index 100% rename from src/boot_O2_g3/viconfig.c rename to src/boot/viconfig.c diff --git a/src/boot_O2_g3/yaz0.c b/src/boot/yaz0.c similarity index 100% rename from src/boot_O2_g3/yaz0.c rename to src/boot/yaz0.c diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot/z_std_dma.c similarity index 100% rename from src/boot_O2_g3/z_std_dma.c rename to src/boot/z_std_dma.c diff --git a/src/boot_O2/boot_80084940.c b/src/boot_O2/boot_80084940.c deleted file mode 100644 index acee90fb9..000000000 --- a/src/boot_O2/boot_80084940.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "global.h" - -void func_80084940(void) { - u32 spStatus = __osSpGetStatus(); - u32 dpStatus = osDpGetStatus(); - - if (spStatus && dpStatus) {} // stubbed debug prints -} - -void func_80084968(void) { - func_80084940(); - osDpSetStatus(0x28); - __osSpSetStatus(0x4082); - func_80084940(); -} diff --git a/src/libultra/io/cartrominit.c b/src/libultra/io/cartrominit.c index 0825b472c..518be6624 100644 --- a/src/libultra/io/cartrominit.c +++ b/src/libultra/io/cartrominit.c @@ -28,7 +28,7 @@ OSPiHandle* osCartRomInit(void) { bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); /* Uses `status & PI_STATUS_ERROR` in OoT */ - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c index c3bbfa1f7..b27822afa 100644 --- a/src/libultra/io/devmgr.c +++ b/src/libultra/io/devmgr.c @@ -51,7 +51,7 @@ void __osDevMgrMain(void* arg) { __osEPiRawWriteIo(ioMesg->piHandle, 0x05000510, transfer->bmCtlShadow | 0x1000000); } block->errStatus = 4; - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; + HW_REG(PI_STATUS_REG, u32) = PI_CLR_INTR; __osSetGlobalIntMask(0x00100C01); } osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK); diff --git a/src/libultra/io/epirawdma.c b/src/libultra/io/epirawdma.c index aadd8ad5b..d0707dce9 100644 --- a/src/libultra/io/epirawdma.c +++ b/src/libultra/io/epirawdma.c @@ -4,7 +4,7 @@ s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, vo s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/epirawread.c b/src/libultra/io/epirawread.c index df0c6b603..1dd2d1381 100644 --- a/src/libultra/io/epirawread.c +++ b/src/libultra/io/epirawread.c @@ -4,7 +4,7 @@ s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data) { s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/epirawwrite.c b/src/libultra/io/epirawwrite.c index 1e0e694a7..fe8ce81c5 100644 --- a/src/libultra/io/epirawwrite.c +++ b/src/libultra/io/epirawwrite.c @@ -4,7 +4,7 @@ s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data) { s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) {} + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) {} if (__osCurrentHandle[handle->domain]->type != handle->type) { curHandle = __osCurrentHandle[handle->domain]; diff --git a/src/libultra/io/pirawdma.c b/src/libultra/io/pirawdma.c index 07aa1b822..90847c4be 100644 --- a/src/libultra/io/pirawdma.c +++ b/src/libultra/io/pirawdma.c @@ -3,7 +3,7 @@ s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size) { register int status = HW_REG(PI_STATUS_REG, u32); - while (status & (PI_STATUS_IOBUSY | PI_STATUS_BUSY)) { + while (status & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) { status = HW_REG(PI_STATUS_REG, u32); } diff --git a/src/libultra/io/sirawdma.c b/src/libultra/io/sirawdma.c index eb62fa2a3..08a347cc9 100644 --- a/src/libultra/io/sirawdma.c +++ b/src/libultra/io/sirawdma.c @@ -6,7 +6,7 @@ s32 __osSiRawStartDma(s32 direction, void* dramAddr) { } if (direction == OS_WRITE) { - osWritebackDCache(dramAddr, PIF_RAM_SIZE); + osWritebackDCache(dramAddr, ALIGN16(PIF_RAM_END - PIF_RAM_START)); } HW_REG(SI_DRAM_ADDR_REG, u32) = osVirtualToPhysical(dramAddr); @@ -18,7 +18,7 @@ s32 __osSiRawStartDma(s32 direction, void* dramAddr) { } if (direction == OS_READ) { - osInvalDCache(dramAddr, PIF_RAM_SIZE); + osInvalDCache(dramAddr, ALIGN16(PIF_RAM_END - PIF_RAM_START)); } return 0; } diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index a7f421191..e2d456ee6 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -49,7 +49,7 @@ 0x80081920 : "syncprintf", 0x80081980 : "fault", 0x80083EB0 : "fault_drawer", - 0x80084940 : "boot_80084940", + 0x80084940 : "rcp_utils", 0x800849A0 : "loadfragment", 0x80084DB0 : "loadfragment2", 0x80085130 : "padutils", @@ -59,7 +59,7 @@ 0x80086280 : "debug", 0x800862E0 : "system_heap", 0x80086620 : "padsetup", - 0x80086760 : "boot_80086760", + 0x80086760 : "math64", 0x80086C70 : "fp", 0x80086DD0 : "system_malloc", 0x80086FA0 : "rand", @@ -297,7 +297,7 @@ 0x80098C50 : "fault_drawer", 0x80099090 : "gfxprint", 0x800990B0 : "debug", - 0x800990C0 : "boot_80086760", + 0x800990C0 : "math64", 0x80099110 : "__osMalloc", 0x800991A0 : "setintmask", 0x80099220 : "sinf", @@ -320,7 +320,7 @@ 0x8009BE30 : "CIC6105", 0x8009BE50 : "fault", 0x8009CCD0 : "fault_drawer", - 0x8009CD10 : "boot_80086760", + 0x8009CD10 : "math64", 0x8009CD20 : "system_malloc", 0x8009CD50 : "rand", 0x8009CD60 : "__osMalloc", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 13519cb06..d060d23e2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -46,7 +46,7 @@ 0x8008189C:("CIC6105_AddRomInfoFaultPage",), 0x800818D0:("CIC6105_RemoveRomInfoFaultPage",), 0x800818F4:("func_800818F4",), - 0x80081920:("__osSyncVPrintf",), + 0x80081920:("osSyncPrintfUnused",), 0x8008193C:("osSyncPrintf",), 0x80081958:("rmonPrintf",), 0x80081980:("Fault_SleepImpl",), @@ -107,8 +107,8 @@ 0x8008486C:("FaultDrawer_SetDrawerFrameBuffer",), 0x800848A4:("FaultDrawer_SetInputCallback",), 0x800848B8:("FaultDrawer_Init",), - 0x80084940:("func_80084940",), - 0x80084968:("func_80084968",), + 0x80084940:("RcpUtils_PrintRegisterStatus",), + 0x80084968:("RcpUtils_Reset",), 0x800849A0:("Fragment_Relocate",), 0x80084C0C:("Fragment_Load",), 0x80084CD0:("Fragment_AllocateAndLoad",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index f2aec1cb4..61a69fe7f 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -43,7 +43,7 @@ asm/non_matchings/boot/CIC6105/CIC6105_PrintRomInfo.s,CIC6105_PrintRomInfo,0x800 asm/non_matchings/boot/CIC6105/CIC6105_AddRomInfoFaultPage.s,CIC6105_AddRomInfoFaultPage,0x8008189C,0xD asm/non_matchings/boot/CIC6105/CIC6105_RemoveRomInfoFaultPage.s,CIC6105_RemoveRomInfoFaultPage,0x800818D0,0x9 asm/non_matchings/boot/CIC6105/func_800818F4.s,func_800818F4,0x800818F4,0xB -asm/non_matchings/boot/syncprintf/__osSyncVPrintf.s,__osSyncVPrintf,0x80081920,0x7 +asm/non_matchings/boot/syncprintf/osSyncPrintfUnused.s,osSyncPrintfUnused,0x80081920,0x7 asm/non_matchings/boot/syncprintf/osSyncPrintf.s,osSyncPrintf,0x8008193C,0x7 asm/non_matchings/boot/syncprintf/rmonPrintf.s,rmonPrintf,0x80081958,0xA asm/non_matchings/boot/fault/Fault_SleepImpl.s,Fault_SleepImpl,0x80081980,0x1C @@ -104,8 +104,8 @@ asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawText.s,FaultDrawer_DrawText, asm/non_matchings/boot/fault_drawer/FaultDrawer_SetDrawerFrameBuffer.s,FaultDrawer_SetDrawerFrameBuffer,0x8008486C,0xE asm/non_matchings/boot/fault_drawer/FaultDrawer_SetInputCallback.s,FaultDrawer_SetInputCallback,0x800848A4,0x5 asm/non_matchings/boot/fault_drawer/FaultDrawer_Init.s,FaultDrawer_Init,0x800848B8,0x22 -asm/non_matchings/boot/boot_80084940/func_80084940.s,func_80084940,0x80084940,0xA -asm/non_matchings/boot/boot_80084940/func_80084968.s,func_80084968,0x80084968,0xE +asm/non_matchings/boot/rcp_utils/RcpUtils_PrintRegisterStatus.s,RcpUtils_PrintRegisterStatus,0x80084940,0xA +asm/non_matchings/boot/rcp_utils/RcpUtils_Reset.s,RcpUtils_Reset,0x80084968,0xE asm/non_matchings/boot/loadfragment/Fragment_Relocate.s,Fragment_Relocate,0x800849A0,0x9B asm/non_matchings/boot/loadfragment/Fragment_Load.s,Fragment_Load,0x80084C0C,0x31 asm/non_matchings/boot/loadfragment/Fragment_AllocateAndLoad.s,Fragment_AllocateAndLoad,0x80084CD0,0x38 @@ -163,19 +163,19 @@ asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHea asm/non_matchings/boot/boot_800862E0/SystemHeap_RunInits.s,SystemHeap_RunInits,0x80086588,0x1C asm/non_matchings/boot/boot_800862E0/SystemHeap_Init.s,SystemHeap_Init,0x800865F8,0xA asm/non_matchings/boot/padsetup/PadSetup_Init.s,PadSetup_Init,0x80086620,0x50 -asm/non_matchings/boot/boot_80086760/Math_FTanF.s,Math_FTanF,0x80086760,0xD -asm/non_matchings/boot/boot_80086760/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8 -asm/non_matchings/boot/boot_80086760/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8 -asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13 -asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49 -asm/non_matchings/boot/boot_80086760/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53 -asm/non_matchings/boot/boot_80086760/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10 -asm/non_matchings/boot/boot_80086760/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A -asm/non_matchings/boot/boot_80086760/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC -asm/non_matchings/boot/boot_80086760/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA +asm/non_matchings/boot/math64/Math_FTanF.s,Math_FTanF,0x80086760,0xD +asm/non_matchings/boot/math64/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8 +asm/non_matchings/boot/math64/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8 +asm/non_matchings/boot/math64/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8 +asm/non_matchings/boot/math64/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8 +asm/non_matchings/boot/math64/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8 +asm/non_matchings/boot/math64/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13 +asm/non_matchings/boot/math64/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49 +asm/non_matchings/boot/math64/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53 +asm/non_matchings/boot/math64/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10 +asm/non_matchings/boot/math64/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A +asm/non_matchings/boot/math64/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC +asm/non_matchings/boot/math64/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA asm/non_matchings/boot/fp/floorf.s,floorf,0x80086C70,0x3 asm/non_matchings/boot/fp/floor.s,floor,0x80086C7C,0x3 asm/non_matchings/boot/fp/lfloorf.s,lfloorf,0x80086C88,0x4 From 17068dadef42f29da350cb25de5f049ca31f3db3 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Wed, 13 Sep 2023 18:29:30 -0700 Subject: [PATCH 080/121] EnInvadepohDemo (Aliens cutscene actors) OK and documented (#1363) * EnInvadepohDemo (Aliens cutscene actors) OK and documented * Make bss variables non-static * Provide type to Actor_SpawnAsChild * Respond to hensldm's review * Introduce obvious misformat * Format again, see if that fixes it? * Push the misformat up so I can see how Jenkins complains * Fix formatting on my end (again) * Apparently I had to merge master to fix the formatting issue?????? * Respond to engineer's review --- spec | 4 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 6 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 6 +- .../z_en_invadepoh_demo.c | 810 ++++++++++++++++-- .../z_en_invadepoh_demo.h | 41 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 8 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 2 +- tools/disasm/functions.txt | 64 +- tools/disasm/variables.txt | 31 +- undefined_syms.txt | 16 - 10 files changed, 826 insertions(+), 162 deletions(-) diff --git a/spec b/spec index abc0da4ad..a05eecaa7 100644 --- a/spec +++ b/spec @@ -4851,9 +4851,7 @@ beginseg name "ovl_En_Invadepoh_Demo" compress include "build/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.data.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.bss.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.reloc.o" + include "build/src/overlays/actors/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo_reloc.o" endseg beginseg 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 a22bf3e46..c55c5bb3a 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -139,7 +139,7 @@ void EnBom_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.cylHeight = 10; this->flashSpeedScale = 7; - this->isPowderKeg = ENBOM_GETX_1(&this->actor); + this->isPowderKeg = ENBOM_GET_1(&this->actor); if (this->isPowderKeg) { play->actorCtx.flags |= ACTORCTX_FLAG_0; this->timer = gSaveContext.powderKegTimer; @@ -162,9 +162,9 @@ void EnBom_Init(Actor* thisx, PlayState* play) { func_80872648(play, &this->actor.world.pos); } - this->collider2Elements[0].info.toucher.damage += ENBOM_GETZ_FF00(thisx); + this->collider2Elements[0].info.toucher.damage += ENBOM_GET_FF00(thisx); this->actor.shape.rot.z &= 0xFF; - if (ENBOM_GETZ_80(&this->actor)) { + if (ENBOM_GET_80(&this->actor)) { this->actor.shape.rot.z |= 0xFF00; } diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h index 7ca26d3cb..723c11e8a 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -7,9 +7,9 @@ struct EnBom; typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); -#define ENBOM_GETX_1(thisx) ((thisx)->shape.rot.x & 1) -#define ENBOM_GETZ_80(thisx) ((thisx)->shape.rot.z & 0x80) -#define ENBOM_GETZ_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) +#define ENBOM_GET_1(thisx) ((thisx)->shape.rot.x & 1) +#define ENBOM_GET_80(thisx) ((thisx)->shape.rot.z & 0x80) +#define ENBOM_GET_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 014eea08e..cb5d73093 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -1,9 +1,21 @@ /* * File: z_en_invadepoh_demo.c * Overlay: ovl_En_Invadepoh_Demo - * Description: + * Description: Aliens cutscene actors + * + * This actor is responsible for handling the characters that appear in two cutscenes: + * 1. The cutscene where Romani introduces the aliens to the player. + * 2. The cutscene where the aliens abduct the cows and Romani from the barn. + * + * To be more specific, this actor has five variations: + * 1. An alien + * 2. Romani + * 3. A cow (minus the tail) + * 4. The UFO (which appears as a spinning ball of light) + * 5. A cow tail */ +#include "sys_cfb.h" #include "z_en_invadepoh_demo.h" #define FLAGS (ACTOR_FLAG_10) @@ -15,14 +27,72 @@ void EnInvadepohDemo_Destroy(Actor* thisx, PlayState* play); void EnInvadepohDemo_Update(Actor* thisx, PlayState* play); void EnInvadepohDemo_Draw(Actor* thisx, PlayState* play); -void func_80C19AB4(EnInvadepohDemo* this, PlayState* play); -void func_80C19D00(EnInvadepohDemo* this, PlayState* play); -void func_80C19D48(EnInvadepohDemo* this, PlayState* play); -void func_80C19E04(EnInvadepohDemo* this, PlayState* play); -void func_80C19EC0(EnInvadepohDemo* this, PlayState* play); -void func_80C19F7C(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Destroy(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Destroy(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_SelectCueAction(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Draw(EnInvadepohDemo* this, PlayState* play); + +#define DRAW_FLAG_SHOULD_DRAW 1 +#define EN_INVADEPOH_DEMO_CUEID_NONE -1 + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1, + /* 3 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_2, + /* 4 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_3, + /* 5 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_4, + /* 6 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_5, // Doesn't seem to be actually used in the final game + /* 7 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_MAX +} EnInvadepohDemoAlienCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_FOLLOW_PATH, + /* 3 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_MAX +} EnInvadepohDemoRomaniCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_COW_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_COW_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1, + /* 3 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2, + /* 4 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3, + /* 5 */ EN_INVADEPOH_DEMO_COW_CUEID_MAX +} EnInvadepohDemoCowCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_UFO_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_1, + /* 2 */ EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH, + /* 3 */ EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_2, // Doesn't seem to be actually used in the final game + /* 4 */ EN_INVADEPOH_DEMO_UFO_CUEID_MAX +} EnInvadepohDemoUfoCueId; -#if 0 ActorInit En_Invadepoh_Demo_InitVars = { ACTOR_EN_INVADEPOH_DEMO, ACTORCAT_PROP, @@ -35,134 +105,710 @@ ActorInit En_Invadepoh_Demo_InitVars = { (ActorFunc)EnInvadepohDemo_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AA74[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), +static s32 sCueTypes[EN_INVADEPOH_DEMO_TYPE_MAX] = { + CS_CMD_ACTOR_CUE_553, // EN_INVADEPOH_DEMO_TYPE_ALIEN + CS_CMD_ACTOR_CUE_554, // EN_INVADEPOH_DEMO_TYPE_ROMANI + CS_CMD_ACTOR_CUE_563, // EN_INVADEPOH_DEMO_TYPE_COW + CS_CMD_ACTOR_CUE_555, // EN_INVADEPOH_DEMO_TYPE_UFO + CS_CAM_STOP, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; + +static InitChainEntry sAlienInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AA88[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), - ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), +static InitChainEntry sRomaniInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAA0[] = { +static InitChainEntry sCowInitChain[] = { ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAB0[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE), - ICHAIN_VEC3S(shape.rot, 0, ICHAIN_CONTINUE), - ICHAIN_F32(terminalVelocity, -100, ICHAIN_CONTINUE), - ICHAIN_VEC3F_DIV1000(scale, 800, ICHAIN_STOP), +static InitChainEntry sUfoInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE), ICHAIN_VEC3S(shape.rot, 0, ICHAIN_CONTINUE), + ICHAIN_F32(terminalVelocity, -100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 800, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAC8[] = { +static InitChainEntry sCowTailInitChain[] = { ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -#endif +static EnInvadepohDemoFunc sInitFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_Alien_Init, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_Romani_Init, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Init, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_Ufo_Init, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Init, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -extern InitChainEntry D_80C1AA74[]; -extern InitChainEntry D_80C1AA88[]; -extern InitChainEntry D_80C1AAA0[]; -extern InitChainEntry D_80C1AAB0[]; -extern InitChainEntry D_80C1AAC8[]; +static EnInvadepohDemoFunc sDestroyFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Destroy, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Destroy, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -extern UNK_TYPE D_06000560; -extern UNK_TYPE D_06001D80; -extern UNK_TYPE D_06004264; -extern UNK_TYPE D_06004E98; -extern UNK_TYPE D_06011FC8; -extern UNK_TYPE D_06016588; +static EnInvadepohDemoFunc sAlienCueActionCsFuncs[EN_INVADEPOH_DEMO_ALIEN_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_ALIEN_CUEID_DO_NOTHING + EnInvadepohDemo_Alien_Idle, // EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_2 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_3 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_4 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_5 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C192A0.s") +static EnInvadepohDemoFunc sRomaniCueActionCsFuncs[EN_INVADEPOH_DEMO_ROMANI_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_ROMANI_CUEID_DO_NOTHING + EnInvadepohDemo_Romani_Idle, // EN_INVADEPOH_DEMO_ROMANI_CUEID_IDLE + EnInvadepohDemo_Romani_FollowPath, // EN_INVADEPOH_DEMO_ROMANI_CUEID_FOLLOW_PATH +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C192B0.s") +static EnInvadepohDemoFunc sCowCueActionCsFuncs[EN_INVADEPOH_DEMO_COW_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_COW_CUEID_DO_NOTHING + EnInvadepohDemo_Cow_Idle, // EN_INVADEPOH_DEMO_COW_CUEID_IDLE + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1 + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2 + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19334.s") +static EnInvadepohDemoFunc sUfoCueActionCsFuncs[EN_INVADEPOH_DEMO_UFO_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_UFO_CUEID_DO_NOTHING + EnInvadepohDemo_Ufo_Idle, // EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_1 + EnInvadepohDemo_Ufo_FollowPath, // EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH + EnInvadepohDemo_Ufo_Idle, // EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_2 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C193A8.s") +static EnInvadepohDemoFunc sDrawFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_Alien_Draw, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_Romani_Draw, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Draw, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_Ufo_Draw, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Draw, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19454.s") +MtxF sAlienLeftEyeBeamMtxF; +MtxF sAlienRightEyeBeamMtxF; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19498.s") +void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1950C.s") +void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sAlienInitChain); + this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000; + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19548.s") + this->actionFunc = EnInvadepohDemo_Alien_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19564.s") +void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sRomaniInitChain); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19590.s") + this->actionFunc = EnInvadepohDemo_Romani_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1965C.s") +void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sCowInitChain); + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0, + EN_INVADEPOH_DEMO_TYPE_COW_TAIL); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19688.s") + this->actionFunc = EnInvadepohDemo_Cow_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19754.s") +void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sUfoInitChain); + this->actionFunc = EnInvadepohDemo_SelectCueAction; + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1985C.s") +void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sCowTailInitChain); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1987C.s") + this->actionFunc = EnInvadepohDemo_CowTail_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C199BC.s") +void EnInvadepohDemo_Cow_Destroy(EnInvadepohDemo* this, PlayState* play) { + Actor* thisx = &this->actor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C199EC.s") + if (thisx->child != NULL) { + thisx->child->parent = NULL; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19AB4.s") + Actor_Kill(thisx->child); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19D00.s") +void EnInvadepohDemo_CowTail_Destroy(EnInvadepohDemo* this, PlayState* play) { + if (this->actor.parent != NULL) { + this->actor.parent->child = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19D48.s") +void EnInvadepohDemo_Alien_Idle(EnInvadepohDemo* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19E04.s") +void EnInvadepohDemo_Alien_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19EC0.s") + if (pathCount != 0) { + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + SkelAnime_Update(&this->skelAnime); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19F7C.s") +void EnInvadepohDemo_Romani_Idle(EnInvadepohDemo* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A038.s") +void EnInvadepohDemo_Romani_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A070.s") + if (pathCount != 0) { + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + SkelAnime_Update(&this->skelAnime); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A168.s") +/** + * Positions the cow tail actor at the appropriate spot on the cow's body and rotates it to + * match the cow's rotation. This function is also responsible for playing the cow's animation. + */ +void EnInvadepohDemo_Cow_UpdateCommon(EnInvadepohDemo* this, PlayState* play) { + s32 pad; + MtxF mtx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A244.s") + if (this->actor.child != NULL) { + Matrix_Push(); + Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, + &this->actor.shape.rot); + Matrix_Translate(0.0f, 57.0f, -36.0f, MTXMODE_APPLY); + Matrix_RotateXS(this->actor.shape.rot.x * -0.7f, MTXMODE_APPLY); + Matrix_RotateZS(this->actor.shape.rot.z * -0.7f, MTXMODE_APPLY); + Matrix_MultZero(&this->actor.child->world.pos); + Matrix_Get(&mtx); + Matrix_MtxFToYXZRot(&mtx, &this->actor.child->shape.rot, false); + Matrix_Pop(); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A590.s") + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A650.s") +void EnInvadepohDemo_Cow_Idle(EnInvadepohDemo* this, PlayState* play) { + EnInvadepohDemo_Cow_UpdateCommon(this, play); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A670.s") +void EnInvadepohDemo_Cow_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A6C8.s") + if (pathCount != 0) { + if (((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1) && (play->csCtx.curFrame == 343)) || + ((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2) && (play->csCtx.curFrame == 421)) || + ((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3) && (play->csCtx.curFrame == 521))) { + Actor_PlaySfx(&this->actor, NA_SE_EV_COW_CRY); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A854.s") + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + EnInvadepohDemo_Cow_UpdateCommon(this, play); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Init.s") +void EnInvadepohDemo_Ufo_Idle(EnInvadepohDemo* this, PlayState* play) { + this->ufoRotZ += 0x258; + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_UFO_FLY - SFX_FLAG); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Destroy.s") +void EnInvadepohDemo_Ufo_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Update.s") + if (pathCount != 0) { + this->ufoRotZ += 0x258; + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Draw.s") +/** + * Updates the actor's cue ID if certain conditions are met and calls a function based + * on their current cue ID. Specifically, cows and aliens offset the cue ID from their + * cue channel (which applies to *all* aliens/cows, not just this specific actor), then + * they compare this offset value to a value read from their params. If these two values + * match, the actor's cue ID is updated. + * + * The distinction between a "global" cue ID from the cue channel and a "local" cue ID + * specific to an instance of this actor is used to prevent all the cows or aliens from + * moving along the path at once. The cow or alien waits in a stationary "idle" state + * until the "global" cue ID changes to a specific value; if the cue ID offset matches + * what this actor specifies in its params, then that acts like a signal to tell the + * actor to update the "local" cue ID and start moving. The other cows or aliens in + * the scene should have different params, meaning the cue ID offset will not match; + * they will thus ignore this "global" cue ID change and remain idle. + */ +void EnInvadepohDemo_SelectCueAction(EnInvadepohDemo* this, PlayState* play) { + CsCmdActorCue* cue; + s32 cueIdOffset; + + if (Cutscene_IsCueInChannel(play, sCueTypes[this->type])) { + this->cueChannel = Cutscene_GetCueChannel(play, sCueTypes[this->type]); + cue = play->csCtx.actorCues[this->cueChannel]; + + switch (this->type) { + case EN_INVADEPOH_DEMO_TYPE_UFO: + if (this->cueId != cue->id) { + if (cue->id == EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH) { + Actor_PlaySfx(&this->actor, NA_SE_EV_UFO_DASH); + } + + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_ROMANI: + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_ALIEN: + if (cue->id > EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE) { + cueIdOffset = cue->id - EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1; + if (this->cueIdOffset != cueIdOffset) { + break; + } + } + + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_COW: + if (cue->id > EN_INVADEPOH_DEMO_COW_CUEID_IDLE) { + cueIdOffset = cue->id - EN_INVADEPOH_DEMO_COW_CUEID_IDLE; + if (this->cueIdOffset != cueIdOffset) { + break; + } + } + + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + default: + break; + } + + switch (this->type) { + case EN_INVADEPOH_DEMO_TYPE_UFO: + sUfoCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_ALIEN: + sAlienCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_ROMANI: + sRomaniCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_COW: + sCowCueActionCsFuncs[this->cueId](this, play); + break; + + default: + break; + } + } +} + +void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play) { + if (this->actor.parent == NULL) { + Actor_Kill(&this->actor); + return; + } + + SkelAnime_Update(&this->skelAnime); +} + +void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gAlienSkel, &gAlienFloatAnim, this->jointTable, this->morphTable, + ALIEN_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gAlienFloatAnim); + } +} + +void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gRomaniSkel, &gRomaniAbductedAnim, this->jointTable, + this->morphTable, ROMANI_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gRomaniAbductedAnim); + } +} + +void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gCowSkel, &gCowMooAnim, this->jointTable, this->morphTable, + COW_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gCowMooAnim); + } +} + +void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_CowTail_Idle; + SkelAnime_InitFlex(play, &this->skelAnime, &gCowTailSkel, &gCowTailSwishAnim, this->jointTable, + this->morphTable, COW_TAIL_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gCowTailSwishAnim); + } +} + +void EnInvadepohDemo_Ufo_UpdateMatrixTranslation(Vec3f* translation) { + MtxF* currentMatrix = Matrix_GetCurrent(); + + currentMatrix->xw = translation->x; + currentMatrix->yw = translation->y; + currentMatrix->zw = translation->z; +} + +s32 EnInvadepohDemo_Ufo_ShouldDrawLensFlare(PlayState* play, Vec3f* pos) { + Vec3f projectedPos; + f32 invW; + + Actor_GetProjectedPos(play, pos, &projectedPos, &invW); + if ((projectedPos.z > 1.0f) && (fabsf(projectedPos.x * invW) < 1.0f) && (fabsf(projectedPos.y * invW) < 1.0f)) { + f32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW); + f32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); + s32 wZ = (s32)(projectedPos.z * invW * 16352.0f) + 16352; + + if (wZ < SysCfb_GetZBufferInt(screenPosX, screenPosY)) { + return true; + } + } + + return false; +} + +void EnInvadepohDemo_Alien_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, + Gfx** gfx) { + if (limbIndex == ALIEN_LIMB_LEFT_EYE) { + Matrix_Push(); + Matrix_RotateZS(-0x53ED, MTXMODE_APPLY); + Matrix_RotateYS(-0x3830, MTXMODE_APPLY); + Matrix_Scale(1.0f, 1.0f, 1.5f, MTXMODE_APPLY); + Matrix_Get(&sAlienLeftEyeBeamMtxF); + Matrix_Pop(); + } else if (limbIndex == ALIEN_LIMB_RIGHT_EYE) { + Matrix_Push(); + Matrix_RotateZS(-0x53ED, MTXMODE_APPLY); + Matrix_RotateYS(-0x47D0, MTXMODE_APPLY); + Matrix_Scale(1.0f, 1.0f, 1.5f, MTXMODE_APPLY); + Matrix_Get(&sAlienRightEyeBeamMtxF); + Matrix_Pop(); + } +} + +void EnInvadepohDemo_Alien_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + Mtx* mtx; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Matrix_Push(); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gAlienEmptyTexAnim)); + Scene_SetRenderModeXlu(play, 0, 1); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + POLY_OPA_DISP = + SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + EnInvadepohDemo_Alien_PostLimbDraw, &this->actor, POLY_OPA_DISP); + + // In EnInvadepoh, the eye beam alpha is controlled by an instance variable, and there is an if-block that checks + // to see if this variable is not zero. In this actor, the eye beam alpha is hardcoded, but this block is still + // necessary to prevent reordering; this is likely a result of copy-pasting from EnInvadepoh. + if (true) { + Gfx* gfx; + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gAlienEyeBeamTexAnim)); + + OPEN_DISPS(play->state.gfxCtx); + + gfx = POLY_XLU_DISP; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0xFF, 240, 180, 100, 60); + gDPSetEnvColor(gfx++, 255, 255, 255, 150); + Matrix_Mult(&sAlienLeftEyeBeamMtxF, MTXMODE_NEW); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gAlienEyeBeamDL); + Matrix_Mult(&sAlienRightEyeBeamMtxF, MTXMODE_NEW); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gAlienEyeBeamDL); + POLY_XLU_DISP = gfx; + } + } + + CLOSE_DISPS(play->state.gfxCtx); + } + + CLOSE_DISPS(play->state.gfxCtx); + + // In EnInvadepoh, the code to draw the light flash checks an instance variable which is set to true if the actor + // should draw. In this actor, an equivalent variable is checked in EnInvadepohDemo_Draw, so it isn't checked here. + // However, this block is still necessary to prevent reordering; this is likely a result of copy-pasting from + // EnInvadepoh. Similarly, this function requires a lot of extra stack space for unused variables; the names and + // types of these variables are inferred from EnInvadepoh's version of this code. + if (true) { + Gfx* gfx; + Vec3f glowOffset; + Vec3f glowPos; // unused, inferred from EnInvadepoh + s32 glowAlpha; // unused, inferred from EnInvadepoh + + OPEN_DISPS(play->state.gfxCtx); + + gfx = POLY_XLU_DISP; + gfx = Gfx_SetupDL20_NoCD(gfx); + + gDPSetDither(gfx++, G_CD_NOISE); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, + 0); + Matrix_Mult(&play->billboardMtxF, MTXMODE_NEW); + Matrix_MultVecZ(90.0f, &glowOffset); + Matrix_Translate(this->actor.world.pos.x + glowOffset.x, this->actor.world.pos.y + glowOffset.y + 25.0f, + this->actor.world.pos.z + glowOffset.z, MTXMODE_NEW); + Matrix_Scale(0.15f, 0.15f, 0.15f, MTXMODE_APPLY); + gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); + gDPSetPrimColor(gfx++, 0, 0, 240, 180, 100, 100); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gameplay_keep_DL_029CF0); + POLY_XLU_DISP = gfx; + } + + CLOSE_DISPS(play->state.gfxCtx); + } + + Matrix_Pop(); +} + +void EnInvadepohDemo_Romani_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(&gRomaniEyeSadTex)); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(&gRomaniMouthHangingOpenTex)); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + NULL, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} + +s32 EnInvadepohDemo_Cow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + if (limbIndex == COW_LIMB_NOSE_RING) { + *dList = NULL; + } + + return false; +} + +void EnInvadepohDemo_Cow_Draw(EnInvadepohDemo* this, PlayState* play) { + Gfx_SetupDL37_Opa(play->state.gfxCtx); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnInvadepohDemo_Cow_OverrideLimbDraw, NULL, &this->actor); +} + +void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + Vec3f flashPos = gZeroVec3f; + Mtx* mtx; + + flashPos.x = this->actor.world.pos.x; + flashPos.y = this->actor.world.pos.y; + flashPos.z = this->actor.world.pos.z; + EnInvadepohDemo_Ufo_UpdateMatrixTranslation(&flashPos); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateZS(this->ufoRotZ, MTXMODE_APPLY); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + mtx = Matrix_NewMtx(play->state.gfxCtx); + if (mtx != NULL) { + gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0x80, 255, 255, 0, 180); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 50, 0, 0); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); + } + + CLOSE_DISPS(play->state.gfxCtx); + + if (EnInvadepohDemo_Ufo_ShouldDrawLensFlare(play, &flashPos)) { + func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); + } +} + +void EnInvadepohDemo_CowTail_Draw(EnInvadepohDemo* this, PlayState* play) { + Gfx_SetupDL37_Opa(play->state.gfxCtx); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + NULL, &this->actor); +} + +void EnInvadepohDemo_Init(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + this->cueIdOffset = EN_INVADEPOH_DEMO_GET_CUEID_OFFSET(&this->actor); + this->type = EN_INVADEPOH_DEMO_GET_TYPE(&this->actor); + if ((this->type < EN_INVADEPOH_DEMO_TYPE_ALIEN) || (this->type > EN_INVADEPOH_DEMO_TYPE_COW_TAIL)) { + Actor_Kill(&this->actor); + return; + } + + if (this->type == EN_INVADEPOH_DEMO_TYPE_UFO) { + this->actor.world.rot.z = 0; + this->speed = EN_INVADEPOH_DEMO_GET_SPEED(&this->actor); + this->actor.shape.rot.z = this->actor.world.rot.z; + } else { + this->actor.world.rot.z = 0; + this->speed = EN_INVADEPOH_DEMO_GET_SPEED(&this->actor) / 10.0f; + this->actor.shape.rot.z = this->actor.world.rot.z; + } + + this->drawFlags = 0; + this->cueId = EN_INVADEPOH_DEMO_CUEID_NONE; + this->ufoRotZ = 0; + this->pathIndex = EN_INVADEPOH_DEMO_GET_PATH_INDEX(&this->actor); + this->pointIndex = 0; + this->objectIndex = -1; + sInitFuncs[this->type](this, play); +} + +void EnInvadepohDemo_Destroy(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + sDestroyFuncs[this->type](this, play); +} + +void EnInvadepohDemo_Update(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + this->actionFunc(this, play); +} + +void EnInvadepohDemo_Draw(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + if ((this->cueId != EN_INVADEPOH_DEMO_CUEID_NONE) && (this->drawFlags & DRAW_FLAG_SHOULD_DRAW)) { + sDrawFuncs[this->type](this, play); + } +} diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h index ff13ca668..ac93078ec 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h @@ -2,15 +2,54 @@ #define Z_EN_INVADEPOH_DEMO_H #include "global.h" +#include "assets/objects/gameplay_keep/gameplay_keep.h" +#include "assets/objects/object_cow/object_cow.h" +#include "assets/objects/object_ma1/object_ma1.h" +#include "assets/objects/object_uch/object_uch.h" + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_TYPE_ALIEN, + /* 1 */ EN_INVADEPOH_DEMO_TYPE_ROMANI, + /* 2 */ EN_INVADEPOH_DEMO_TYPE_COW, + /* 3 */ EN_INVADEPOH_DEMO_TYPE_UFO, + /* 4 */ EN_INVADEPOH_DEMO_TYPE_COW_TAIL, + /* 5 */ EN_INVADEPOH_DEMO_TYPE_MAX +} EnInvadepohDemoType; + +#define EN_INVADEPOH_DEMO_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define EN_INVADEPOH_DEMO_GET_CUEID_OFFSET(thisx) (((thisx)->params >> 11) & 0x7) +#define EN_INVADEPOH_DEMO_GET_PATH_INDEX(thisx) (((thisx)->params >> 4) & 0x7F) +#define EN_INVADEPOH_DEMO_GET_SPEED(thisx) ((thisx)->shape.rot.z) struct EnInvadepohDemo; typedef void (*EnInvadepohDemoActionFunc)(struct EnInvadepohDemo*, PlayState*); +// This actor has multiple arrays of function pointers which are used for things like +// Init, Destroy, Draw, and something similar to an Update function. Some of these +// functions do not have any stack space for a recast temp, which means that they must +// take an EnInvadepohDemo pointer, not an Actor pointer. In other words, these +// functions are not ActorFuncs. This typedef is used for these arrays of function +// pointers to better distinguish them from "actual" action functions, even if they +// have the exact same signature. +typedef void (*EnInvadepohDemoFunc)(struct EnInvadepohDemo*, PlayState*); + typedef struct EnInvadepohDemo { /* 0x000 */ Actor actor; /* 0x144 */ EnInvadepohDemoActionFunc actionFunc; - /* 0x148 */ char unk_148[0x180]; + /* 0x148 */ s32 type; // "type" + /* 0x14C */ f32 speed; + /* 0x150 */ s32 cueChannel; + /* 0x154 */ s32 cueId; // "demo_mode" + /* 0x158 */ s32 pathIndex; + /* 0x15C */ s32 pointIndex; + /* 0x160 */ s32 objectIndex; + /* 0x164 */ s32 drawFlags; // Only has one flag to control whether or not to draw + /* 0x168 */ s32 cueIdOffset; + /* 0x16C */ s16 ufoRotZ; + /* 0x170 */ SkelAnime skelAnime; + /* 0x1B4 */ Vec3s jointTable[ROMANI_LIMB_MAX]; + /* 0x23E */ Vec3s morphTable[ROMANI_LIMB_MAX]; } EnInvadepohDemo; // size = 0x2C8 #endif // Z_EN_INVADEPOH_DEMO_H diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index c9828e0ff..3a58ba62b 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -542,12 +542,10 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { MTXMODE_APPLY); } - gfx = Gfx_SetupDL20_NoCD(POLY_XLU_DISP); + gfx = POLY_XLU_DISP; + gfx = Gfx_SetupDL20_NoCD(gfx); - gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); - if (1) {} - if (1) {} - if (1) {} + gDPSetDither(gfx++, G_CD_NOISE); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); gDPSetPrimColor(gfx++, 0, 0, 130, 0, 255, 100); 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 662543774..6440493cf 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -701,7 +701,7 @@ void func_80B32F04(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; gfx = Gfx_SetupDL20_NoCD(gfx); - gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); + gDPSetDither(gfx++, G_CD_NOISE); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d060d23e2..e146d804d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16876,38 +16876,38 @@ 0x80C18E94:("EnAnd_Update",), 0x80C18ED0:("EnAnd_TransformLimbDraw",), 0x80C19084:("EnAnd_Draw",), - 0x80C192A0:("func_80C192A0",), - 0x80C192B0:("func_80C192B0",), - 0x80C19334:("func_80C19334",), - 0x80C193A8:("func_80C193A8",), - 0x80C19454:("func_80C19454",), - 0x80C19498:("func_80C19498",), - 0x80C1950C:("func_80C1950C",), - 0x80C19548:("func_80C19548",), - 0x80C19564:("func_80C19564",), - 0x80C19590:("func_80C19590",), - 0x80C1965C:("func_80C1965C",), - 0x80C19688:("func_80C19688",), - 0x80C19754:("func_80C19754",), - 0x80C1985C:("func_80C1985C",), - 0x80C1987C:("func_80C1987C",), - 0x80C199BC:("func_80C199BC",), - 0x80C199EC:("func_80C199EC",), - 0x80C19AB4:("func_80C19AB4",), - 0x80C19D00:("func_80C19D00",), - 0x80C19D48:("func_80C19D48",), - 0x80C19E04:("func_80C19E04",), - 0x80C19EC0:("func_80C19EC0",), - 0x80C19F7C:("func_80C19F7C",), - 0x80C1A038:("func_80C1A038",), - 0x80C1A070:("func_80C1A070",), - 0x80C1A168:("func_80C1A168",), - 0x80C1A244:("func_80C1A244",), - 0x80C1A590:("func_80C1A590",), - 0x80C1A650:("func_80C1A650",), - 0x80C1A670:("func_80C1A670",), - 0x80C1A6C8:("func_80C1A6C8",), - 0x80C1A854:("func_80C1A854",), + 0x80C192A0:("EnInvadepohDemo_DoNothing",), + 0x80C192B0:("EnInvadepohDemo_Alien_Init",), + 0x80C19334:("EnInvadepohDemo_Romani_Init",), + 0x80C193A8:("EnInvadepohDemo_Cow_Init",), + 0x80C19454:("EnInvadepohDemo_Ufo_Init",), + 0x80C19498:("EnInvadepohDemo_CowTail_Init",), + 0x80C1950C:("EnInvadepohDemo_Cow_Destroy",), + 0x80C19548:("EnInvadepohDemo_CowTail_Destroy",), + 0x80C19564:("EnInvadepohDemo_Alien_Idle",), + 0x80C19590:("EnInvadepohDemo_Alien_FollowPath",), + 0x80C1965C:("EnInvadepohDemo_Romani_Idle",), + 0x80C19688:("EnInvadepohDemo_Romani_FollowPath",), + 0x80C19754:("EnInvadepohDemo_Cow_UpdateCommon",), + 0x80C1985C:("EnInvadepohDemo_Cow_Idle",), + 0x80C1987C:("EnInvadepohDemo_Cow_FollowPath",), + 0x80C199BC:("EnInvadepohDemo_Ufo_Idle",), + 0x80C199EC:("EnInvadepohDemo_Ufo_FollowPath",), + 0x80C19AB4:("EnInvadepohDemo_SelectCueAction",), + 0x80C19D00:("EnInvadepohDemo_CowTail_Idle",), + 0x80C19D48:("EnInvadepohDemo_Alien_WaitForObject",), + 0x80C19E04:("EnInvadepohDemo_Romani_WaitForObject",), + 0x80C19EC0:("EnInvadepohDemo_Cow_WaitForObject",), + 0x80C19F7C:("EnInvadepohDemo_CowTail_WaitForObject",), + 0x80C1A038:("EnInvadepohDemo_Ufo_UpdateMatrixTranslation",), + 0x80C1A070:("EnInvadepohDemo_Ufo_ShouldDrawLensFlare",), + 0x80C1A168:("EnInvadepohDemo_Alien_PostLimbDraw",), + 0x80C1A244:("EnInvadepohDemo_Alien_Draw",), + 0x80C1A590:("EnInvadepohDemo_Romani_Draw",), + 0x80C1A650:("EnInvadepohDemo_Cow_OverrideLimbDraw",), + 0x80C1A670:("EnInvadepohDemo_Cow_Draw",), + 0x80C1A6C8:("EnInvadepohDemo_Ufo_Draw",), + 0x80C1A854:("EnInvadepohDemo_CowTail_Draw",), 0x80C1A8A4:("EnInvadepohDemo_Init",), 0x80C1A98C:("EnInvadepohDemo_Destroy",), 0x80C1A9C0:("EnInvadepohDemo_Update",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 5047e9804..fc49a3b43 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -16415,26 +16415,25 @@ 0x80C19218:("D_80C19218","UNK_TYPE4","",0x4), 0x80C19220:("D_80C19220","UNK_TYPE1","",0x1), 0x80C1AA40:("En_Invadepoh_Demo_InitVars","UNK_TYPE1","",0x1), - 0x80C1AA60:("D_80C1AA60","UNK_TYPE1","",0x1), - 0x80C1AA62:("D_80C1AA62","UNK_TYPE1","",0x1), - 0x80C1AA74:("D_80C1AA74","UNK_TYPE1","",0x1), - 0x80C1AA88:("D_80C1AA88","UNK_TYPE1","",0x1), - 0x80C1AAA0:("D_80C1AAA0","UNK_TYPE1","",0x1), - 0x80C1AAB0:("D_80C1AAB0","UNK_TYPE1","",0x1), - 0x80C1AAC8:("D_80C1AAC8","UNK_TYPE1","",0x1), - 0x80C1AAD8:("D_80C1AAD8","UNK_PTR","",0x4), - 0x80C1AAEC:("D_80C1AAEC","UNK_PTR","",0x4), - 0x80C1AB00:("D_80C1AB00","UNK_PTR","",0x4), - 0x80C1AB1C:("D_80C1AB1C","UNK_TYPE1","",0x1), - 0x80C1AB28:("D_80C1AB28","UNK_PTR","",0x4), - 0x80C1AB3C:("D_80C1AB3C","UNK_PTR","",0x4), - 0x80C1AB4C:("D_80C1AB4C","UNK_PTR","",0x4), + 0x80C1AA60:("sCueTypes","s32","[5]",0x14), + 0x80C1AA74:("sAlienInitChain","InitChainEntry","[5]",0x14), + 0x80C1AA88:("sRomaniInitChain","InitChainEntry","[6]",0x18), + 0x80C1AAA0:("sCowInitChain","InitChainEntry","[4]",0x10), + 0x80C1AAB0:("sUfoInitChain","InitChainEntry","[6]",0x18), + 0x80C1AAC8:("sCowTailInitChain","InitChainEntry","[4]",0x10), + 0x80C1AAD8:("sInitFuncs","UNK_PTR","[5]",0x14), + 0x80C1AAEC:("sDestroyFuncs","UNK_PTR","[5]",0x14), + 0x80C1AB00:("sAlienCueActionCsFuncs","UNK_PTR","[7]",0x1C), + 0x80C1AB1C:("sRomaniCueActionCsFuncs","UNK_TYPE1","[3]",0xC), + 0x80C1AB28:("sCowCueActionCsFuncs","UNK_PTR","[5]",0x14), + 0x80C1AB3C:("sUfoCueActionCsFuncs","UNK_PTR","[4]",0x10), + 0x80C1AB4C:("sDrawFuncs","UNK_PTR","[5]",0x14), 0x80C1AB60:("D_80C1AB60","f32","",0x4), 0x80C1AB64:("D_80C1AB64","f32","",0x4), 0x80C1AB68:("D_80C1AB68","f32","",0x4), 0x80C1AB6C:("D_80C1AB6C","f32","",0x4), - 0x80C1AD40:("D_80C1AD40","UNK_TYPE1","",0x1), - 0x80C1AD80:("D_80C1AD80","UNK_TYPE1","",0x1), + 0x80C1AD40:("sAlienLeftEyeBeamMtxF","MtxF","",0x40), + 0x80C1AD80:("sAlienRightEyeBeamMtxF","MtxF","",0x40), 0x80C1B520:("Obj_Danpeilift_InitVars","UNK_TYPE1","",0x1), 0x80C1B540:("D_80C1B540","UNK_TYPE1","",0x1), 0x80C1B550:("D_80C1B550","f32","",0x4), diff --git a/undefined_syms.txt b/undefined_syms.txt index 81f14ced8..a6a5bc8ae 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -470,22 +470,6 @@ D_06015C28 = 0x06015C28; D_060156D8 = 0x060156D8; D_06016720 = 0x06016720; -// ovl_En_Invadepoh_Demo - -D_06000080 = 0x06000080; -D_06000550 = 0x06000550; -D_06000560 = 0x06000560; -D_06001D80 = 0x06001D80; -D_06004010 = 0x06004010; -D_06004264 = 0x06004264; -D_06004C30 = 0x06004C30; -D_06004E50 = 0x06004E50; -D_06004E98 = 0x06004E98; -D_06011FC8 = 0x06011FC8; -D_06012FC8 = 0x06012FC8; -D_06013928 = 0x06013928; -D_06016588 = 0x06016588; - // ovl_En_Jso D_060081F4 = 0x060081F4; From cd38fbbab4694c9713922b3f0172688eaaae9ed9 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Wed, 13 Sep 2023 19:06:52 -0700 Subject: [PATCH 081/121] Change all uses of "rotational velocity" to "angular velocity" (#1375) * Change all uses of "rotational velocity" to "angular velocity" * Respond to review --- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 72 +++++++++---------- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h | 14 ++-- .../ovl_En_Grasshopper/z_en_grasshopper.c | 8 +-- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 27 ++++--- src/overlays/actors/ovl_En_Pp/z_en_pp.h | 4 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 16 ++--- src/overlays/actors/ovl_En_Rd/z_en_rd.h | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 6 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 10 +-- .../actors/ovl_En_Tanron5/z_en_tanron5.h | 4 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 50 ++++++------- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 62 ++++++++-------- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h | 10 +-- 15 files changed, 144 insertions(+), 145 deletions(-) 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 93c0214df..8e96cae50 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 @@ -100,9 +100,9 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { s32 i; innerPetalYPos = this->dyna.actor.world.pos.y + -10.0f; - angle = this->petalZRotation - 0x2000; + angle = this->petalRotZ - 0x2000; outerPetalPosScale = (Math_CosS(angle) * 77.42784f) + 74.95192f; - outerPetalYPos = (Math_SinS(this->petalZRotation) * 77.42784f) + this->dyna.actor.world.pos.y + -64.74976f; + outerPetalYPos = (Math_SinS(this->petalRotZ) * 77.42784f) + this->dyna.actor.world.pos.y + -64.74976f; for (i = 0; i < ARRAY_COUNT(this->innerPetalPosRot); i++) { innerPetalPosRot = &this->innerPetalPosRot[i]; @@ -114,14 +114,14 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { innerPetalPosRot->pos.z = (Math_CosS(angle) * 74.95192f) + this->dyna.actor.world.pos.z; innerPetalPosRot->rot.x = this->dyna.actor.shape.rot.x; innerPetalPosRot->rot.y = angle - 0x4000; - innerPetalPosRot->rot.z = this->dyna.actor.shape.rot.z + this->petalZRotation; + innerPetalPosRot->rot.z = this->dyna.actor.shape.rot.z + this->petalRotZ; outerPetalPosRot->pos.x = (Math_SinS(angle) * outerPetalPosScale) + this->dyna.actor.world.pos.x; outerPetalPosRot->pos.y = outerPetalYPos; outerPetalPosRot->pos.z = (Math_CosS(angle) * outerPetalPosScale) + this->dyna.actor.world.pos.z; outerPetalPosRot->rot.x = innerPetalPosRot->rot.x; outerPetalPosRot->rot.y = innerPetalPosRot->rot.y; - outerPetalPosRot->rot.z = innerPetalPosRot->rot.z + this->outerPetalZRotation; + outerPetalPosRot->rot.z = innerPetalPosRot->rot.z + this->outerPetalRotZ; } } @@ -130,10 +130,10 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { * as if they are "settling" into place. This function is responsible * for computing the extra rotation for this "settling". */ -void BgNumaHana_UpdateSettleRotation(s16* settleZRotation, s16* settleAngle, f32* settleScale, f32 scaleStep) { +void BgNumaHana_UpdateSettleRotation(s16* settleRotZ, s16* settleAngle, f32* settleScale, f32 scaleStep) { *settleAngle += 0x32C8; Math_StepToF(settleScale, 0.0f, scaleStep); - *settleZRotation += (s16)(Math_SinS(*settleAngle) * *settleScale); + *settleRotZ += (s16)(Math_SinS(*settleAngle) * *settleScale); } void BgNumaHana_Init(Actor* thisx, PlayState* play) { @@ -164,15 +164,15 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - this->petalZRotation = 0x2000; - this->innerPetalZRotation = 0x2000; - this->innerPetalZRotationalVelocity = 0; - this->settleZRotation = 0; + this->petalRotZ = 0x2000; + this->innerPetalRotZ = 0x2000; + this->innerPetalAngularVelocityZ = 0; + this->settleRotZ = 0; this->settleAngle = 0; this->settleScale = 0.0f; - this->outerPetalZRotation = -0x4000; - this->outerPetalZRotationalVelocity = 0; - this->flowerRotationalVelocity = 0x147; + this->outerPetalRotZ = -0x4000; + this->outerPetalAngularVelocityZ = 0; + this->flowerAngularVelocity = 0x147; this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 210.0f; FireObj_SetState2(&this->fire, 0.05f, FIRE_STATE_FULLY_LIT); @@ -238,13 +238,13 @@ void BgNumaHana_SetupUnfoldInnerPetals(BgNumaHana* this) { * parts of the petals that are closest to the stalk. */ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) { - Math_StepToS(&this->innerPetalZRotationalVelocity, 240, 14); - if (Math_ScaledStepToS(&this->innerPetalZRotation, 0x2000, this->innerPetalZRotationalVelocity)) { + Math_StepToS(&this->innerPetalAngularVelocityZ, 240, 14); + if (Math_ScaledStepToS(&this->innerPetalRotZ, 0x2000, this->innerPetalAngularVelocityZ)) { if (this->transitionTimer >= 11) { BgNumaHana_SetupUnfoldOuterPetals(this); } else { if (this->transitionTimer <= 0) { - this->settleZRotation = 0; + this->settleRotZ = 0; this->settleAngle = 0; this->settleScale = 420.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP); @@ -255,8 +255,8 @@ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 20.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 20.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); } @@ -270,13 +270,13 @@ void BgNumaHana_SetupUnfoldOuterPetals(BgNumaHana* this) { * parts of the petals that are furthest to the stalk. */ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) { - Math_StepToS(&this->outerPetalZRotationalVelocity, 240, 14); - if (Math_ScaledStepToS(&this->outerPetalZRotation, -0x4000, this->outerPetalZRotationalVelocity)) { + Math_StepToS(&this->outerPetalAngularVelocityZ, 240, 14); + if (Math_ScaledStepToS(&this->outerPetalRotZ, -0x4000, this->outerPetalAngularVelocityZ)) { if (this->transitionTimer >= 11) { BgNumaHana_SetupRaiseFlower(this); } else { if (this->transitionTimer <= 0) { - this->settleZRotation = 0; + this->settleRotZ = 0; this->settleAngle = 0x5120; this->settleScale = 130.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP); @@ -287,8 +287,8 @@ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 7.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 7.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); } @@ -303,10 +303,10 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { s32 pad; DynaPolyActor* child; - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 10.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; - Math_StepToS(&this->flowerRotationalVelocity, 0x111, 0xA); - this->dyna.actor.shape.rot.y += this->flowerRotationalVelocity; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 10.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; + Math_StepToS(&this->flowerAngularVelocity, 0x111, 0xA); + this->dyna.actor.shape.rot.y += this->flowerAngularVelocity; Math_StepToF(&this->dyna.actor.velocity.y, 3.0f, 0.3f); if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 210.0f, @@ -317,14 +317,14 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { DynaPoly_EnableCollision(play, &play->colCtx.dyna, child->bgId); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - this->petalZRotation = 0x2000; - this->innerPetalZRotation = 0x2000; - this->innerPetalZRotationalVelocity = 0; - this->settleZRotation = 0; + this->petalRotZ = 0x2000; + this->innerPetalRotZ = 0x2000; + this->innerPetalAngularVelocityZ = 0; + this->settleRotZ = 0; this->settleAngle = 0; - this->outerPetalZRotation = -0x4000; - this->outerPetalZRotationalVelocity = 0; - this->flowerRotationalVelocity = 0x147; + this->outerPetalRotZ = -0x4000; + this->outerPetalAngularVelocityZ = 0; + this->flowerAngularVelocity = 0x147; this->settleScale = 0.0f; CutsceneManager_Stop(this->dyna.actor.csId); @@ -343,8 +343,8 @@ void BgNumaHana_SetupOpenedIdle(BgNumaHana* this) { * Spins the "opened" flower around the y-axis. */ void BgNumaHana_OpenedIdle(BgNumaHana* this, PlayState* play) { - this->dyna.actor.shape.rot.y += this->flowerRotationalVelocity; - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + this->dyna.actor.shape.rot.y += this->flowerAngularVelocity; + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); } diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h index d9f4a1ece..25a6283eb 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h @@ -29,15 +29,15 @@ typedef struct BgNumaHana { /* 0x234 */ BgNumaHanaActionFunc actionFunc; /* 0x238 */ WoodenFlowerPetalPosRot innerPetalPosRot[6]; /* 0x2B0 */ WoodenFlowerPetalPosRot outerPetalPosRot[6]; - /* 0x328 */ s16 petalZRotation; - /* 0x32A */ s16 innerPetalZRotation; - /* 0x32C */ s16 innerPetalZRotationalVelocity; - /* 0x32E */ s16 settleZRotation; + /* 0x328 */ s16 petalRotZ; + /* 0x32A */ s16 innerPetalRotZ; + /* 0x32C */ s16 innerPetalAngularVelocityZ; + /* 0x32E */ s16 settleRotZ; /* 0x330 */ s16 settleAngle; /* 0x334 */ f32 settleScale; - /* 0x338 */ s16 outerPetalZRotation; - /* 0x33A */ s16 outerPetalZRotationalVelocity; - /* 0x33C */ s16 flowerRotationalVelocity; + /* 0x338 */ s16 outerPetalRotZ; + /* 0x33A */ s16 outerPetalAngularVelocityZ; + /* 0x33C */ s16 flowerAngularVelocity; /* 0x33E */ s16 transitionTimer; } BgNumaHana; // size = 0x340 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 461a1969f..3c0d97d20 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -473,12 +473,12 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { this->targetRot.z = (this->actor.world.rot.y - this->targetRot.y) * 0.2f; targetSpeed = (this->index * 0.1f) + 4.0f; Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.7f); - Math_ApproachF(&this->rotationalVelocity, 2000.0f, 1.0f, 50.0f); - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5); + Math_ApproachF(&this->angularVelocity, 2000.0f, 1.0f, 50.0f); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->angularVelocity, 5); if (this->timer == 0) { if (Rand_ZeroFloat(1.0f) < 0.3f) { this->waitTimer = Rand_S16Offset(10, 10); - this->rotationalVelocity = 0.0f; + this->angularVelocity = 0.0f; } this->targetRot.y = Math_Atan2S(diffX, diffZ); @@ -606,7 +606,7 @@ void EnGrasshopper_Bounced(EnGrasshopper* this, PlayState* play) { Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.8f); Math_SmoothStepToS(&this->actor.world.rot.z, this->targetRot.z, 5, 0x3E8, 5); this->targetRot.z *= 0.8f; - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->angularVelocity, 5); if (this->timer == 0) { this->collider.elements[0].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD); this->timer = 0; diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index 8677bb9f2..cf0e50cbe 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -90,7 +90,7 @@ typedef struct EnGrasshopper { /* 0x035C */ s16 bankState; /* 0x035E */ s16 type; /* 0x0360 */ f32 dragonflyScale; - /* 0x0364 */ f32 rotationalVelocity; + /* 0x0364 */ f32 angularVelocity; /* 0x0368 */ f32 endFrame; /* 0x036C */ f32 approachSpeed; /* 0x0370 */ f32 baseFlyHeight; 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 7d0aae02f..1c6774b1a 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -556,14 +556,14 @@ void EnPp_Idle(EnPp* this, PlayState* play) { EnPp_ChangeAnim(this, EN_PP_ANIM_WALK); } - if ((this->maskBounceRotationalVelocity < 0x64) && + if ((this->maskBounceAngularVelocity < 0x64) && (fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f)) { Math_ApproachF(&this->actor.speed, 1.0f, 0.3f, 1.0f); } - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, - (this->maskBounceRotationalVelocity + 0x258), 0); - Math_SmoothStepToS(&this->maskBounceRotationalVelocity, 0, 1, 0x1F4, 0); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, this->maskBounceAngularVelocity + 0x258, + 0); + Math_SmoothStepToS(&this->maskBounceAngularVelocity, 0, 1, 0x1F4, 0); } } } @@ -602,11 +602,10 @@ void EnPp_Charge(EnPp* this, PlayState* play) { this->targetPos.z += distanceFromWorldPos.z; } - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, (this->maskBounceRotationalVelocity + 0x7D0), - 0); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, this->maskBounceAngularVelocity + 0x7D0, 0); } - Math_SmoothStepToS(&this->maskBounceRotationalVelocity, 0, 1, 0x1F4, 0); + Math_SmoothStepToS(&this->maskBounceAngularVelocity, 0, 1, 0x1F4, 0); if (!this->actionVar.isCharging) { Math_ApproachZeroF(&this->actor.speed, 0.5f, 1.0f); if (fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f) { @@ -985,7 +984,7 @@ void EnPp_SetupDead(EnPp* this, PlayState* play) { this->targetPos.z += deadVelocity.z; } - this->maskBounceRotationalVelocity = this->actionVar.isCharging = 0; + this->maskBounceAngularVelocity = this->actionVar.isCharging = 0; EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE); this->timer = 15; if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || @@ -1165,8 +1164,8 @@ void EnPp_BodyPart_SetupMove(EnPp* this) { this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 13.0f; this->actor.gravity = -2.0f; this->timer = Rand_S16Offset(30, 30); - this->deadBodyPartRotationalVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00; - this->deadBodyPartRotationalVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; + this->deadBodyPartAngularVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00; + this->deadBodyPartAngularVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) { this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f; this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex; @@ -1198,8 +1197,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { } else { Math_Vec3f_Copy(&this->deadBodyPartsPos[0], &this->deadBodyPartPos); this->deadBodyPartCount = 1; - this->actor.shape.rot.x += this->deadBodyPartRotationalVelocity.x; - this->actor.shape.rot.z += this->deadBodyPartRotationalVelocity.z; + this->actor.shape.rot.x += this->deadBodyPartAngularVelocity.x; + this->actor.shape.rot.z += this->deadBodyPartAngularVelocity.z; } if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface, @@ -1348,12 +1347,12 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) { (this->action == EN_PP_ACTION_ROAR))) { this->secondaryTimer = 0; this->timer = 10; - this->maskBounceRotationalVelocity = 0x20D0; + this->maskBounceAngularVelocity = 0x20D0; this->actor.speed = 0.0f; if (this->action == EN_PP_ACTION_CHARGE) { this->actionVar.isCharging = false; EnPp_ChangeAnim(this, EN_PP_ANIM_TURN_TO_FACE_PLAYER); - this->maskBounceRotationalVelocity = 0x1B58; + this->maskBounceAngularVelocity = 0x1B58; } this->targetRotY = this->actor.yawTowardsPlayer; diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.h b/src/overlays/actors/ovl_En_Pp/z_en_pp.h index 2f3c0e7b1..2f975a68c 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h @@ -73,7 +73,7 @@ typedef struct EnPp { s16 hasLandedFromJump; s16 maskDetachState; } actionVar; - /* 0x2D4 */ s16 maskBounceRotationalVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask. + /* 0x2D4 */ s16 maskBounceAngularVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask. /* 0x2D6 */ s16 deadBodyPartsSpawnedCount; /* 0x2D8 */ f32 endFrame; /* 0x2DC */ f32 chargeAndBounceSpeed; @@ -88,7 +88,7 @@ typedef struct EnPp { /* 0x364 */ Vec3f deadBodyPartPos; /* 0x370 */ s32 deadBodyPartCount; /* 0x374 */ Vec3f deadBodyPartsPos[EN_PP_DEAD_BODYPART_MAX]; - /* 0x3EC */ Vec3s deadBodyPartRotationalVelocity; + /* 0x3EC */ Vec3s deadBodyPartAngularVelocity; /* 0x3F2 */ s16 drawDmgEffTimer; /* 0x3F4 */ s16 drawDmgEffType; /* 0x3F8 */ f32 drawDmgEffScale; 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 0cf7ec733..1cd0a7861 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -523,7 +523,7 @@ void EnRd_SetupPirouette(EnRd* this) { Animation_MorphToLoop(&this->skelAnime, &gGibdoRedeadPirouetteAnim, -6.0f); this->action = EN_RD_ACTION_PIROUETTE; this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f; - this->pirouetteRotationalVelocity = 0x1112; + this->pirouetteAngularVelocity = 0x1112; this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.shape.rot.y; this->actionFunc = EnRd_Pirouette; @@ -562,12 +562,12 @@ void EnRd_Pirouette(EnRd* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->pirouetteRotationalVelocity = 0x1112; + this->pirouetteAngularVelocity = 0x1112; } else if (Animation_OnFrame(&this->skelAnime, 15.0f)) { - this->pirouetteRotationalVelocity = 0x199A; + this->pirouetteAngularVelocity = 0x199A; } - this->actor.world.rot.y -= this->pirouetteRotationalVelocity; + this->actor.world.rot.y -= this->pirouetteAngularVelocity; this->actor.shape.rot.y = this->actor.world.rot.y; } @@ -577,13 +577,13 @@ void EnRd_EndPirouetteWhenPlayerIsClose(EnRd* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY); } - this->actor.world.rot.y -= this->pirouetteRotationalVelocity; + this->actor.world.rot.y -= this->pirouetteAngularVelocity; this->actor.shape.rot.y = this->actor.world.rot.y; - this->pirouetteRotationalVelocity -= 0x64; - if ((this->pirouetteRotationalVelocity < 0x834) && (this->pirouetteRotationalVelocity >= 0x7D0)) { + this->pirouetteAngularVelocity -= 0x64; + if ((this->pirouetteAngularVelocity < 0x834) && (this->pirouetteAngularVelocity >= 0x7D0)) { Animation_Change(&this->skelAnime, &gGibdoRedeadLookBackAnim, 0.0f, 0.0f, 19.0f, ANIMMODE_ONCE, -10.0f); - } else if (this->pirouetteRotationalVelocity < 0x3E8) { + } else if (this->pirouetteAngularVelocity < 0x3E8) { if ((EN_RD_GET_TYPE(&this->actor) != EN_RD_TYPE_CRYING) && (!this->isMourning)) { EnRd_SetupAttemptPlayerFreeze(this); } else { diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.h b/src/overlays/actors/ovl_En_Rd/z_en_rd.h index 927fbf48b..578515a28 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h @@ -76,7 +76,7 @@ typedef struct EnRd { /* 0x3E2 */ UNK_TYPE1 unk3E2[0x2]; /* 0x3E4 */ union { s16 danceEndTimer; - s16 pirouetteRotationalVelocity; + s16 pirouetteAngularVelocity; }; /* 0x3E6 */ s16 drawDmgEffTimer; /* 0x3E8 */ u8 drawDmgEffType; 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 f030885b1..f1be3d5f4 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -692,11 +692,11 @@ void EnSnowman_SetupDamaged(EnSnowman* this) { * Otherwise, it will either submerge underground (if it has health remaining) or die. */ void EnSnowman_Damaged(EnSnowman* this, PlayState* play) { - s32 rotationalVelocityScale; + s32 angularVelocityScale; SkelAnime_Update(&this->skelAnime); - rotationalVelocityScale = CLAMP_MAX(this->work.timer, 10); - this->actor.shape.rot.y += rotationalVelocityScale * 0x300; + angularVelocityScale = CLAMP_MAX(this->work.timer, 10); + this->actor.shape.rot.y += angularVelocityScale * 0x300; Math_StepToF(&this->actor.speed, 0.0f, 0.5f); if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) { 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 38e1ba8c6..3f8442dad 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -224,10 +224,10 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { return; } - // fragmentRotationalVelocityX is in a union with itemDropRotZ, so for item drops, this code + // fragmentAngularVelocityX is in a union with itemDropRotZ, so for item drops, this code // will initialize its z-rotation to a random value. - this->fragmentRotationalVelocityX = Rand_CenteredFloat(0x2000); - this->fragmentRotationalVelocityY = Rand_CenteredFloat(0x2000); + this->fragmentAngularVelocityX = Rand_CenteredFloat(0x2000); + this->fragmentAngularVelocityY = Rand_CenteredFloat(0x2000); if (TWINMOLD_PROP_GET_TYPE(&this->actor) <= TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_7) { Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * sGiantModeScaleFactor); @@ -538,8 +538,8 @@ void EnTanron5_RuinFragmentItemDrop_Update(Actor* thisx, PlayState* play2) { } if (TWINMOLD_PROP_GET_TYPE(&this->actor) < TWINMOLD_PROP_TYPE_ITEM_DROP_1) { - this->actor.shape.rot.x += this->fragmentRotationalVelocityX; - this->actor.shape.rot.y += this->fragmentRotationalVelocityY; + this->actor.shape.rot.x += this->fragmentAngularVelocityX; + this->actor.shape.rot.y += this->fragmentAngularVelocityY; interactionDistSq = SQ(35.0f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h index 9f8c9b676..dddc205e7 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h @@ -50,10 +50,10 @@ typedef struct EnTanron5 { /* 0x148 */ Gfx* dList; /* 0x14C */ ColliderCylinder collider; /* 0x198 */ union { - s16 fragmentRotationalVelocityX; + s16 fragmentAngularVelocityX; s16 itemDropRotZ; }; - /* 0x19A */ s16 fragmentRotationalVelocityY; + /* 0x19A */ s16 fragmentAngularVelocityY; /* 0x19C */ f32 baseScale; /* 0x1A0 */ union { u8 hitCount; // used by destructible ruins 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 2d7d12782..226382f8d 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -498,7 +498,7 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) { case EN_WIZ_INTRO_CS_WAIT_BEFORE_RUN: if (this->introCutsceneTimer == 0) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_RUN, false); - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->introCutsceneTimer = 34; this->introCutsceneState++; } @@ -510,8 +510,8 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) { this->animLoopCounter = this->introCutsceneCameraAngle = 0; this->introCutsceneState = EN_WIZ_INTRO_CS_DISAPPEAR; } else { - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + this->actor.world.rot.y += this->angularVelocity; } Math_Vec3f_Copy(&eyeNext, &this->actor.world.pos); @@ -784,7 +784,7 @@ void EnWiz_Appear(EnWiz* this, PlayState* play) { void EnWiz_SetupDance(EnWiz* this) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DANCE, false); Math_ApproachF(&this->scale, 0.015f, 0.05f, 0.001f); - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->animLoopCounter = 0; this->action = EN_WIZ_ACTION_DANCE; if (this->fightState >= EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE) { @@ -808,16 +808,16 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) { Math_SmoothStepToS(&this->alpha, 255, 1, 5, 0); Math_ApproachF(&this->scale, 0.015f, 0.05f, 0.001f); Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG); - this->actor.world.rot.y += this->rotationalVelocity; + this->actor.world.rot.y += this->angularVelocity; if (this->fightState >= EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND) { EnWiz_MoveGhosts(this); } else { for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } } - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 20, 50, 10); if (this->endFrame <= curFrame) { if (this->animLoopCounter < 10) { @@ -997,20 +997,20 @@ void EnWiz_Attack(EnWiz* this, PlayState* play) { void EnWiz_SetupDisappear(EnWiz* this) { if (this->action != EN_WIZ_ACTION_DAMAGED) { - this->rotationalVelocity = 0x2710; + this->angularVelocity = 0x2710; this->timer = 0; EnWiz_ChangeAnim(this, EN_WIZ_ANIM_IDLE, false); this->action = EN_WIZ_ACTION_DISAPPEAR; } else { - this->rotationalVelocity = 0x2710; - this->actor.world.rot.y += this->rotationalVelocity; + this->angularVelocity = 0x2710; + this->actor.world.rot.y += this->angularVelocity; } this->targetPlatformLightAlpha = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR); - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + this->actor.world.rot.y += this->angularVelocity; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_Disappear; } @@ -1022,8 +1022,8 @@ void EnWiz_SetupDisappear(EnWiz* this) { void EnWiz_Disappear(EnWiz* this, PlayState* play) { s32 i; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); + this->actor.world.rot.y += this->angularVelocity; if ((this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) || (this->action == EN_WIZ_ACTION_DAMAGED)) { Math_ApproachZeroF(&this->scale, 0.3f, 0.01f); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 5, 50, 0); @@ -1031,7 +1031,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) { Math_ApproachZeroF(&this->scale, 0.3f, 0.001f); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 10, 50, 0); for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } } @@ -1079,9 +1079,9 @@ void EnWiz_SetupDamaged(EnWiz* this, PlayState* play) { this->timer = 0; } - this->rotationalVelocity = 0x4E20; + this->angularVelocity = 0x4E20; if ((this->drawDmgEffTimer != 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX)) { - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->timer = 0; } @@ -1100,7 +1100,7 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_WIZ_BODYPART_MAX, 2, 1.0f, 0.7f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; - this->rotationalVelocity = 0x4E20; + this->angularVelocity = 0x4E20; this->actor.velocity.y = 30.0f; this->actor.gravity = -3.0f; } @@ -1118,10 +1118,10 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { this->isDead = true; } - this->actor.world.rot.y += this->rotationalVelocity; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); + this->actor.world.rot.y += this->angularVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } //! @bug: When the Wizrobe is defeated, it is launched into the air by the code above, and the @@ -1173,7 +1173,7 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { void EnWiz_SetupDead(EnWiz* this) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DAMAGE, false); - this->rotationalVelocity = 0x2710; + this->angularVelocity = 0x2710; this->action = EN_WIZ_ACTION_DEAD; this->timer = 0; this->actionFunc = EnWiz_Dead; @@ -1186,9 +1186,9 @@ void EnWiz_SetupDead(EnWiz* this) { void EnWiz_Dead(EnWiz* this, PlayState* play) { s32 i; - this->actor.world.rot.y += this->rotationalVelocity; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); - if (this->rotationalVelocity < 0x1E) { + this->actor.world.rot.y += this->angularVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); + if (this->angularVelocity < 0x1E) { Math_SmoothStepToS(&this->alpha, 0, 10, 30, 20); for (i = 0; i < this->platformCount; i++) { Math_SmoothStepToS(&this->ghostAlpha[i], 0, 10, 30, 20); diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index 80c8be208..c0f1c7cfb 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -50,7 +50,7 @@ typedef struct EnWiz { /* 0x3BA */ s16 hasActiveProjectile; /* 0x3BC */ s16 hasRunToEveryPlatform; // used for the second phase cutscene to make sure the Wizrobe visits every platform /* 0x3BE */ s16 unk_3BE; // unused, inferred from surrounding members - /* 0x3C0 */ s16 rotationalVelocity; + /* 0x3C0 */ s16 angularVelocity; /* 0x3C2 */ s16 alpha; /* 0x3C4 */ s16 platformLightAlpha; /* 0x3C6 */ s16 targetPlatformLightAlpha; 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 73cefa0f2..70a4e7022 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -99,7 +99,7 @@ void ObjTokeidai_SetupClockOrExteriorGear(ObjTokeidai* this) { this->clockMinute = currentClockMinute; this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); - this->minuteRingOrExteriorGearRotationalVelocity = 0x3C; + this->minuteRingOrExteriorGearAngularVelocity = 0x3C; this->minuteRingOrExteriorGearRotationTimer = 0; } @@ -110,9 +110,9 @@ void ObjTokeidai_Clock_Init(ObjTokeidai* this) { currentClockHour = GET_CURRENT_CLOCK_HOUR(this); this->clockHour = currentClockHour; this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); } @@ -294,8 +294,8 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { if (this->minuteRingOrExteriorGearRotationTimer > 8) { // This actually performs the rotation to the next minute // for the minute ring or exterior gear. - this->minuteRingOrExteriorGearRotationalVelocity += 0x3C; - this->minuteRingOrExteriorGearRotation += this->minuteRingOrExteriorGearRotationalVelocity; + this->minuteRingOrExteriorGearAngularVelocity += 0x3C; + this->minuteRingOrExteriorGearRotation += this->minuteRingOrExteriorGearAngularVelocity; } else { // This makes the minute ring or exterior gear wiggle in place for a bit // before rotating to the next position. @@ -314,7 +314,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute))) { this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); this->clockMinute = currentClockMinute; - this->minuteRingOrExteriorGearRotationalVelocity = 0x5A; + this->minuteRingOrExteriorGearAngularVelocity = 0x5A; this->minuteRingOrExteriorGearRotationTimer = 0; } } @@ -347,9 +347,9 @@ void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, PlayState* play) { * tower's clock slide off the tower and spin through the air when the moon crashes. */ void ObjTokeidai_TowerClock_Fall(ObjTokeidai* this, PlayState* play) { - this->actor.shape.rot.x += this->fallingClockFaceRotationalVelocity; - if (this->fallingClockFaceRotationalVelocity > 0xA0) { - this->fallingClockFaceRotationalVelocity -= 5; + this->actor.shape.rot.x += this->fallingClockFaceAngularVelocity; + if (this->fallingClockFaceAngularVelocity > 0xA0) { + this->fallingClockFaceAngularVelocity -= 5; } this->actor.world.pos.z += 4.0f; @@ -377,15 +377,15 @@ void ObjTokeidai_TowerClock_SlideOff(ObjTokeidai* this, PlayState* play) { if (this->aerialClockFaceSpeed < 0x80) { thisx->shape.rot.x = this->slidingClockFaceAngle - 0x4000; - this->fallingClockFaceRotationalVelocity = 0x28; + this->fallingClockFaceAngularVelocity = 0x28; } else { if (thisx->shape.rot.x < -0x1000) { - thisx->shape.rot.x += this->fallingClockFaceRotationalVelocity; - if (this->fallingClockFaceRotationalVelocity < 0x1E0) { - this->fallingClockFaceRotationalVelocity += 0xA; + thisx->shape.rot.x += this->fallingClockFaceAngularVelocity; + if (this->fallingClockFaceAngularVelocity < 0x1E0) { + this->fallingClockFaceAngularVelocity += 0xA; } } else { - thisx->shape.rot.x += this->fallingClockFaceRotationalVelocity; + thisx->shape.rot.x += this->fallingClockFaceAngularVelocity; this->actionFunc = ObjTokeidai_TowerClock_Fall; thisx->terminalVelocity = -7.5f; thisx->gravity = -0.75f; @@ -496,9 +496,9 @@ void ObjTokeidai_TowerOpening_Wait(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* play) { - this->xRotation += this->counterweightRotationalVelocity; + this->xRotation += this->counterweightAngularVelocity; if (this->xRotation < 0x4000) { - this->counterweightRotationalVelocity += this->counterweightRotationalAcceleration; + this->counterweightAngularVelocity += this->counterweightRotationalAcceleration; return; } @@ -522,14 +522,14 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl } this->boundCount++; - if (this->counterweightRotationalVelocity > 0x190) { + if (this->counterweightAngularVelocity > 0x190) { // This condition is met for the first bound, causing the counterweight // to rebound upwards quickly. - this->counterweightRotationalVelocity = -0xC8; - } else if (this->counterweightRotationalVelocity > 0x32) { + this->counterweightAngularVelocity = -0xC8; + } else if (this->counterweightAngularVelocity > 0x32) { // This condition is met for the second bound, causing the counterweight // to rebound upwards slowly. - this->counterweightRotationalVelocity = -(this->counterweightRotationalVelocity >> 1); + this->counterweightAngularVelocity = -(this->counterweightAngularVelocity >> 1); } else { // This condition is met for the third bound, causing the counterweight // to stop moving. @@ -561,7 +561,7 @@ void ObjTokeidai_TowerOpening_FinishRaise(ObjTokeidai* this, PlayState* play) { } this->yTranslation = 3400; this->actionFunc = ObjTokeidai_TowerOpening_DropCounterweight; - this->counterweightRotationalVelocity = 0; + this->counterweightAngularVelocity = 0; this->counterweightRotationalAcceleration = 0xA; this->boundCount = 0; } @@ -604,7 +604,7 @@ void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) { */ void ObjTokeidai_SetupTowerOpening(ObjTokeidai* this) { this->actionFunc = ObjTokeidai_TowerOpening_Start; - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; this->yTranslation = 0; this->xRotation = 0; @@ -641,8 +641,8 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { if (this->clockFaceRotationTimer > 12) { // This actually performs the rotation to the next hour // for the clock face. - this->clockFaceRotationalVelocity += 0xA; - this->clockFaceRotation += this->clockFaceRotationalVelocity; + this->clockFaceAngularVelocity += 0xA; + this->clockFaceRotation += this->clockFaceAngularVelocity; } else { // This makes the clock face wiggle in place for a bit // before rotating to the next position. @@ -660,7 +660,7 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { ((currentClockHour != 12) && (this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour)))) { this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); this->clockHour = currentClockHour; - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; } } @@ -669,19 +669,19 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { // just changed), rotate it until it matches the target. if (this->sunMoonPanelRotation != ObjTokeidai_GetTargetSunMoonPanelRotation()) { if (this->clockHour == 6) { - this->sunMoonPanelRotationalVelocity += 0x222; - this->sunMoonPanelRotation += this->sunMoonPanelRotationalVelocity; + this->sunMoonPanelAngularVelocity += 0x222; + this->sunMoonPanelRotation += this->sunMoonPanelAngularVelocity; if (this->sunMoonPanelRotation > 0x10000) { this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; } } if (this->clockHour == 18) { - this->sunMoonPanelRotationalVelocity += 0x222; - this->sunMoonPanelRotation += this->sunMoonPanelRotationalVelocity; + this->sunMoonPanelAngularVelocity += 0x222; + this->sunMoonPanelRotation += this->sunMoonPanelAngularVelocity; if (this->sunMoonPanelRotation > 0x8000) { this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; } } } diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h index 43f424ceb..0ccf84425 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h @@ -28,13 +28,13 @@ typedef struct ObjTokeidai { /* 0x144 */ Gfx* opaDList; /* 0x148 */ Gfx* xluDList; /* 0x14C */ s16 minuteRingOrExteriorGearRotation; - /* 0x14E */ s16 minuteRingOrExteriorGearRotationalVelocity; + /* 0x14E */ s16 minuteRingOrExteriorGearAngularVelocity; /* 0x150 */ s16 minuteRingOrExteriorGearRotationTimer; /* 0x152 */ s16 clockFaceRotation; /* 0x154 */ union { - s16 clockFaceRotationalVelocity; + s16 clockFaceAngularVelocity; s16 settleTimer; - s16 counterweightRotationalVelocity; + s16 counterweightAngularVelocity; s16 openingWaitTimer; s16 slidingClockFaceAngle; }; @@ -46,8 +46,8 @@ typedef struct ObjTokeidai { }; /* 0x158 */ s32 sunMoonPanelRotation; /* 0x15C */ union { - s16 sunMoonPanelRotationalVelocity; - s16 fallingClockFaceRotationalVelocity; + s16 sunMoonPanelAngularVelocity; + s16 fallingClockFaceAngularVelocity; }; /* 0x15E */ s16 yTranslation; /* 0x160 */ s16 xRotation; From 0c7b90cf97f26483c8b6a98ae099a295f61e72ab Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Thu, 14 Sep 2023 08:48:57 -0300 Subject: [PATCH 082/121] document object_fish (#1359) * initial commit of object_fish documentation * spaces after offset * separate categories * extra owner * name changes * forgor the .c * format * changed name of funcit * forgor some OutName --- assets/xml/objects/object_fish.xml | 395 ++++++++++++------ .../actors/ovl_En_Fishing/z_en_fishing.c | 39 +- 2 files changed, 294 insertions(+), 140 deletions(-) diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index 07e0e3d23..b4de27c4e 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -1,162 +1,315 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - + + + + + + + + - + + + + + + + + + + + - + + + + + + + + + + + + + - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + - - + + + + + + + + + - - + + + + + + + + + - + + + + + + + + + + + + + - - - + + + + + + + + + + + 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 33e49d6e5..1f3964998 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -948,8 +948,8 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->bgCheckFlags |= BGCHECKFLAG_PLAYER_800; // Added in MM if ((thisx->params < 115) || (thisx->params == 200)) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, NULL, NULL, 0); - Animation_MorphToLoop(&this->skelAnime, &gFishingFishAnim, 0.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, NULL, NULL, 0); + Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, NULL, NULL, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); @@ -3931,8 +3931,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { SkelAnime_Free(&this->skelAnime, play); if (this->unk_148 == 0) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, 0, 0, 0); - Animation_MorphToLoop(&this->skelAnime, &gFishingFishAnim, 0.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, 0, 0, 0); + Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, 0, 0, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); @@ -4176,32 +4176,33 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } } -s32 EnFishing_FishOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnFishing_BassOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_FISH_LIMB_0D) { + if (limbIndex == FISHING_BASS_LIMB_JAW) { rot->z -= this->unk_168 - 11000; - } else if ((limbIndex == FISHING_FISH_LIMB_02) || (limbIndex == FISHING_FISH_LIMB_03)) { + } else if ((limbIndex == FISHING_BASS_LIMB_MIDDLE_SEGMENT_ROOT) || + (limbIndex == FISHING_BASS_LIMB_BACK_SEGMENT_ROOT)) { rot->y += this->unk_164; - } else if (limbIndex == FISHING_FISH_LIMB_04) { + } else if (limbIndex == FISHING_BASS_LIMB_END_ROOT) { rot->y += this->unk_16E; - } else if (limbIndex == FISHING_FISH_LIMB_0E) { + } else if (limbIndex == FISHING_BASS_LIMB_RIGHT_PECTORAL_FIN) { rot->y -= this->unk_16A; - } else if (limbIndex == FISHING_FISH_LIMB_0F) { + } else if (limbIndex == FISHING_BASS_LIMB_LEFT_PECTORAL_FIN) { rot->y += this->unk_16A; - } else if (limbIndex == FISHING_FISH_LIMB_08) { + } else if (limbIndex == FISHING_BASS_LIMB_TOP_REAR_FIN) { rot->y += this->unk_16C; - } else if (limbIndex == FISHING_FISH_LIMB_09) { + } else if (limbIndex == FISHING_BASS_LIMB_BOTTOM_REAR_FIN) { rot->y -= this->unk_16C; } return false; } -void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { +void EnFishing_BassPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_FISH_LIMB_0D) { + if (limbIndex == FISHING_BASS_LIMB_JAW) { Matrix_MultVec3f(&sFishMouthOffset, &this->fishMouthPos); } } @@ -4209,11 +4210,11 @@ void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec s32 EnFishing_LoachOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_LOACH_LIMB_03) { + if (limbIndex == FISHING_LOACH_LIMB_MIDDLE_SEGMENT) { rot->y += this->unk_1C4[0]; - } else if (limbIndex == FISHING_LOACH_LIMB_04) { + } else if (limbIndex == FISHING_LOACH_LIMB_LOWER_BACK_FIN) { rot->y += this->unk_1C4[1]; - } else if (limbIndex == FISHING_LOACH_LIMB_05) { + } else if (limbIndex == FISHING_LOACH_LIMB_TAIL_FIN) { rot->y += this->unk_1C4[2]; } @@ -4224,7 +4225,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve static Vec3f sLoachMouthOffset = { 500.0f, 500.0f, 0.0f }; EnFishing* this = THIS; - if (limbIndex == FISHING_LOACH_LIMB_0B) { + if (limbIndex == FISHING_LOACH_LIMB_JAW) { Matrix_MultVec3f(&sLoachMouthOffset, &this->fishMouthPos); } } @@ -4245,7 +4246,7 @@ void EnFishing_DrawFish(Actor* thisx, PlayState* play) { 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); + EnFishing_BassOverrideLimbDraw, EnFishing_BassPostLimbDraw, &this->actor); } else { Matrix_Translate(0.0f, 0.0f, 3000.0f, MTXMODE_APPLY); Matrix_RotateYF(BINANG_TO_RAD(this->unk_164), MTXMODE_APPLY); From 548ea08838f11a0f3c7f29e014eede6ef784ab7a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 14 Sep 2023 15:33:55 -0700 Subject: [PATCH 083/121] Provide names (and original names) for all Termina Field cutscenes (#1373) * Provide names (and original names) for all Termina Field cutscenes * Respond to Anghelo's review * Respond to isghj's review --- .../xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml b/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml index 3cf73a255..9c1a84c8c 100644 --- a/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml +++ b/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml @@ -2,6 +2,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 99dd8a41f969ace0b9defc1c9cdf0f44f67d53be Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 14 Sep 2023 19:24:39 -0700 Subject: [PATCH 084/121] Docs namefixer (#1378) --- docs/tutorial/advanced_control_flow.md | 6 +++--- docs/tutorial/documenting.md | 4 ++-- docs/tutorial/introduction.md | 4 ++-- docs/tutorial/other_functions.md | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index 0217cdde2..83d55f7ad 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -94,7 +94,7 @@ void func_80952734(EnMs* this, PlayState* play) { if (this->actor.xzDistToPlayer < 90.0f) { if (ABS_ALT(temp_v1) < 0x2000) { - func_800B8614(&this->actor, play, 90.0f); + Actor_OfferTalk(&this->actor, play, 90.0f); } } } @@ -104,7 +104,7 @@ void func_80952734(EnMs* this, PlayState* play) { void func_809529AC(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); this->actionFunc = func_80952A1C; } else { Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel); @@ -116,7 +116,7 @@ void func_80952A1C(EnMs* this, PlayState* play) { Message_ContinueTextbox(play, 0x936U); this->actionFunc = func_809527F8; } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, -1); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, -1); } } diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index 11d8b3546..9013ab010 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -137,7 +137,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; } else if (Flags_GetSwitch(play, this->actor.params)) { @@ -473,7 +473,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?" } else if (Flags_GetSwitch(play, this->actor.params)) { diff --git a/docs/tutorial/introduction.md b/docs/tutorial/introduction.md index aba8beede..58a74fbb4 100644 --- a/docs/tutorial/introduction.md +++ b/docs/tutorial/introduction.md @@ -16,7 +16,7 @@ glabel func_809529AC /* 0003B0 809529D0 8C860098 */ lw $a2, 0x98($a0) /* 0003B4 809529D4 8C87009C */ lw $a3, 0x9c($a0) /* 0003B8 809529D8 AFA40020 */ sw $a0, 0x20($sp) -/* 0003BC 809529DC 0C02E140 */ jal func_800B8500 +/* 0003BC 809529DC 0C02E140 */ jal Actor_OfferTalkExchange /* 0003C0 809529E0 AFA00010 */ sw $zero, 0x10($sp) /* 0003C4 809529E4 8FA40020 */ lw $a0, 0x20($sp) /* 0003C8 809529E8 3C0E8095 */ lui $t6, %hi(func_80952A1C) @@ -43,7 +43,7 @@ and turn it into compilable C code: void func_809529AC(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); this->actionFunc = func_80952A1C; } else { Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel); diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md index f73902ca5..dd2de5538 100644 --- a/docs/tutorial/other_functions.md +++ b/docs/tutorial/other_functions.md @@ -135,7 +135,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { return; } if (Actor_IsFacingPlayer((Actor *) this, 0x2000) != 0) { - func_800B8614((Actor *) this, play, 60.0f); + Actor_OfferTalk((Actor *) this, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; return; @@ -190,7 +190,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { return; } if (Actor_IsFacingPlayer(&this->actor, 0x2000) != 0) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; return; @@ -226,7 +226,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; } else if (Flags_GetSwitch(play, this->actor.params)) { From 57501ed415982ee8cf9788a8b22575c17d718c64 Mon Sep 17 00:00:00 2001 From: AbdooOwd <90041629+AbdooOwd@users.noreply.github.com> Date: Fri, 15 Sep 2023 04:39:21 +0100 Subject: [PATCH 085/121] `z_obj_tokei_tobira` OK undocumented (#1336) * Fixes * `z_obj_tokei_tobira` OK undocumented * Revert "Fixes" This reverts commit b3358254df5e659c0d89b8e3c86ebc2e07fa0196. * Fixes * Data imported + Code Optimization * Formatting * cleaning + fixes * formatting * More fixes * Last fixes * OK undocumented * More fixes * Fixes * Formatting again * I hate Jenkins * Removed a comment * Review apply * Formatting * Applied reviews * Review Applied * Update src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h Co-authored-by: Derek Hensley --------- Co-authored-by: Derek Hensley --- spec | 3 +- .../ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c | 150 ++++++++++++++++-- .../ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h | 22 ++- tools/disasm/functions.txt | 2 +- 4 files changed, 159 insertions(+), 18 deletions(-) diff --git a/spec b/spec index a05eecaa7..90459b036 100644 --- a/spec +++ b/spec @@ -3098,8 +3098,7 @@ beginseg name "ovl_Obj_Tokei_Tobira" compress include "build/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.o" - include "build/data/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira.data.o" - include "build/data/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c index 0c81ec028..85b7e9414 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c @@ -5,6 +5,7 @@ */ #include "z_obj_tokei_tobira.h" +#include "objects/object_tokei_tobira/object_tokei_tobira.h" #define FLAGS 0x00000000 @@ -14,8 +15,8 @@ void ObjTokeiTobira_Init(Actor* thisx, PlayState* play); void ObjTokeiTobira_Destroy(Actor* thisx, PlayState* play); void ObjTokeiTobira_Update(Actor* thisx, PlayState* play); void ObjTokeiTobira_Draw(Actor* thisx, PlayState* play); +void ObjTokeiTobira_StartCutscene(ObjTokeiTobira* this); -#if 0 ActorInit Obj_Tokei_Tobira_InitVars = { ACTOR_OBJ_TOKEI_TOBIRA, ACTORCAT_BG, @@ -28,24 +29,153 @@ ActorInit Obj_Tokei_Tobira_InitVars = { (ActorFunc)ObjTokeiTobira_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80ABD750[] = { +static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -#endif +Vec3f D_80ABD760 = { 0.0f, 0.0f, 80.0f }; +s16 D_80ABD76C[] = { + -0x4000, // OBJTOKEITOBIRA_TYPE_0 + 0x4000, // OBJTOKEITOBIRA_TYPE_1 +}; +CollisionHeader* D_80ABD770[] = { + &object_tokei_tobira_Colheader_0012B0, // OBJTOKEITOBIRA_TYPE_0 + &object_tokei_tobira_Colheader_001590, // OBJTOKEITOBIRA_TYPE_1 +}; +f32 D_80ABD778[] = { + 1.0f, // OBJTOKEITOBIRA_TYPE_0 + -1.0f, // OBJTOKEITOBIRA_TYPE_1 +}; +Gfx* D_80ABD780[] = { + object_tokei_tobira_DL_001108, // OBJTOKEITOBIRA_TYPE_0 + object_tokei_tobira_DL_0013E8, // OBJTOKEITOBIRA_TYPE_1 +}; -extern InitChainEntry D_80ABD750[]; +void ObjTokeiTobira_Init(Actor* thisx, PlayState* play) { + ObjTokeiTobira* this = THIS; + s32 pad; + s32 type = OBJTOKEITOBIRA_GET_TYPE(&this->dyna.actor); + Vec3f posOffset; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Init.s") + Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); + DynaPolyActor_LoadMesh(play, &this->dyna, D_80ABD770[type]); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Destroy.s") + if (type == OBJTOKEITOBIRA_TYPE_0) { + Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_OBJ_TOKEI_TOBIRA, + this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, + this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z, + OBJTOKEITOBIRA_PARAMS(OBJTOKEITOBIRA_TYPE_1)); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/func_80ABD3B0.s") + Matrix_RotateYS(D_80ABD76C[type] + this->dyna.actor.shape.rot.y, MTXMODE_NEW); + Matrix_MultVec3f(&D_80ABD760, &posOffset); + this->dyna.actor.world.pos.x += posOffset.x; + this->dyna.actor.world.pos.y += posOffset.y; + this->dyna.actor.world.pos.z += posOffset.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Update.s") + if ((type == OBJTOKEITOBIRA_TYPE_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_04) && + (play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) && (this->dyna.actor.csId > CS_ID_NONE)) { + this->dyna.actor.flags |= ACTOR_FLAG_10; + this->actionFunc = ObjTokeiTobira_StartCutscene; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Draw.s") +void ObjTokeiTobira_Destroy(Actor* thisx, PlayState* play) { + ObjTokeiTobira* this = THIS; + + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} + +void ObjTokeiTobira_StartCutscene(ObjTokeiTobira* this) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + SET_WEEKEVENTREG(WEEKEVENTREG_59_04); + this->actionFunc = NULL; + this->dyna.actor.flags &= ~ACTOR_FLAG_10; + } else { + CutsceneManager_Queue(this->dyna.actor.csId); + } +} + +void ObjTokeiTobira_Update(Actor* thisx, PlayState* play) { + s32 pad1; + ObjTokeiTobira* this = THIS; + Player* player = GET_PLAYER(play); + s32 pad2; + s32 type = OBJTOKEITOBIRA_GET_TYPE(&this->dyna.actor); + f32 sp48 = D_80ABD778[type]; + s32 pad3; + + if (player->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) { + if (DynaPoly_GetActor(&play->colCtx, player->actor.wallBgId) == &this->dyna) { + f32 sp40; + Vec3f sp34; + + Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp34, &player->actor.world.pos); + sp40 = sp34.x * sp48; + + if (sp40 > 20.0f) { + if (sp34.z > 0.0f) { + this->unk160 += (sp40 - 20.0f) * sp48 * (16.0f / 3.0f); + this->unk168 = 1; + if (this->unk16C <= 0) { + Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_WOOD_GATE_OPEN); + this->unk16C = 80; + } + } + + if (sp40 > 48.0f) { + ObjTokeiTobira* tobira; + + if (type == OBJTOKEITOBIRA_TYPE_0) { + tobira = (ObjTokeiTobira*)this->dyna.actor.child; + } else { + tobira = (ObjTokeiTobira*)this->dyna.actor.parent; + } + + if (tobira != NULL) { + tobira->unk168 = 1; + } + } + } + } + } else if (this->unk168 == 1) { + Vec3f sp24; + + Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp24, &player->actor.world.pos); + + if ((sp24.z > 0.0f) && (sp24.z < 30.0f)) { + this->unk168 = 1; + this->unk160 += sp48 * 290.0f; + } + } + + if (this->unk16C > 0) { + this->unk16C--; + } + + this->unk168 = 0; + this->unk160 *= 0.87f; + this->unk164 += this->unk160; + if ((this->unk164 * sp48) > 14336.0f) { + this->unk160 *= 0.1f; + this->unk164 = 14336.0f * sp48; + } else if ((this->unk164 * sp48) < -1000.0f) { + this->unk160 *= 0.1f; + this->unk164 = -1000.0f * sp48; + } + + this->dyna.actor.shape.rot.y = (s32)this->unk164 + this->dyna.actor.home.rot.y; + + if (this->actionFunc != NULL) { + this->actionFunc(this); + } +} + +void ObjTokeiTobira_Draw(Actor* thisx, PlayState* play) { + Gfx_DrawDListOpa(play, D_80ABD780[OBJTOKEITOBIRA_GET_TYPE(thisx)]); +} diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h index 8f9983995..45264df75 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h +++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h @@ -3,15 +3,27 @@ #include "global.h" +#define OBJTOKEITOBIRA_GET_TYPE(thisx) ((thisx)->params & 1) +#define OBJTOKEITOBIRA_PARAMS(type) (type) + + struct ObjTokeiTobira; -typedef void (*ObjTokeiTobiraActionFunc)(struct ObjTokeiTobira*, PlayState*); +typedef void (*ObjTokeiTobiraActionFunc)(struct ObjTokeiTobira*); + + +typedef enum ObjTokeiTobiraType { + /* 0 */ OBJTOKEITOBIRA_TYPE_0, + /* 1 */ OBJTOKEITOBIRA_TYPE_1 +} ObjTokeiTobiraType; typedef struct ObjTokeiTobira { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x18]; + /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjTokeiTobiraActionFunc actionFunc; - /* 0x160 */ char unk_160[0x10]; -} ObjTokeiTobira; // size = 0x170 + /* 0x160 */ f32 unk160; + /* 0x164 */ f32 unk164; + /* 0x168 */ s32 unk168; + /* 0x16C */ s32 unk16C; +} ObjTokeiTobira; // size = 0x170 #endif // Z_OBJ_TOKEI_TOBIRA_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e146d804d..e3c54b894 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -11830,7 +11830,7 @@ 0x80ABCF0C:("BgHakuginBombwall_Draw",), 0x80ABD1D0:("ObjTokeiTobira_Init",), 0x80ABD37C:("ObjTokeiTobira_Destroy",), - 0x80ABD3B0:("func_80ABD3B0",), + 0x80ABD3B0:("ObjTokeiTobira_StartCutscene",), 0x80ABD424:("ObjTokeiTobira_Update",), 0x80ABD6F0:("ObjTokeiTobira_Draw",), 0x80ABD830:("BgHakuginElvpole_Init",), From 626f09266d264dc994e51d8ce9e57b8da80704d4 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 15 Sep 2023 05:41:51 -0700 Subject: [PATCH 086/121] Flash Headers (#1367) * Move flash stuff * format * Cleanup * format * bss names * Small cleanup * osFlashGetAddr * uintptr_t --- include/PR/os_flash.h | 29 +++++++ include/PR/os_internal_flash.h | 27 ++++++ include/PR/os_pi.h | 6 ++ include/sys_flashrom.h | 20 +++++ include/z64.h | 61 ------------- src/code/sys_flashrom.c | 16 ++-- src/libultra/flash/osFlash.c | 152 +++++++++++++++------------------ 7 files changed, 160 insertions(+), 151 deletions(-) create mode 100644 include/PR/os_internal_flash.h create mode 100644 include/sys_flashrom.h diff --git a/include/PR/os_flash.h b/include/PR/os_flash.h index 36e728c5a..9388a0a98 100644 --- a/include/PR/os_flash.h +++ b/include/PR/os_flash.h @@ -4,6 +4,35 @@ #include "ultratypes.h" #include "os_pi.h" +#define FLASH_START_ADDR 0x08000000 // FRAM Base Address in Cart Memory + +#define FLASH_SIZE 0x20000 + +#define FLASH_LATENCY 0x5 +#define FLASH_PULSE 0x0C +#define FLASH_PAGE_SIZE 0xF +#define FLASH_REL_DURATION 0x2 +#define DEVICE_TYPE_FLASH 8 + +/* OLD_FLASH is MX_PROTO_A, MX_A and MX_C */ +#define OLD_FLASH 0 +/* NEW_FLASH is MX_B_AND_D and MATSUSHITA flash */ +#define NEW_FLASH 1 + +#define FLASH_STATUS_ERASE_BUSY 2 +#define FLASH_STATUS_ERASE_OK 0 +#define FLASH_STATUS_ERASE_ERROR -1 + +#define FLASH_STATUS_WRITE_BUSY 1 +#define FLASH_STATUS_WRITE_OK 0 +#define FLASH_STATUS_WRITE_ERROR -1 + +#define FLASH_VERSION_MX_PROTO_A 0x00C20000 +#define FLASH_VERSION_MX_A 0x00C20001 +#define FLASH_VERSION_MX_C 0x00C2001E +#define FLASH_VERSION_MX_B_AND_D 0x00C2001D +#define FLASH_VERSION_MEI 0x003200F1 + OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); OSPiHandle* osFlashInit(void); diff --git a/include/PR/os_internal_flash.h b/include/PR/os_internal_flash.h new file mode 100644 index 000000000..ef227df99 --- /dev/null +++ b/include/PR/os_internal_flash.h @@ -0,0 +1,27 @@ +#ifndef PR_OS_INTERNAL_FLASH_H +#define PR_OS_INTERNAL_FLASH_H + +#include "os_flash.h" + +#define FLASH_BLOCK_SIZE 128 + +#define FLASH_CMD_REG 0x10000 // Located at 0x08010000 on the Cart + +/* set whole chip erase mode */ +#define FLASH_CMD_CHIP_ERASE 0x3C000000 +/* set sector erase mode */ +#define FLASH_CMD_SECTOR_ERASE 0x4B000000 +/* do erasure */ +#define FLASH_CMD_EXECUTE_ERASE 0x78000000 +/* program selected page */ +#define FLASH_CMD_PROGRAM_PAGE 0xA5000000 +/* set page program mode */ +#define FLASH_CMD_PAGE_PROGRAM 0xB4000000 +/* set status mode */ +#define FLASH_CMD_STATUS 0xD2000000 +/* set silicon id mode */ +#define FLASH_CMD_ID 0xE1000000 +/* set read mode */ +#define FLASH_CMD_READ_ARRAY 0xF0000000 + +#endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 2e67ca840..134b43a93 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -93,6 +93,12 @@ typedef struct { #define OS_MESG_PRI_NORMAL 0 #define OS_MESG_PRI_HIGH 1 +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); diff --git a/include/sys_flashrom.h b/include/sys_flashrom.h new file mode 100644 index 000000000..5fc2821d6 --- /dev/null +++ b/include/sys_flashrom.h @@ -0,0 +1,20 @@ +#ifndef SYS_FLASHROM_H +#define SYS_FLASHROM_H + +#include "ultra64.h" + +typedef struct { + /* 0x00 */ s32 requestType; + /* 0x04 */ OSMesg response; + /* 0x08 */ void* addr; + /* 0x0C */ s32 pageNum; + /* 0x10 */ s32 pageCount; + /* 0x14 */ OSMesgQueue messageQueue; +} FlashromRequest; // size = 0x2C + +#define FLASHROM_REQUEST_WRITE 1 +#define FLASHROM_REQUEST_READ 2 + +#define FLASH_TYPE_MAGIC 0x11118001 + +#endif diff --git a/include/z64.h b/include/z64.h index 69e7e01f2..ca9748509 100644 --- a/include/z64.h +++ b/include/z64.h @@ -63,15 +63,6 @@ #include "z64view.h" #include "regs.h" -typedef struct { - /* 0x00 */ s32 requestType; - /* 0x04 */ OSMesg response; - /* 0x08 */ void* addr; - /* 0x0C */ s32 pageNum; - /* 0x10 */ s32 pageCount; - /* 0x14 */ OSMesgQueue messageQueue; -} FlashromRequest; // size = 0x2C - typedef struct { /* 0x000 */ View view; /* 0x168 */ u8* iconItemSegment; @@ -393,56 +384,4 @@ typedef struct { /* 0x10 */ Color_RGBA8_u32 envColor; } Struct_80140E80; // size = 0x14 -// TODO: Dedicated Header? -#define FRAM_BASE_ADDRESS 0x08000000 // FRAM Base Address in Cart Memory -#define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory -#define FRAM_COMMAND_REGISTER 0x10000 // Located at 0x08010000 on the Cart - -#define FLASH_VERSION_MX_PROTO_A 0x00C20000 -#define FLASH_VERSION_MX_A 0x00C20001 -#define FLASH_VERSION_MX_C 0x00C2001E -#define FLASH_VERSION_MX_B_AND_D 0x00C2001D -#define FLASH_VERSION_MEI 0x003200F1 - -#define FLASH_TYPE_MAGIC 0x11118001 - -#define FLASH_PAGE_SIZE 128 - -#define FLASHROM_REQUEST_WRITE 1 -#define FLASHROM_REQUEST_READ 2 - -typedef enum FramCommand { - /* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS - Initializes fram to 0xFF in FRAM_MODE_ERASE - Writes Contents in FLASHRAM_MODE_WRITE - After execution, sets FRAM_MODE to FRAM_MODE_NOP */ - FRAM_COMMAND_EXECUTE = 0xD2000000, - /* flashram->erase_offset = (command & 0xFFFF) * 128; */ - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET = 0x4B000000, - /* flashram->mode = FLASHRAM_MODE_ERASE; - flashram->status = 0x1111800800C20000LL; */ - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS = 0x78000000, - /* flashram->erase_offset = (command & 0xFFFF) * 128; - flashram->status = 0x1111800400C20000LL; */ - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET_AND_STATUS = 0xA5000000, - /* flashram->mode = FLASHRAM_MODE_WRITE; */ - FRAM_COMMAND_SET_MODE_WRITE = 0xB4000000, - /* flashram->mode = FLASHRAM_MODE_STATUS; - flashram->status = 0x1111800100C20000LL; */ - FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS = 0xE1000000, - /* flashram->mode = FLASHRAM_MODE_READ; - flashram->status = 0x11118004F0000000LL; */ - FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, - /* unk */ - FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -} FramCommand; - -typedef enum FramMode { - /* 0 */ FRAM_MODE_NOP, - /* 1 */ FRAM_MODE_ERASE, - /* 2 */ FRAM_MODE_WRITE, - /* 3 */ FRAM_MODE_READ, - /* 4 */ FRAM_MODE_STATUS -} FramMode; - #endif diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index 0f4e9f748..6666a26db 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -5,6 +5,8 @@ #include "stackcheck.h" #include "system_malloc.h" #include "z64thread.h" +#include "sys_flashrom.h" +#include "PR/os_internal_flash.h" OSMesgQueue sFlashromMesgQueue; OSMesg sFlashromMesg[1]; @@ -81,7 +83,7 @@ s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE); + osInvalDCache(addr, pageCount * FLASH_BLOCK_SIZE); osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue); osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); return 0; @@ -103,12 +105,12 @@ s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) { return -1; } // Ensure the page is always aligned to a sector boundary. - if ((pageNum % FLASH_PAGE_SIZE) != 0) { + if ((pageNum % FLASH_BLOCK_SIZE) != 0) { Fault_AddHungupAndCrash("../sys_flashrom.c", 275); } - osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE); for (i = 0; i < pageCount; i++) { - osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue); + osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_BLOCK_SIZE, &sFlashromMesgQueue); osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); result = osFlashWriteArray(i + pageNum); if (result != 0) { @@ -125,7 +127,7 @@ s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE); i = 0; failRetry: result = SysFlashrom_EraseSector(pageNum); @@ -153,7 +155,7 @@ s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) { u32 size; u32 i; - for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) { + for (i = 0; i < pageCount * FLASH_BLOCK_SIZE; i += 4) { if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) { return false; } @@ -169,7 +171,7 @@ s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - size = pageCount * FLASH_PAGE_SIZE; + size = pageCount * FLASH_BLOCK_SIZE; data = SystemArena_Malloc(size); if (data == NULL) { ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 139c1526d..6a744a95e 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,41 +1,38 @@ #include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" +#include "PR/os_internal_flash.h" -s32 framDeviceInfo[4]; -OSIoMesg framDeviceInfoQuery; +u32 __osFlashID[4]; +OSIoMesg __osFlashMsg; OSMesgQueue __osFlashMessageQ; OSPiHandle __osFlashHandler; -OSMesg __osFlashMsgBuf; +OSMesg __osFlashMsgBuf[1]; s32 __osFlashVersion; -UNK_TYPE1 D_801FD0FC[0x14]; +static s32 sBssPad[5]; -typedef enum { - /* 0 */ FLASH_OLD, - /* 1 */ FLASH_NEW -} FlashVersion; - -u32 osFlashGetAddr(u32 pageNum) { - s32 addr = (__osFlashVersion == FLASH_OLD) ? pageNum << 6 : pageNum << 7; +uintptr_t osFlashGetAddr(u32 pageNum) { + // Account for hadware bug in old flash where the address bits are shifted 1-off where they should be + uintptr_t addr = (__osFlashVersion == OLD_FLASH) ? pageNum * (FLASH_BLOCK_SIZE >> 1) : pageNum * FLASH_BLOCK_SIZE; return addr; } OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start) { - __osFlashHandler.baseAddress = RDRAM_UNCACHED | start; + __osFlashHandler.baseAddress = PHYS_TO_K1(start); __osFlashHandler.type++; __osFlashHandler.latency = latency; __osFlashHandler.pulse = pulse; __osFlashHandler.pageSize = pageSize; __osFlashHandler.relDuration = relDuration; - __osFlashHandler.domain = 1; + __osFlashHandler.domain = PI_DOMAIN2; return &__osFlashHandler; } void osFlashChange(u32 flashNum) { - __osFlashHandler.baseAddress = RDRAM_UNCACHED | (FRAM_STATUS_REGISTER + (flashNum << 17)); - __osFlashHandler.type = 8 + flashNum; + __osFlashHandler.baseAddress = PHYS_TO_K1(FLASH_START_ADDR + (flashNum * FLASH_SIZE)); + __osFlashHandler.type = DEVICE_TYPE_FLASH + flashNum; return; } @@ -44,29 +41,31 @@ OSPiHandle* osFlashInit(void) { u32 flashType; u32 flashVendor; - osCreateMesgQueue(&__osFlashMessageQ, &__osFlashMsgBuf, 1); + osCreateMesgQueue(&__osFlashMessageQ, __osFlashMsgBuf, ARRAY_COUNT(__osFlashMsgBuf)); - if (__osFlashHandler.baseAddress == (RDRAM_UNCACHED | FRAM_BASE_ADDRESS)) { + if (__osFlashHandler.baseAddress == PHYS_TO_K1(FLASH_START_ADDR)) { return &__osFlashHandler; } - __osFlashHandler.type = 8; - __osFlashHandler.baseAddress = (RDRAM_UNCACHED | FRAM_BASE_ADDRESS); - __osFlashHandler.latency = 5; - __osFlashHandler.pulse = 12; - __osFlashHandler.pageSize = 15; - __osFlashHandler.relDuration = 2; - __osFlashHandler.domain = 1; + __osFlashHandler.type = DEVICE_TYPE_FLASH; + __osFlashHandler.baseAddress = PHYS_TO_K1(FLASH_START_ADDR); + __osFlashHandler.latency = FLASH_LATENCY; + __osFlashHandler.pulse = FLASH_PULSE; + __osFlashHandler.pageSize = FLASH_PAGE_SIZE; + __osFlashHandler.relDuration = FLASH_REL_DURATION; + __osFlashHandler.domain = PI_DOMAIN2; __osFlashHandler.speed = 0; + bzero(&__osFlashHandler.transferInfo, sizeof(__OSTranxInfo)); osEPiLinkHandle(&__osFlashHandler); osFlashReadId(&flashType, &flashVendor); - if (flashVendor == 0x00C2001E || flashVendor == 0x00C20001 || flashVendor == 0x00C20000) { - __osFlashVersion = FLASH_OLD; + if ((flashVendor == FLASH_VERSION_MX_C) || (flashVendor == FLASH_VERSION_MX_A) || + (flashVendor == FLASH_VERSION_MX_PROTO_A)) { + __osFlashVersion = OLD_FLASH; } else { - __osFlashVersion = FLASH_NEW; + __osFlashVersion = NEW_FLASH; } return &__osFlashHandler; @@ -75,12 +74,12 @@ OSPiHandle* osFlashInit(void) { void osFlashReadStatus(u8* flashStatus) { u32 outFlashStatus; - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); // read status using IO osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &outFlashStatus); // why twice ? - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &outFlashStatus); *flashStatus = outFlashStatus & 0xFF; @@ -95,29 +94,28 @@ void osFlashReadId(u32* flashType, u32* flashVendor) { osFlashReadStatus(&flashStatus); // select silicon id read mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_ID); // read silicon id using DMA - framDeviceInfoQuery.hdr.pri = 0; - framDeviceInfoQuery.hdr.retQueue = &__osFlashMessageQ; - framDeviceInfoQuery.dramAddr = framDeviceInfo; - framDeviceInfoQuery.devAddr = 0; - framDeviceInfoQuery.size = 8; + __osFlashMsg.hdr.pri = OS_MESG_PRI_NORMAL; + __osFlashMsg.hdr.retQueue = &__osFlashMessageQ; + __osFlashMsg.dramAddr = __osFlashID; + __osFlashMsg.devAddr = 0; + __osFlashMsg.size = 2 * sizeof(u32); - osInvalDCache(framDeviceInfo, sizeof(framDeviceInfo)); - osEPiStartDma(&__osFlashHandler, &framDeviceInfoQuery, OS_READ); + osInvalDCache(__osFlashID, sizeof(__osFlashID)); + osEPiStartDma(&__osFlashHandler, &__osFlashMsg, OS_READ); osRecvMesg(&__osFlashMessageQ, NULL, OS_MESG_BLOCK); - *flashType = framDeviceInfo[0]; - *flashVendor = framDeviceInfo[1]; + *flashType = __osFlashID[0]; + *flashVendor = __osFlashID[1]; return; } void osFlashClearStatus(void) { // select status mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); // clear status osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress, 0); @@ -131,10 +129,8 @@ s32 osFlashAllErase(void) { OSMesg msg; // start chip erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_UNK_ERASE_OPERATION); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_CHIP_ERASE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); // wait for completion by polling erase-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -142,25 +138,23 @@ s32 osFlashAllErase(void) { osSetTimer(&timer, OS_USEC_TO_CYCLES(15000), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 2) == 2); + } while ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY); // check erase operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } void osFlashAllEraseThrough(void) { // start chip erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_UNK_ERASE_OPERATION); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_CHIP_ERASE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); } s32 osFlashCheckEraseEnd(void) { @@ -168,8 +162,8 @@ s32 osFlashCheckEraseEnd(void) { // check if erase operation is completed osFlashReadStatus(&status); - if ((status & 0x02) == 0x02) { - return 2; // busy + if ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY) { + return FLASH_STATUS_ERASE_BUSY; } else { // check erase operation status, clear status osFlashReadStatus(&status); @@ -177,9 +171,9 @@ s32 osFlashCheckEraseEnd(void) { osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } @@ -190,10 +184,8 @@ s32 osFlashSectorErase(u32 pageNum) { OSMesg msg; // start sector erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET | pageNum); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_SECTOR_ERASE | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); // wait for completion by polling erase-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -201,39 +193,37 @@ s32 osFlashSectorErase(u32 pageNum) { osSetTimer(&timer, OS_USEC_TO_CYCLES(12500), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 2) == 2); + } while ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY); // check erase operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } void osFlashSectorEraseThrough(u32 pageNum) { // start sector erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET | pageNum); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_SECTOR_ERASE | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); } s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq) { s32 ret; // select load page mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_SET_MODE_WRITE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM); // DMA 128-byte page mb->hdr.pri = priority; mb->hdr.retQueue = mq; mb->dramAddr = dramAddr; mb->devAddr = 0; - mb->size = 0x80; + mb->size = FLASH_BLOCK_SIZE; ret = osEPiStartDma(&__osFlashHandler, mb, OS_WRITE); @@ -247,14 +237,12 @@ s32 osFlashWriteArray(u32 pageNum) { OSMesg msg; // only needed for new flash ? - if (__osFlashVersion == FLASH_NEW) { - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_WRITE); + if (__osFlashVersion == NEW_FLASH) { + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM); } // start program page operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET_AND_STATUS | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PROGRAM_PAGE | pageNum); // wait for completion by polling write-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -262,16 +250,16 @@ s32 osFlashWriteArray(u32 pageNum) { osSetTimer(&timer, OS_USEC_TO_CYCLES(200), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 0x01) == 0x01); + } while ((status & FLASH_STATUS_WRITE_BUSY) == FLASH_STATUS_WRITE_BUSY); // check program operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x04) || ((status & 0xFF) == 0x44) || ((status & 0x04) == 0x04)) { - return 0; + return FLASH_STATUS_WRITE_OK; } else { - return -1; + return FLASH_STATUS_WRITE_ERROR; } } @@ -282,8 +270,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 u32 pages; // select read array mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_READ_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_READ_ARRAY); // dummy read to initiate "fast-page" reads ? osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &dummy); @@ -296,10 +283,9 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 last_page = pageNum + pageCount - 1; if ((last_page & 0xF00) != (pageNum & 0xF00)) { - pages = 256 - (pageNum & 0xFF); pageCount -= pages; - mb->size = pages << 7; + mb->size = pages * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); osEPiStartDma(&__osFlashHandler, mb, OS_READ); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -310,7 +296,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 while (pageCount > 256) { pages = 256; pageCount -= 256; - mb->size = pages << 7; + mb->size = pages * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); osEPiStartDma(&__osFlashHandler, mb, OS_READ); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -318,7 +304,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 mb->dramAddr = (void*)((uintptr_t)mb->dramAddr + mb->size); } - mb->size = pageCount << 7; + mb->size = pageCount * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); ret = osEPiStartDma(&__osFlashHandler, mb, OS_READ); From 4b30f1a6549c99eff5344a815b12f54e69d689e9 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Fri, 15 Sep 2023 11:02:27 -0300 Subject: [PATCH 087/121] Move libultra variables to their respective headers (#1369) * internal_rsp; move size_t and NULL to ultratypes.h * guint.h * Move system variables to os_system.h * controller, pi and vi * osint.h * piint.h * siint, ucode, viint, voiceinternal * Remove remaining variables from variables.h * format * final renames * bss * review * review --- include/PR/controller.h | 7 +- include/PR/guint.h | 23 ++++ include/PR/os_internal.h | 3 +- include/PR/os_internal_rsp.h | 2 - include/PR/os_pi.h | 5 +- include/PR/os_system.h | 27 ++++ include/PR/os_vi.h | 11 +- include/PR/osint.h | 15 +++ include/PR/piint.h | 10 +- include/PR/siint.h | 1 + include/PR/ucode.h | 5 - include/PR/ultratypes.h | 6 + include/PR/viint.h | 2 + include/PR/voice_internal.h | 8 ++ include/fault.h | 4 +- include/libc/math.h | 15 --- include/libc/stddef.h | 6 - include/macros.h | 2 - include/ultra64.h | 1 + include/variables.h | 124 ------------------ include/z64actor.h | 1 + include/z64animation.h | 1 + src/boot/fault.c | 1 + src/boot/idle.c | 1 + src/code/padmgr.c | 2 + src/code/z_actor.c | 3 +- src/code/z_camera.c | 1 + src/code/z_collision_check.c | 1 - src/code/z_nmi_buff.c | 2 +- src/code/z_parameter.c | 1 + src/code/z_room.c | 1 + src/libultra/io/cartrominit.c | 30 ++--- src/libultra/io/contramread.c | 1 + src/libultra/io/contramwrite.c | 1 + src/libultra/io/controller.c | 12 +- src/libultra/io/piacs.c | 6 +- src/libultra/io/pimgr.c | 14 +- src/libultra/io/pirawdma.c | 2 +- src/libultra/io/siint.h | 4 - src/libultra/io/vi.c | 12 +- src/libultra/io/vimgr.c | 12 +- src/libultra/os/initialize.c | 50 +++---- src/libultra/os/seteventmesg.c | 7 +- src/libultra/os/thread.c | 5 +- src/libultra/os/timerintr.c | 4 +- src/libultra/voice/voicecontread2.c | 1 + src/libultra/voice/voicecontread36.c | 1 + src/libultra/voice/voicecontwrite20.c | 1 + src/libultra/voice/voicecontwrite4.c | 1 + src/libultra/voice/voicesetadconverter.c | 1 + src/overlays/actors/ovl_Boss_03/z_boss_03.c | 1 - .../actors/ovl_En_Fishing/z_en_fishing.c | 1 + .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 1 + .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1 + tools/disasm/variables.txt | 37 +++--- undefined_syms.txt | 2 +- 56 files changed, 226 insertions(+), 274 deletions(-) create mode 100644 include/PR/guint.h create mode 100644 include/PR/voice_internal.h delete mode 100644 src/libultra/io/siint.h diff --git a/include/PR/controller.h b/include/PR/controller.h index 40dc48b8d..8f5f35fe6 100644 --- a/include/PR/controller.h +++ b/include/PR/controller.h @@ -4,6 +4,7 @@ #include "ultratypes.h" #include "os_cont.h" #include "os_pfs.h" +#include "rcp.h" #define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) @@ -199,10 +200,10 @@ s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); extern OSPifRam __osContPifRam; -// extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; extern u8 __osMaxControllers; -// extern OSMesgQueue D_8009CF38; -// extern OSMesg D_8009CF50; +extern OSMesgQueue __osEepromTimerQ; +extern OSMesg __osEepromTimerMsg[]; +extern OSPifRam __osPfsPifRam; #endif diff --git a/include/PR/guint.h b/include/PR/guint.h new file mode 100644 index 000000000..e93909446 --- /dev/null +++ b/include/PR/guint.h @@ -0,0 +1,23 @@ +#ifndef PR_GUINT_H +#define PR_GUINT_H + +#include "ultratypes.h" + +typedef union { + f64 d; + struct { + u32 hi; + u32 lo; + } word; +} du; + +typedef union { + u32 i; + f32 f; +} fu; + +#define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) + +extern f32 __libm_qnan_f; + +#endif diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index 944edfabf..58e660801 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -6,8 +6,7 @@ #include "os_pi.h" #include "os_internal_rsp.h" - -typedef struct { +typedef struct __osHwInt { /* 0x00 */ OSMesgQueue* queue; /* 0x04 */ OSMesg msg; } __osHwInt; // size = 0x08 diff --git a/include/PR/os_internal_rsp.h b/include/PR/os_internal_rsp.h index d7b73096c..ce72a146b 100644 --- a/include/PR/os_internal_rsp.h +++ b/include/PR/os_internal_rsp.h @@ -2,12 +2,10 @@ #define PR_OS_INTERNAL_RSP_H #include "ultratypes.h" -#include "libc/stddef.h" u32 __osSpGetStatus(void); void __osSpSetStatus(u32 data); s32 __osSpSetPc(void* pc); s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); - #endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 134b43a93..7959ac7b3 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -60,8 +60,8 @@ typedef struct { /* 0x14 */ OSPiHandle* piHandle; } OSIoMesg; // size = 0x88 -typedef struct { - /* 0x00 */ s32 active; // u32 maybe? need to check +typedef struct OSDevMgr { + /* 0x00 */ s32 active; /* 0x04 */ OSThread* thread; /* 0x08 */ OSMesgQueue* cmdQueue; /* 0x0C */ OSMesgQueue* evtQueue; @@ -99,6 +99,7 @@ typedef struct { #define PI_DOMAIN1 0 #define PI_DOMAIN2 1 +extern OSPiHandle* __osPiTable; void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); diff --git a/include/PR/os_system.h b/include/PR/os_system.h index 21f06f164..b55ca11a1 100644 --- a/include/PR/os_system.h +++ b/include/PR/os_system.h @@ -3,6 +3,33 @@ #include "ultratypes.h" +/* + * Values for osTvType + */ +#define OS_TV_PAL 0 +#define OS_TV_NTSC 1 +#define OS_TV_MPAL 2 + +/* + * Size of buffer the retains contents after NMI + */ +#define OS_APP_NMI_BUFSIZE 64 + + +extern s32 osTvType; +extern s32 osRomType; +extern void* osRomBase; +extern s32 osResetType; +extern s32 osCicId; +extern s32 osVersion; +extern u32 osMemSize; +extern s32 osAppNMIBuffer[]; + +extern u64 osClockRate; + +extern s32 osViClock; + +extern u32 __OSGlobalIntMask; u32 osGetMemSize(void); s32 osAfterPreNMI(void); diff --git a/include/PR/os_vi.h b/include/PR/os_vi.h index e4098e97e..d2872962b 100644 --- a/include/PR/os_vi.h +++ b/include/PR/os_vi.h @@ -113,12 +113,16 @@ typedef struct { #define OS_VI_FPAL_HPN2 54 #define OS_VI_FPAL_HPF2 55 -#define OS_TV_PAL 0 -#define OS_TV_NTSC 1 -#define OS_TV_MPAL 2 #define OS_VI_UNK28 28 +extern OSViMode osViModeNtscHpf1; +extern OSViMode osViModePalLan1; +extern OSViMode osViModeNtscHpn1; +extern OSViMode osViModeNtscLan1; +extern OSViMode osViModeMpalLan1; +extern OSViMode osViModeFpalLan1; + void* osViGetCurrentFramebuffer(void); void* osViGetNextFramebuffer(void); void osViSetXScale(f32 value); @@ -131,5 +135,4 @@ void osViSwapBuffer(void* frameBufPtr); void osViBlack(u8 active); void osCreateViManager(OSPri pri); - #endif diff --git a/include/PR/osint.h b/include/PR/osint.h index c2e1a2b90..f472a35f5 100644 --- a/include/PR/osint.h +++ b/include/PR/osint.h @@ -34,5 +34,20 @@ void __osTimerServicesInit(void); extern __osHwInt __osHwIntTable[]; extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; +extern __OSThreadTail __osThreadTail; +extern OSThread* __osRunQueue; +extern OSThread* __osActiveQueue; +extern OSThread* __osRunningThread; +extern OSThread* __osFaultedThread; + +extern u32 __osShutdown; + +extern OSTimer* __osTimerList; + +extern OSTimer __osBaseTimer; +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 __osViIntrCount; +extern u32 __osTimerCounter; #endif diff --git a/include/PR/piint.h b/include/PR/piint.h index 0ca1f0d2e..91d966706 100644 --- a/include/PR/piint.h +++ b/include/PR/piint.h @@ -6,6 +6,15 @@ #include "libc/stdint.h" +extern OSDevMgr __osPiDevMgr; +extern OSPiHandle* __osCurrentHandle[]; +extern u32 __osPiAccessQueueEnabled; + +extern OSPiHandle __Dom1SpeedParam; +extern OSPiHandle __Dom2SpeedParam; + +extern OSMesgQueue __osPiAccessQueue; + void __osDevMgrMain(void* arg); void __osPiCreateAccessQueue(void); void __osPiRelAccess(void); @@ -16,5 +25,4 @@ s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); OSMesgQueue* osPiGetCmdQueue(void); - #endif diff --git a/include/PR/siint.h b/include/PR/siint.h index a6d16323e..ec9b451a8 100644 --- a/include/PR/siint.h +++ b/include/PR/siint.h @@ -3,6 +3,7 @@ #include "ultratypes.h" +extern u8 __osPfsInodeCacheBank; void __osSiGetAccess(void); void __osSiRelAccess(void); diff --git a/include/PR/ucode.h b/include/PR/ucode.h index 2314222ba..848983ebe 100644 --- a/include/PR/ucode.h +++ b/include/PR/ucode.h @@ -23,9 +23,4 @@ extern u64 gspF3DZEX2_NoN_PosLight_fifoTextEnd[]; extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[]; extern u64 gspF3DZEX2_NoN_PosLight_fifoDataEnd[]; -extern u64 gspS2DEX2_fifoTextStart[]; -extern u64 gspS2DEX2_fifoTextEnd[]; -extern u64 gspS2DEX2_fifoDataStart[]; -extern u64 gspS2DEX2_fifoDataEnd[]; - #endif diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h index 530f30755..76afdf6a0 100644 --- a/include/PR/ultratypes.h +++ b/include/PR/ultratypes.h @@ -22,6 +22,12 @@ typedef volatile s64 vs64; typedef float f32; typedef double f64; +typedef u32 size_t; + +#ifndef NULL +#define NULL (void*)0 +#endif + // TODO: move this somewhere else typedef void* TexturePtr; diff --git a/include/PR/viint.h b/include/PR/viint.h index 29d4fffc6..bc9ce2335 100644 --- a/include/PR/viint.h +++ b/include/PR/viint.h @@ -63,6 +63,8 @@ typedef struct { /* 0x24 */ __OSViScale y; } __OSViContext; // size = 0x30 +extern OSDevMgr __osViDevMgr; + void __osViSwapContext(void); extern __OSViContext* __osViCurr; extern __OSViContext* __osViNext; diff --git a/include/PR/voice_internal.h b/include/PR/voice_internal.h new file mode 100644 index 000000000..b7d6b7e85 --- /dev/null +++ b/include/PR/voice_internal.h @@ -0,0 +1,8 @@ +#ifndef PR_VOICE_INTERNAL_H +#define PR_VOICE_INTERNAL_H + +#include "ultratypes.h" + +extern s32 __osPfsLastChannel; + +#endif diff --git a/include/fault.h b/include/fault.h index 8affde4ae..efdb2c513 100644 --- a/include/fault.h +++ b/include/fault.h @@ -103,7 +103,7 @@ typedef struct FaultMgr { /* 0x844 */ void* fb; } FaultMgr; // size = 0x848 -extern FaultMgr gFaultMgr; - +// TODO: Commented out to try to avoid bss reorder in fault.c +// extern FaultMgr gFaultMgr; #endif diff --git a/include/libc/math.h b/include/libc/math.h index 618ab52b5..fd32cf199 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -10,21 +10,6 @@ #define SHT_MAX 32767.0f #define SHT_MINV (1.0f / SHT_MAX) -typedef union { - f64 d; - struct { - u32 hi; - u32 lo; - } word; -} du; - -typedef union { - u32 i; - f32 f; -} fu; - -extern f32 __libm_qnan_f; - float fabsf(float f); #pragma intrinsic(fabsf) #ifdef __GNUC__ diff --git a/include/libc/stddef.h b/include/libc/stddef.h index e867d8e2a..d75339614 100644 --- a/include/libc/stddef.h +++ b/include/libc/stddef.h @@ -3,14 +3,8 @@ #include "PR/ultratypes.h" -typedef u32 size_t; - typedef s32 ptrdiff_t; -#ifndef NULL -#define NULL (void*)0 -#endif - #ifdef __GNUC__ #define offsetof(structure, member) __builtin_offsetof (structure, member) #else diff --git a/include/macros.h b/include/macros.h index ff764f644..46932a0a6 100644 --- a/include/macros.h +++ b/include/macros.h @@ -95,8 +95,6 @@ #define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x)) #define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x)) -#define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) - #define SWAP(type, a, b) \ { \ type _temp = (a); \ diff --git a/include/ultra64.h b/include/ultra64.h index 58431bde8..9f810a733 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -5,6 +5,7 @@ #include "PR/gbi.h" #include "PR/gu.h" +#include "PR/guint.h" #include "PR/controller_voice.h" #include "PR/hardware.h" #include "PR/os.h" diff --git a/include/variables.h b/include/variables.h index 0f499fde4..fdc9e91b0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -6,14 +6,6 @@ #include "macros.h" // pre-boot variables -extern u32 osTvType; -extern u32 osRomType; -extern uintptr_t osRomBase; -extern u32 osResetType; -extern u32 osCicId; -extern u32 osVersion; -extern size_t osMemSize; -extern s32 osAppNmiBuffer[0x10]; extern u16 gFramebuffer1[SCREEN_HEIGHT][SCREEN_WIDTH]; // at 0x80000500 extern u8 D_80025D00[]; @@ -31,103 +23,7 @@ extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE1 sGfxPrintFontData; // extern UNK_TYPE4 D_80097524; // extern u32 sRandInt; -extern OSViMode osViModeNtscHpf1; -extern OSViMode osViModePalLan1; -extern s16 sintable[0x400]; -// extern UNK_TYPE1 D_80097DE4; -// extern UNK_TYPE4 D_80097E08; -extern OSThread* __osThreadTail; -extern OSThread* __osRunQueue; -extern OSThread* __osActiveQueue; -extern OSThread* __osRunningThread; -extern OSThread* __osFaultedThread; -extern u32 __osSiAccessQueueEnabled; -extern UNK_TYPE4 D_80097E40; -extern u64 osClockRate; -extern s32 osViClock; -extern UNK_TYPE4 __osShutdown; -extern UNK_TYPE4 __OSGlobalIntMask; -extern OSDevMgr __osPiDevMgr; -extern OSPiHandle* __osPiTable; -extern OSPiHandle* __osCurrentHandle[]; -extern UNK_TYPE4 __osPiAccessQueueEnabled; -extern OSViMode osViModeNtscHpn1; -extern s32 __osPfsInodeCacheChannel; -extern u8 __osPfsInodeCacheBank; -extern UNK_TYPE4 D_80097F10; -extern char spaces[]; -extern char zeroes[]; -extern OSTimer* __osTimerList; -extern s32 __osPfsLastChannel; -extern OSViMode osViModeNtscLan1; -extern OSViMode osViModeMpalLan1; -// extern __OSViContext D_80098060[2]; -// extern UNK_TYPE4 sCartRomNeedsInit; -extern OSViMode osViModeFpalLan1; -// extern u8 ldigs[]; -// extern u8 udigs[]; -// extern OSDevMgr __osViDevMgr; - -extern char bootThreadName[]; -extern char idleThreadName[]; -extern char irqmgrThreadName[]; -extern char mainThreadName[]; -extern f32 D_800981B0; -extern char D_800981C0[]; -extern const char dmamgrString800981C4[]; -extern const char dmamgrString800981D4[]; -extern const char dmamgrString800981E4[]; -extern const char dmamgrString800981F4[]; -extern const char dmamgrThreadName[]; -extern char D_80098210[]; -extern char yaz0String80098220[]; -extern char yaz0String8009823C[]; -extern char D_80098280[]; -extern char D_80098290[]; -extern char D_800982A4[]; - -extern char D_800990B0[]; -extern f32 D_800990C0[9]; -extern f32 D_800990E4; -extern f32 D_800990E8; -extern f32 D_800990EC; -extern f32 D_800990F0; -extern f32 D_800990F4; -extern f32 D_800990F8; -extern f32 D_800990FC; -extern f32 D_80099100; -extern f32 D_80099104; -extern f32 D_80099108; -extern f32 D_8009910C; -extern u16 D_800991A0[64]; -extern du P[5]; -extern du rpi; -extern du pihi; -extern du pilo; -extern fu zero; -// extern UNK_TYPE1 D_80099270; -extern UNK_PTR __osIntTable; -extern f64 D_800992C0; -extern f64 D_800992F0; -extern f64 D_800992F8; -extern char D_80099300[]; -extern char D_80099304[]; -extern unsigned int D_8009930C[6]; -extern f32 D_80099400; -extern f64 D_80099428; -extern f64 D_80099430; -extern f64 D_80099438; -// extern UNK_TYPE4 D_80099440; -extern f32 __libm_qnan_f; -extern f64 D_80099460[9]; -extern char D_800994A8[]; -extern char D_800994AC[]; -extern char D_800994B0[]; -// extern UNK_TYPE1 D_800994B1; -extern f64 D_800994B8; -extern f64 D_800994C0; -extern f64 D_800994C8; extern char gBuildTeam[]; extern char gBuildDate[]; extern char gBuildMakeOption[]; @@ -145,29 +41,9 @@ extern void* gYaz0DecompressDstEnd; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; // extern UNK_TYPE4 sArenaLockMsg; -extern OSTask tmp_task; - -extern OSMesg siAccessBuf[1]; -extern OSMesgQueue __osSiAccessQueue; - -extern OSThread __osThreadSave; -extern OSPiHandle D_8009D130; -extern OSPiHandle D_8009D1A8; - -extern OSMesg D_8009E3F0[1]; -extern OSMesgQueue __osPiAccessQueue; -extern __OSInode __osPfsInodeCache; -extern OSTimer D_8009E590; -extern OSTime __osCurrentTime; -extern u32 __osBaseCounter; -extern u32 __osViIntrCount; -extern u32 __osTimerCounter; -extern OSPifRam __osPfsPifRam; -extern OSPiHandle CartRomHandle; extern DmaEntry dmadata[1568]; // extern UNK_TYPE1 D_80186028; -extern u64 aspMainTextStart[]; extern u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; extern u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; diff --git a/include/z64actor.h b/include/z64actor.h index 5f0ea59ad..1b6c37072 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -2,6 +2,7 @@ #define Z64ACTOR_H #include "PR/ultratypes.h" +#include "color.h" #include "padutils.h" #include "z64math.h" #include "z64animation.h" diff --git a/include/z64animation.h b/include/z64animation.h index 25cbea1f2..3ee160c00 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -6,6 +6,7 @@ #include "z64dma.h" #include "z64math.h" +struct GameState; struct PlayState; struct Actor; struct SkelAnime; diff --git a/src/boot/fault.c b/src/boot/fault.c index f62dfb8b7..26b579850 100644 --- a/src/boot/fault.c +++ b/src/boot/fault.c @@ -42,6 +42,7 @@ #include "fault_internal.h" #include "fault.h" +#include "prevent_bss_reordering2.h" #include "global.h" #include "vt.h" #include "PR/osint.h" diff --git a/src/boot/idle.c b/src/boot/idle.c index ccdf98695..0bd07813f 100644 --- a/src/boot/idle.c +++ b/src/boot/idle.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "irqmgr.h" #include "main.h" #include "stack.h" diff --git a/src/code/padmgr.c b/src/code/padmgr.c index ae40fc1a4..1b75721cb 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -36,6 +36,8 @@ #include "PR/os_motor.h" #include "fault.h" +extern FaultMgr gFaultMgr; + #define PADMGR_RETRACE_MSG (1 << 0) #define PADMGR_PRE_NMI_MSG (1 << 1) #define PADMGR_NMI_MSG (1 << 2) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index f88f511b5..cef3c89da 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3,8 +3,7 @@ * Description: */ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "z64actor.h" #include "fault.h" #include "sys_cfb.h" #include "loadfragment.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index c2e00e206..a9477231c 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -43,6 +43,7 @@ * */ +#include "prevent_bss_reordering.h" #include "global.h" #include "libc/string.h" #include "z64quake.h" diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index af1f4ad6c..39b57cbd0 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64collision_check.h" diff --git a/src/code/z_nmi_buff.c b/src/code/z_nmi_buff.c index eacfc5f46..840345932 100644 --- a/src/code/z_nmi_buff.c +++ b/src/code/z_nmi_buff.c @@ -13,7 +13,7 @@ typedef struct { NmiBuff* gNMIBuffer; void Nmi_Init(void) { - gNMIBuffer = (NmiBuff*)osAppNmiBuffer; + gNMIBuffer = (NmiBuff*)osAppNMIBuffer; gNMIBuffer->resetting = false; if (osResetType == COLD_RESET) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 3ba6a9e99..a3dc07aaf 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" #include "sys_cfb.h" #include "z64snap.h" #include "z64view.h" diff --git a/src/code/z_room.c b/src/code/z_room.c index 28a297499..b8de6caec 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" #include "debug.h" void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3) { diff --git a/src/libultra/io/cartrominit.c b/src/libultra/io/cartrominit.c index 518be6624..39de77260 100644 --- a/src/libultra/io/cartrominit.c +++ b/src/libultra/io/cartrominit.c @@ -1,6 +1,6 @@ #include "global.h" -OSPiHandle CartRomHandle; +OSPiHandle __CartRomHandle; OSPiHandle* osCartRomInit(void) { register u32 initialConfig; @@ -17,15 +17,15 @@ OSPiHandle* osCartRomInit(void) { if (!sCartRomNeedsInit) { __osPiRelAccess(); - return &CartRomHandle; + return &__CartRomHandle; } sCartRomNeedsInit = false; - CartRomHandle.type = DEVICE_TYPE_CART; - CartRomHandle.baseAddress = 0xB0000000; - CartRomHandle.domain = 0; - CartRomHandle.speed = 0; - bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); + __CartRomHandle.type = DEVICE_TYPE_CART; + __CartRomHandle.baseAddress = 0xB0000000; + __CartRomHandle.domain = 0; + __CartRomHandle.speed = 0; + bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); /* Uses `status & PI_STATUS_ERROR` in OoT */ while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { @@ -42,11 +42,11 @@ OSPiHandle* osCartRomInit(void) { HW_REG(PI_BSD_DOM1_RLS_REG, u32) = 3; HW_REG(PI_BSD_DOM1_PWD_REG, u32) = 0xFF; - initialConfig = HW_REG(CartRomHandle.baseAddress, u32); - CartRomHandle.latency = initialConfig & 0xFF; - CartRomHandle.pageSize = (initialConfig >> 0x10) & 0xF; - CartRomHandle.relDuration = (initialConfig >> 0x14) & 0xF; - CartRomHandle.pulse = (initialConfig >> 8) & 0xFF; + initialConfig = HW_REG(__CartRomHandle.baseAddress, u32); + __CartRomHandle.latency = initialConfig & 0xFF; + __CartRomHandle.pageSize = (initialConfig >> 0x10) & 0xF; + __CartRomHandle.relDuration = (initialConfig >> 0x14) & 0xF; + __CartRomHandle.pulse = (initialConfig >> 8) & 0xFF; HW_REG(PI_BSD_DOM1_LAT_REG, u32) = lastLatency; HW_REG(PI_BSD_DOM1_PGS_REG, u32) = lastPageSize; @@ -54,10 +54,10 @@ OSPiHandle* osCartRomInit(void) { HW_REG(PI_BSD_DOM1_PWD_REG, u32) = lastPulse; prevInt = __osDisableInt(); - CartRomHandle.next = __osPiTable; - __osPiTable = &CartRomHandle; + __CartRomHandle.next = __osPiTable; + __osPiTable = &__CartRomHandle; __osRestoreInt(prevInt); __osPiRelAccess(); - return &CartRomHandle; + return &__CartRomHandle; } diff --git a/src/libultra/io/contramread.c b/src/libultra/io/contramread.c index d993b47d7..06def61ba 100644 --- a/src/libultra/io/contramread.c +++ b/src/libultra/io/contramread.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/voice_internal.h" #define BLOCKSIZE 32 diff --git a/src/libultra/io/contramwrite.c b/src/libultra/io/contramwrite.c index b2157a2a5..507fbb1e8 100644 --- a/src/libultra/io/contramwrite.c +++ b/src/libultra/io/contramwrite.c @@ -1,4 +1,5 @@ #include "ultra64.h" +#include "PR/voice_internal.h" #include "global.h" s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force) { diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 19be9281a..30cb4c1d9 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -1,14 +1,14 @@ #include "global.h" -UNK_TYPE4 D_80097E40 = 0; +s32 __osContinitialized = false; OSPifRam __osContPifRam; u8 __osContLastPoll; u8 __osMaxControllers; OSTimer __osEepromTimer; -OSMesgQueue D_8009CF38; -OSMesg D_8009CF50[1]; +OSMesgQueue __osEepromTimerQ; +OSMesg __osEepromTimerMsg[1]; s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { OSMesg dummy; @@ -17,11 +17,11 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { OSTimer mytimer; OSMesgQueue timerMesgQueue; - if (D_80097E40 != 0) { + if (__osContinitialized) { return 0; } - D_80097E40 = 1; + __osContinitialized = true; t = osGetTime(); if (t < 0x165A0BC) { @@ -43,7 +43,7 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { __osContGetInitData(bitpattern, data); __osContLastPoll = 0; __osSiCreateAccessQueue(); - osCreateMesgQueue(&D_8009CF38, D_8009CF50, ARRAY_COUNT(D_8009CF50)); + osCreateMesgQueue(&__osEepromTimerQ, __osEepromTimerMsg, ARRAY_COUNT(__osEepromTimerMsg)); return ret; } diff --git a/src/libultra/io/piacs.c b/src/libultra/io/piacs.c index 532b149e2..f1107b758 100644 --- a/src/libultra/io/piacs.c +++ b/src/libultra/io/piacs.c @@ -1,13 +1,13 @@ #include "global.h" -UNK_TYPE4 __osPiAccessQueueEnabled = 0; +u32 __osPiAccessQueueEnabled = 0; -OSMesg D_8009E3F0[1]; +OSMesg piAccessBuf[1]; OSMesgQueue __osPiAccessQueue; void __osPiCreateAccessQueue(void) { __osPiAccessQueueEnabled = 1; - osCreateMesgQueue(&__osPiAccessQueue, D_8009E3F0, ARRAY_COUNT(D_8009E3F0)); + osCreateMesgQueue(&__osPiAccessQueue, piAccessBuf, ARRAY_COUNT(piAccessBuf)); osSendMesg(&__osPiAccessQueue, NULL, OS_MESG_NOBLOCK); } diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index 63cc7ba66..b6e1fea13 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -1,12 +1,12 @@ #include "global.h" #include "stack.h" -OSPiHandle D_8009D130; -OSPiHandle D_8009D1A8; +OSPiHandle __Dom1SpeedParam; +OSPiHandle __Dom2SpeedParam; OSThread sPiMgrThread; STACK(sPiMgrStack, 0x1000); -OSMesgQueue D_8009E3D0; -OSMesg D_8009E3E8[1]; +OSMesgQueue piEventQueue; +OSMesg piEventBuf[1]; void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) { u32 savedMask; @@ -15,11 +15,11 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC if (!__osPiDevMgr.active) { osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); - osCreateMesgQueue(&D_8009E3D0, D_8009E3E8, ARRAY_COUNT(D_8009E3E8)); + osCreateMesgQueue(&piEventQueue, piEventBuf, ARRAY_COUNT(piEventBuf)); if (!__osPiAccessQueueEnabled) { __osPiCreateAccessQueue(); } - osSetEventMesg(OS_EVENT_PI, &D_8009E3D0, (OSMesg)0x22222222); + osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222); oldPri = -1; myPri = osGetThreadPri(NULL); if (myPri < pri) { @@ -30,7 +30,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC __osPiDevMgr.active = 1; __osPiDevMgr.thread = &sPiMgrThread; __osPiDevMgr.cmdQueue = cmdQ; - __osPiDevMgr.evtQueue = &D_8009E3D0; + __osPiDevMgr.evtQueue = &piEventQueue; __osPiDevMgr.acsQueue = &__osPiAccessQueue; __osPiDevMgr.piDmaCallback = __osPiRawStartDma; __osPiDevMgr.epiDmaCallback = __osEPiRawStartDma; diff --git a/src/libultra/io/pirawdma.c b/src/libultra/io/pirawdma.c index 90847c4be..b33afddfc 100644 --- a/src/libultra/io/pirawdma.c +++ b/src/libultra/io/pirawdma.c @@ -9,7 +9,7 @@ s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t s HW_REG(PI_DRAM_ADDR_REG, u32) = osVirtualToPhysical(dramAddr); - HW_REG(PI_CART_ADDR_REG, u32) = ((osRomBase | devAddr) & 0x1FFFFFFF); + HW_REG(PI_CART_ADDR_REG, u32) = (((uintptr_t)osRomBase | devAddr) & 0x1FFFFFFF); switch (direction) { case OS_READ: diff --git a/src/libultra/io/siint.h b/src/libultra/io/siint.h deleted file mode 100644 index 5fe725844..000000000 --- a/src/libultra/io/siint.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _SIINT_H_ -#define _SIINT_H_ - -#endif diff --git a/src/libultra/io/vi.c b/src/libultra/io/vi.c index ec0b1de70..a1e3e77c4 100644 --- a/src/libultra/io/vi.c +++ b/src/libultra/io/vi.c @@ -1,13 +1,13 @@ #include "global.h" -__OSViContext D_80098060[2] = { 0 }; -__OSViContext* __osViCurr = &D_80098060[0]; -__OSViContext* __osViNext = &D_80098060[1]; +static __OSViContext vi[2] = { 0 }; +__OSViContext* __osViCurr = &vi[0]; +__OSViContext* __osViNext = &vi[1]; void __osViInit(void) { - bzero(D_80098060, sizeof(D_80098060)); - __osViCurr = &D_80098060[0]; - __osViNext = &D_80098060[1]; + bzero(vi, sizeof(vi)); + __osViCurr = &vi[0]; + __osViNext = &vi[1]; __osViNext->retraceCount = 1; __osViCurr->retraceCount = 1; __osViNext->buffer = (void*)0x80000000; diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index f38974b8a..7bdb3ac51 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -9,7 +9,7 @@ OSMesgQueue viEventQueue; OSMesg viEventBuf[6]; OSIoMesg viRetraceMsg; OSIoMesg viCounterMsg; -OSMgrArgs __osViDevMgr = { 0 }; +OSDevMgr __osViDevMgr = { 0 }; u32 __additional_scanline = 0; void viMgrMain(void*); @@ -19,7 +19,7 @@ void osCreateViManager(OSPri pri) { OSPri newPri; OSPri currentPri; - if (!__osViDevMgr.initialized) { + if (!__osViDevMgr.active) { __osTimerServicesInit(); __additional_scanline = 0; osCreateMesgQueue(&viEventQueue, viEventBuf, ARRAY_COUNT(viEventBuf) - 1); @@ -39,11 +39,11 @@ void osCreateViManager(OSPri pri) { } prevInt = __osDisableInt(); - __osViDevMgr.initialized = true; - __osViDevMgr.mgrThread = &viThread; + __osViDevMgr.active = true; + __osViDevMgr.thread = &viThread; __osViDevMgr.cmdQueue = &viEventQueue; - __osViDevMgr.eventQueue = &viEventQueue; - __osViDevMgr.accessQueue = NULL; + __osViDevMgr.evtQueue = &viEventQueue; + __osViDevMgr.acsQueue = NULL; __osViDevMgr.piDmaCallback = NULL; __osViDevMgr.epiDmaCallback = NULL; diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 8eb97c28c..458aa55b9 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -3,39 +3,39 @@ #define COLD_RESET 0 typedef struct { - /* 0x0 */ u32 ins_00; // lui k0, 0x8000 - /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 - /* 0x8 */ u32 ins_08; // jr k0 ; __osException - /* 0xC */ u32 ins_0C; // nop -} struct_exceptionPreamble; // size = 0x10 + /* 0x0 */ u32 ins_00; // lui k0, 0x8000 + /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 + /* 0x8 */ u32 ins_08; // jr k0 ; __osException + /* 0xC */ u32 ins_0C; // nop +} __osExceptionVector; // size = 0x10 -extern struct_exceptionPreamble __osExceptionPreamble; +extern __osExceptionVector __osExceptionPreamble; u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; -UNK_TYPE4 __osShutdown = 0; -UNK_TYPE4 __OSGlobalIntMask = 0x003FFF01; +u32 __osShutdown = 0; +u32 __OSGlobalIntMask = 0x003FFF01; -UNK_TYPE4 D_8009CF70; +u32 __osFinalrom; void __createSpeedParam(void) { - D_8009D130.type = DEVICE_TYPE_INIT; - D_8009D130.latency = HW_REG(PI_BSD_DOM1_LAT_REG, u32); - D_8009D130.pulse = HW_REG(PI_BSD_DOM1_PWD_REG, u32); - D_8009D130.pageSize = HW_REG(PI_BSD_DOM1_PGS_REG, u32); - D_8009D130.relDuration = HW_REG(PI_BSD_DOM1_RLS_REG, u32); + __Dom1SpeedParam.type = DEVICE_TYPE_INIT; + __Dom1SpeedParam.latency = HW_REG(PI_BSD_DOM1_LAT_REG, u32); + __Dom1SpeedParam.pulse = HW_REG(PI_BSD_DOM1_PWD_REG, u32); + __Dom1SpeedParam.pageSize = HW_REG(PI_BSD_DOM1_PGS_REG, u32); + __Dom1SpeedParam.relDuration = HW_REG(PI_BSD_DOM1_RLS_REG, u32); - D_8009D1A8.type = DEVICE_TYPE_INIT; - D_8009D1A8.latency = HW_REG(PI_BSD_DOM2_LAT_REG, u32); - D_8009D1A8.pulse = HW_REG(PI_BSD_DOM2_PWD_REG, u32); - D_8009D1A8.pageSize = HW_REG(PI_BSD_DOM2_PGS_REG, u32); - D_8009D1A8.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); + __Dom2SpeedParam.type = DEVICE_TYPE_INIT; + __Dom2SpeedParam.latency = HW_REG(PI_BSD_DOM2_LAT_REG, u32); + __Dom2SpeedParam.pulse = HW_REG(PI_BSD_DOM2_PWD_REG, u32); + __Dom2SpeedParam.pageSize = HW_REG(PI_BSD_DOM2_PGS_REG, u32); + __Dom2SpeedParam.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); } void __osInitialize_common(void) { u32 pifdata; - D_8009CF70 = 1; + __osFinalrom = 1; __osSetSR(__osGetSR() | 0x20000000); __osSetFpcCsr(0x01000800); @@ -45,10 +45,10 @@ void __osInitialize_common(void) { while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {} - *(struct_exceptionPreamble*)0x80000000 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000080 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000100 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000180 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000000 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000080 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000100 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000180 = __osExceptionPreamble; osWritebackDCache(0x80000000, 400); osInvalICache(0x80000000, 400); @@ -59,7 +59,7 @@ void __osInitialize_common(void) { osClockRate = (u64)((osClockRate * 3LL) / 4ULL); if (osResetType == COLD_RESET) { - bzero(osAppNmiBuffer, 64); + bzero(osAppNMIBuffer, 64); } if (osTvType == OS_TV_PAL) { diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index d5c8407f4..74258517f 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -1,7 +1,8 @@ #include "global.h" #include "PR/osint.h" +#include "libc/stdbool.h" -UNK_TYPE4 D_80097F10 = 0; +u32 __osPreNMI = false; __OSEventState __osEventStateTab[OS_NUM_EVENTS]; @@ -17,10 +18,10 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { es->message = m; if (e == 14) { - if ((__osShutdown != 0) && (D_80097F10 == 0)) { + if (__osShutdown && !__osPreNMI) { osSendMesg(mq, m, OS_MESG_NOBLOCK); } - D_80097F10 = 1; + __osPreNMI = true; } __osRestoreInt(saveMask); diff --git a/src/libultra/os/thread.c b/src/libultra/os/thread.c index ec655d64a..98d04ab54 100644 --- a/src/libultra/os/thread.c +++ b/src/libultra/os/thread.c @@ -1,7 +1,6 @@ #include "global.h" -OSThread* __osThreadTail = NULL; -UNK_TYPE D_80097E14 = -1; +__OSThreadTail __osThreadTail = { NULL, OS_PRIORITY_THREADTAIL }; OSThread* __osRunQueue = (OSThread*)&__osThreadTail; OSThread* __osActiveQueue = (OSThread*)&__osThreadTail; OSThread* __osRunningThread = NULL; @@ -11,7 +10,7 @@ void __osDequeueThread(OSThread** queue, OSThread* t) { register OSThread* pred; register OSThread* succ; - pred = (OSThread*)queue; //! This seems questionable, but the function matches... + pred = (OSThread*)queue; succ = pred->next; while (succ != NULL) { if (succ == t) { diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c index 6b112e952..69ac931e1 100644 --- a/src/libultra/os/timerintr.c +++ b/src/libultra/os/timerintr.c @@ -1,6 +1,6 @@ #include "global.h" -OSTimer D_8009E590; +OSTimer __osBaseTimer; OSTime __osCurrentTime; u32 __osBaseCounter; u32 __osViIntrCount; @@ -8,7 +8,7 @@ u32 __osTimerCounter; s32 D_8009E5C8[2]; // dummy bss padding required OSPifRam __osPfsPifRam; -OSTimer* __osTimerList = &D_8009E590; +OSTimer* __osTimerList = &__osBaseTimer; void __osTimerServicesInit(void) { __osCurrentTime = 0; diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c index 0f39ee308..ba60a64c3 100644 --- a/src/libultra/voice/voicecontread2.c +++ b/src/libultra/voice/voicecontread2.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c index 9f23bf979..248360b00 100644 --- a/src/libultra/voice/voicecontread36.c +++ b/src/libultra/voice/voicecontread36.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c index dd9d7e07f..a346294bd 100644 --- a/src/libultra/voice/voicecontwrite20.c +++ b/src/libultra/voice/voicecontwrite20.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c index 103d3e798..e828fc4c6 100644 --- a/src/libultra/voice/voicecontwrite4.c +++ b/src/libultra/voice/voicecontwrite4.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c index 55403dae6..1b3d87cd5 100644 --- a/src/libultra/voice/voicesetadconverter.c +++ b/src/libultra/voice/voicesetadconverter.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" 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 168da5368..20a25036f 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -49,7 +49,6 @@ * - 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_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 1f3964998..4ae5482bf 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -4,6 +4,7 @@ * Description: Fishing Pond Elements (Owner, Fish, Props, Effects...) */ +#include "prevent_bss_reordering.h" #include "z_en_fishing.h" #include "z64rumble.h" #include "z64shrink_window.h" diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index b34dc30d2..ee8aa689f 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -5,6 +5,7 @@ */ #include "global.h" +#include "PR/gs2dex.h" #include "sys_cfb.h" #include "z_fbdemo_wipe5.h" 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 04567cf9d..6b451b506 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 @@ -4,6 +4,7 @@ * Description: Pause Menu */ +#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index fc49a3b43..2da44bc71 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -7,7 +7,7 @@ 0x80000310:("osCicId","UNK_TYPE","",0x4), 0x80000314:("osVersion","UNK_TYPE","",0x4), 0x80000318:("osMemSize","UNK_TYPE","",0x4), - 0x8000031C:("osAppNmiBuffer","s32","[0x10]",0x40), + 0x8000031C:("osAppNMIBuffer","s32","[0x10]",0x40), 0x80000500:("gFramebuffer1","u16","[SCREEN_HEIGHT][SCREEN_WIDTH]",0x25800), 0x80025D00:("D_80025D00","u8","[]",0x1), # TODO size 0x800969C0:("rspbootTextStart","u64","[]",0x160), @@ -47,13 +47,13 @@ 0x800975E0:("sintable","s16","[1024]",0x800), 0x80097DE0:("__osHwIntTable","__osHwInt","[]",0x28), 0x80097E08:("__osPiIntTable","__osHwInt","[]",0x28), - 0x80097E10:("__osThreadTail","OSThread*","",0x4), + 0x80097E10:("__osThreadTail","__OSThreadTail","",0x8), 0x80097E18:("__osRunQueue","OSThread*","",0x4), 0x80097E1C:("__osActiveQueue","OSThread*","",0x4), 0x80097E20:("__osRunningThread","OSThread*","",0x4), 0x80097E24:("__osFaultedThread","OSThread*","",0x4), 0x80097E30:("__osSiAccessQueueEnabled","u32","",0x4), - 0x80097E40:("D_80097E40","UNK_TYPE4","",0x4), + 0x80097E40:("__osContinitialized","UNK_TYPE4","",0x4), 0x80097E50:("osClockRate","u64","",0x8), 0x80097E58:("osViClock","s32","",0x4), 0x80097E5C:("__osShutdown","UNK_TYPE4","",0x4), @@ -65,7 +65,7 @@ 0x80097EB0:("osViModeNtscHpn1","OSViMode","",0x50), 0x80097F00:("__osPfsInodeCacheChannel","s32","",0x4), 0x80097F04:("__osPfsInodeCacheBank","u8","",0x1), - 0x80097F10:("D_80097F10","UNK_TYPE4","",0x4), + 0x80097F10:("__osPreNMI","UNK_TYPE4","",0x4), 0x80097F20:("spaces","char","[]",0x21), 0x80097F44:("zeroes","char","[]",0x24), 0x80097F70:("__osTimerList","OSTimer*","",0x4), @@ -75,7 +75,7 @@ 0x80097FB0:("__osPfsLastChannel","s32","",0x4), 0x80097FC0:("osViModeNtscLan1","OSViMode","",0x50), 0x80098010:("osViModeMpalLan1","OSViMode","",0x50), - 0x80098060:("D_80098060","__OSViContext","[2]",0x60), + 0x80098060:("vi","__OSViContext","[2]",0x60), 0x800980C0:("__osViCurr","__OSViContext*","",0x4), 0x800980C4:("__osViNext","__OSViContext*","",0x4), 0x800980D0:("sCartRomNeedsInit","UNK_TYPE4","",0x4), @@ -251,14 +251,14 @@ 0x80099128:("D_80099128","char","[]",0x1), 0x8009915C:("D_8009915C","char","[]",0x1), 0x80099178:("D_80099178","char","[]",0x1), - 0x800991A0:("D_800991A0","u16","[64]",0x80), + 0x800991A0:("__osRcpImTable","u16","[64]",0x80), 0x80099220:("P","du","[5]",0x28), 0x80099248:("rpi","du","",0x8), 0x80099250:("pihi","du","",0x8), 0x80099258:("pilo","du","",0x8), 0x80099260:("zero","fu","",0x4), - 0x80099270:("D_80099270","UNK_TYPE1","",0x1), - 0x80099290:("__osIntTable","UNK_PTR","",0x4), + 0x80099270:("__osIntOffTable","u8","",0x20), + 0x80099290:("__osIntTable","UNK_PTR","",0x30), 0x800992C0:("D_800992C0","f64","",0x8), 0x800992D0:("jtbl_800992D0","UNK_PTR","",0x4), 0x800992F0:("D_800992F0","f64","",0x8), @@ -330,32 +330,31 @@ 0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4), 0x8009CEB8:("__osSiAccessQueue","OSMesgQueue","",0x18), 0x8009CED0:("__osContPifRam","OSPifRam","",0x40), - 0x8009CF0C:("D_8009CF0C","UNK_TYPE1","",0x1), 0x8009CF10:("__osContLastPoll","u8","",0x1), 0x8009CF11:("__osMaxControllers","u8","",0x1), 0x8009CF18:("__osEepromTimer","OSTimer","",0x20), - 0x8009CF38:("D_8009CF38","OSMesgQueue","",0x18), - 0x8009CF50:("D_8009CF50","OSMesg","",0x4), + 0x8009CF38:("__osEepromTimerQ","OSMesgQueue","",0x18), + 0x8009CF50:("__osEepromTimerMsg","OSMesg","",0x4), 0x8009CF60:("sHandleStatus","UNK_TYPE1","",0x1), - 0x8009CF70:("D_8009CF70","UNK_TYPE4","",0x4), + 0x8009CF70:("__osFinalrom","UNK_TYPE4","",0x4), 0x8009CF80:("__osThreadSave","OSThread","",0x1b0), - 0x8009D130:("D_8009D130","OSPiHandle","",0x74), - 0x8009D1A8:("D_8009D1A8","OSPiHandle","",0x74), + 0x8009D130:("__Dom1SpeedParam","OSPiHandle","",0x74), + 0x8009D1A8:("__Dom2SpeedParam","OSPiHandle","",0x74), 0x8009D220:("sPiMgrThread","OSThread","",0x1b0), 0x8009D3D0:("sPiMgrStack","u8","[4096]",0x1000), - 0x8009E3D0:("D_8009E3D0","OSMesgQueue","",0x18), - 0x8009E3E8:("D_8009E3E8","OSMesg","[1]",0x4), - 0x8009E3F0:("D_8009E3F0","OSMesg","[1]",0x4), + 0x8009E3D0:("piEventQueue","OSMesgQueue","",0x18), + 0x8009E3E8:("piEventBuf","OSMesg","[1]",0x4), + 0x8009E3F0:("piAccessBuf","OSMesg","[1]",0x4), 0x8009E3F8:("__osPiAccessQueue","OSMesgQueue","",0x18), 0x8009E410:("__osPfsInodeCache","__OSInode","",0x100), 0x8009E510:("__osEventStateTab","__OSEventState","[16]",0x80), - 0x8009E590:("D_8009E590","OSTimer","",0x20), + 0x8009E590:("__osBaseTimer","OSTimer","",0x20), 0x8009E5B0:("__osCurrentTime","OSTime","",0x8), 0x8009E5B8:("__osBaseCounter","u32","",0x4), 0x8009E5BC:("__osViIntrCount","u32","",0x4), 0x8009E5C0:("__osTimerCounter","u32","",0x4), 0x8009E5D0:("__osPfsPifRam","OSPifRam","",0x40), - 0x8009E610:("CartRomHandle","OSPiHandle","",0x74), + 0x8009E610:("__CartRomHandle","OSPiHandle","",0x74), 0x8009E690:("viThread","OSThread","",0x1b0), 0x8009E840:("sViStack","u8","[4096]",0x1000), 0x8009F840:("viEventQueue","OSMesgQueue","",0x18), diff --git a/undefined_syms.txt b/undefined_syms.txt index a6a5bc8ae..45307fc87 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -14,7 +14,7 @@ osResetType = 0x8000030C; osCicId = 0x80000310; osVersion = 0x80000314; osMemSize = 0x80000318; -osAppNmiBuffer = 0x8000031C; +osAppNMIBuffer = 0x8000031C; /// OS hardware registers From df800c74aecfb6b89ee976df8a2f11451f295e37 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 16 Sep 2023 08:34:16 +1000 Subject: [PATCH 088/121] PreRender.c OK (#1320) * begin prerender * match func_801716C4 * copy more docs from OoT * begin func_801720FC * improve func_801720FC * match func_801720FC * background 2D * merge master * func_801717F8 attempt * z64prerender.h * import bss * non-equivalent * document func_801716C4 * cleanup comments * import tharo docs * minor improvement on PreRender_DivotFilter * Match PreRender_DivotFilter * Remove fakes * format * Fix comment about RM_VISCVG in PreRender_FetchFbufCoverage * PreRender cleanup * PR Review * review * listalloc.h * bss * capitalization --------- Co-authored-by: angie Co-authored-by: Derek Hensley --- include/functions.h | 32 - include/listalloc.h | 16 + include/z64.h | 48 +- include/z64prerender.h | 73 ++ spec | 1 - src/code/PreRender.c | 706 ++++++++++++++---- src/code/listalloc.c | 2 +- src/code/z_actor.c | 2 +- src/code/z_lifemeter.c | 1 - src/code/z_play.c | 10 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 1 + tools/disasm/functions.txt | 28 +- tools/disasm/variables.txt | 2 +- tools/sizes/code_functions.csv | 28 +- 14 files changed, 671 insertions(+), 279 deletions(-) create mode 100644 include/listalloc.h create mode 100644 include/z64prerender.h diff --git a/include/functions.h b/include/functions.h index 4c6c74cef..31ebb9c20 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1160,34 +1160,6 @@ void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId); void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha); void Play_Init(GameState* thisx); -void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); -void PreRender_Init(PreRender* this); -void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); -void PreRender_Destroy(PreRender* this); -void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 arg4); -void func_8016FF70(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA); -void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8017023C(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8017057C(PreRender* this, Gfx** gfxp); -void func_801705B4(PreRender* this, Gfx** gfxp); -void func_801705EC(PreRender* this, Gfx** gfxp); -void func_80170730(PreRender* this, Gfx** gfxp); -void func_80170774(PreRender* this, Gfx** gfxp); -void func_80170798(PreRender* this, Gfx** gfxp); -void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha); -void func_80170B28(PreRender* this, Gfx** gfxp); -void PreRender_AntiAliasAlgorithm(PreRender* this, s32 x, s32 y); -void PreRender_ApplyAntiAliasingFilter(PreRender* this); -u32 func_801716C4(u8* arg0, u8* arg1, u8* arg2); -void func_801717F8(PreRender* this); -void PreRender_ApplyFilters(PreRender* this); -void PreRender_ApplyFiltersSlowlyInit(PreRender* this); -void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this); -void func_801720C4(PreRender* this); -void func_801720FC(PreRenderParams* params, Gfx** gfxp); -void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags); - void GameAlloc_Log(GameAlloc* this); void* GameAlloc_Malloc(GameAlloc* this, size_t size); void GameAlloc_Free(GameAlloc* this, void* data); @@ -1208,10 +1180,6 @@ void Graph_ThreadEntry(void* arg); Gfx* Graph_GfxPlusOne(Gfx* gfx); Gfx* Graph_BranchDlist(Gfx* gfx, Gfx* dst); void* Graph_DlistAlloc(Gfx** gfx, size_t size); -ListAlloc* ListAlloc_Init(ListAlloc* this); -// void ListAlloc_Alloc(void); -// void ListAlloc_Free(void); -void ListAlloc_FreeAll(ListAlloc* this); void Sched_SwapFramebuffer(CfbInfo* cfbInfo); void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo); diff --git a/include/listalloc.h b/include/listalloc.h new file mode 100644 index 000000000..e4ca07f07 --- /dev/null +++ b/include/listalloc.h @@ -0,0 +1,16 @@ +#ifndef LISTALLOC_H +#define LISTALLOC_H + +#include "ultra64.h" + +typedef struct ListAlloc { + /* 0x0 */ struct ListAlloc* prev; + /* 0x4 */ struct ListAlloc* next; +} ListAlloc; // size = 0x8 + +ListAlloc* ListAlloc_Init(ListAlloc* this); +void* ListAlloc_Alloc(ListAlloc* this, size_t size); +void ListAlloc_Free(ListAlloc* this, void* data); +void ListAlloc_FreeAll(ListAlloc* this); + +#endif diff --git a/include/z64.h b/include/z64.h index ca9748509..63aec32ef 100644 --- a/include/z64.h +++ b/include/z64.h @@ -52,6 +52,7 @@ #include "z64object.h" #include "z64ocarina.h" #include "z64player.h" +#include "z64prerender.h" #include "z64save.h" #include "z64scene.h" #include "z64schedule.h" @@ -222,53 +223,6 @@ typedef struct { /* 0xFA */ u8 unk_FA[4]; } EnvironmentContext; // size = 0x100 -typedef struct ListAlloc { - /* 0x0 */ struct ListAlloc* prev; - /* 0x4 */ struct ListAlloc* next; -} ListAlloc; // size = 0x8 - -typedef struct { - /* 0x00 */ u16 width; - /* 0x02 */ u16 height; - /* 0x04 */ u16 widthSave; - /* 0x06 */ u16 heightSave; - /* 0x08 */ char unk_8[8]; - /* 0x10 */ u16* fbuf; - /* 0x14 */ u16* fbufSave; - /* 0x18 */ u8* cvgSave; - /* 0x1C */ u16* zbuf; - /* 0x20 */ u16* zbufSave; - /* 0x24 */ u16 ulxSave; - /* 0x26 */ u16 ulySave; - /* 0x28 */ u16 lrxSave; - /* 0x2A */ u16 lrySave; - /* 0x2C */ u16 ulx; - /* 0x2E */ u16 uly; - /* 0x30 */ u16 lrx; - /* 0x32 */ u16 lry; - /* 0x34 */ char unk_34[16]; - /* 0x44 */ ListAlloc alloc; - /* 0x4C */ u8 unk_4C; - /* 0x4D */ u8 unk_4D; - /* 0x4E */ char unk_4E[2]; -} PreRender; // size = 0x50 - -typedef struct { - /* 0x00 */ void* timg; - /* 0x04 */ void* tlut; - /* 0x08 */ u16 width; - /* 0x0A */ u16 height; - /* 0x0C */ u8 fmt; - /* 0x0D */ u8 siz; - /* 0x0E */ u16 tt; - /* 0x10 */ u16 unk_10; - /* 0x14 */ f32 x; - /* 0x18 */ f32 y; - /* 0x1C */ f32 xScale; - /* 0x20 */ f32 yScale; - /* 0x24 */ u32 flags; -} PreRenderParams; // size = 0x28 - struct PlayState; typedef struct { diff --git a/include/z64prerender.h b/include/z64prerender.h new file mode 100644 index 000000000..813f6827a --- /dev/null +++ b/include/z64prerender.h @@ -0,0 +1,73 @@ +#ifndef Z64_PRERENDER_H +#define Z64_PRERENDER_H + +#include "ultra64.h" +#include "listalloc.h" +#include "unk.h" + +#define BG2D_FLAGS_1 (1 << 0) +#define BG2D_FLAGS_2 (1 << 1) +#define BG2D_FLAGS_AC_THRESHOLD (1 << 2) +#define BG2D_FLAGS_LOAD_S2DEX2 (1 << 3) +#define BG2D_FLAGS_COPY (1 << 4) + +typedef enum PrerenderFilterState { + /* 0 */ PRERENDER_FILTER_STATE_NONE, + /* 1 */ PRERENDER_FILTER_STATE_PROCESS, + /* 2 */ PRERENDER_FILTER_STATE_DONE +} PrerenderFilterState; + +typedef struct PreRender { + /* 0x00 */ u16 width; + /* 0x02 */ u16 height; + /* 0x04 */ u16 widthSave; + /* 0x06 */ u16 heightSave; + /* 0x08 */ UNK_TYPE1 unk_08[0x8]; + /* 0x10 */ u16* fbuf; + /* 0x14 */ u16* fbufSave; + /* 0x18 */ u8* cvgSave; + /* 0x1C */ u16* zbuf; + /* 0x20 */ u16* zbufSave; + /* 0x24 */ u16 ulxSave; + /* 0x26 */ u16 ulySave; + /* 0x28 */ u16 lrxSave; + /* 0x2A */ u16 lrySave; + /* 0x2C */ u16 ulx; + /* 0x2E */ u16 uly; + /* 0x30 */ u16 lrx; + /* 0x32 */ u16 lry; + /* 0x34 */ UNK_TYPE1 unk_34[0x10]; + /* 0x44 */ ListAlloc alloc; + /* 0x4C */ u8 unk_4C; + /* 0x4D */ u8 filterState; // See `PrerenderFilterState` +} PreRender; // size = 0x50 + + +void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); +void PreRender_Init(PreRender* this); +void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); +void PreRender_Destroy(PreRender* this); +void PreRender_CopyImage(PreRender* this, Gfx** gfxp, void* img, void* imgDst, u32 useThresholdAlphaCompare); +void PreRender_RestoreBuffer(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); +void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA); +void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); +void PreRender_CoverageRgba16ToI8(PreRender* this, Gfx** gfxp, void* img, void* cvgDst); +void PreRender_SaveZBuffer(PreRender* this, Gfx** gfxp); +void PreRender_SaveFramebuffer(PreRender* this, Gfx** gfxp); +void PreRender_FetchFbufCoverage(PreRender* this, Gfx** gfxp); +void PreRender_DrawCoverage(PreRender* this, Gfx** gfxp); +void PreRender_RestoreZBuffer(PreRender* this, Gfx** gfxp); +void func_80170798(PreRender* this, Gfx** gfxp); +void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha); +void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxp); +void PreRender_AntiAliasFilterPixel(PreRender* this, s32 x, s32 y); +void PreRender_AntiAliasFilter(PreRender* this); +u32 PreRender_Get5bMedian9(u8* px1, u8* px2, u8* px3); +void PreRender_DivotFilter(PreRender* this); +void PreRender_ApplyFilters(PreRender* this); +void PreRender_ApplyFiltersSlowlyInit(PreRender* this); +void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this); +void func_801720C4(PreRender* this); +void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 tlutCount, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags); + +#endif diff --git a/spec b/spec index 90459b036..295af646b 100644 --- a/spec +++ b/spec @@ -547,7 +547,6 @@ beginseg include "build/src/code/z_play.o" include "build/src/code/z_play_hireso.o" include "build/src/code/PreRender.o" - include "build/data/code/PreRender.bss.o" include "build/src/code/TwoHeadGfxArena.o" include "build/src/code/TwoHeadArena.o" include "build/src/code/audio_stop_all_sfx.o" diff --git a/src/code/PreRender.c b/src/code/PreRender.c index c9f279e75..d058fded3 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -1,4 +1,18 @@ +/** + * @file PreRender.c + * + * This file implements various routines important to framebuffer effects, such as RDP accelerated color and depth + * buffer copies and coverage drawing. Also contains software implementations of the Video Interface anti-aliasing and + * divot filters. + */ + +#include "z64prerender.h" #include "global.h" +#include "PR/gs2dex.h" +#include "libc/alloca.h" +#include "libc/stdbool.h" +#include "color.h" +#include "macros.h" #include "slowly.h" #include "stack.h" #include "stackcheck.h" @@ -41,20 +55,20 @@ void PreRender_Destroy(PreRender* this) { ListAlloc_FreeAll(&this->alloc); } -void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 arg4) { +void PreRender_CopyImage(PreRender* this, Gfx** gfxp, void* img, void* imgDst, u32 useThresholdAlphaCompare) { Gfx* gfx = *gfxp; u32 flags; gDPPipeSync(gfx++); - gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, bufSave); + gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, imgDst); gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); - flags = 0x18; - if (arg4 == true) { - flags = 0x1C; + flags = BG2D_FLAGS_LOAD_S2DEX2 | BG2D_FLAGS_COPY; + if (useThresholdAlphaCompare == true) { + flags |= BG2D_FLAGS_AC_THRESHOLD; } - Prerender_DrawBackground2D(&gfx, buf, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, + Prerender_DrawBackground2D(&gfx, img, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, 0.0f, 1.0f, 1.0f, flags); gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); @@ -62,8 +76,8 @@ void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 ar *gfxp = gfx; } -void func_8016FF70(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { - func_8016FDB8(this, gfxp, buf, bufSave, false); +void PreRender_RestoreBuffer(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { + PreRender_CopyImage(this, gfxp, buf, bufSave, false); } void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA) { @@ -91,7 +105,7 @@ void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 en gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); Prerender_DrawBackground2D(&gfx, buf, 0, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, - 0.0f, 1.0f, 1.0f, 0xB); + 0.0f, 1.0f, 1.0f, BG2D_FLAGS_1 | BG2D_FLAGS_2 | BG2D_FLAGS_LOAD_S2DEX2); gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); @@ -102,103 +116,174 @@ void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { func_8016FF90(this, gfxp, buf, bufSave, 255, 255, 255, 255); } -#ifdef NON_MATCHING -// just regalloc -void func_8017023C(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { +/** + * Reads the coverage values stored in the RGBA16 format `img` with dimensions `this->width`, `this->height` and + * converts it to an 8-bpp intensity image. + * + * @param gfxp Display list pointer + * @param img Image to read coverage from + * @param cvgDst Buffer to store coverage into + */ +void PreRender_CoverageRgba16ToI8(PreRender* this, Gfx** gfxp, void* img, void* cvgDst) { Gfx* gfx = *gfxp; - s32 x; - s32 x2; - s32 dx; + s32 rowsRemaining; + s32 curRow; + s32 nRows; gDPPipeSync(gfx++); gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | 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_PASS | G_RM_OPA_CI2); + + // Set the combiner to draw the texture as-is, discarding alpha channel gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 0, 0, 0, 0, 0, 0, 0, TEXEL0, 0, 0, 0, 0); - gDPSetColorImage(gfx++, G_IM_FMT_I, G_IM_SIZ_8b, this->width, bufSave); + // Set the destination color image to the provided address + gDPSetColorImage(gfx++, G_IM_FMT_I, G_IM_SIZ_8b, this->width, cvgDst); + // Set up a scissor based on the source image gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); - dx = 0x1000 / (this->width * 2); - x = this->height; - x2 = 0; + // Calculate the max number of rows that can fit into TMEM at once + nRows = TMEM_SIZE / (this->width * G_IM_SIZ_16b_BYTES); - while (x > 0) { + // Set up the number of remaining rows + rowsRemaining = this->height; + curRow = 0; + while (rowsRemaining > 0) { s32 uls = 0; s32 lrs = this->width - 1; s32 ult; s32 lrt; - dx = CLAMP_MAX(dx, x); - ult = x2; - lrt = x2 + dx - 1; + // Make sure that we don't load past the end of the source image + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } - gDPLoadTextureTile(gfx++, buf, G_IM_FMT_IA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 0, + // Determine the upper and lower bounds of the rect to draw + ult = curRow; + lrt = curRow + nRows - 1; + + // Load a horizontal strip of the source image in IA16 format. Since the source image is stored in memory as + // RGBA16, the bits are reinterpreted into IA16: + // + // r g b a + // 11111 111 11 11111 1 + // i a + // 11111 111 11 11111 1 + // + // I = (r << 3) | (g >> 2) + // A = (g << 6) | (b << 1) | a + // + // Since it is expected that r = g = b = cvg in the source image, this results in + // I = (cvg << 3) | (cvg >> 2) + // This expands the 5-bit coverage into an 8-bit value + gDPLoadTextureTile(gfx++, img, G_IM_FMT_IA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 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); + // Draw that horizontal strip to the destination image. With the combiner and blender configuration set above, + // the intensity (I) channel of the loaded IA16 texture will be written as-is to the I8 color image, each pixel + // in the final image is + // I = (cvg << 3) | (cvg >> 2) gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, ult << 5, 1 << 10, 1 << 10); - x2 += dx; - x -= dx; + // Update the number of rows remaining and index of the row being drawn + curRow += nRows; + rowsRemaining -= nRows; } + // Reset the color image to the current framebuffer gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); *gfxp = gfx; } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_8017023C.s") -#endif -void func_8017057C(PreRender* this, Gfx** gfxp) { +/** + * Saves zbuf to zbufSave + */ +void PreRender_SaveZBuffer(PreRender* this, Gfx** gfxp) { if ((this->zbufSave != NULL) && (this->zbuf != NULL)) { - func_8016FF70(this, gfxp, this->zbuf, this->zbufSave); + PreRender_RestoreBuffer(this, gfxp, this->zbuf, this->zbufSave); } } -void func_801705B4(PreRender* this, Gfx** gfxp) { +/** + * Saves fbuf to fbufSave + */ +void PreRender_SaveFramebuffer(PreRender* this, Gfx** gfxp) { if ((this->fbufSave != NULL) && (this->fbuf != NULL)) { func_80170200(this, gfxp, this->fbuf, this->fbufSave); } } -void func_801705EC(PreRender* this, Gfx** gfxp) { +/** + * Fetches the coverage of the current framebuffer into an image of the same format as the current color image, storing + * it over the framebuffer in memory. + */ +void PreRender_FetchFbufCoverage(PreRender* this, Gfx** gfxp) { Gfx* gfx = *gfxp; gDPPipeSync(gfx++); + // Set the blend color to full white and set maximum depth gDPSetBlendColor(gfx++, 255, 255, 255, 8); - gDPSetPrimDepth(gfx++, -1, -1); + gDPSetPrimDepth(gfx++, 0xFFFF, 0xFFFF); + + // Uses G_RM_VISCVG to blit the coverage values to the framebuffer + // + // G_RM_VISCVG is the following special render mode: + // IM_RD : Allow read-modify-write operations on the framebuffer + // FORCE_BL : Apply the blender to all pixels rather than just edges, skip the division step of the blend formula + // (G_BL_CLR_IN * G_BL_0 + G_BL_CLR_BL * G_BL_A_MEM) = G_BL_CLR_BL * G_BL_A_MEM + // + // G_BL_A_MEM ("memory alpha") is coverage, therefore this blender configuration emits only the coverage (up to a + // constant factor determined by blend color) and discards any pixel colors. For an RGBA16 framebuffer, each of the + // three color channels r,g,b will receive the coverage value individually. + // + // Also disables other modes such as alpha compare and texture perspective correction gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | 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_VISCVG | G_RM_VISCVG2); + // Set up a scissor with the same dimensions as the framebuffer gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); + // Fill rectangle to obtain the coverage values as an RGBA16 image gDPFillRectangle(gfx++, 0, 0, this->width, this->height); gDPPipeSync(gfx++); *gfxp = gfx; } -void func_80170730(PreRender* this, Gfx** gfxp) { - func_801705EC(this, gfxp); +/** + * Draws the coverage of the current framebuffer `this->fbuf` to an I8 image at `this->cvgSave`. Overwrites + * `this->fbuf` in the process. + */ +void PreRender_DrawCoverage(PreRender* this, Gfx** gfxp) { + PreRender_FetchFbufCoverage(this, gfxp); if (this->cvgSave != NULL) { - func_8017023C(this, gfxp, this->fbuf, this->cvgSave); + PreRender_CoverageRgba16ToI8(this, gfxp, this->fbuf, this->cvgSave); } } -void func_80170774(PreRender* this, Gfx** gfxp) { - func_8016FF70(this, gfxp, this->zbufSave, this->zbuf); +/** + * Restores zbufSave to zbuf + */ +void PreRender_RestoreZBuffer(PreRender* this, Gfx** gfxp) { + PreRender_RestoreBuffer(this, gfxp, this->zbufSave, this->zbuf); } +/** + * Draws a full-screen image to the current framebuffer, that sources the rgb channel from `this->fbufSave` and + * the alpha channel from `this->cvgSave` modulated by environment color. + */ void func_80170798(PreRender* this, Gfx** gfxp) { Gfx* gfx; - s32 y; - s32 y2; - s32 dy; + s32 rowsRemaining; + s32 curRow; + s32 nRows; s32 rtile = 1; if (this->cvgSave != NULL) { @@ -206,43 +291,55 @@ void func_80170798(PreRender* this, Gfx** gfxp) { gDPPipeSync(gfx++); gDPSetEnvColor(gfx++, 255, 255, 255, 32); + // Effectively disable blending in both cycles. It's 2-cycle so that TEXEL1 can be used to point to a different + // texture tile. gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | AA_EN | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)); + + // Set up the color combiner: first cycle: TEXEL0, TEXEL1 + ENVIRONMENT; second cycle: G_CC_PASS2 gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 1, 0, TEXEL1, ENVIRONMENT, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); - dy = (this->width > 320) ? 2 : 4; - y = this->height; - y2 = 0; + nRows = (this->width > SCREEN_WIDTH) ? 2 : 4; - while (y > 0) { + rowsRemaining = this->height; + curRow = 0; + + while (rowsRemaining > 0) { s32 uls = 0; s32 lrs = this->width - 1; s32 ult; s32 lrt; - dy = CLAMP_MAX(dy, y); + // Make sure that we don't load past the end of the source image + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } - ult = y2; - lrt = (y2 + dy - 1); + // Determine the upper and lower bounds of the rect to draw + ult = curRow; + lrt = curRow + nRows - 1; + // Load the frame buffer line gDPLoadMultiTile(gfx++, this->fbufSave, 0x0000, G_TX_RENDERTILE, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 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); + + // Load the coverage line gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height, uls, ult, lrs, lrt, 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); - //! FAKE - if (1) {} - if (1) {} + + // Draw a texture for which the rgb channels come from the framebuffer and the alpha channel comes from + // coverage, modulated by env color gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, ult << 5, 1 << 10, 1 << 10); - y2 += dy; - y -= dy; + curRow += nRows; + rowsRemaining -= nRows; } gDPPipeSync(gfx++); @@ -254,134 +351,186 @@ void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha) { func_8016FF90(this, gfxp, this->fbufSave, this->fbuf, 255, 255, 255, alpha); } -void func_80170B28(PreRender* this, Gfx** gfxp) { - func_8016FF70(this, gfxp, this->fbufSave, this->fbuf); +/** + * Copies fbufSave to fbuf + */ +void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxp) { + PreRender_RestoreBuffer(this, gfxp, this->fbufSave, this->fbuf); } /** - * Applies an anti-alias filter where the middle pixel (index 7) correspond to (x, y) in this 3x5 rectangle - * _ _ _ _ _ - * | 0 1 2 3 4 | - * | 5 6 7 8 9 | - * | A B C D E | - * ‾ ‾ ‾ ‾ ‾ + * Applies the Video Interface anti-aliasing of silhouette edges to an image. + * + * This filter performs a linear interpolation on partially covered pixels between the current pixel color (called + * foreground color) and a "background" pixel color obtained by sampling fully covered pixels at the six highlighted + * points in the following 5x3 neighborhood: + * _ _ _ _ _ + * | o o | + * | o X o | + * | o o | + * ‾ ‾ ‾ ‾ ‾ + * Whether a pixel is partially covered is determined by reading the coverage values associated with the image. + * Coverage is a measure of how many subpixels the last drawn primitive covered. A fully covered pixel is one with a + * full coverage value, the entire pixel was covered by the primitive. + * The background color is calculated as the average of the "penultimate" minimum and maximum colors in the 5x3 + * neighborhood. + * + * The final color is calculated by interpolating the foreground and background color weighted by the coverage: + * OutputColor = cvg * ForeGround + (1.0 - cvg) * BackGround + * + * This is a software implementation of the same algorithm used in the Video Interface hardware when Anti-Aliasing is + * enabled in the VI Control Register. + * + * Patent describing the algorithm: + * + * Gossett, C. P., & van Hook, T. J. (Filed 1995, Published 1998) + * Antialiasing of silhouette edges (USOO5742277A) + * U.S. Patent and Trademark Office + * Expired 2015-10-06 + * https://patents.google.com/patent/US5742277A/en + * + * @param this PreRender instance + * @param x Center pixel x + * @param y Center pixel y */ -void PreRender_AntiAliasAlgorithm(PreRender* this, s32 x, s32 y) { +void PreRender_AntiAliasFilterPixel(PreRender* this, s32 x, s32 y) { s32 i; s32 j; - s32 buffA[3 * 5]; + s32 buffCvg[3 * 5]; s32 buffR[3 * 5]; s32 buffG[3 * 5]; s32 buffB[3 * 5]; - s32 x1; - s32 y1; - s32 pad; - s32 pxR; - s32 pxG; - s32 pxB; - s32 pxR2; - s32 pxG2; - s32 pxB2; + s32 xi; + s32 yi; + s32 temp; + s32 pmaxR; + s32 pmaxG; + s32 pmaxB; + s32 pminR; + s32 pminG; + s32 pminB; Color_RGBA16 pxIn; Color_RGBA16 pxOut; - u32 pxR3; - u32 pxG3; - u32 pxB3; + u32 outR; + u32 outG; + u32 outB; - for (i = 0; i < 3 * 5; i++) { - x1 = (i % 5) + x - 2; - y1 = (i / 5) + y - 1; + // Extract pixels in the 5x3 neighborhood + for (i = 0; i < 5 * 3; i++) { + xi = x + (i % 5) - 2; + yi = y + (i / 5) - 1; - if (x1 < 0) { - x1 = 0; - } else if (x1 > (this->width - 1)) { - x1 = this->width - 1; + // Clamp coordinates to the edges of the image + if (xi < 0) { + xi = 0; + } else if (xi > (this->width - 1)) { + xi = this->width - 1; } - if (y1 < 0) { - y1 = 0; - } else if (y1 > (this->height - 1)) { - y1 = this->height - 1; + if (yi < 0) { + yi = 0; + } else if (yi > (this->height - 1)) { + yi = this->height - 1; } - pxIn.rgba = this->fbufSave[x1 + y1 * this->width]; + // Extract color channels for each pixel, convert 5-bit color channels to 8-bit + pxIn.rgba = this->fbufSave[xi + yi * this->width]; buffR[i] = (pxIn.r << 3) | (pxIn.r >> 2); buffG[i] = (pxIn.g << 3) | (pxIn.g >> 2); buffB[i] = (pxIn.b << 3) | (pxIn.b >> 2); - buffA[i] = this->cvgSave[x1 + y1 * this->width] >> 5; + buffCvg[i] = this->cvgSave[xi + yi * this->width] >> 5; } - pxR = pxR2 = buffR[7]; - pxG = pxG2 = buffG[7]; - pxB = pxB2 = buffB[7]; + pmaxR = pminR = buffR[7]; + pmaxG = pminG = buffG[7]; + pmaxB = pminB = buffB[7]; - for (i = 1; i < 3 * 5; i += 2) { - if (buffA[i] == 7) { - if (pxR < buffR[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffR[j] >= buffR[i]) && (buffA[j] == 7)) { - pxR = buffR[i]; + // For each neighbor + for (i = 1; i < 5 * 3; i += 2) { + // Only sample fully covered pixels + if (buffCvg[i] == 7) { + // Determine "Penultimate Maximum" Value + + // If current maximum is less than this neighbor + if (pmaxR < buffR[i]) { + // For each neighbor (again) + for (j = 1; j < 5 * 3; j += 2) { + // If not the neighbor we were at before, and this neighbor has a larger value and this pixel is + // fully covered, that means the neighbor at `i` is the "penultimate maximum" + if ((i != j) && (buffR[j] >= buffR[i]) && (buffCvg[j] == 7)) { + pmaxR = buffR[i]; } } } - if (pxG < buffG[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffG[j] >= buffG[i]) && (buffA[j] == 7)) { - pxG = buffG[i]; + if (pmaxG < buffG[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffG[j] >= buffG[i]) && (buffCvg[j] == 7)) { + pmaxG = buffG[i]; } } } - if (pxB < buffB[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffB[j] >= buffB[i]) && (buffA[j] == 7)) { - pxB = buffB[i]; + if (pmaxB < buffB[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffB[j] >= buffB[i]) && (buffCvg[j] == 7)) { + pmaxB = buffB[i]; } } } + if (1) {} - if (pxR2 > buffR[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffR[j] <= buffR[i]) && (buffA[j] == 7)) { - pxR2 = buffR[i]; + + // Determine "Penultimate Minimum" Value + + // Same as above with inverted conditions + if (pminR > buffR[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffR[j] <= buffR[i]) && (buffCvg[j] == 7)) { + pminR = buffR[i]; } } } - if (pxG2 > buffG[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffG[j] <= buffG[i]) && (buffA[j] == 7)) { - pxG2 = buffG[i]; + if (pminG > buffG[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffG[j] <= buffG[i]) && (buffCvg[j] == 7)) { + pminG = buffG[i]; } } } - if (pxB2 > buffB[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffB[j] <= buffB[i]) && (buffA[j] == 7)) { - pxB2 = buffB[i]; + if (pminB > buffB[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffB[j] <= buffB[i]) && (buffCvg[j] == 7)) { + pminB = buffB[i]; } } } } } - pad = 7 - buffA[7]; - pxR3 = buffR[7] + (((s32)((pad * ((pxR + pxR2) - (buffR[7] << 1))) + 4)) >> 3); - pxG3 = buffG[7] + (((s32)((pad * ((pxG + pxG2) - (buffG[7] << 1))) + 4)) >> 3); - pxB3 = buffB[7] + (((s32)((pad * ((pxB + pxB2) - (buffB[7] << 1))) + 4)) >> 3); + // The background color is determined by averaging the penultimate minimum and maximum pixels, and subtracting the + // Foreground color: + // BackGround = (pMax + pMin) - (ForeGround) * 2 - pxOut.r = pxR3 >> 3; - pxOut.g = pxG3 >> 3; - pxOut.b = pxB3 >> 3; + // OutputColor = cvg * ForeGround + (1.0 - cvg) * BackGround + temp = 7 - buffCvg[7]; + outR = buffR[7] + ((s32)(temp * (pmaxR + pminR - (buffR[7] * 2)) + 4) >> 3); + outG = buffG[7] + ((s32)(temp * (pmaxG + pminG - (buffG[7] * 2)) + 4) >> 3); + outB = buffB[7] + ((s32)(temp * (pmaxB + pminB - (buffB[7] * 2)) + 4) >> 3); + + pxOut.r = outR >> 3; + pxOut.g = outG >> 3; + pxOut.b = outB >> 3; pxOut.a = 1; this->fbufSave[x + y * this->width] = pxOut.rgba; } /** - * Applies an anti-alias filter to the current prerender + * Applies the Video Interface anti-aliasing filter to `this->fbufSave` using `this->cvgSave` */ -void PreRender_ApplyAntiAliasingFilter(PreRender* this) { +void PreRender_AntiAliasFilter(PreRender* this) { s32 x; s32 y; s32 cvg; + // Apply AA filter for (y = 0; y < this->height; y++) { for (x = 0; x < this->width; x++) { cvg = this->cvgSave[x + y * this->width]; @@ -389,49 +538,187 @@ void PreRender_ApplyAntiAliasingFilter(PreRender* this) { cvg++; if (cvg != 8) { - PreRender_AntiAliasAlgorithm(this, x, y); + // If this pixel has only partial coverage, perform the Video Filter interpolation on it + PreRender_AntiAliasFilterPixel(this, x, y); } } } } -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801716C4.s") +/** + * Selects the median value from 9 different 5-bit pixels: + * px1[0], px1[1], px1[2], px2[0], px2[1], px2[2], px3[0], px3[1], px3[2] + * all args are expected to be an array of 3 different 5-bit values + */ +u32 PreRender_Get5bMedian9(u8* px1, u8* px2, u8* px3) { + u8 pxValCount[32]; // Stores the count for each of the possible 32 5-bit pixel values + u32 pxCount; // Pixel count + s32 pxMed; // Pixel median value -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801717F8.s") + // Initialize count to 0 in groups of 4 bits + *(s32*)(&pxValCount[0]) = 0; + *(s32*)(&pxValCount[4]) = 0; + *(s32*)(&pxValCount[8]) = 0; + *(s32*)(&pxValCount[12]) = 0; + *(s32*)(&pxValCount[16]) = 0; + *(s32*)(&pxValCount[20]) = 0; + *(s32*)(&pxValCount[24]) = 0; + *(s32*)(&pxValCount[28]) = 0; + + // Increment the count that contains the pixel values + pxValCount[px1[0]]++; + pxValCount[px1[1]]++; + pxValCount[px1[2]]++; + + pxValCount[px2[0]]++; + pxValCount[px2[1]]++; + pxValCount[px2[2]]++; + + pxValCount[px3[0]]++; + pxValCount[px3[1]]++; + pxValCount[px3[2]]++; + + // Loop through the 32 bits until 5 values are found, then return that bit value. + // Note that the median of 9 is the 5th sequential value. + pxCount = 0; + pxMed = 0; + while (true) { + pxCount += pxValCount[pxMed]; + if (pxCount >= 5) { + // the median is found + break; + } + pxMed++; + } + + return pxMed; +} + +// Despite the name, this function doesn't seem like an hardware-accurate divot filter +void PreRender_DivotFilter(PreRender* this) { + u32 width = this->width; + u32 height = this->height; + u8* buffer = alloca(width * 10); + u8* redRow[3]; + u8* greenRow[3]; + u8* blueRow[3]; + u8* cvgFull; + Color_RGBA16 inPx; + Color_RGBA16 outPx; + u32 x; + u32 y; + s32 pad; + + redRow[0] = &buffer[width * 0]; + redRow[1] = &buffer[width * 1]; + redRow[2] = &buffer[width * 2]; + + greenRow[0] = &buffer[width * 3]; + greenRow[1] = &buffer[width * 4]; + greenRow[2] = &buffer[width * 5]; + + blueRow[0] = &buffer[width * 6]; + blueRow[1] = &buffer[width * 7]; + blueRow[2] = &buffer[width * 8]; + + cvgFull = &buffer[width * 9]; + + // Fill line buffers for first 2 rows + for (y = 0; y < 2; y++) { + for (x = 0; x < width; x++) { + inPx.rgba = this->fbufSave[x + y * this->width]; + + redRow[y][x] = inPx.r; + greenRow[y][x] = inPx.g; + blueRow[y][x] = inPx.b; + } + } + + // For each row in the image, except first and last + for (y = 1; y < height - 1; y++) { + // Find start of pixels and coverage for current line (bug? this should probably be fetching the NEXT line, but + // really the divot filter only cares about individual lines so it's already wrong) + u8* redRow2 = redRow[2]; + u8* greenRow2 = greenRow[2]; + u8* blueRow2 = blueRow[2]; + u8* lineCvg = &this->cvgSave[width * y]; + u16* linePx = &this->fbufSave[width * y]; + + // Obtain next row from current line, current line becomes the bottom row?? (weird, you would expect this to + // sample the NEXT line?) + for (x = 0; x < width; x++) { + inPx.rgba = linePx[x]; + + redRow2[x] = inPx.r; + greenRow2[x] = inPx.g; + blueRow2[x] = inPx.b; + + // checking for full coverage + cvgFull[x] = (lineCvg[x] >> 5) == 7; + } + + for (x = 1; x < width - 1; x++) { + // if the coverage of the three adjacent pixels on the current line are not all fully covered + if (cvgFull[x - 1] && cvgFull[x] && cvgFull[x + 1]) { + continue; + } + + // find median value in 3x3 square for each (r,g,b), replaces the pixel marked by X: + // * * * + // * * * + // * X * + outPx.r = PreRender_Get5bMedian9(&redRow[0][x - 1], &redRow[1][x - 1], &redRow[2][x - 1]); + outPx.g = PreRender_Get5bMedian9(&greenRow[0][x - 1], &greenRow[1][x - 1], &greenRow[2][x - 1]); + outPx.b = PreRender_Get5bMedian9(&blueRow[0][x - 1], &blueRow[1][x - 1], &blueRow[2][x - 1]); + outPx.a = 1; + + this->fbufSave[x + y * this->width] = outPx.rgba; + } + + // Shuffle row 1 -> 0 + redRow[0] = redRow[1]; + greenRow[0] = greenRow[1]; + blueRow[0] = blueRow[1]; + // Shuffle row 2 -> 1 + redRow[1] = redRow[2]; + greenRow[1] = greenRow[2]; + blueRow[1] = blueRow[2]; + } +} /** * Applies filters to the framebuffer prerender to make it look smoother */ void PreRender_ApplyFilters(PreRender* this) { if ((this->cvgSave == NULL) || (this->fbufSave == NULL)) { - this->unk_4D = 0; + this->filterState = PRERENDER_FILTER_STATE_NONE; } else { - this->unk_4D = 1; - PreRender_ApplyAntiAliasingFilter(this); - func_801717F8(this); - this->unk_4D = 2; + this->filterState = PRERENDER_FILTER_STATE_PROCESS; + PreRender_AntiAliasFilter(this); + PreRender_DivotFilter(this); + this->filterState = PRERENDER_FILTER_STATE_DONE; } } -extern SlowlyMgr sSlowlyMgr; -extern s32 D_801F6FC0; -extern StackEntry sSlowlyStackInfo; -extern STACK(sSlowlyStack, 0x1000); +SlowlyMgr sSlowlyMgr; +s32 sSlowlyRunning; +StackEntry sSlowlyStackInfo; +STACK(sSlowlyStack, 0x1000); /** * Initializes `PreRender_ApplyFilters` onto a new "slowly" thread */ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { if ((this->cvgSave != NULL) && (this->fbufSave != NULL)) { - if (D_801F6FC0) { + if (sSlowlyRunning) { StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Destroy(&sSlowlyMgr); } - this->unk_4D = 1; + this->filterState = PRERENDER_FILTER_STATE_PROCESS; StackCheck_Init(&sSlowlyStackInfo, sSlowlyStack, STACK_TOP(sSlowlyStack), 0, 0x100, "slowly"); Slowly_Init(&sSlowlyMgr, STACK_TOP(sSlowlyStack), (void*)PreRender_ApplyFilters, this, NULL); - D_801F6FC0 = true; + sSlowlyRunning = true; } } @@ -439,10 +726,10 @@ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { * Destroys the "slowly" thread */ void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this) { - if (D_801F6FC0) { + if (sSlowlyRunning) { StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Destroy(&sSlowlyMgr); - D_801F6FC0 = false; + sSlowlyRunning = false; } } @@ -453,26 +740,121 @@ void func_801720C4(PreRender* this) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801720FC.s") +typedef struct { + /* 0x00 */ void* timg; + /* 0x04 */ void* tlut; + /* 0x08 */ u16 width; + /* 0x0A */ u16 height; + /* 0x0C */ u8 fmt; + /* 0x0D */ u8 siz; + /* 0x0E */ u16 tt; + /* 0x10 */ u16 tlutCount; + /* 0x14 */ f32 x; + /* 0x18 */ f32 y; + /* 0x1C */ f32 xScale; + /* 0x20 */ f32 yScale; + /* 0x24 */ u32 flags; +} PreRenderBackground2DParams; // size = 0x28 + +void Prerender_DrawBackground2DImpl(PreRenderBackground2DParams* bg2D, Gfx** gfxp) { + Gfx* gfx; + uObjBg* bg; + u32 alphaCompare; + Gfx* gfxTemp; + u32 loadS2DEX2; + + loadS2DEX2 = (bg2D->flags & BG2D_FLAGS_LOAD_S2DEX2) != 0; + alphaCompare = (bg2D->flags & BG2D_FLAGS_AC_THRESHOLD) ? G_AC_THRESHOLD : G_AC_NONE; + + gfxTemp = *gfxp; + bg = Graph_DlistAlloc(&gfxTemp, sizeof(uObjBg)); + gfx = gfxTemp; + + bg->b.imageX = 0; + bg->b.imageW = (bg2D->width * (1 << 2)) + 1; + bg->b.frameX = bg2D->x * (1 << 2); + + bg->b.imageY = 0; + bg->b.imageH = (bg2D->height * (1 << 2)) + 1; + bg->b.frameY = bg2D->y * (1 << 2); + + bg->b.imagePtr = bg2D->timg; + bg->b.imageLoad = G_BGLT_LOADTILE; + bg->b.imageFmt = bg2D->fmt; + bg->b.imageSiz = bg2D->siz; + bg->b.imagePal = 0; + bg->b.imageFlip = 0; + + if (loadS2DEX2) { + gSPLoadUcodeL(gfx++, gspS2DEX2_fifo); + } + + if ((bg2D->fmt == G_IM_FMT_CI) && (bg2D->tlut != NULL)) { + gDPLoadTLUT(gfx++, bg2D->tlutCount, 256, bg2D->tlut); + } else { + gDPPipeSync(gfx++); + } + + if (bg2D->flags & BG2D_FLAGS_COPY) { + bg->b.frameW = bg2D->width * (1 << 2); + bg->b.frameH = bg2D->height * (1 << 2); + + guS2DInitBg(bg); + + if (!(bg2D->flags & BG2D_FLAGS_1)) { + gDPSetOtherMode(gfx++, bg2D->tt | G_CYC_COPY, alphaCompare); + } + + gSPBgRectCopy(gfx++, bg); + } else { + bg->b.frameW = (u32)(bg2D->width * (1 << 2)) * bg2D->xScale; + bg->b.frameH = (u32)(bg2D->height * (1 << 2)) * bg2D->yScale; + bg->b.tmemW = (1 << 10) / bg2D->xScale; + bg->b.tmemH = (1 << 10) / bg2D->yScale; + bg->s.imageYorig = bg->b.imageY; + + if (!(bg2D->flags & BG2D_FLAGS_1)) { + gDPSetOtherMode(gfx++, bg2D->tt | G_AD_DISABLE | G_CD_DISABLE | G_TC_FILT, + AA_EN | CVG_X_ALPHA | ALPHA_CVG_SEL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_BL, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_BL, G_BL_1MA) | alphaCompare); + } + + if (!(bg2D->flags & BG2D_FLAGS_2)) { + gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 0, 0, 0, 1, 0, 0, 0, TEXEL0, 0, 0, 0, 1); + } + + gSPObjRenderMode(gfx++, G_OBJRM_ANTIALIAS | G_OBJRM_BILERP); + gSPBgRect1Cyc(gfx++, bg); + } + + gDPPipeSync(gfx++); + + if (loadS2DEX2) { + gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); + } + + *gfxp = gfx; +} void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, - u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags) { - PreRenderParams params; - PreRenderParams* paramsp = ¶ms; + u16 tlutCount, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags) { + PreRenderBackground2DParams bg2D; + PreRenderBackground2DParams* bg2DPtr = &bg2D; - params.timg = timg; - params.tlut = tlut; - params.width = width; - params.height = height; - params.fmt = fmt; - params.siz = siz; - params.tt = tt; - params.unk_10 = arg8; - params.x = x; - params.y = y; - params.xScale = xScale; - params.yScale = yScale; - params.flags = flags; + bg2D.timg = timg; + bg2D.tlut = tlut; + bg2D.width = width; + bg2D.height = height; + bg2D.fmt = fmt; + bg2D.siz = siz; + bg2D.tt = tt; + bg2D.tlutCount = tlutCount; + bg2D.x = x; + bg2D.y = y; + bg2D.xScale = xScale; + bg2D.yScale = yScale; + bg2D.flags = flags; - func_801720FC(paramsp, gfxp); + Prerender_DrawBackground2DImpl(bg2DPtr, gfxp); } diff --git a/src/code/listalloc.c b/src/code/listalloc.c index 33f9989ba..ba346d954 100644 --- a/src/code/listalloc.c +++ b/src/code/listalloc.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "listalloc.h" #include "system_malloc.h" ListAlloc* ListAlloc_Init(ListAlloc* this) { diff --git a/src/code/z_actor.c b/src/code/z_actor.c index cef3c89da..a69dada41 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2892,7 +2892,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors play->pauseBgPreRender.fbuf); gfxTemp = gfx; - func_8016FDB8(&play->pauseBgPreRender, &gfxTemp, spA4, zbuffer, 1); + PreRender_CopyImage(&play->pauseBgPreRender, &gfxTemp, spA4, zbuffer, true); gfx = gfxTemp; } diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index d9abe151d..5d1299bbf 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #include "interface/parameter_static/parameter_static.h" diff --git a/src/code/z_play.c b/src/code/z_play.c index 48fbb1f2d..9bb8d5817 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -83,7 +83,7 @@ void Play_DrawMotionBlur(PlayState* this) { sMotionBlurStatus = MOTION_BLUR_PROCESS; } - func_801705B4(&this->pauseBgPreRender, &gfx); + PreRender_SaveFramebuffer(&this->pauseBgPreRender, &gfx); gSPEndDisplayList(gfx++); @@ -1267,8 +1267,8 @@ void Play_DrawMain(PlayState* this) { if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { Gfx* sp8C = POLY_OPA_DISP; - if (this->pauseBgPreRender.unk_4D == 2) { - func_80170B28(&this->pauseBgPreRender, &sp8C); + if (this->pauseBgPreRender.filterState == PRERENDER_FILTER_STATE_DONE) { + PreRender_RestoreFramebuffer(&this->pauseBgPreRender, &sp8C); } else { func_80170798(&this->pauseBgPreRender, &sp8C); } @@ -1405,10 +1405,10 @@ void Play_DrawMain(PlayState* this) { this->pauseBgPreRender.cvgSave = NULL; } - func_801705B4(&this->pauseBgPreRender, &sp74); + PreRender_SaveFramebuffer(&this->pauseBgPreRender, &sp74); if (this->pauseBgPreRender.cvgSave != NULL) { - func_80170730(&this->pauseBgPreRender, &sp74); + PreRender_DrawCoverage(&this->pauseBgPreRender, &sp74); } gSPEndDisplayList(sp74++); 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 f31b6d308..764b00224 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -4,6 +4,7 @@ * Description: Woodfall scene objects (temple, water, walls, etc) */ +#include "prevent_bss_reordering.h" #include "z_dm_char01.h" #include "objects/object_mtoride/object_mtoride.h" #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e3c54b894..3f8a338d0 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3057,28 +3057,28 @@ 0x8016FD2C:("PreRender_Init",), 0x8016FD60:("PreRender_SetValues",), 0x8016FD94:("PreRender_Destroy",), - 0x8016FDB8:("func_8016FDB8",), - 0x8016FF70:("func_8016FF70",), + 0x8016FDB8:("PreRender_CopyImage",), + 0x8016FF70:("PreRender_RestoreBuffer",), 0x8016FF90:("func_8016FF90",), 0x80170200:("func_80170200",), - 0x8017023C:("func_8017023C",), - 0x8017057C:("func_8017057C",), - 0x801705B4:("func_801705B4",), - 0x801705EC:("func_801705EC",), - 0x80170730:("func_80170730",), - 0x80170774:("func_80170774",), + 0x8017023C:("PreRender_CoverageRgba16ToI8",), + 0x8017057C:("PreRender_SaveZBuffer",), + 0x801705B4:("PreRender_SaveFramebuffer",), + 0x801705EC:("PreRender_FetchFbufCoverage",), + 0x80170730:("PreRender_DrawCoverage",), + 0x80170774:("PreRender_RestoreZBuffer",), 0x80170798:("func_80170798",), 0x80170AE0:("func_80170AE0",), - 0x80170B28:("func_80170B28",), - 0x80170B4C:("PreRender_AntiAliasAlgorithm",), - 0x8017160C:("PreRender_ApplyAntiAliasingFilter",), - 0x801716C4:("func_801716C4",), - 0x801717F8:("func_801717F8",), + 0x80170B28:("PreRender_RestoreFramebuffer",), + 0x80170B4C:("PreRender_AntiAliasFilterPixel",), + 0x8017160C:("PreRender_AntiAliasFilter",), + 0x801716C4:("PreRender_Get5bMedian9",), + 0x801717F8:("PreRender_DivotFilter",), 0x80171F4C:("PreRender_ApplyFilters",), 0x80171FA8:("PreRender_ApplyFiltersSlowlyInit",), 0x80172078:("PreRender_ApplyFiltersSlowlyDestroy",), 0x801720C4:("func_801720C4",), - 0x801720FC:("func_801720FC",), + 0x801720FC:("Prerender_DrawBackground2DImpl",), 0x80172758:("Prerender_DrawBackground2D",), 0x801727F0:("THGA_Init",), 0x80172810:("THGA_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 2da44bc71..ba2889d54 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4021,7 +4021,7 @@ 0x801F6DFC:("sBombersNotebookOpen","u8","",0x1), 0x801F6DFD:("sMotionBlurStatus","UNK_TYPE1","",0x1), 0x801F6E00:("sSlowlyMgr","SlowlyMgr","",0x1c0), - 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), + 0x801F6FC0:("sSlowlyRunning","UNK_TYPE1","",0x1), 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c), 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), 0x801F7FF0:("sGameSpeedMeter","SpeedMeter","", 0x20), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index ba509ef78..929ae61a7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2571,28 +2571,28 @@ asm/non_matchings/code/PreRender/PreRender_SetValuesSave.s,PreRender_SetValuesSa asm/non_matchings/code/PreRender/PreRender_Init.s,PreRender_Init,0x8016FD2C,0xD asm/non_matchings/code/PreRender/PreRender_SetValues.s,PreRender_SetValues,0x8016FD60,0xD asm/non_matchings/code/PreRender/PreRender_Destroy.s,PreRender_Destroy,0x8016FD94,0x9 -asm/non_matchings/code/PreRender/func_8016FDB8.s,func_8016FDB8,0x8016FDB8,0x6E -asm/non_matchings/code/PreRender/func_8016FF70.s,func_8016FF70,0x8016FF70,0x8 +asm/non_matchings/code/PreRender/PreRender_CopyImage.s,PreRender_CopyImage,0x8016FDB8,0x6E +asm/non_matchings/code/PreRender/PreRender_RestoreBuffer.s,PreRender_RestoreBuffer,0x8016FF70,0x8 asm/non_matchings/code/PreRender/func_8016FF90.s,func_8016FF90,0x8016FF90,0x9C asm/non_matchings/code/PreRender/func_80170200.s,func_80170200,0x80170200,0xF -asm/non_matchings/code/PreRender/func_8017023C.s,func_8017023C,0x8017023C,0xD0 -asm/non_matchings/code/PreRender/func_8017057C.s,func_8017057C,0x8017057C,0xE -asm/non_matchings/code/PreRender/func_801705B4.s,func_801705B4,0x801705B4,0xE -asm/non_matchings/code/PreRender/func_801705EC.s,func_801705EC,0x801705EC,0x51 -asm/non_matchings/code/PreRender/func_80170730.s,func_80170730,0x80170730,0x11 -asm/non_matchings/code/PreRender/func_80170774.s,func_80170774,0x80170774,0x9 +asm/non_matchings/code/PreRender/PreRender_CoverageRgba16ToI8.s,PreRender_CoverageRgba16ToI8,0x8017023C,0xD0 +asm/non_matchings/code/PreRender/PreRender_SaveZBuffer.s,PreRender_SaveZBuffer,0x8017057C,0xE +asm/non_matchings/code/PreRender/PreRender_SaveFramebuffer.s,PreRender_SaveFramebuffer,0x801705B4,0xE +asm/non_matchings/code/PreRender/PreRender_FetchFbufCoverage.s,PreRender_FetchFbufCoverage,0x801705EC,0x51 +asm/non_matchings/code/PreRender/PreRender_DrawCoverage.s,PreRender_DrawCoverage,0x80170730,0x11 +asm/non_matchings/code/PreRender/PreRender_RestoreZBuffer.s,PreRender_RestoreZBuffer,0x80170774,0x9 asm/non_matchings/code/PreRender/func_80170798.s,func_80170798,0x80170798,0xD2 asm/non_matchings/code/PreRender/func_80170AE0.s,func_80170AE0,0x80170AE0,0x12 -asm/non_matchings/code/PreRender/func_80170B28.s,func_80170B28,0x80170B28,0x9 -asm/non_matchings/code/PreRender/PreRender_AntiAliasAlgorithm.s,PreRender_AntiAliasAlgorithm,0x80170B4C,0x2B0 -asm/non_matchings/code/PreRender/PreRender_ApplyAntiAliasingFilter.s,PreRender_ApplyAntiAliasingFilter,0x8017160C,0x2E -asm/non_matchings/code/PreRender/func_801716C4.s,func_801716C4,0x801716C4,0x4D -asm/non_matchings/code/PreRender/func_801717F8.s,func_801717F8,0x801717F8,0x1D5 +asm/non_matchings/code/PreRender/PreRender_RestoreFramebuffer.s,PreRender_RestoreFramebuffer,0x80170B28,0x9 +asm/non_matchings/code/PreRender/PreRender_AntiAliasFilterPixel.s,PreRender_AntiAliasFilterPixel,0x80170B4C,0x2B0 +asm/non_matchings/code/PreRender/PreRender_AntiAliasFilter.s,PreRender_AntiAliasFilter,0x8017160C,0x2E +asm/non_matchings/code/PreRender/PreRender_Get5bMedian9.s,PreRender_Get5bMedian9,0x801716C4,0x4D +asm/non_matchings/code/PreRender/PreRender_DivotFilter.s,PreRender_DivotFilter,0x801717F8,0x1D5 asm/non_matchings/code/PreRender/PreRender_ApplyFilters.s,PreRender_ApplyFilters,0x80171F4C,0x17 asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyInit.s,PreRender_ApplyFiltersSlowlyInit,0x80171FA8,0x34 asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyDestroy.s,PreRender_ApplyFiltersSlowlyDestroy,0x80172078,0x13 asm/non_matchings/code/PreRender/func_801720C4.s,func_801720C4,0x801720C4,0xE -asm/non_matchings/code/PreRender/func_801720FC.s,func_801720FC,0x801720FC,0x197 +asm/non_matchings/code/PreRender/Prerender_DrawBackground2DImpl.s,Prerender_DrawBackground2DImpl,0x801720FC,0x197 asm/non_matchings/code/PreRender/Prerender_DrawBackground2D.s,Prerender_DrawBackground2D,0x80172758,0x26 asm/non_matchings/code/TwoHeadGfxArena/THGA_Init.s,THGA_Init,0x801727F0,0x8 asm/non_matchings/code/TwoHeadGfxArena/THGA_Destroy.s,THGA_Destroy,0x80172810,0x8 From fa71fbeaab8631bcd2bfd8d68e1b73f1b4d1801e Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Tue, 19 Sep 2023 07:04:23 +0200 Subject: [PATCH 089/121] Stone Tower Smoke (#1382) * funen xml * description * outname --- assets/xml/objects/object_funen.xml | 5 +++-- src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/xml/objects/object_funen.xml b/assets/xml/objects/object_funen.xml index 7a0410008..0f9d0a484 100644 --- a/assets/xml/objects/object_funen.xml +++ b/assets/xml/objects/object_funen.xml @@ -1,6 +1,7 @@  + - - + + diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c index 409cbd837..a75a43cda 100644 --- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c +++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c @@ -43,6 +43,6 @@ void ObjFunen_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, temp, 0x20, 0x20, 1, 0, temp, 0x20, 0x20)); - gSPDisplayList(POLY_XLU_DISP++, object_funen_DL_0000D0); + gSPDisplayList(POLY_XLU_DISP++, gStoneTowerSmokeDL); CLOSE_DISPS(play->state.gfxCtx); } From d353e56be6201e0a981c4573145d5a8885fbb41d Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:28:00 +0200 Subject: [PATCH 090/121] removed TransformUpdateIndex in z_demo_tre_lgt.c (#1386) --- src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index fdfcd67de..6ca5da41f 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -47,7 +47,7 @@ ActorInit Demo_Tre_Lgt_InitVars = { (ActorFunc)DemoTreLgt_Draw, }; -static TransformUpdateIndex* sBoxLightAnimations[] = { +static CurveAnimationHeader* sBoxLightAnimations[] = { &gBoxLightAdultCurveAnim, &gBoxLightChildCurveAnim, }; From 19a605c2e7313ff4227527fcd6753684c49ba9eb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 22 Sep 2023 08:57:21 -0700 Subject: [PATCH 091/121] master to main rename (#1379) * master -> main * Missed some instances of master --- Jenkinsfile | 4 ++-- README.md | 4 ++-- docs/CONTRIBUTING.md | 12 ++++++------ docs/REVIEWING.md | 2 +- docs/tutorial/beginning_decomp.md | 4 ++-- docs/tutorial/data.md | 2 +- docs/tutorial/diff_and_permuter.md | 2 +- docs/tutorial/draw_functions.md | 2 +- docs/tutorial/intro_to_git.md | 8 ++++---- docs/tutorial/merging.md | 6 +++--- docs/tutorial/object_decomp.md | 4 ++-- 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index a627ead7c..15a40c7eb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -84,7 +84,7 @@ pipeline { } stage('Report Progress') { when { - branch 'master' + branch 'main' } steps { sh 'mkdir reports' @@ -96,7 +96,7 @@ pipeline { } stage('Update Progress') { when { - branch 'master' + branch 'main' } agent{ label 'zeldaret_website' diff --git a/README.md b/README.md index d94b47950..89d651dbd 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Build Status][jenkins-badge]][jenkins] [![Decompilation Progress][progress-badge]][progress] [![Contributors][contributors-badge]][contributors] [![Discord Channel][discord-badge]][discord] -[jenkins]: https://jenkins.deco.mp/job/MM/job/master -[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.deco.mp%2Fjob%2FMM%2Fjob%2Fmaster +[jenkins]: https://jenkins.deco.mp/job/MM/job/main +[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.deco.mp%2Fjob%2FMM%2Fjob%2Fmain [progress]: https://zelda64.dev/games/mm [progress-badge]: https://img.shields.io/endpoint?url=https://zelda64.dev/assets/csv/progress-mm-shield.json diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 2a5578e4e..f5a042846 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -4,19 +4,19 @@ Thanks for helping us reverse engineer *The Legend of Zelda: Majora's Mask* for All contributions are welcome. This is a group effort, and even small contributions can make a difference. Some tasks also don't require much knowledge to get started. This document is meant to be a set of tips and guidelines for contributing to the project. -For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/master/README.md). +For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/main/README.md). Most discussions happen on our [Discord Server](https://discord.zelda64.dev) where you are welcome to ask if you need help getting started, or if you have any questions regarding this project and other decompilation projects. ## Useful Links -- [Installation guide](https://github.com/zeldaret/mm/blob/master/README.md#installation) - Instructions for getting this repository set up and built on your machine. +- [Installation guide](https://github.com/zeldaret/mm/blob/main/README.md#installation) - Instructions for getting this repository set up and built on your machine. - [Style Guide](STYLE.md) - Description of the project style that we ask contributors to adhere to. - [Code Review Guidelines](REVIEWING.md) - These are the guidelines that reviewers will be using when reviewing your code. Good to be familiar with these before submitting your code. - [Zelda 64 Reverse Engineering Website](https://zelda64.dev/games/mm) - Our homepage, with FAQ and progress graph :chart_with_upwards_trend:. - [MM decomp tutorial](tutorial/contents.md) Detailed tutorial for learning in general how decomp works and how to decompile a small, simple file. -- [Introduction to OOT decomp](https://github.com/zeldaret/oot/blob/master/docs/tutorial/contents.md) - The tutorial the MM one was based on. For OOT, but largely applicable to MM as well. Covers slightly different topics, including how to get your data OK with `vbindiff`. +- [Introduction to OOT decomp](https://github.com/zeldaret/oot/blob/main/docs/tutorial/contents.md) - The tutorial the MM one was based on. For OOT, but largely applicable to MM as well. Covers slightly different topics, including how to get your data OK with `vbindiff`. - The `#resources` channel on the Discord contains many more links on specific details of decompiling IDO MIPS code. ## Getting Started @@ -37,7 +37,7 @@ This project only uses *publicly available code*. ### Environment Setup -Get started by following the [installation guide in the readme](https://github.com/zeldaret/mm/blob/master/README.md#installation). +Get started by following the [installation guide in the readme](https://github.com/zeldaret/mm/blob/main/README.md#installation). You should be able to build a matching ROM before you start making any changes. ### First Contribution @@ -142,8 +142,8 @@ Project leads are responsible for ensuring that these conventions are followed. ### Some git notes -- You should work on a branch on your fork separate from your copy of master: it is always useful to have a clean master branch around if you need to fix something. -- When a PR is merged into master, it may conflict with your work. While your branch is private (in particular, not used for a PR), you can rebase, but when your branch is public/used for a PR always merge master instead of rebasing: it makes it much easier for people to understand what you changed since the last review. +- You should work on a branch on your fork separate from your copy of main: it is always useful to have a clean main branch around if you need to fix something. +- When a PR is merged into main, it may conflict with your work. While your branch is private (in particular, not used for a PR), you can rebase, but when your branch is public/used for a PR always merge main instead of rebasing: it makes it much easier for people to understand what you changed since the last review. - We squash commits when merging, so your commit history does not have to be completely spotless. Throughout the PR process, you (the author) should update the rows on the appropriate Google Sheets with the appropriate information as the decompilation process progresses. diff --git a/docs/REVIEWING.md b/docs/REVIEWING.md index b7f97bdea..3fc160729 100644 --- a/docs/REVIEWING.md +++ b/docs/REVIEWING.md @@ -5,7 +5,7 @@ We encourage all contributors to participate in code review: this is your codeba Every review submitted helps us keep code quality high and code merged in more quickly. This document is meant to be a set of tips and guidelines for reviewers of pull requests to the project. -For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/master/README.md). +For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/main/README.md). Most discussions happen on our [Discord Server](https://discord.zelda64.dev) where you are welcome to ask if you need help getting started, or if you have any questions regarding this project and other decompilation projects. diff --git a/docs/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md index 591f12a2b..2685f9276 100644 --- a/docs/tutorial/beginning_decomp.md +++ b/docs/tutorial/beginning_decomp.md @@ -175,7 +175,7 @@ The Init function sets up the various components of the actor when it is first l The first stage of decompilation is done by a program called mips_to_c, often referred to as mips2c, which constructs a C interpretation of the assembly code based on reading it very literally. This means that considerable cleanup will be required to turn it into something that firstly compiles at all, and secondly looks like a human wrote it, let alone a Zelda developer from the late '90s. -The web version of mips2c can be found [here](https://simonsoftware.se/other/mips_to_c.py). This was [covered in the OoT tutorial](https://github.com/zeldaret/oot/blob/master/docs/tutorial/beginning_decomp.md). We shall instead use the repository. Clone [the mips_to_c repository](https://github.com/matt-kempster/mips_to_c) into a separate directory (we will assume on the same level as the `mm/` directory). Since it's Python, we don't have to do any compilation or anything in the mips_to_c directory. +The web version of mips2c can be found [here](https://simonsoftware.se/other/mips_to_c.py). This was [covered in the OoT tutorial](https://github.com/zeldaret/oot/blob/main/docs/tutorial/beginning_decomp.md). We shall instead use the repository. Clone [the mips_to_c repository](https://github.com/matt-kempster/mips_to_c) into a separate directory (we will assume on the same level as the `mm/` directory). Since it's Python, we don't have to do any compilation or anything in the mips_to_c directory. Since the actor depends on the rest of the codebase, we can't expect to get much intelligible out of mips2c without giving it some context. We make this using a Python script in the `tools` directory called `m2ctx.py`, so run @@ -686,7 +686,7 @@ as our first guess. This doesn't look unreasonable... the question is, does it m Once preliminary cleanup and struct filling is done, most time spent matching functions is done by comparing the original code with the code you have compiled. This is aided by a program called `diff.py`. -In order to use `diff.py` with the symbol names, we need a copy of the code to compare against. In MM this is done as part of `make init`, and you can regenerate the `expected` directory (which is simply a known-good copy of `build` directory) by running `make diff-init`, which will check for an OK ROM and copy the build directory over. (Of course you need an OK ROM to do this; worst-case, you can checkout master and do a complete rebuild to get it). (You need to remake `expected` if you want to diff a function you have renamed: `diff.py` looks in the mapfiles for the function name, which won't work if the name has changed!) +In order to use `diff.py` with the symbol names, we need a copy of the code to compare against. In MM this is done as part of `make init`, and you can regenerate the `expected` directory (which is simply a known-good copy of `build` directory) by running `make diff-init`, which will check for an OK ROM and copy the build directory over. (Of course you need an OK ROM to do this; worst-case, you can checkout main and do a complete rebuild to get it). (You need to remake `expected` if you want to diff a function you have renamed: `diff.py` looks in the mapfiles for the function name, which won't work if the name has changed!) Now, we run diff on the function name: in the main directory, diff --git a/docs/tutorial/data.md b/docs/tutorial/data.md index 6884ebb12..07ea8cfac 100644 --- a/docs/tutorial/data.md +++ b/docs/tutorial/data.md @@ -27,7 +27,7 @@ Both approaches have their advantages and disadvantages. ## Data first -This way is good for smaller actors with little data. The OoT tutorial [covers this in plenty of detail](https://github.com/zeldaret/oot/blob/master/docs/tutorial/data.md), and the process in MM is essentially identical, so we won't go over it here. +This way is good for smaller actors with little data. The OoT tutorial [covers this in plenty of detail](https://github.com/zeldaret/oot/blob/main/docs/tutorial/data.md), and the process in MM is essentially identical, so we won't go over it here. ## Extern and data last diff --git a/docs/tutorial/diff_and_permuter.md b/docs/tutorial/diff_and_permuter.md index 2b5d41e30..e8d0f59f7 100644 --- a/docs/tutorial/diff_and_permuter.md +++ b/docs/tutorial/diff_and_permuter.md @@ -2,7 +2,7 @@ This document is intended as a step-by-step demonstration of matching a reasonably complex function using the diff script `diff.py` and the decomp permuter, both included in the repo. For general information on both see [the tools documentation](../tools.md). -Until such time as someone finds a suitable function, you can look at the OoT tutorial: [here for diff.py](https://github.com/zeldaret/oot/blob/master/docs/tutorial/beginning_decomp.md#diff) and [here for the permuter](https://github.com/zeldaret/oot/blob/master/docs/tutorial/other_functions.md#the-permuter). +Until such time as someone finds a suitable function, you can look at the OoT tutorial: [here for diff.py](https://github.com/zeldaret/oot/blob/main/docs/tutorial/beginning_decomp.md#diff) and [here for the permuter](https://github.com/zeldaret/oot/blob/main/docs/tutorial/other_functions.md#the-permuter). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index 5f8c616e5..233a9605c 100644 --- a/spec +++ b/spec @@ -2057,8 +2057,7 @@ beginseg name "ovl_En_Ge3" compress include "build/src/overlays/actors/ovl_En_Ge3/z_en_ge3.o" - include "build/data/ovl_En_Ge3/ovl_En_Ge3.data.o" - include "build/data/ovl_En_Ge3/ovl_En_Ge3.reloc.o" + include "build/src/overlays/actors/ovl_En_Ge3/ovl_En_Ge3_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index 8baf9c0a3..e55d0746e 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -1,7 +1,7 @@ /* * File: z_en_ge3.c * Overlay: ovl_En_Ge3 - * Description: Aviel + * Description: Aviel, leader of the Gerudo Pirates */ #include "z_en_ge3.h" @@ -15,7 +15,26 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play); void EnGe3_Update(Actor* thisx, PlayState* play); void EnGe3_Draw(Actor* thisx, PlayState* play); -#if 0 +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe3_SetupPath(EnGe3* this, PlayState* play); +void EnGe3_Idle(EnGe3* this, PlayState* play); +void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play); +s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx); + +typedef enum GerudoAveilAnimation { + /* -1 */ GERUDO_AVEIL_ANIM_NONE = -1, + /* 0 */ GERUDO_AVEIL_ANIM_STAND, + /* 1 */ GERUDO_AVEIL_ANIM_WALK, + /* 2 */ GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, + /* 3 */ GERUDO_AVEIL_ANIM_TURN_HEAD, + /* 4 */ GERUDO_AVEIL_ANIM_WAIT, + /* 5 */ GERUDO_AVEIL_ANIM_DEMAND, + /* 6 */ GERUDO_AVEIL_ANIM_DISMISS, + /* 7 */ GERUDO_AVEIL_ANIM_BEG, + /* 8 */ GERUDO_AVEIL_ANIM_RUN_AWAY, + /* 9 */ GERUDO_AVEIL_ANIM_MAX +} GerudoAveilAnimation; + ActorInit En_Ge3_InitVars = { ACTOR_EN_GE3, ACTORCAT_NPC, @@ -28,49 +47,386 @@ ActorInit En_Ge3_InitVars = { (ActorFunc)EnGe3_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_809A0DA0 = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000222, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0x01000222, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 20, 50, 0, { 0, 0, 0 } }, }; -#endif +void EnGe3_Init(Actor* thisx, PlayState* play) { + s32 pad; + EnGe3* this = THIS; -extern ColliderCylinderInit D_809A0DA0; + ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoRedSkel, NULL, this->jointTable, this->morphTable, + GERUDO_RED_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gGerudoRedHandOnHipWaitAnim); + Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); + this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; + Actor_SetScale(&this->picto.actor, 0.01f); -extern UNK_TYPE D_0600A808; + this->animIndex = GERUDO_AVEIL_ANIM_NONE; + this->cueId = GERUDO_AVEIL_CUEID_NONE; + this->picto.validationFunc = EnGe3_ValidatePictograph; + EnGe3_SetupPath(this, play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Init.s") + if (GERUDO_AVEIL_GET_TYPE(&this->picto.actor) == GERUDO_AVEIL_TYPE_AVEILS_CHAMBER) { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f); + this->actionFunc = EnGe3_AveilsChamberIdle; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Destroy.s") + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) { + Actor_Kill(&this->picto.actor); + return; + } + } else { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WALK, ANIMMODE_LOOP, 0.0f); + this->actionFunc = EnGe3_Idle; + this->picto.actor.speed = 1.5f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0070.s") + this->stateFlags = 0; + this->picto.actor.targetMode = 6; + this->picto.actor.terminalVelocity = -4.0f; + this->picto.actor.gravity = -1.0f; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A00F8.s") +void EnGe3_Destroy(Actor* thisx, PlayState* play) { + EnGe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A020C.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A024C.s") +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { + static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = { + &gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND + &gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK + &gGerudoRedHandOnHipWaitAnim, // GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT + &gGerudoRedTurnHeadAnim, // GERUDO_AVEIL_ANIM_TURN_HEAD + &gGerudoRedWaitAnim, // GERUDO_AVEIL_ANIM_WAIT + &gGerudoRedDemandAnim, // GERUDO_AVEIL_ANIM_DEMAND + &gGerudoRedDismissAnim, // GERUDO_AVEIL_ANIM_DISMISS + &gGerudoRedBegAnim, // GERUDO_AVEIL_ANIM_BEG + &gGerudoRedRunAwayAnim, // GERUDO_AVEIL_ANIM_RUN_AWAY + }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0350.s") + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + this->animIndex = animIndex; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03AC.s") +void EnGe3_LookAtPlayer(EnGe3* this, PlayState* play) { + s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03FC.s") + if ((ABS_ALT(yawDiff) <= 0x2300) && (this->picto.actor.xzDistToPlayer < 100.0f)) { + Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos); + } else { + Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->torsoRot.x, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->torsoRot.y, 0, 6, 0x1838, 0x64); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A04D0.s") +void EnGe3_SetupPath(EnGe3* this, PlayState* play) { + this->curPointIndex = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0820.s") + if (GERUDO_AVEIL_GET_PATH(&this->picto.actor) != GERUDO_AVEIL_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_AVEIL_GET_PATH(&this->picto.actor)]; + } else { + this->path = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A08A4.s") +/** + * @return true if no path or reached end of path + */ +s32 EnGe3_FollowPath(EnGe3* this) { + Path* path = this->path; + Vec3s* curPoint; + f32 diffX; + f32 diffZ; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Update.s") + if (path == NULL) { + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A096C.s") + curPoint = Lib_SegmentedToVirtual(path->points); + curPoint += this->curPointIndex; + diffX = curPoint->x - this->picto.actor.world.pos.x; + diffZ = curPoint->z - this->picto.actor.world.pos.z; + this->picto.actor.world.rot.y = Math_Atan2S(diffX, diffZ); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0x7D0, 0xC8); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0A14.s") + if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) { + this->curPointIndex++; + if (this->curPointIndex >= path->count) { + return true; + } + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0C60.s") +void EnGe3_Scream(EnGe3* this) { + if ((s32)Rand_ZeroFloat(2.0f) == 0) { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00); + } else { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Draw.s") +void EnGe3_Idle(EnGe3* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + EnGe3_LookAtPlayer(this, play); + + if (EnGe3_FollowPath(this)) { + EnGe3_SetupPath(this, play); + } +} + +void EnGe3_ThrowPlayerOut(EnGe3* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100); + + if (this->actionTimer > 0) { + this->actionTimer--; + } else if (play->nextEntrance != play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]) { + play->nextEntrance = play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_38; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08); + } +} + +void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play) { + if (SkelAnime_Update(&this->skelAnime) && (this->cueId == GERUDO_AVEIL_CUEID_INSTRUCT)) { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WAIT, ANIMMODE_ONCE, 0.0f); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_108)) { + s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)]->id; + + if (this->cueId != GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) { + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)); + } + + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + // Both cutscenes + case GERUDO_AVEIL_CUEID_WAIT: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f); + break; + + // Instructing expedition leader cutscene + case GERUDO_AVEIL_CUEID_PAUSE: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f); + this->skelAnime.playSpeed = 0.0f; + break; + + case GERUDO_AVEIL_CUEID_INSTRUCT: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_DEMAND: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DEMAND, ANIMMODE_LOOP, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_DISMISS: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DISMISS, ANIMMODE_ONCE, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_BEG: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_BEG, ANIMMODE_LOOP, 0.0f); + break; + + // Fleeing from bees cutscene + case GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_RUN_AWAY, ANIMMODE_LOOP, 0.0f); + this->picto.actor.speed = 5.0f; + this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); + break; + + case GERUDO_AVEIL_CUEID_BEEHIVE_VANISH: + Actor_Kill(&this->picto.actor); + break; + + default: + break; + } + + SkelAnime_Update(&this->skelAnime); + } + } else if ((this->picto.actor.xzDistToPlayer < 700.0f) && (fabsf(this->picto.actor.playerHeightRel) < 100.0f) && + !Play_InCsMode(play)) { + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26); + Lib_PlaySfx(NA_SE_SY_FOUND); + + if (Player_GetMask(play) == PLAYER_MASK_STONE) { // Not fooled by Stone Mask + Message_StartTextbox(play, 0x11AF, &this->picto.actor); + } else { + Message_StartTextbox(play, 0x11AE, &this->picto.actor); + } + + this->actionFunc = EnGe3_ThrowPlayerOut; + this->actionTimer = 50; + SET_WEEKEVENTREG(WEEKEVENTREG_80_08); + } + + if (this->cueId == GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) { + this->picto.actor.speed = 5.0f; + EnGe3_FollowPath(this); + + if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK); + } + + if (this->screamTimer > 0) { + this->screamTimer--; + } else { + this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); + EnGe3_Scream(this); + } + } +} + +void EnGe3_UpdateColliderAndMove(Actor* thisx, PlayState* play) { + s32 pad; + EnGe3* this = THIS; + + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + Actor_MoveWithGravity(&this->picto.actor); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); +} + +void EnGe3_Blink(EnGe3* this, PlayState* play) { + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); + } + + this->eyeIndex = this->blinkTimer; + + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; + } +} + +void EnGe3_Update(Actor* thisx, PlayState* play) { + EnGe3* this = THIS; + + EnGe3_UpdateColliderAndMove(&this->picto.actor, play); + this->actionFunc(this, play); + EnGe3_Blink(this, play); +} + +s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx) { + s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + 400.0f, -1); + + ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + 1200.0f, -1); + + return ret; +} + +s32 EnGe3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnGe3* this = THIS; + + switch (limbIndex) { + case GERUDO_RED_LIMB_VEIL: + case GERUDO_RED_LIMB_RIGHT_SWORD: + case GERUDO_RED_LIMB_LEFT_SWORD: + *dList = NULL; + return false; + + case GERUDO_RED_LIMB_HEAD: + rot->x += this->headRot.y; + // fallthrough + default: + // This is required since EnGe3 shares a skeleton with EnKaizoku; it avoids stale colours being used in the + // displaylists. + OPEN_DISPS(play->state.gfxCtx); + + switch (limbIndex) { + case GERUDO_RED_LIMB_NECK: + break; + + case GERUDO_RED_LIMB_HEAD: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 80, 60, 10, 255); + break; + + case GERUDO_RED_LIMB_RIGHT_SWORD: + case GERUDO_RED_LIMB_LEFT_SWORD: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 140, 170, 230, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + break; + + default: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 140, 0, 0, 255); + break; + } + + CLOSE_DISPS(play->state.gfxCtx); + + if (this->animIndex == GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT) { + // Fidget + if ((limbIndex == GERUDO_RED_LIMB_RIGHT_FOREARM) || (limbIndex == GERUDO_RED_LIMB_LEFT_FOREARM) || + (limbIndex == GERUDO_RED_LIMB_TORSO)) { + s32 temp = limbIndex * 50; + + // required to match + rot->y = rot->y + (s32)(Math_SinS(play->state.frames * (temp + 0x814)) * 200.0f); + rot->z = rot->z + (s32)(Math_CosS(play->state.frames * (temp + 0x940)) * 200.0f); + } + } + break; + } + return false; +} + +void EnGe3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnGe3* this = THIS; + Vec3f sFocusOffset = { 600.0f, 700.0f, 0.0f }; + + if (limbIndex == GERUDO_RED_LIMB_HEAD) { + Matrix_MultVec3f(&sFocusOffset, &this->picto.actor.focus.pos); + } +} + +void EnGe3_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sEyeTextures[] = { + gGerudoRedEyeOpenTex, + gGerudoRedEyeHalfTex, + gGerudoRedEyeClosedTex, + }; + s32 pad; + EnGe3* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL37_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); + func_800B8050(&this->picto.actor, play, 0); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnGe3_OverrideLimbDraw, EnGe3_PostLimbDraw, &this->picto.actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h index 909ed7599..f2611e408 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h @@ -2,14 +2,54 @@ #define Z_EN_GE3_H #include "global.h" +#include "z64snap.h" +#include "objects/object_geldb/object_geldb.h" struct EnGe3; typedef void (*EnGe3ActionFunc)(struct EnGe3*, PlayState*); +#define GERUDO_AVEIL_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define GERUDO_AVEIL_GET_EXIT(thisx) (((thisx)->params & 0x1F0) >> 4) +#define GERUDO_AVEIL_GET_TYPE(thisx) ((thisx)->params & 1) + +#define GERUDO_AVEIL_PATH_INDEX_NONE 0x3F + +typedef enum GerudoAveilType { + /* 0 */ GERUDO_AVEIL_TYPE_0, // Unused, just walks forwards + /* 1 */ GERUDO_AVEIL_TYPE_AVEILS_CHAMBER +} GerudoAveilType; + +typedef enum GerudoAveilCueId { + /* -1 */ GERUDO_AVEIL_CUEID_NONE = -1, + /* 0 */ GERUDO_AVEIL_CUEID_0, // Unused + /* 1 */ GERUDO_AVEIL_CUEID_WAIT, + /* 2 */ GERUDO_AVEIL_CUEID_PAUSE, + /* 3 */ GERUDO_AVEIL_CUEID_INSTRUCT, + /* 4 */ GERUDO_AVEIL_CUEID_DEMAND, + /* 5 */ GERUDO_AVEIL_CUEID_DISMISS, + /* 6 */ GERUDO_AVEIL_CUEID_BEG, + /* 7 */ GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY, + /* 8 */ GERUDO_AVEIL_CUEID_BEEHIVE_VANISH +} GerudoAveilCueId; + typedef struct EnGe3 { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x1D8]; + /* 0x000 */ PictoActor picto; + /* 0x148 */ ColliderCylinder collider; + /* 0x194 */ SkelAnime skelAnime; + /* 0x1D8 */ Vec3s jointTable[GERUDO_RED_LIMB_MAX]; + /* 0x268 */ Vec3s morphTable[GERUDO_RED_LIMB_MAX]; + /* 0x2F8 */ s16 eyeIndex; + /* 0x2FA */ s16 blinkTimer; + /* 0x2FC */ Path* path; + /* 0x300 */ s32 curPointIndex; + /* 0x304 */ Vec3s headRot; + /* 0x30A */ Vec3s torsoRot; + /* 0x310 */ s16 stateFlags; // Set and not used, named based on OoT use + /* 0x312 */ s16 animIndex; + /* 0x314 */ s16 cueId; + /* 0x316 */ s16 actionTimer; + /* 0x318 */ s16 screamTimer; /* 0x31C */ EnGe3ActionFunc actionFunc; } EnGe3; // size = 0x320 diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 56d3bc2a2..46c14cb0e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8641,20 +8641,20 @@ 0x8099FD7C:("func_8099FD7C",), 0x8099FEB0:("EnGe3_Init",), 0x809A0044:("EnGe3_Destroy",), - 0x809A0070:("func_809A0070",), - 0x809A00F8:("func_809A00F8",), - 0x809A020C:("func_809A020C",), - 0x809A024C:("func_809A024C",), - 0x809A0350:("func_809A0350",), - 0x809A03AC:("func_809A03AC",), - 0x809A03FC:("func_809A03FC",), - 0x809A04D0:("func_809A04D0",), - 0x809A0820:("func_809A0820",), - 0x809A08A4:("func_809A08A4",), + 0x809A0070:("EnGe3_ChangeAnim",), + 0x809A00F8:("EnGe3_LookAtPlayer",), + 0x809A020C:("EnGe3_SetupPath",), + 0x809A024C:("EnGe3_FollowPath",), + 0x809A0350:("EnGe3_Scream",), + 0x809A03AC:("EnGe3_Idle",), + 0x809A03FC:("EnGe3_ThrowPlayerOut",), + 0x809A04D0:("EnGe3_AveilsChamberIdle",), + 0x809A0820:("EnGe3_UpdateColliderAndMove",), + 0x809A08A4:("EnGe3_Blink",), 0x809A0920:("EnGe3_Update",), - 0x809A096C:("func_809A096C",), - 0x809A0A14:("func_809A0A14",), - 0x809A0C60:("func_809A0C60",), + 0x809A096C:("EnGe3_ValidatePictograph",), + 0x809A0A14:("EnGe3_OverrideLimbDraw",), + 0x809A0C60:("EnGe3_PostLimbDraw",), 0x809A0CBC:("EnGe3_Draw",), 0x809A0F20:("func_809A0F20",), 0x809A0F78:("func_809A0F78",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b1b5b726b..ba29f8d91 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9342,10 +9342,10 @@ 0x8099FE3C:("D_8099FE3C","UNK_TYPE1","",0x1), 0x8099FE50:("D_8099FE50","UNK_TYPE1","",0x1), 0x809A0D80:("En_Ge3_InitVars","UNK_TYPE1","",0x1), - 0x809A0DA0:("D_809A0DA0","UNK_TYPE1","",0x1), - 0x809A0DCC:("D_809A0DCC","UNK_TYPE1","",0x1), - 0x809A0DF0:("D_809A0DF0","UNK_TYPE4","",0x4), - 0x809A0DFC:("D_809A0DFC","UNK_TYPE1","",0x1), + 0x809A0DA0:("sCylinderInit","ColliderCylinderInit","",0x2C), + 0x809A0DCC:("sAnimations","AnimationHeader*","[9]",0x24), + 0x809A0DF0:("sFocusOffset","Vec3f","",0xC), + 0x809A0DFC:("sEyeTextures","TexturePtr","[3]",0xC), 0x809A0E10:("jtbl_809A0E10","UNK_PTR","",0x4), 0x809A1A80:("Obj_Hamishi_InitVars","UNK_TYPE1","",0x1), 0x809A1AA0:("D_809A1AA0","UNK_TYPE1","",0x1), From 20f8470ea06f3a1721cbb8706fa590075a4f9a4f Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sun, 24 Sep 2023 04:42:11 +0200 Subject: [PATCH 095/121] En_Snowwd documentation (#1387) * documentation * improvements * improvements --- .../actors/ovl_En_Snowwd/z_en_snowwd.c | 62 +++++++++---------- .../actors/ovl_En_Snowwd/z_en_snowwd.h | 5 +- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c index 5823e728f..b99673197 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c @@ -16,7 +16,7 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play); void EnSnowwd_Update(Actor* thisx, PlayState* play); void EnSnowwd_Draw(Actor* thisx, PlayState* play); -void func_80AF76F0(EnSnowwd* this, PlayState* play); +void EnSnowwd_Idle(EnSnowwd* this, PlayState* play); ActorInit En_Snowwd_InitVars = { ACTOR_EN_SNOWWD, @@ -50,26 +50,18 @@ static ColliderCylinderInit sCylinderInit = { { 18, 60, 0, { 0, 0, 0 } }, }; -Vec3f D_80AF7ABC = { 0.0f, 0.0f, 0.0f }; - -Vec3f D_80AF7AC8 = { 0.0f, -4.0f, 0.0f }; - -Color_RGBA8 D_80AF7AD4 = { 255, 255, 255, 255 }; - -Color_RGBA8 D_80AF7AD8 = { 200, 200, 220, 0 }; - void EnSnowwd_Init(Actor* thisx, PlayState* play) { EnSnowwd* this = THIS; - this->actor.home.rot.z = 0; + SNOWWD_DROPPED_COLLECTIBLE(thisx) = false; this->actor.home.rot.y = 0; - this->unk190 = 0; + this->timer = 0; this->actor.uncullZoneForward = 4000.0f; this->actor.uncullZoneScale = 2000.0f; this->actor.uncullZoneDownward = 2400.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Actor_SetScale(&this->actor, 1.0f); - this->actionFunc = func_80AF76F0; + this->actionFunc = EnSnowwd_Idle; } void EnSnowwd_Destroy(Actor* thisx, PlayState* play) { @@ -78,26 +70,30 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AF76F0(EnSnowwd* this, PlayState* play) { +void EnSnowwd_Idle(EnSnowwd* this, PlayState* play) { + static Vec3f sAccel = { 0.0f, 0.0f, 0.0f }; + static Vec3f sVelocity = { 0.0f, -4.0f, 0.0f }; + static Color_RGBA8 sPrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sEnvColor = { 200, 200, 220, 0 }; s32 pad; Actor* thisx = &this->actor; - f32 sp54; - Vec3f sp48; + f32 wobbleAmplitude; + Vec3f pos; if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; Actor_PlaySfx(thisx, NA_SE_IT_REFLECTION_WOOD); } if (thisx->home.rot.y != 0) { - this->unk190 = 0x15; + this->timer = 21; thisx->home.rot.y = 0; - if (thisx->home.rot.z == 0) { - if (SNOWWD_GET_PARAM_F80(&this->actor) < 0x10) { - sp48 = thisx->world.pos; - sp48.y += 200.0f; - Item_DropCollectibleRandom(play, NULL, &sp48, SNOWWD_GET_PARAM_F80(&this->actor) * 0x10); + if (!SNOWWD_DROPPED_COLLECTIBLE(&this->actor)) { + if (SNOWWD_GET_DROP_TABLE(&this->actor) < 16) { + pos = thisx->world.pos; + pos.y += 200.0f; + Item_DropCollectibleRandom(play, NULL, &pos, SNOWWD_GET_DROP_TABLE(&this->actor) * DROP_TABLE_SIZE); } - thisx->home.rot.z = 1; + SNOWWD_DROPPED_COLLECTIBLE(&this->actor) = true; } } if (thisx->xzDistToPlayer < 600.0f) { @@ -105,16 +101,18 @@ void func_80AF76F0(EnSnowwd* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } - if (this->unk190 > 0) { - this->unk190--; - sp54 = Math_SinS((s16)((this->unk190 ^ 0xFFFF) * 0x3332)) * 250.0f; - thisx->shape.rot.x = (s16)(Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54); - thisx->shape.rot.z = (s16)(Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54); - sp48 = thisx->world.pos; - sp48.x += Rand_CenteredFloat(80.0f); - sp48.y += 100.0f + Rand_ZeroFloat(30.0f); - sp48.z += Rand_CenteredFloat(80.0f); - func_800B0EB0(play, &sp48, &D_80AF7AC8, &D_80AF7ABC, &D_80AF7AD4, &D_80AF7AD8, 200, 10, 20); + + // Wobble from impact and dust particles + if (this->timer > 0) { + this->timer--; + wobbleAmplitude = Math_SinS((this->timer ^ 0xFFFF) * 0x3332) * 250.0f; + thisx->shape.rot.x = Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude; + thisx->shape.rot.z = Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude; + pos = thisx->world.pos; + pos.x += Rand_CenteredFloat(80.0f); + pos.y += 100.0f + Rand_ZeroFloat(30.0f); + pos.z += Rand_CenteredFloat(80.0f); + func_800B0EB0(play, &pos, &sVelocity, &sAccel, &sPrimColor, &sEnvColor, 200, 10, 20); } } diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h index d336cb252..8adb7fcda 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h @@ -3,7 +3,8 @@ #include "global.h" -#define SNOWWD_GET_PARAM_F80(thisx) (((thisx)->params & 0xF80) >> 7) +#define SNOWWD_GET_DROP_TABLE(thisx) (((thisx)->params & 0xF80) >> 7) +#define SNOWWD_DROPPED_COLLECTIBLE(thisx) ((thisx)->home.rot.z) struct EnSnowwd; @@ -12,7 +13,7 @@ typedef void (*EnSnowwdActionFunc)(struct EnSnowwd*, PlayState*); typedef struct EnSnowwd { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ s16 unk190; + /* 0x190 */ s16 timer; /* 0x194 */ EnSnowwdActionFunc actionFunc; } EnSnowwd; // size = 0x198 From 3d3ca570221bc9cafd07d0d1affcc44bab8c84b7 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 24 Sep 2023 01:25:13 -0700 Subject: [PATCH 096/121] EnKame (Snapper) documented (#1383) * EnKame (Snapper) documented * Respond to engineer's review --- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 2 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 2 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 2 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 779 +++++++++++------- src/overlays/actors/ovl_En_Kame/z_en_kame.h | 35 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 2 +- tools/disasm/functions.txt | 72 +- tools/disasm/variables.txt | 14 +- 11 files changed, 548 insertions(+), 366 deletions(-) diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index a147db127..d3ffc59a2 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -492,7 +492,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) { if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 1.2f; - this->drawDmgEffFrozenSteamScale = 1.8000001f; + this->drawDmgEffFrozenSteamScale = 1800.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; } else if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x2000) { // Light Arrow this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; 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 7da0437a9..4fb015365 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -150,7 +150,7 @@ void EnDekunuts_Destroy(Actor* thisx, PlayState* play) { void func_808BD348(EnDekunuts* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; this->unk_190 = 80; 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 0dcce10d0..1bde48910 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -378,7 +378,7 @@ void func_8089AC70(EnDinofos* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; this->colliderJntSph.base.colType = COLTYPE_HIT3; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->unk_290 = 80; this->actor.flags &= ~ACTOR_FLAG_400; 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 a8e916aa0..bd706810d 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -224,7 +224,7 @@ void func_808D0930(EnFloormas* this, PlayState* play) { void func_808D09CC(EnFloormas* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; this->unk_18E = 80; 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 51f44abec..c400b3428 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -1,7 +1,7 @@ /* * File: z_en_kame.c * Overlay: ovl_En_Kame - * Description: Snapper Turtle + * Description: Snapper */ #include "z_en_kame.h" @@ -16,30 +16,46 @@ void EnKame_Destroy(Actor* thisx, PlayState* play); void EnKame_Update(Actor* thisx, PlayState* play); void EnKame_Draw(Actor* thisx, PlayState* play); -void func_80AD70A0(EnKame* this); -void func_80AD70EC(EnKame* this, PlayState* play); -void func_80AD71B4(EnKame* this); -void func_80AD7254(EnKame* this, PlayState* play); -void func_80AD73A8(EnKame* this); -void func_80AD7424(EnKame* this, PlayState* play); -void func_80AD76CC(EnKame* this); -void func_80AD7798(EnKame* this, PlayState* play); -void func_80AD792C(EnKame* this); -void func_80AD7948(EnKame* this, PlayState* play); -void func_80AD7B18(EnKame* this); -void func_80AD7B90(EnKame* this, PlayState* play); -void func_80AD7D40(EnKame* this, PlayState* play); -void func_80AD7DA4(EnKame* this); -void func_80AD7E0C(EnKame* this, PlayState* play); -void func_80AD7EC0(EnKame* this); -void func_80AD7F10(EnKame* this, PlayState* play); -void func_80AD7FF8(EnKame* this, PlayState* play); -void func_80AD810C(EnKame* this, PlayState* play); -void func_80AD8148(EnKame* this, PlayState* play); -void func_80AD825C(EnKame* this, PlayState* play); -void func_80AD8364(EnKame* this); -void func_80AD8388(EnKame* this, PlayState* play); -void func_80AD8D64(Actor* thisx, PlayState* play); +void EnKame_SetupIdle(EnKame* this); +void EnKame_Idle(EnKame* this, PlayState* play); +void EnKame_SetupWalk(EnKame* this); +void EnKame_Walk(EnKame* this, PlayState* play); +void EnKame_SetupRetreatIntoShell(EnKame* this); +void EnKame_RetreatIntoShell(EnKame* this, PlayState* play); +void EnKame_SetupPrepareToAttack(EnKame* this); +void EnKame_PrepareToAttack(EnKame* this, PlayState* play); +void EnKame_SetupAttack(EnKame* this); +void EnKame_Attack(EnKame* this, PlayState* play); +void EnKame_SetupEmergeFromShell(EnKame* this); +void EnKame_EmergeFromShell(EnKame* this, PlayState* play); +void EnKame_Flip(EnKame* this, PlayState* play); +void EnKame_SetupStruggle(EnKame* this); +void EnKame_Struggle(EnKame* this, PlayState* play); +void EnKame_SetupFlipUpright(EnKame* this); +void EnKame_FlipUpright(EnKame* this, PlayState* play); +void EnKame_Stunned(EnKame* this, PlayState* play); +void EnKame_Damaged(EnKame* this, PlayState* play); +void EnKame_SetupDead(EnKame* this, PlayState* play); +void EnKame_Dead(EnKame* this, PlayState* play); +void EnKame_SetupBurstIntoFlames(EnKame* this); +void EnKame_BurstIntoFlames(EnKame* this, PlayState* play); +void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play); + +// This enum is used for when the Snapper is forcibly flipped +// by one of the player's attacks. It is *not* used for when +// the Snapper flips itself upright. +typedef enum { + /* 0 */ EN_KAME_FLIP_TYPE_UPSIDE_DOWN, + /* 1 */ EN_KAME_FLIP_TYPE_RIGHTSIDE_UP +} EnKameFlipType; + +typedef enum { + /* 0 */ EN_KAME_EYE_OPEN, + /* 1 */ EN_KAME_EYE_HALF_CLOSING, + /* 2 */ EN_KAME_EYE_CLOSED, + /* 3 */ EN_KAME_EYE_HALF_OPENING, + /* 4 */ EN_KAME_EYE_MAX +} EnKameEyeTexture; ActorInit En_Kame_InitVars = { ACTOR_EN_KAME, @@ -75,42 +91,54 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 3, 15, 30, 80 }; +typedef enum { + /* 0x0 */ EN_KAME_DMGEFF_NONE, // Has no special effect + /* 0x1 */ EN_KAME_DMGEFF_STUN, // Cannot damage the Snapper, but stuns it for 40 frames + /* 0x2 */ EN_KAME_DMGEFF_FIRE, // Sets the Snapper on fire + /* 0x3 */ EN_KAME_DMGEFF_FREEZE, // Stuns the Snapper for 80 frames and surrounds it with ice + /* 0x4 */ EN_KAME_DMGEFF_LIGHT_ORB, // Surrounds the snapper with light orbs + /* 0x5 */ EN_KAME_DMGEFF_ELECTRIC_STUN, // Similar to EN_KAME_DMGEFF_STUN, but also applies an electric effect + /* 0xD */ EN_KAME_DMGEFF_HOOKSHOT = 0xD, // Cannot damage the Snapper, but pulls the player towards it + /* 0xE */ EN_KAME_DMGEFF_INSTANT_KILL, // Instantly kills the Snapper if it hits, even when it is rightside-up + /* 0xF */ EN_KAME_DMGEFF_FLIP_OVER // Flips over Snappers if they are rightside-up +} EnKameDamageEffect; + static DamageTable sDamageTable = { - /* Deku Nut */ DMG_ENTRY(0, 0x1), - /* Deku Stick */ DMG_ENTRY(1, 0x0), - /* Horse trample */ DMG_ENTRY(1, 0x0), - /* Explosives */ DMG_ENTRY(1, 0xF), - /* Zora boomerang */ DMG_ENTRY(1, 0x0), - /* Normal arrow */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(0, 0xD), - /* Goron punch */ DMG_ENTRY(1, 0x0), - /* Sword */ DMG_ENTRY(1, 0x0), - /* Goron pound */ DMG_ENTRY(0, 0xF), - /* Fire arrow */ DMG_ENTRY(2, 0x2), - /* Ice arrow */ DMG_ENTRY(2, 0x3), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0x0), - /* Deku spin */ DMG_ENTRY(0, 0x1), - /* Deku bubble */ DMG_ENTRY(1, 0x0), - /* Deku launch */ DMG_ENTRY(2, 0xE), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1), - /* Zora barrier */ DMG_ENTRY(0, 0x5), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0x0), - /* 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, 0xF), + /* Deku Nut */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Deku Stick */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Explosives */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER), + /* Zora boomerang */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Hookshot */ DMG_ENTRY(0, EN_KAME_DMGEFF_HOOKSHOT), + /* Goron punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Sword */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(0, EN_KAME_DMGEFF_FLIP_OVER), + /* Fire arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_LIGHT_ORB), + /* Goron spikes */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Deku spin */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Deku bubble */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(2, EN_KAME_DMGEFF_INSTANT_KILL), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Zora barrier */ DMG_ENTRY(0, EN_KAME_DMGEFF_ELECTRIC_STUN), + /* Normal shield */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Light ray */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Thrown object */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Normal Roll */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Unblockable */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Powder Keg */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER), }; -static TexturePtr D_80AD8E34[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex }; +static TexturePtr sEyeTextures[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex }; static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_SNAPPER, ICHAIN_CONTINUE), @@ -118,7 +146,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 3500, ICHAIN_STOP), }; -static s32 D_80AD8E50 = false; +static s32 sTexturesDesegmented = false; void EnKame_Init(Actor* thisx, PlayState* play) { EnKame* this = THIS; @@ -132,16 +160,17 @@ void EnKame_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if (!D_80AD8E50) { + if (!sTexturesDesegmented) { s32 i; - for (i = 0; i < ARRAY_COUNT(D_80AD8E34); i++) { - D_80AD8E34[i] = Lib_SegmentedToVirtual(D_80AD8E34[i]); + for (i = 0; i < ARRAY_COUNT(sEyeTextures); i++) { + sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]); } - D_80AD8E50 = true; + + sTexturesDesegmented = true; } - func_80AD70A0(this); + EnKame_SetupIdle(this); } void EnKame_Destroy(Actor* thisx, PlayState* play) { @@ -150,29 +179,29 @@ void EnKame_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AD6F34(EnKame* this) { - if (this->unk_29C != 0) { - this->unk_29C++; - if (this->unk_29C == 4) { - this->unk_29C = 0; +void EnKame_Blink(EnKame* this) { + if (this->eyeIndex != EN_KAME_EYE_OPEN) { + this->eyeIndex++; + if (this->eyeIndex == EN_KAME_EYE_MAX) { + this->eyeIndex = EN_KAME_EYE_OPEN; } } else if (Rand_ZeroOne() < 0.05f) { - this->unk_29C = 1; + this->eyeIndex = EN_KAME_EYE_HALF_CLOSING; } } -void func_80AD6F9C(EnKame* this) { +void EnKame_Freeze(EnKame* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.6f; - this->drawDmgEffFrozenSteamScale = 0.90000004f; + this->drawDmgEffFrozenSteamScale = 900.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; - this->unk_2A2 = 80; + this->stunTimer = 80; this->actor.flags &= ~ACTOR_FLAG_400; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); } -void func_80AD7018(EnKame* this, PlayState* play) { +void EnKame_Thaw(EnKame* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; @@ -182,109 +211,138 @@ void func_80AD7018(EnKame* this, PlayState* play) { } } -void func_80AD70A0(EnKame* this) { +void EnKame_SetupIdle(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperIdleAnim, -5.0f); this->actor.speed = 0.0f; - this->actionFunc = func_80AD70EC; + this->actionFunc = EnKame_Idle; } -void func_80AD70EC(EnKame* this, PlayState* play) { +/** + * Plays the idle animation, then starts walking once the animation is over. If the player gets close enough to + * the Snapper without the Stone Mask equipped, it will retreat into its shell to begin attacking them. + */ +void EnKame_Idle(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Animation_OnFrame(&this->snapperSkelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE); - this->unk_2A0 = 40; + this->voiceTimer = 40; } if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.xzDistToPlayer < 240.0f)) { - func_80AD73A8(this); + EnKame_SetupRetreatIntoShell(this); } else if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD71B4(this); + EnKame_SetupWalk(this); } } -void func_80AD71B4(EnKame* this) { +void EnKame_SetupWalk(EnKame* this) { Animation_MorphToLoop(&this->snapperSkelAnime, &gSnapperWalkAnim, -5.0f); this->actor.speed = 0.5f; - this->unk_29E = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3); - this->unk_2A4 = this->actor.shape.rot.y; + this->timer = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3); + this->targetRotY = this->actor.shape.rot.y; this->collider.base.acFlags |= (AC_HARD | AC_ON); this->collider.base.colType = COLTYPE_HARD; - this->actionFunc = func_80AD7254; + this->actionFunc = EnKame_Walk; } -void func_80AD7254(EnKame* this, PlayState* play) { +/** + * Walk semi-randomly around the Snapper's home until the timer reaches 0, then transition back to being idle. + * If the player gets close enough to the Snapper without the Stone Mask equipped, it will retreat into its + * shell to begin attacking them. + */ +void EnKame_Walk(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.xzDistToPlayer < 240.0f)) { - func_80AD73A8(this); + EnKame_SetupRetreatIntoShell(this); return; } SkelAnime_Update(&this->snapperSkelAnime); - if (this->unk_2A4 != this->actor.shape.rot.y) { - Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100); + if (this->targetRotY != this->actor.shape.rot.y) { + Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetRotY, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 40.0f) { - this->unk_2A4 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14); + this->targetRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14); } - this->unk_29E--; - if (this->unk_29E == 0) { - func_80AD70A0(this); + this->timer--; + if (this->timer == 0) { + EnKame_SetupIdle(this); } else if (Animation_OnFrame(&this->snapperSkelAnime, 0.0f) || Animation_OnFrame(&this->snapperSkelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK); } } -void func_80AD73A8(EnKame* this) { +void EnKame_SetupRetreatIntoShell(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f); - this->unk_29E = 0; - this->unk_2AC = 1.0f; - this->unk_2A8 = 1.0f; + this->timer = 0; + this->limbScaleY = 1.0f; + this->limbScaleXZ = 1.0f; this->actor.speed = 0.0f; - if (this->unk_2A0 == 0) { + + // If the Snapper recently played this same sound effect while it was idle, don't play it again. + if (this->voiceTimer == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE); } - this->actionFunc = func_80AD7424; + + this->actionFunc = EnKame_RetreatIntoShell; } -void func_80AD7424(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper retreating its shell, and scales its limbs appropriately to + * make it appear like its head and legs are going into the shell. Once the animation is over, the + * Snapper will either prepare for an attack (if the player is close enough and not wearing the + * Stone Mask), or it will emerge from its shell. + */ +void EnKame_RetreatIntoShell(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if (SkelAnime_Update(&this->snapperSkelAnime)) { if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && - ((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) { - func_80AD76CC(this); + ((this->timer == 0) || (this->actor.xzDistToPlayer < 120.0f))) { + EnKame_SetupPrepareToAttack(this); } else { - this->unk_29E--; - if (this->unk_29E == 0) { - func_80AD7B18(this); + this->timer--; + if (this->timer == 0) { + EnKame_SetupEmergeFromShell(this); } } } else if (this->snapperSkelAnime.curFrame > 2.0f) { - this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30)); - this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12)); + this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30)); + this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12)); } else { - f32 frame = this->snapperSkelAnime.curFrame; + f32 curFrame = this->snapperSkelAnime.curFrame; - this->unk_2AC = (0.25f * frame) + 1.0f; - this->unk_2A8 = (0.25f * frame) + 1.0f; + this->limbScaleY = (0.25f * curFrame) + 1.0f; + this->limbScaleXZ = (0.25f * curFrame) + 1.0f; } } -void func_80AD7568(EnKame* this) { - this->actor.speed = this->unk_2A6 * (5.0f / 7552); - this->actor.shape.rot.z = this->unk_2A6 * 0.11016949f; +/** + * Sets the Snapper's speed and z-rotation based on its angular velocity. When the Snapper is done with the first + * part of its attack, it will slowly "wind up" before moving back to its home; by setting the speed to be a multiple + * of its angular velocity, the Snapper will smootly ramp up its speed during the "wind up". As for the z-rotation, + * setting it in this manner gives the Snapper a subtle, almost-imperceptible tilt as it spins. + */ +void EnKame_SetAttackSpeed(EnKame* this) { + this->actor.speed = this->angularVelocityY * (5.0f / 0x1D80); + this->actor.shape.rot.z = this->angularVelocityY * (13.0f / 118.0f); } -void func_80AD75A8(EnKame* this, PlayState* play) { - static Color_RGBA8 D_80AD8E54 = { 250, 250, 250, 255 }; - static Color_RGBA8 D_80AD8E58 = { 180, 180, 180, 255 }; - static Vec3f D_80AD8E5C = { 0.0f, 0.75f, 0.0f }; +/** + * If the Snapper is moving quickly enough over certain surface materials, this function will spawn dirt or snow-colored + * dust on even-numbered frames. Additionally, this function is also responsible for playing the Snapper's spinning + * sound effect if its angular velocity is large enough. + */ +void EnKame_ProcessAttackEffects(EnKame* this, PlayState* play) { + static Color_RGBA8 sSnowPrimColor = { 250, 250, 250, 255 }; + static Color_RGBA8 sSnowEnvColor = { 180, 180, 180, 255 }; + static Vec3f sVelocity = { 0.0f, 0.75f, 0.0f }; if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 3.0f)) { if ((play->gameplayFrames % 2) == 0) { @@ -292,144 +350,190 @@ void func_80AD75A8(EnKame* this, PlayState* play) { SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) { - func_800B1210(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, 550, 100); + func_800B1210(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, 550, 100); } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) { - func_800B0DE0(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, &D_80AD8E54, &D_80AD8E58, 550, - 100); + func_800B0DE0(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, &sSnowPrimColor, &sSnowEnvColor, + 550, 100); } } } - if (this->unk_2A6 > 0x1200) { + if (this->angularVelocityY > 0x1200) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PAMET_ROLL - SFX_FLAG); } } -void func_80AD76CC(EnKame* this) { +void EnKame_SetupPrepareToAttack(EnKame* this) { + // The Snapper's attack can be divided into roughly two phases: + // - Charging towards the player + // - Going back to their home + // This if-statement is checking which of the two is the current phase. If the Snapper is in the first + // phase of the attack, then it just finished retreating into its shell, and it hasn't switched to its + // "spiked" form yet. Thus, we check the draw function here to determine which phase the Snapper is in. if (this->actor.draw == EnKame_Draw) { - this->actor.draw = func_80AD8D64; - this->unk_2A6 = 0x3B00; - this->unk_2AC = 0.5f; - func_80AD7568(this); - this->unk_29E = 15; + this->actor.draw = EnKame_DrawSpikedSnapper; + this->angularVelocityY = 0x3B00; + this->spikesScale = 0.5f; + EnKame_SetAttackSpeed(this); + this->timer = 15; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_ON); - this->unk_2BC.y = this->actor.home.pos.y - 100.0f; + // As stated above, we could tell this was the first phase of the Snapper's attack because it hadn't + // changed its draw function to the "spiked" version yet. However, we won't be able to check the draw + // function in the future, because we just changed it; we need some other way to tell which phase of + // the attack the Snapper is in. Setting the targetPos's y-position here to something less than the + // home's y-position will be used as a signal in future functions to indicate this is the first phase + // of the attack. Nothing looks at the y-position of the targetPos, so we can use it however we want, + // and during the second phase of the attack, the Snapper's home position is copied into targetPos, + // including the y-position; the targetPos's y-position will *only* differ from the home's y-position + // during the first phase of the attack due to the code below. + this->targetPos.y = this->actor.home.pos.y - 100.0f; } else { this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); - Math_Vec3f_Copy(&this->unk_2BC, &this->actor.home.pos); - this->unk_29E = 0; + Math_Vec3f_Copy(&this->targetPos, &this->actor.home.pos); + this->timer = 0; } + this->actor.flags |= ACTOR_FLAG_10; - this->actionFunc = func_80AD7798; + this->actionFunc = EnKame_PrepareToAttack; } -void func_80AD7798(EnKame* this, PlayState* play) { - if (this->unk_29E == 15) { - this->unk_2AC += 0.2f; - if (this->unk_2AC > 1.1f) { - this->unk_29E--; +/** + * This function gradually increases the angular velocity to 0x3B00 and does a few other miscellaneous tasks (e.g., + * scaling the spikes up and making the Snapper face the player for the first phase of the attack) before attacking. + */ +void EnKame_PrepareToAttack(EnKame* this, PlayState* play) { + // In EnKame_SetupPrepareToAttack, the timer is set to 15 if it was the first phase of the attack, so this is yet + // another way of checking the current phase. Gradually scale the spikes up, and once they reach their full size, + // enable AT collisions so the Snapper can damage the player. + if (this->timer == 15) { + this->spikesScale += 0.2f; + if (this->spikesScale > 1.1f) { + this->timer--; this->collider.base.atFlags |= AT_ON; - this->unk_2AC = 1.0f; + this->spikesScale = 1.0f; } - } else if (this->unk_29E > 0) { - this->unk_29E--; - } else if (Math_ScaledStepToS(&this->unk_2A6, 0x3B00, (s32)(this->unk_2A6 * 0.09f) + 45)) { - if (this->unk_2BC.y < this->actor.home.pos.y) { + } else if (this->timer > 0) { + this->timer--; + } else if (Math_ScaledStepToS(&this->angularVelocityY, 0x3B00, (s32)(this->angularVelocityY * 0.09f) + 45)) { + // If it's the first phase of the attack, rotate the Snapper to face the player and set the targetPos to a + // fixed position in that direction. This will make them charge towards the player once they start moving. + if (this->targetPos.y < this->actor.home.pos.y) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - this->unk_2BC.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x; - this->unk_2BC.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z; + this->targetPos.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x; + this->targetPos.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z; } - func_80AD792C(this); + + EnKame_SetupAttack(this); } - this->actor.shape.rot.y += this->unk_2A6; + this->actor.shape.rot.y += this->angularVelocityY; - if (!(this->unk_2BC.y < this->actor.home.pos.y) || (this->actionFunc != func_80AD7798)) { - func_80AD7568(this); + // Calling EnKame_SetAttackSpeed will set the Snapper's speed based on its current angular velocity; since we are + // gradually scaling up the angular velocity, this would gradually scale up the speed as well. However, during the + // first phase of the attack, the Snapper should wait in place until it reaches its maximum angular velocity. This + // check will prevent us from changing the Snapper's speed during the first phase until we're just about to attack. + if (!(this->targetPos.y < this->actor.home.pos.y) || (this->actionFunc != EnKame_PrepareToAttack)) { + EnKame_SetAttackSpeed(this); } - func_80AD75A8(this, play); + + EnKame_ProcessAttackEffects(this, play); } -void func_80AD792C(EnKame* this) { - this->unk_29E = -1; - this->actionFunc = func_80AD7948; +void EnKame_SetupAttack(EnKame* this) { + this->targetAngularVelocityY = -1; + this->actionFunc = EnKame_Attack; } -void func_80AD7948(EnKame* this, PlayState* play) { - s32 temp_v1; +/** + * Moves the Snapper towards its target while spinning until it hits a wall or reaches the target. Once that happens, + * the Snapper will either reduce its angular velocity to 0x300 and prepare for the second phase of the attack (if the + * Snapper is currently in the first phase), or it will reduce its angular velocity to 0 and emerge from its shell (if + * the Snapper is currently in the second phase). + */ +void EnKame_Attack(EnKame* this, PlayState* play) { + this->actor.shape.rot.y += this->angularVelocityY; + EnKame_ProcessAttackEffects(this, play); - this->actor.shape.rot.y += this->unk_2A6; - func_80AD75A8(this, play); + if (this->targetAngularVelocityY == -1) { + s32 absYawToTarget; + s16 yawToTarget = Actor_WorldYawTowardPoint(&this->actor, &this->targetPos) - this->actor.world.rot.y; - if (this->unk_29E == -1) { - s16 temp_v0 = Actor_WorldYawTowardPoint(&this->actor, &this->unk_2BC) - this->actor.world.rot.y; + absYawToTarget = ABS_ALT(yawToTarget); - temp_v1 = ABS_ALT(temp_v0); - - if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (temp_v1 > 0x3000) || - (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f)) { + // If the yaw toward the targetPos is too large, that indicates the Snapper probably moved + // beyond its target (in other words, the target is now "behind" the Snapper). + if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (absYawToTarget > 0x3000) || + (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f)) { s8 pad; - if (this->unk_2BC.y < this->actor.home.pos.y) { - this->unk_29E = 0x300; + if (this->targetPos.y < this->actor.home.pos.y) { + this->targetAngularVelocityY = 0x300; } else { - this->unk_29E = 0; + this->targetAngularVelocityY = 0; } } return; } - if (Math_ScaledStepToS(&this->unk_2A6, this->unk_29E, (s32)(this->unk_2A6 * 0.09f) + 45)) { - if (this->unk_29E == 0) { - if (this->unk_2AC >= 1.0f) { + if (Math_ScaledStepToS(&this->angularVelocityY, this->targetAngularVelocityY, + (s32)(this->angularVelocityY * 0.09f) + 45)) { + if (this->targetAngularVelocityY == 0) { + if (this->spikesScale >= 1.0f) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF); } - this->unk_2AC -= 0.1f; + + this->spikesScale -= 0.1f; this->collider.base.atFlags &= ~AT_ON; - if (this->unk_2AC < 0.5f) { + if (this->spikesScale < 0.5f) { this->actor.flags &= ~ACTOR_FLAG_10; - func_80AD7B18(this); + EnKame_SetupEmergeFromShell(this); } } else { - func_80AD76CC(this); + EnKame_SetupPrepareToAttack(this); } } - func_80AD7568(this); + + EnKame_SetAttackSpeed(this); } -void func_80AD7B18(EnKame* this) { +void EnKame_SetupEmergeFromShell(EnKame* this) { this->actor.draw = EnKame_Draw; Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f); this->actor.speed = 0.0f; - this->unk_2AC = 0.1f; - this->unk_2A8 = 1.0f; + this->limbScaleY = 0.1f; + this->limbScaleXZ = 1.0f; this->actor.world.rot.y = this->actor.shape.rot.y; - this->actionFunc = func_80AD7B90; + this->actionFunc = EnKame_EmergeFromShell; } -void func_80AD7B90(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper emerging from its shell, and scales its limbs appropriately to + * make it appear like its head and legs are coming out of the shell. Once the animation is over, this + * will make the Snapper start walking again. + */ +void EnKame_EmergeFromShell(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD71B4(this); + EnKame_SetupWalk(this); } else if (this->snapperSkelAnime.curFrame > 7.0f) { - this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); - this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); + this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); + this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); } else { - f32 frame = this->snapperSkelAnime.curFrame; + f32 curFrame = this->snapperSkelAnime.curFrame; - this->unk_2AC = (0.2f * frame) + 0.1f; - this->unk_2A8 = ((1.0f / 14) * frame) + 1.0f; + this->limbScaleY = (0.2f * curFrame) + 0.1f; + this->limbScaleXZ = ((1.0f / 14) * curFrame) + 1.0f; } } -void func_80AD7C54(EnKame* this) { - if (this->actionFunc == func_80AD7E0C) { +void EnKame_SetupFlip(EnKame* this) { + if (this->actionFunc == EnKame_Struggle) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperBouncedUprightAnim, -3.0f); - this->unk_29E = 1; + this->flipType = EN_KAME_FLIP_TYPE_RIGHTSIDE_UP; this->collider.info.bumper.dmgFlags &= ~0x8000; } else { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipOverAnim, -3.0f); - this->unk_29E = 0; + this->flipType = EN_KAME_FLIP_TYPE_UPSIDE_DOWN; this->collider.info.bumper.dmgFlags |= 0x8000; } @@ -441,32 +545,39 @@ void func_80AD7C54(EnKame* this) { this->actor.flags &= ~ACTOR_FLAG_10; this->actor.shape.rot.z = 0; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_REVERSE); - this->actionFunc = func_80AD7D40; + this->actionFunc = EnKame_Flip; } -void func_80AD7D40(EnKame* this, PlayState* play) { +/** + * If the Snapper is flipped upside-down, this will make it struggle for 200 frames once the flip animation ends. + * If the Snapper is flipped rightside-up, this will make it start walking once the flip animation ends. + */ +void EnKame_Flip(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - if (this->unk_29E == 1) { - func_80AD71B4(this); + if (this->flipType == EN_KAME_FLIP_TYPE_RIGHTSIDE_UP) { + EnKame_SetupWalk(this); } else { - this->unk_29E = 200; - func_80AD7DA4(this); + this->timer = 200; + EnKame_SetupStruggle(this); } } } -void func_80AD7DA4(EnKame* this) { +void EnKame_SetupStruggle(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim, -3.0f); this->collider.base.acFlags |= AC_ON; this->collider.base.acFlags &= ~AC_HARD; this->collider.base.colType = COLTYPE_HIT6; this->actor.speed = 0.0f; - this->actionFunc = func_80AD7E0C; + this->actionFunc = EnKame_Struggle; } -void func_80AD7E0C(EnKame* this, PlayState* play) { - if (this->unk_29E > 0) { - this->unk_29E--; +/** + * Plays various struggling animations until the timer reaches 0, then it flips itself upright. + */ +void EnKame_Struggle(EnKame* this, PlayState* play) { + if (this->timer > 0) { + this->timer--; if (SkelAnime_Update(&this->snapperSkelAnime)) { if (Rand_ZeroOne() > 0.5f) { Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim); @@ -476,69 +587,85 @@ void func_80AD7E0C(EnKame* this, PlayState* play) { } } } else { - func_80AD7EC0(this); + EnKame_SetupFlipUpright(this); } } -void func_80AD7EC0(EnKame* this) { +void EnKame_SetupFlipUpright(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipUprightAnim, -3.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP); - this->actionFunc = func_80AD7F10; + this->actionFunc = EnKame_FlipUpright; } -void func_80AD7F10(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper flipping itself upright, then transitions back to walking. + */ +void EnKame_FlipUpright(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - func_80AD71B4(this); + EnKame_SetupWalk(this); } else if (this->snapperSkelAnime.curFrame >= 10.0f) { + // This is the part of the animation where the Snapper starts to flip itself + // upright. During this flip, this actor needs to manually control when + // ActorShadow_DrawCircle is called, so the shadowDraw pointer is set to NULL. + // See EnKame_PostLimbDraw and EnKame_Draw for more information. this->actor.shape.shadowDraw = NULL; this->collider.base.acFlags &= ~AC_ON; this->collider.info.bumper.dmgFlags &= ~0x8000; } } -void func_80AD7FA4(EnKame* this) { +void EnKame_SetupStunned(EnKame* this) { this->actor.speed = 0.0f; if (this->actor.velocity.y > 0.0f) { this->actor.velocity.y = 0.0f; } + func_800BE504(&this->actor, &this->collider); - this->actionFunc = func_80AD7FF8; + this->actionFunc = EnKame_Stunned; } -void func_80AD7FF8(EnKame* this, PlayState* play) { - if (this->unk_2A2 != 0) { - this->unk_2A2--; +/** + * Stops the Snapper's animation and locks it in place until the stun timer reaches zero. After that, the + * Snapper either dies (if the attack that stunned it reduced its health to 0) or goes back to struggling. + * If the Snapper dies in this state, it skips the "finishing blow" screen flash and game freeze. + */ +void EnKame_Stunned(EnKame* this, PlayState* play) { + if (this->stunTimer != 0) { + this->stunTimer--; } - if (this->unk_2A2 == 0) { - func_80AD7018(this, play); + if (this->stunTimer == 0) { + EnKame_Thaw(this, play); if (this->actor.colChkInfo.health == 0) { - func_80AD8148(this, NULL); + EnKame_SetupDead(this, NULL); } else { this->actor.world.rot.y = this->actor.shape.rot.y; - func_80AD7DA4(this); + EnKame_SetupStruggle(this); } } } -void func_80AD8060(EnKame* this) { +void EnKame_SetupDamaged(EnKame* this) { s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim); Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE); this->collider.base.acFlags &= ~AC_ON; - this->actionFunc = func_80AD810C; + this->actionFunc = EnKame_Damaged; } -void func_80AD810C(EnKame* this, PlayState* play) { +/** + * Plays the damaged animation, then goes back to struggling to flip itself upright. + */ +void EnKame_Damaged(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD7DA4(this); + EnKame_SetupStruggle(this); } } -void func_80AD8148(EnKame* this, PlayState* play) { +void EnKame_SetupDead(EnKame* this, PlayState* play) { Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20); this->collider.base.acFlags &= ~AC_ON; @@ -546,53 +673,71 @@ void func_80AD8148(EnKame* this, PlayState* play) { this->collider.base.atFlags &= ~(AC_HARD | AC_HIT); this->actor.velocity.y = 15.0f; this->actor.speed = 1.5f; + + // This allows callers of this function to skip the "finishing blow" screen flash and game freeze as well + // as the rotation that happens if the Snapper is killed by a projectile. Only EnKame_Stunned calls this + // while passing NULL instead of play; in practice, this means that the only way to skip this code is to + // kill the Snapper with an Ice Arrow, since that's the only attack that both stuns it and deals damage. if (play != NULL) { Enemy_StartFinishingBlow(play, &this->actor); - if (this->actor.draw == func_80AD8D64) { + if (this->actor.draw == EnKame_DrawSpikedSnapper) { this->actor.draw = EnKame_Draw; } else { func_800BE504(&this->actor, &this->collider); } } + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD); - this->unk_29E = 0; - this->actionFunc = func_80AD825C; + this->timer = 0; + this->actionFunc = EnKame_Dead; } -void func_80AD825C(EnKame* this, PlayState* play) { +/** + * Launches the Snapper into the air and spins it around wildly. Makes the Snapper + * burst into flames once it touches the ground. + */ +void EnKame_Dead(EnKame* this, PlayState* play) { SkelAnime_Update(&this->snapperSkelAnime); if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND); - func_80AD8364(this); + EnKame_SetupBurstIntoFlames(this); } else { - if (this->unk_29E == 1) { + //! @bug unreachable code: EnKame_SetupDead sets this variable to 0, and no other code that runs + //! while the Snapper is in this state will change it to anything else. + if (this->timer == 1) { this->actor.colorFilterTimer = 100; } else if (this->actor.colorFilterTimer == 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_NONE, 255, COLORFILTER_BUFFLAG_OPA, 100); } + this->actor.shape.rot.x += Rand_S16Offset(0x700, 0x1400); this->actor.shape.rot.y += (s16)Rand_ZeroFloat(5120.0f); this->actor.shape.rot.z += Rand_S16Offset(0x700, 0x1400); } } -void func_80AD8364(EnKame* this) { - this->unk_29E = 20; +void EnKame_SetupBurstIntoFlames(EnKame* this) { + this->timer = 20; this->actor.speed = 0.0f; - this->actionFunc = func_80AD8388; + this->actionFunc = EnKame_BurstIntoFlames; } -void func_80AD8388(EnKame* this, PlayState* play) { - Vec3f sp34; +/** + * After waiting for the timer to reach 0, this function gradually shrinks the actor + * and spawns blue flames around it. Once the Snapper shrinks enough, this drops a + * random item and kills the actor. + */ +void EnKame_BurstIntoFlames(EnKame* this, PlayState* play) { + Vec3f flamePos; SkelAnime_Update(&this->snapperSkelAnime); this->actor.colorFilterTimer = 100; - if (this->unk_29E > 0) { - this->unk_29E--; - if (this->unk_29E == 0) { + if (this->timer > 0) { + this->timer--; + if (this->timer == 0) { SoundSource_PlaySfxEachFrameAtFixedWorldPos(play, &this->actor.world.pos, 21, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } @@ -605,14 +750,15 @@ void func_80AD8388(EnKame* this, PlayState* play) { this->actor.scale.y = this->actor.scale.x; this->actor.scale.z = this->actor.scale.x; } - sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; - sp34.y = this->actor.world.pos.y + 15.0f; - sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; - func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); + + flamePos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; + flamePos.y = this->actor.world.pos.y + 15.0f; + flamePos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; + func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); } } -void func_80AD84C0(EnKame* this, PlayState* play) { +void EnKame_UpdateDamage(EnKame* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; @@ -622,51 +768,52 @@ void func_80AD84C0(EnKame* this, PlayState* play) { return; } - func_80AD7018(this, play); - if (this->actor.colChkInfo.damageEffect == 13) { + EnKame_Thaw(this, play); + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_HOOKSHOT) { return; } - if (this->actor.colChkInfo.damageEffect == 14) { - func_80AD8148(this, play); - } else if (this->actor.colChkInfo.damageEffect == 15) { + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_INSTANT_KILL) { + EnKame_SetupDead(this, play); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FLIP_OVER) { if (this->collider.base.acFlags & AC_HARD) { - func_80AD7C54(this); + EnKame_SetupFlip(this); } else if (!Actor_ApplyDamage(&this->actor)) { - func_80AD8148(this, play); + EnKame_SetupDead(this, play); } else { - func_80AD8060(this); + EnKame_SetupDamaged(this); } - } else if ((this->actionFunc == func_80AD70EC) || (this->actionFunc == func_80AD7254)) { - func_80AD73A8(this); - this->unk_29E = 21; + } else if ((this->actionFunc == EnKame_Idle) || (this->actionFunc == EnKame_Walk)) { + EnKame_SetupRetreatIntoShell(this); + this->timer = 21; } else if (!(this->collider.base.acFlags & AC_HARD)) { - if (this->actor.colChkInfo.damageEffect == 5) { - this->unk_2A2 = 40; + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_ELECTRIC_STUN) { + this->stunTimer = 40; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40); Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 2.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL; - func_80AD7FA4(this); - } else if (this->actor.colChkInfo.damageEffect == 1) { - this->unk_2A2 = 40; + EnKame_SetupStunned(this); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_STUN) { + this->stunTimer = 40; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40); Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); - func_80AD7FA4(this); - } else if (this->actor.colChkInfo.damageEffect == 3) { - func_80AD6F9C(this); + EnKame_SetupStunned(this); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FREEZE) { + EnKame_Freeze(this); if (!Actor_ApplyDamage(&this->actor)) { - this->unk_2A2 = 3; + this->stunTimer = 3; this->collider.base.acFlags &= ~AC_ON; } - func_80AD7FA4(this); + + EnKame_SetupStunned(this); } else { - if (this->actor.colChkInfo.damageEffect == 2) { + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FIRE) { this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 4.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; - } else if (this->actor.colChkInfo.damageEffect == 4) { + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_LIGHT_ORB) { this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 4.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; @@ -676,9 +823,9 @@ void func_80AD84C0(EnKame* this, PlayState* play) { } if (!Actor_ApplyDamage(&this->actor)) { - func_80AD8148(this, play); + EnKame_SetupDead(this, play); } else { - func_80AD8060(this); + EnKame_SetupDamaged(this); } } } @@ -686,8 +833,8 @@ void func_80AD84C0(EnKame* this, PlayState* play) { if ((play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f)) && (this->collider.base.acFlags & AC_ON)) { - func_80AD7018(this, play); - func_80AD7C54(this); + EnKame_Thaw(this, play); + EnKame_SetupFlip(this); } } @@ -695,22 +842,21 @@ void EnKame_Update(Actor* thisx, PlayState* play) { s32 pad; EnKame* this = THIS; - func_80AD6F34(this); + EnKame_Blink(this); - if (this->unk_2A0 != 0) { - this->unk_2A0--; - } + DECR(this->voiceTimer); - func_80AD84C0(this, play); + EnKame_UpdateDamage(this, play); if ((this->collider.base.atFlags & AT_HIT) && (this->collider.base.atFlags & AT_BOUNCED)) { this->collider.base.atFlags &= ~(AT_BOUNCED | AT_HIT); - func_80AD76CC(this); - if (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f) { + EnKame_SetupPrepareToAttack(this); + if (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f) { this->collider.base.atFlags &= ~AT_ON; } - this->unk_2A6 = 0x3B00; - func_80AD7568(this); + + this->angularVelocityY = 0x3B00; + EnKame_SetAttackSpeed(this); } this->actionFunc(this, play); @@ -720,6 +866,8 @@ void EnKame_Update(Actor* thisx, PlayState* play) { UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); + // When the Snapper is in the middle of the animation where it's flipping upright, + // setting the focus and updating the collider is handled in EnKame_Draw instead. if (this->actor.shape.shadowDraw != NULL) { Actor_SetFocus(&this->actor, 25.0f); Collider_UpdateCylinder(&this->actor, &this->collider); @@ -744,32 +892,38 @@ void EnKame_Update(Actor* thisx, PlayState* play) { } else { this->drawDmgEffScale = this->drawDmgEffScale; } - } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 0.015000001f)) { + } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 15.0f * 0.001f)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } -s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnKame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnKame* this = THIS; - if ((this->actionFunc == func_80AD7424) || (this->actionFunc == func_80AD7B90)) { + if ((this->actionFunc == EnKame_RetreatIntoShell) || (this->actionFunc == EnKame_EmergeFromShell)) { if (limbIndex == SNAPPER_LIMB_HEAD) { - Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2A8, MTXMODE_APPLY); + Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleXZ, MTXMODE_APPLY); } else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) { - Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); + Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleY, MTXMODE_APPLY); } } + return false; } -static Vec3f D_80AD8E68[] = { - { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_5 - { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_6 - { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_7 - { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_8 - { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_9 +/** + * Five of the entries in the body parts array are used for rendering + * multiple effects on the Snapper's body limb. The positions of these + * effects are offset from the body limb using the values in this array. + */ +static Vec3f sBodyLimbBodyPartOffsets[] = { + { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_BODY_1 + { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_BODY_2 + { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_3 + { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_4 + { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_BODY_5 }; static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = { @@ -788,7 +942,7 @@ static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = { SNAPPER_BODYPART_BACK_RIGHT_FOOT, // SNAPPER_LIMB_BACK_RIGHT_FOOT }; -void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { +void EnKame_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnKame* this = THIS; if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { @@ -797,69 +951,90 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto if (limbIndex == SNAPPER_LIMB_BODY) { s32 i; - Vec3f* ptr; - Vec3f* ptr2; + Vec3f* bodyPartsPosPtr; + Vec3f* bodyLimbOffsetsPtr; + // When the Snapper is flipping itself upright, the animation will make it appear + // as if it is jumping off the ground. This is purely visual, though, so if we do + // nothing, the actor's position won't actually change during this apparent "jump", + // which causes certain things like the circle shadow and the actor's focus to look + // incorrect. To fix this, we temporarily adjust the actor's position during this + // animation so that everything looks correct. This position change is overridden + // at the end of EnKame_Draw, so from the perspective of most other functions, + // nothing really changes. if (this->actor.shape.shadowDraw == NULL) { Matrix_MultZero(&this->actor.world.pos); } - ptr2 = D_80AD8E68; - ptr = &this->bodyPartsPos[SNAPPER_BODYPART_5]; - for (i = 0; i < ARRAY_COUNT(D_80AD8E68); i++) { - Matrix_MultVec3f(ptr2, ptr); - ptr2++; - ptr++; + bodyLimbOffsetsPtr = sBodyLimbBodyPartOffsets; + bodyPartsPosPtr = &this->bodyPartsPos[SNAPPER_BODYPART_BODY_1]; + for (i = 0; i < ARRAY_COUNT(sBodyLimbBodyPartOffsets); i++) { + Matrix_MultVec3f(bodyLimbOffsetsPtr, bodyPartsPosPtr); + bodyLimbOffsetsPtr++; + bodyPartsPosPtr++; } } } void EnKame_Draw(Actor* thisx, PlayState* play) { EnKame* this = THIS; - Vec3f sp40; + Vec3f originalPos; - if (this->actor.shape.shadowDraw == 0) { - Math_Vec3f_Copy(&sp40, &this->actor.world.pos); + // If the Snapper is flipping itself upright, we'll update its position inside EnKame_PostLimbDraw + // to make it better match the "jump" that it does in the animation. We want to make sure that its + // original position is restored before we exit this function, however, so we save it here before + // we ever call EnKame_PostLimbDraw. + if (this->actor.shape.shadowDraw == NULL) { + Math_Vec3f_Copy(&originalPos, &this->actor.world.pos); } OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]); + gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeIndex]); SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable, - this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor); + this->snapperSkelAnime.dListCount, EnKame_OverrideLimbDraw, EnKame_PostLimbDraw, + &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, SNAPPER_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); + // The Snapper is in the middle of the animation where it's flipping upright, and we updated its position + // in EnKame_PostLimbDraw as explained earlier. We draw the circle shadow, set the focus, and update its + // collider; all of these rely on the Snapper's position being updated earlier to match the "jump" that it + // does in its animation. Once we're done, we restore the Snappper's position back to what it was before + // because we want other functions to act like the position never changed. if (this->actor.shape.shadowDraw == NULL) { ActorShadow_DrawCircle(&this->actor, NULL, play); Actor_SetFocus(&this->actor, 25.0f); Collider_UpdateCylinder(&this->actor, &this->collider); - Math_Vec3f_Copy(&this->actor.world.pos, &sp40); + Math_Vec3f_Copy(&this->actor.world.pos, &originalPos); } CLOSE_DISPS(play->state.gfxCtx); } -s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnKame_SpikedSnapperOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { EnKame* this = THIS; if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) { pos->y -= 700.0f; } - if ((this->unk_2AC != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { - Matrix_Scale(1.0f, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); + if ((this->spikesScale != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { + Matrix_Scale(1.0f, this->spikesScale, this->spikesScale, MTXMODE_APPLY); } + return false; } -void func_80AD8D64(Actor* thisx, PlayState* play) { +void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play) { EnKame* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable, - this->spikedSnapperSkelAnime.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor); + this->spikedSnapperSkelAnime.dListCount, EnKame_SpikedSnapperOverrideLimbDraw, NULL, + &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.h b/src/overlays/actors/ovl_En_Kame/z_en_kame.h index 31095bf22..2ca2f4047 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h @@ -14,11 +14,11 @@ typedef enum SnapperBodyPart { /* 2 */ SNAPPER_BODYPART_FRONT_RIGHT_FOOT, /* 3 */ SNAPPER_BODYPART_BACK_LEFT_FOOT, /* 4 */ SNAPPER_BODYPART_BACK_RIGHT_FOOT, - /* 5 */ SNAPPER_BODYPART_5, - /* 6 */ SNAPPER_BODYPART_6, - /* 7 */ SNAPPER_BODYPART_7, - /* 8 */ SNAPPER_BODYPART_8, - /* 9 */ SNAPPER_BODYPART_9, + /* 5 */ SNAPPER_BODYPART_BODY_1, + /* 6 */ SNAPPER_BODYPART_BODY_2, + /* 7 */ SNAPPER_BODYPART_BODY_3, + /* 8 */ SNAPPER_BODYPART_BODY_4, + /* 9 */ SNAPPER_BODYPART_BODY_5, /* 10 */ SNAPPER_BODYPART_MAX } SnapperBodyPart; @@ -31,19 +31,26 @@ typedef struct EnKame { /* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x298 */ EnKameActionFunc actionFunc; - /* 0x29C */ u8 unk_29C; + /* 0x29C */ u8 eyeIndex; /* 0x29D */ u8 drawDmgEffType; - /* 0x29E */ s16 unk_29E; - /* 0x2A0 */ s16 unk_2A0; - /* 0x2A2 */ s16 unk_2A2; - /* 0x2A4 */ s16 unk_2A4; - /* 0x2A6 */ s16 unk_2A6; - /* 0x2A8 */ f32 unk_2A8; - /* 0x2AC */ f32 unk_2AC; + /* 0x29E */ union { + s16 timer; + s16 targetAngularVelocityY; + s16 flipType; + }; + /* 0x2A0 */ s16 voiceTimer; + /* 0x2A2 */ s16 stunTimer; + /* 0x2A4 */ s16 targetRotY; + /* 0x2A6 */ s16 angularVelocityY; + /* 0x2A8 */ f32 limbScaleXZ; + /* 0x2AC */ union { + f32 limbScaleY; // used the Snapper's regular form (i.e., when it's walking around on its legs) + f32 spikesScale; // used for the Snapper's "spiked" form + }; /* 0x2B0 */ f32 drawDmgEffAlpha; /* 0x2B4 */ f32 drawDmgEffScale; /* 0x2B8 */ f32 drawDmgEffFrozenSteamScale; - /* 0x2BC */ Vec3f unk_2BC; + /* 0x2BC */ Vec3f targetPos; // this actor relies on the y-position of this variable to be set in a specific way, see EnKame_SetupPrepareToAttack /* 0x2C8 */ Vec3f bodyPartsPos[SNAPPER_BODYPART_MAX]; /* 0x340 */ ColliderCylinder collider; } EnKame; // size = 0x38C 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 77d33673b..e2557b1c3 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -231,7 +231,7 @@ void EnPeehat_Destroy(Actor* thisx, PlayState* play) { void func_80897170(EnPeehat* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 1.1f; - this->drawDmgEffFrozenSteamScale = 1.6500001f; + this->drawDmgEffFrozenSteamScale = 1650.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->colliderSphere.base.colType = COLTYPE_HIT3; this->unk_2B0 = 80; 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 43b60256b..d37bf2605 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -195,7 +195,7 @@ void func_808FA11C(EnRr* this) { this->collider1.info.elemType = ELEMTYPE_UNK0; this->unk_1EE = 80; this->drawDmgEffScale = 0.85f; - this->drawDmgEffFrozenSteamScale = 1.2750001f; + this->drawDmgEffFrozenSteamScale = 1275.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->actor.flags &= ~ACTOR_FLAG_400; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); 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 29f5793d2..ca614643f 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -198,7 +198,7 @@ void EnWallmas_Destroy(Actor* thisx, PlayState* play) { void EnWallmas_Freeze(EnWallmas* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = 3; this->timer = 80; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 46c14cb0e..09f7da10d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -12240,44 +12240,44 @@ 0x80AD6CBC:("BgLotus_Draw",), 0x80AD6DD0:("EnKame_Init",), 0x80AD6F08:("EnKame_Destroy",), - 0x80AD6F34:("func_80AD6F34",), - 0x80AD6F9C:("func_80AD6F9C",), - 0x80AD7018:("func_80AD7018",), - 0x80AD70A0:("func_80AD70A0",), - 0x80AD70EC:("func_80AD70EC",), - 0x80AD71B4:("func_80AD71B4",), - 0x80AD7254:("func_80AD7254",), - 0x80AD73A8:("func_80AD73A8",), - 0x80AD7424:("func_80AD7424",), - 0x80AD7568:("func_80AD7568",), - 0x80AD75A8:("func_80AD75A8",), - 0x80AD76CC:("func_80AD76CC",), - 0x80AD7798:("func_80AD7798",), - 0x80AD792C:("func_80AD792C",), - 0x80AD7948:("func_80AD7948",), - 0x80AD7B18:("func_80AD7B18",), - 0x80AD7B90:("func_80AD7B90",), - 0x80AD7C54:("func_80AD7C54",), - 0x80AD7D40:("func_80AD7D40",), - 0x80AD7DA4:("func_80AD7DA4",), - 0x80AD7E0C:("func_80AD7E0C",), - 0x80AD7EC0:("func_80AD7EC0",), - 0x80AD7F10:("func_80AD7F10",), - 0x80AD7FA4:("func_80AD7FA4",), - 0x80AD7FF8:("func_80AD7FF8",), - 0x80AD8060:("func_80AD8060",), - 0x80AD810C:("func_80AD810C",), - 0x80AD8148:("func_80AD8148",), - 0x80AD825C:("func_80AD825C",), - 0x80AD8364:("func_80AD8364",), - 0x80AD8388:("func_80AD8388",), - 0x80AD84C0:("func_80AD84C0",), + 0x80AD6F34:("EnKame_Blink",), + 0x80AD6F9C:("EnKame_Freeze",), + 0x80AD7018:("EnKame_Thaw",), + 0x80AD70A0:("EnKame_SetupIdle",), + 0x80AD70EC:("EnKame_Idle",), + 0x80AD71B4:("EnKame_SetupWalk",), + 0x80AD7254:("EnKame_Walk",), + 0x80AD73A8:("EnKame_SetupRetreatIntoShell",), + 0x80AD7424:("EnKame_RetreatIntoShell",), + 0x80AD7568:("EnKame_SetAttackSpeed",), + 0x80AD75A8:("EnKame_ProcessAttackEffects",), + 0x80AD76CC:("EnKame_SetupPrepareToAttack",), + 0x80AD7798:("EnKame_PrepareToAttack",), + 0x80AD792C:("EnKame_SetupAttack",), + 0x80AD7948:("EnKame_Attack",), + 0x80AD7B18:("EnKame_SetupEmergeFromShell",), + 0x80AD7B90:("EnKame_EmergeFromShell",), + 0x80AD7C54:("EnKame_SetupFlip",), + 0x80AD7D40:("EnKame_Flip",), + 0x80AD7DA4:("EnKame_SetupStruggle",), + 0x80AD7E0C:("EnKame_Struggle",), + 0x80AD7EC0:("EnKame_SetupFlipUpright",), + 0x80AD7F10:("EnKame_FlipUpright",), + 0x80AD7FA4:("EnKame_SetupStunned",), + 0x80AD7FF8:("EnKame_Stunned",), + 0x80AD8060:("EnKame_SetupDamaged",), + 0x80AD810C:("EnKame_Damaged",), + 0x80AD8148:("EnKame_SetupDead",), + 0x80AD825C:("EnKame_Dead",), + 0x80AD8364:("EnKame_SetupBurstIntoFlames",), + 0x80AD8388:("EnKame_BurstIntoFlames",), + 0x80AD84C0:("EnKame_UpdateDamage",), 0x80AD881C:("EnKame_Update",), - 0x80AD8A48:("func_80AD8A48",), - 0x80AD8AF8:("func_80AD8AF8",), + 0x80AD8A48:("EnKame_OverrideLimbDraw",), + 0x80AD8AF8:("EnKame_PostLimbDraw",), 0x80AD8BC0:("EnKame_Draw",), - 0x80AD8CEC:("Enkame_OverrideLimbDraw",), - 0x80AD8D64:("func_80AD8D64",), + 0x80AD8CEC:("EnKame_SpikedSnapperOverrideLimbDraw",), + 0x80AD8D64:("EnKame_DrawSpikedSnapper",), 0x80AD9240:("func_80AD9240",), 0x80AD92FC:("func_80AD92FC",), 0x80AD9358:("func_80AD9358",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index ba29f8d91..d0ad05d81 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -12992,14 +12992,14 @@ 0x80AD8DE0:("D_80AD8DE0","UNK_TYPE1","",0x1), 0x80AD8E0C:("D_80AD8E0C","UNK_TYPE1","",0x1), 0x80AD8E14:("D_80AD8E14","UNK_TYPE1","",0x1), - 0x80AD8E34:("D_80AD8E34","UNK_TYPE4","",0x4), + 0x80AD8E34:("sEyeTextures","UNK_TYPE4","",0x4), 0x80AD8E44:("D_80AD8E44","UNK_TYPE1","",0x1), - 0x80AD8E50:("D_80AD8E50","UNK_TYPE4","",0x4), - 0x80AD8E54:("D_80AD8E54","UNK_TYPE1","",0x1), - 0x80AD8E58:("D_80AD8E58","UNK_TYPE1","",0x1), - 0x80AD8E5C:("D_80AD8E5C","UNK_TYPE1","",0x1), - 0x80AD8E68:("D_80AD8E68","UNK_TYPE1","",0x1), - 0x80AD8EA4:("sLimbToBodyParts","UNK_TYPE1","",0x1), + 0x80AD8E50:("sTexturesDesegmented","UNK_TYPE4","",0x4), + 0x80AD8E54:("sSnowPrimColor","UNK_TYPE1","",0x1), + 0x80AD8E58:("sSnowEnvColor","UNK_TYPE1","",0x1), + 0x80AD8E5C:("sVelocity","UNK_TYPE1","",0x1), + 0x80AD8E68:("sBodyLimbBodyPartOffsets","Vec3f","[5]",0x3C), + 0x80AD8EA4:("sLimbToBodyParts","s8","[13]",0xD), 0x80AD8EA5:("D_80AD8EA5","UNK_TYPE1","",0x1), 0x80AD8EC0:("D_80AD8EC0","f32","",0x4), 0x80AD8EC4:("D_80AD8EC4","f32","",0x4), From 2e87212038a4abe3c66d20b98d6f1c2fff8f2380 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 24 Sep 2023 01:46:07 -0700 Subject: [PATCH 097/121] z_message_staff (1 NON-MATCHING) (#1376) * z_message_staff from z_message branch * Use highscores array * Clean up * format * PR cleanup * PR Review * Fix bss * Fix bss --- include/functions.h | 10 +- include/z64message.h | 234 +++++-- include/z64save.h | 47 +- src/code/code_8012EC80.c | 3 +- src/code/z_message.c | 153 ++-- src/code/z_message_nes.c | 16 +- src/code/z_message_staff.c | 654 +++++++++++++++++- src/code/z_parameter.c | 2 +- src/code/z_play.c | 6 +- src/code/z_player_lib.c | 4 +- src/code/z_sram_NES.c | 10 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 67 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 46 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 6 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 16 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 12 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 10 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 2 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 7 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_Oceff_Wipe/z_oceff_wipe.c | 2 +- .../actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c | 2 +- .../actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c | 2 +- .../actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c | 2 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 2 +- .../actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c | 2 +- .../actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c | 2 +- .../actors/ovl_player_actor/z_player.c | 14 +- .../ovl_file_choose/z_file_nameset_NES.c | 1 - tools/disasm/files.txt | 1 + tools/disasm/functions.txt | 10 +- tools/namefixer.py | 36 +- 35 files changed, 1108 insertions(+), 281 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7ab743bd0..00e992e9e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1010,13 +1010,13 @@ void func_80148B98(PlayState* play, u8 arg1); // void func_801491DC(void); // void func_80149454(void); // void func_801496C8(void); -// void func_8014995C(void); +void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); void func_80149C18(PlayState* play); // void Message_FindMessage(void); void func_80149F74(PlayState* play, u32** ppuParm2); -// void func_8014AAD0(void); +void Message_HandleOcarina(PlayState* play); void func_8014ADBC(PlayState* play, UNK_PTR puParm2); -// void func_8014C70C(void); +void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos); // void func_8014CCB4(void); // void func_8014CDF0(void); @@ -1027,7 +1027,7 @@ void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_ void func_80150A84(PlayState* play); void func_80150D08(PlayState* play, u32 uParm2); void func_801514B0(PlayState* play, u16 arg1, u8 arg2); -void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor); +void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor); void Message_ContinueTextbox(PlayState* play, u16 textId); void func_80151A68(PlayState* play, u16 textId); void Message_BombersNotebookQueueEvent(PlayState* play, u8 event); @@ -1061,7 +1061,7 @@ void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3); // void func_8015A144(void); void func_8015B198(PlayState* play); void Message_FindCreditsMessage(PlayState* play, u16 textId); -void func_8015E7EC(PlayState* play, UNK_PTR puParm2); +void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); // void func_8015F8A8(UNK_TYPE4 ctxt); uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); diff --git a/include/z64message.h b/include/z64message.h index 2a3810ff1..fc41055d4 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -10,6 +10,135 @@ struct MessageTableEntry; struct OcarinaStaff; struct PlayState; +typedef enum TextBoxType { + /* 0x00 */ TEXTBOX_TYPE_0, + /* 0x01 */ TEXTBOX_TYPE_1, + /* 0x02 */ TEXTBOX_TYPE_2, + /* 0x03 */ TEXTBOX_TYPE_3, + /* 0x04 */ TEXTBOX_TYPE_4, + /* 0x05 */ TEXTBOX_TYPE_5, + /* 0x06 */ TEXTBOX_TYPE_6, + /* 0x07 */ TEXTBOX_TYPE_7, + /* 0x08 */ TEXTBOX_TYPE_8, + /* 0x09 */ TEXTBOX_TYPE_9, + /* 0x0A */ TEXTBOX_TYPE_A, + /* 0x0B */ TEXTBOX_TYPE_B, + /* 0x0C */ TEXTBOX_TYPE_C, + /* 0x0D */ TEXTBOX_TYPE_D, + /* 0x0E */ TEXTBOX_TYPE_E, + /* 0x0F */ TEXTBOX_TYPE_F, + /* 0x10 */ TEXTBOX_TYPE_MAX +} TextBoxType; + +#define TEXTBOX_ENDTYPE_00 0x00 + +#define TEXTBOX_ENDTYPE_10 0x10 +#define TEXTBOX_ENDTYPE_11 0x11 +#define TEXTBOX_ENDTYPE_12 0x12 + +#define TEXTBOX_ENDTYPE_20 0x20 + +#define TEXTBOX_ENDTYPE_30 0x30 + +#define TEXTBOX_ENDTYPE_40 0x40 +#define TEXTBOX_ENDTYPE_41 0x41 +#define TEXTBOX_ENDTYPE_42 0x42 + +#define TEXTBOX_ENDTYPE_50 0x50 +#define TEXTBOX_ENDTYPE_52 0x52 +#define TEXTBOX_ENDTYPE_55 0x55 +#define TEXTBOX_ENDTYPE_56 0x56 +#define TEXTBOX_ENDTYPE_57 0x57 + +#define TEXTBOX_ENDTYPE_60 0x60 +#define TEXTBOX_ENDTYPE_61 0x61 +#define TEXTBOX_ENDTYPE_62 0x62 +#define TEXTBOX_ENDTYPE_63 0x63 +#define TEXTBOX_ENDTYPE_64 0x64 + +typedef enum MessageMode { + /* 0x00 */ MSGMODE_NONE, + /* 0x01 */ MSGMODE_TEXT_START, + /* 0x02 */ MSGMODE_TEXT_BOX_GROWING, + /* 0x03 */ MSGMODE_TEXT_STARTING, + /* 0x04 */ MSGMODE_TEXT_NEXT_MSG, + /* 0x05 */ MSGMODE_TEXT_CONTINUING, + /* 0x06 */ MSGMODE_TEXT_DISPLAYING, + /* 0x07 */ MSGMODE_TEXT_AWAIT_INPUT, + /* 0x08 */ MSGMODE_TEXT_DELAYED_BREAK, + /* 0x09 */ MSGMODE_9, + /* 0x0A */ MSGMODE_OCARINA_STARTING, + /* 0x0B */ MSGMODE_SONG_DEMONSTRATION_STARTING, + /* 0x0C */ MSGMODE_SONG_PROMPT_STARTING, + /* 0x0D */ MSGMODE_OCARINA_PLAYING, + /* 0x0E */ MSGMODE_E, + /* 0x0F */ MSGMODE_OCARINA_FAIL, + /* 0x10 */ MSGMODE_OCARINA_FAIL_NO_TEXT, + /* 0x11 */ MSGMODE_OCARINA_NOTES_DROP, + /* 0x12 */ MSGMODE_SONG_PLAYED, + /* 0x13 */ MSGMODE_SETUP_DISPLAY_SONG_PLAYED, + /* 0x14 */ MSGMODE_DISPLAY_SONG_PLAYED, + /* 0x15 */ MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN, + /* 0x16 */ MSGMODE_16, + /* 0x17 */ MSGMODE_17, + /* 0x18 */ MSGMODE_18, + /* 0x19 */ MSGMODE_19, + /* 0x1A */ MSGMODE_SONG_DEMONSTRATION, + /* 0x1B */ MSGMODE_SONG_DEMONSTRATION_DONE, + /* 0x1C */ MSGMODE_SONG_PROMPT, + /* 0x1D */ MSGMODE_SONG_PROMPT_SUCCESS, + /* 0x1E */ MSGMODE_SONG_PROMPT_FAIL, + /* 0x1F */ MSGMODE_SONG_PROMPT_NOTES_DROP, + /* 0x20 */ MSGMODE_OCARINA_AWAIT_INPUT, + /* 0x21 */ MSGMODE_21, + /* 0x22 */ MSGMODE_22, + /* 0x23 */ MSGMODE_23, + /* 0x24 */ MSGMODE_24, + /* 0x25 */ MSGMODE_25, + /* 0x26 */ MSGMODE_26, + /* 0x27 */ MSGMODE_SCARECROW_LONG_RECORDING_START, + /* 0x28 */ MSGMODE_SCARECROW_LONG_RECORDING_ONGOING, + /* 0x29 */ MSGMODE_SCARECROW_LONG_DEMONSTRATION, + /* 0x2A */ MSGMODE_SCARECROW_SPAWN_RECORDING_START, + /* 0x2B */ MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING, + /* 0x2C */ MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED, + /* 0x2D */ MSGMODE_SCARECROW_SPAWN_RECORDING_DONE, + /* 0x2E */ MSGMODE_SCARECROW_SPAWN_DEMONSTRATION, + /* 0x2F */ MSGMODE_2F, + /* 0x30 */ MSGMODE_30, + /* 0x31 */ MSGMODE_31, + /* 0x32 */ MSGMODE_32, + /* 0x33 */ MSGMODE_33, + /* 0x34 */ MSGMODE_34, + /* 0x35 */ MSGMODE_35, + /* 0x36 */ MSGMODE_36, + /* 0x37 */ MSGMODE_37, + /* 0x38 */ MSGMODE_38, + /* 0x39 */ MSGMODE_39, + /* 0x3A */ MSGMODE_3A, + /* 0x3B */ MSGMODE_3B, + /* 0x3C */ MSGMODE_3C, + /* 0x3D */ MSGMODE_3D, + /* 0x3E */ MSGMODE_3E, + /* 0x3F */ MSGMODE_3F, + /* 0x40 */ MSGMODE_40, + /* 0x41 */ MSGMODE_TEXT_AWAIT_NEXT, + /* 0x42 */ MSGMODE_TEXT_DONE, + /* 0x43 */ MSGMODE_TEXT_CLOSING, + /* 0x44 */ MSGMODE_PAUSED, // Causes the message system to do nothing until external code sets a new message mode or calls a public function + /* 0x45 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND, // Scene Title Card + /* 0x46 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT, + /* 0x47 */ MSGMODE_SCENE_TITLE_CARD_DISPLAYING, + /* 0x48 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT, + /* 0x49 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND, + /* 0x4A */ MSGMODE_NEW_CYCLE_0, // End of cycle? + /* 0x4B */ MSGMODE_NEW_CYCLE_1, + /* 0x4C */ MSGMODE_NEW_CYCLE_2, + /* 0x4D */ MSGMODE_OWL_SAVE_0, + /* 0x4E */ MSGMODE_OWL_SAVE_1, + /* 0x4F */ MSGMODE_OWL_SAVE_2 +} MessageMode; + extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; @@ -82,81 +211,78 @@ typedef struct { typedef struct MessageContext { /* 0x00000 */ View view; /* 0x00168 */ Font font; - /* 0x11EF8 */ UNK_PTR unk11EF8; + /* 0x11EF8 */ u8* textboxSegment; /* 0x11EFC */ UNK_TYPE1 unk11EFC[0x4]; /* 0x11F00 */ struct OcarinaStaff* ocarinaStaff; /* 0x11F04 */ u16 currentTextId; - /* 0x11F06 */ UNK_TYPE1 unk11F06[0x2]; + /* 0x11F06 */ u16 choiceTextId; // s16? /* 0x11F08 */ u16 unk11F08; - /* 0x11F0A */ u8 unk11F0A; - /* 0x11F0B */ s8 unk11F0B; - /* 0x11F0C */ s8 unk11F0C; - /* 0x11F0B */ UNK_TYPE1 unk11F0D[0x3]; + /* 0x11F0A */ u8 textBoxType; + /* 0x11F0B */ u8 textBoxPos; + /* 0x11F0C */ u8 unk11F0C; /* 0x11F10 */ s32 msgLength; - /* 0x11F14 */ u16 unk11F14; - /* 0x11F16 */ u16 unk11F16; - /* 0x11F18 */ s8 unk11F18; - /* 0x11F19 */ UNK_TYPE1 unk11F19[0x1]; + /* 0x11F14 */ u16 nextTextId; + /* 0x11F16 */ u16 itemId; + /* 0x11F18 */ u8 unk11F18; /* 0x11F1A */ s16 unk11F1A[3]; /* 0x11F20 */ UNK_TYPE1 unk11F20[0x2]; - /* 0x11F22 */ u8 msgMode; // TODO: MessageMode enum + /* 0x11F22 */ u8 msgMode; /* 0x11F23 */ UNK_TYPE1 unk11F23; /* 0x11F24 */ union { char schar[200]; u16 wchar[100]; } decodedBuffer; /* 0x11FEC */ u16 msgBufPos; - /* 0x11FEE */ s16 unk11FEE; - /* 0x11FF0 */ s16 unk11FF0; - /* 0x11FF2 */ u16 unk11FF2; - /* 0x11FF4 */ s16 unk11FF4; - /* 0x11FF6 */ s16 unk11FF6; + /* 0x11FEE */ u16 textDrawPos; + /* 0x11FF0 */ u16 decodedTextLen; + /* 0x11FF2 */ u16 textUnskippable; + /* 0x11FF4 */ s16 textPosX; + /* 0x11FF6 */ s16 textPosY; /* 0x11FF8 */ s16 unk11FF8; /* 0x11FFA */ s16 unk11FFA; /* 0x11FFC */ s16 unk11FFC; /* 0x11FFE */ s16 unk11FFE[0x3]; - /* 0x12004 */ s16 unk12004; - /* 0x12006 */ s16 unk12006; + /* 0x12004 */ s16 textboxXTarget; + /* 0x12006 */ s16 textboxYTarget; /* 0x12008 */ s16 unk12008; - /* 0x1200A */ UNK_TYPE2 unk1200A; + /* 0x1200A */ s16 unk1200A; /* 0x1200C */ s16 unk1200C; /* 0x1200E */ s16 unk1200E; /* 0x12010 */ s16 unk12010; /* 0x12012 */ s16 unk12012; /* 0x12014 */ s16 unk12014; /* 0x12014 */ s16 unk12016; - /* 0x12018 */ s16 unk12018; // messageR - /* 0x1201A */ s16 unk1201A; // messageG - /* 0x1201C */ s16 unk1201C; // messageB - /* 0x1201E */ s16 unk1201E; // messageA - /* 0x12020 */ u8 unk12020; // probably textboxEndType + /* 0x12018 */ s16 textColorR; + /* 0x1201A */ s16 textColorG; + /* 0x1201C */ s16 textColorB; + /* 0x1201E */ s16 textColorAlpha; + /* 0x12020 */ u8 textboxEndType; /* 0x12021 */ u8 choiceIndex; - /* 0x12022 */ u8 unk12022; + /* 0x12022 */ u8 choiceNum; /* 0x12023 */ u8 stateTimer; - /* 0x12024 */ s16 unk12024; - /* 0x12026 */ u16 unk12026; + /* 0x12024 */ u16 textDelayTimer; + /* 0x12026 */ u16 textDelay; /* 0x12028 */ u16 songPlayed; /* 0x1202A */ u16 ocarinaMode; /* 0x1202C */ u16 ocarinaAction; /* 0x1202E */ u16 lastPlayedSong; /* 0x12030 */ s16 unk_12030; /* 0x12032 */ UNK_TYPE1 unk_12032[0x2]; - /* 0x12034 */ s16 unk12034; - /* 0x12036 */ s16 unk12036; - /* 0x12038 */ s16 unk12038; - /* 0x1203A */ s16 unk1203A; - /* 0x1203C */ s16 unk1203C; + /* 0x12034 */ s16 textboxColorRed; + /* 0x12036 */ s16 textboxColorGreen; + /* 0x12038 */ s16 textboxColorBlue; + /* 0x1203A */ s16 textboxColorAlphaTarget; + /* 0x1203C */ s16 textboxColorAlphaCurrent; /* 0x1203E */ s16 unk1203E; - /* 0x12040 */ struct Actor* unkActor; + /* 0x12040 */ struct Actor* talkActor; /* 0x12044 */ s16 unk12044; - /* 0x12046 */ s16 unk12046; - /* 0x12048 */ u8 unk12048; // EnKakasi - /* 0x12049 */ UNK_TYPE1 unk12049[0x1]; - /* 0x1204A */ s16 unk1204A[0x5]; + /* 0x12046 */ s16 blockSunsSong; + /* 0x12048 */ u8 ocarinaButtonIndex; + /* 0x1204A */ s16 ocarinaButtonsPosY[5]; /* 0x12054 */ s16 unk12054[6]; // First, second and third digits in lottery code guess /* 0x1205A */ UNK_TYPE1 unk12060[0x8]; - /* 0x12068 */ s16 unk12068; - /* 0x1206A */ s16 unk1206A; + /* 0x12068 */ s16 textboxX; + /* 0x1206A */ s16 textboxY; /* 0x1206C */ s32 unk1206C; /* 0x12070 */ s32 unk12070; /* 0x12074 */ s32 unk12074; @@ -164,21 +290,24 @@ typedef struct MessageContext { /* 0x1207C */ s32 bankRupees; /* 0x12080 */ struct MessageTableEntry* messageEntryTable; /* 0x12084 */ struct MessageTableEntry* messageEntryTableNes; - /* 0x12088 */ UNK_TYPE4 unk12088; + /* 0x12088 */ UNK_TYPE1 unk12088[0x4]; /* 0x1208C */ struct MessageTableEntry* messageTableStaff; - /* 0x12090 */ s16 unk12090; - /* 0x12092 */ s16 unk12092; - /* 0x12094 */ s8 unk12094; - /* 0x12095 */ UNK_TYPE1 unk12095[0x3]; - /* 0x12098 */ f32 unk12098; // Text_Scale? - /* 0x1209C */ s16 unk1209C; - /* 0x1209E */ UNK_TYPE1 unk1209E[0x2]; - /* 0x120A0 */ s32 unk120A0; - /* 0x120A4 */ s16 unk120A4[6]; - /* 0x120B0 */ u8 unk120B0; + /* 0x12090 */ s16 textIsCredits; + /* 0x12092 */ s16 messageHasSetSfx; + /* 0x12094 */ u8 textboxSkipped; + /* 0x12098 */ f32 textCharScale; + /* 0x1209C */ s16 textFade; + /* 0x120A0 */ s32 ocarinaAvailableSongs; + /* 0x120A4 */ s16 stickAdjX; + /* 0x120A6 */ s16 stickAdjY; + /* 0x120A8 */ s16 stickXRepeatState; + /* 0x120AA */ s16 stickYRepeatState; + /* 0x120AC */ s16 stickXRepeatTimer; + /* 0x120AE */ s16 stickYRepeatTimer; + /* 0x120B0 */ u8 ocarinaSongEffectActive; /* 0x120B1 */ u8 bombersNotebookEventQueueCount; /* 0x120B2 */ u8 bombersNotebookEventQueue[10]; - /* 0x120BC */ u16 unk_120BC; + /* 0x120BC */ u16 hudVisibility; /* 0x120BE */ s16 unk120BE; /* 0x120C0 */ s16 unk120C0; /* 0x120C2 */ s16 unk120C2; @@ -191,7 +320,8 @@ typedef struct MessageContext { /* 0x120D2 */ s16 unk120D2; /* 0x120D4 */ s16 unk120D4; /* 0x120D6 */ s16 unk120D6; - /* 0x120D8 */ UNK_TYPE1 unk120D8[0x8]; + /* 0x120D8 */ s16 unk120D8; + /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6]; } MessageContext; // size = 0x120E0 #endif diff --git a/include/z64save.h b/include/z64save.h index cdc46f023..c8075d9ec 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -154,6 +154,17 @@ typedef enum { /* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52 } HudVisibility; +typedef enum HighScore { + /* 0 */ HS_BANK_RUPEES, + /* 1 */ HS_UNK_1, + /* 2 */ HS_FISHING, // Fishing flags + /* 3 */ HS_BOAT_ARCHERY, + /* 4 */ HS_HOSRE_BACK_BALLOON, + /* 5 */ HS_LOTTERY_GUESS, // Lottery code chosen by player (only uses lower three hex digits) + /* 6 */ HS_SHOOTING_GALLERY, // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. + /* 7 */ HS_MAX +} HighScore; + #define PICTO_PHOTO_WIDTH 160 #define PICTO_PHOTO_HEIGHT 112 @@ -278,13 +289,7 @@ typedef struct SaveInfo { /* 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. + /* 0xEB8 */ u32 highScores[HS_MAX]; /* 0xED4 */ u8 weekEventReg[100]; // "week_event_reg" /* 0xF38 */ u32 regionsVisited; // "area_arrival" /* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear" @@ -430,6 +435,10 @@ typedef enum { #define LINK_IS_CHILD (gSaveContext.save.linkAge == 1) #define LINK_IS_ADULT (gSaveContext.save.linkAge == 0) +#define YEARS_CHILD 5 +#define YEARS_ADULT 17 +#define LINK_AGE_IN_YEARS (!LINK_IS_ADULT ? YEARS_CHILD : YEARS_ADULT) + #define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5) // The day begins at CLOCK_TIME(6, 0) so it must be offset. @@ -510,10 +519,26 @@ typedef enum { #define SET_STOLEN_ITEM_2(itemId) \ (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 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)) +#define HIGH_SCORE(type) (gSaveContext.save.saveInfo.highScores[(type)]) + +#define HS_GET_BANK_RUPEES() (HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF) +#define HS_SET_BANK_RUPEES(rupees) (HIGH_SCORE(HS_BANK_RUPEES) = ((HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF0000) | (rupees))) + +#define HS_GET_HIGH_SCORE_3_LOWER() (HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) +#define HS_SET_HIGH_SCORE_3_LOWER(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) | (score))) +#define HS_GET_BOAT_ARCHERY_HIGH_SCORE() ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) >> 0x10) +#define HS_SET_BOAT_ARCHERY_HIGH_SCORE(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) | ((u16)(score) << 0x10))) + +#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HOSRE_BACK_BALLOON)) +#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HOSRE_BACK_BALLOON) = (time)) + +#define HS_GET_LOTTERY_CODE_GUESS() (HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF) +#define HS_SET_LOTTERY_CODE_GUESS(guess) (HIGH_SCORE(HS_LOTTERY_GUESS) = ((HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF0000) | ((guess) & 0xFFFF))) + +#define HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF)) +#define HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) | ((u16)(score))) +#define HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) >> 0x10)) +#define HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF) | ((u16)(score) << 0x10)) /** * gSaveContext.save.saveInfo.weekEventReg diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index 9a2100d01..768c0b8dc 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -723,6 +723,5 @@ 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.saveInfo.lotteryCodeGuess = - (gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF); + HS_SET_LOTTERY_CODE_GUESS(lotteryCodeGuess); } diff --git a/src/code/z_message.c b/src/code/z_message.c index cf88c60df..37e392aec 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -67,11 +67,11 @@ void func_80147520(void) { void func_80147564(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->unk1204A[0] = 0xBD; - msgCtx->unk1204A[1] = 0xB8; - msgCtx->unk1204A[2] = 0xB3; - msgCtx->unk1204A[3] = 0xAE; - msgCtx->unk1204A[4] = 0xA9; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_A] = 189; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_DOWN] = 184; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_RIGHT] = 179; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_LEFT] = 174; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_UP] = 169; func_80147520(); D_801F6B0C = 0x50; D_801F6B10 = 0x96; @@ -91,7 +91,7 @@ s32 Message_ShouldAdvance(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Input* controller = CONTROLLER1(&play->state); - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { if (CHECK_BTN_ALL(controller->press.button, BTN_A)) { Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } @@ -110,7 +110,7 @@ s32 Message_ShouldAdvanceSilent(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Input* controller = CONTROLLER1(&play->state); - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(controller->press.button, BTN_A); } else { return CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) || @@ -124,7 +124,7 @@ void Message_CloseTextbox(PlayState* play) { if (play->msgCtx.msgLength != 0) { msgCtx->stateTimer = 2; msgCtx->msgMode = 0x43; - msgCtx->unk12020 = 0; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; Audio_PlaySfx(NA_SE_NONE); } } @@ -172,13 +172,13 @@ void func_80148B98(PlayState* play, u8 arg1) { void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->unk11FF4 = 0x30; + msgCtx->textPosX = 0x30; if (arg2 == 1) { - msgCtx->unk11FF6 = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; + msgCtx->textPosY = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; } else { - msgCtx->unk11FF6 = msgCtx->unk11FFE[msgCtx->choiceIndex]; + msgCtx->textPosY = msgCtx->unk11FFE[msgCtx->choiceIndex]; } - func_80147818(play, puParm2, msgCtx->unk11FF4, msgCtx->unk11FF6); + func_80147818(play, puParm2, msgCtx->textPosX, msgCtx->textPosY); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148D64.s") @@ -191,7 +191,7 @@ void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801496C8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014995C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawTextChar.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149C18.s") @@ -225,11 +225,11 @@ void Message_FindMessage(PlayState* play, u16 textId) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149F74.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014AAD0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014ADBC.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014C70C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_LoadItemIcon.s") void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; @@ -239,7 +239,7 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg Font_LoadChar(play, codePointIndex, temp1); msgCtx->decodedBuffer.wchar[decodedBufPos] = codePointIndex; temp1 += FONT_CHAR_TEX_SIZE; - temp2 += (16.0f * msgCtx->unk12098); + temp2 += (16.0f * msgCtx->textCharScale); *offset = temp1; *arg3 = temp2; } @@ -264,7 +264,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x815C; - f += 16.0f * msgCtx->unk12098 * 3.0f; + f += 16.0f * msgCtx->textCharScale * 3.0f; *decodedBufPos = t; *offset = k; *arg3 = f; @@ -302,7 +302,7 @@ void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { } temp_s1--; - sp3C += (stringLimit - 1) * (16.0f * msgCtx->unk12098); + sp3C += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); *arg3 = temp_s1; *arg1 = temp_s2; @@ -317,15 +317,15 @@ void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801514B0.s") -void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor) { +void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaAction = 0xFFFF; func_80150D08(play, textId); - msgCtx->unkActor = Actor; + msgCtx->talkActor = actor; msgCtx->msgMode = 1; msgCtx->stateTimer = 0; - msgCtx->unk12024 = 0; + msgCtx->textDelayTimer = 0; play->msgCtx.ocarinaMode = 0; } @@ -338,7 +338,7 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { func_80150A84(play); msgCtx->msgMode = 5; msgCtx->stateTimer = 8; - msgCtx->unk12024 = 0; + msgCtx->textDelayTimer = 0; if (interfaceCtx->unk_222 == 0) { if (textId != 0x1B93) { @@ -347,11 +347,11 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { func_8011552C(play, DO_ACTION_DECIDE); } } - msgCtx->unk1203C = msgCtx->unk1203A; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; if (play->pauseCtx.bombersNotebookOpen) { - msgCtx->unk12004 = 0x22; - msgCtx->unk12006 = 0x15E; + msgCtx->textboxXTarget = 0x22; + msgCtx->textboxYTarget = 0x15E; func_80149C18(play); msgCtx->stateTimer = 1; } @@ -365,8 +365,8 @@ void func_80151A68(PlayState* play, u16 textId) { func_80150A84(play); func_8015B198(play); msgCtx->msgMode = 0x45; - msgCtx->unk12024 = 0; - msgCtx->unk1203C = msgCtx->unk1203A = msgCtx->unk1201E = 0; + msgCtx->textDelayTimer = 0; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; msgCtx->stateTimer = 30; // Day/Dawn/Night.. Messages @@ -432,12 +432,12 @@ u32 func_80151C9C(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80151DA4.s") void func_80152434(PlayState* play, u16 arg2) { - play->msgCtx.unk12046 = 0; + play->msgCtx.blockSunsSong = false; func_80151DA4(play, arg2); } void func_80152464(PlayState* play, u16 arg1) { - play->msgCtx.unk12046 = 1; + play->msgCtx.blockSunsSong = true; func_80151DA4(play, arg1); } @@ -450,32 +450,33 @@ u8 Message_GetState(MessageContext* msgCtx) { } if (msgCtx->msgMode == 0x42) { - if (msgCtx->unk11F14 != 0xFFFF) { + if (msgCtx->nextTextId != 0xFFFF) { return TEXT_STATE_1; } - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return TEXT_STATE_CHOICE; } - if ((msgCtx->unk12020 == 0x40) || (msgCtx->unk12020 == 0x42) || (msgCtx->unk12020 == 0x30)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30)) { return TEXT_STATE_5; } - if (msgCtx->unk12020 == 0x41) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41) { return TEXT_STATE_16; } - if ((msgCtx->unk12020 >= 0x50) && (msgCtx->unk12020 < 0x58)) { + if ((msgCtx->textboxEndType >= TEXTBOX_ENDTYPE_50) && (msgCtx->textboxEndType <= TEXTBOX_ENDTYPE_57)) { return TEXT_STATE_3; } - if ((msgCtx->unk12020 == 0x60) || (msgCtx->unk12020 == 0x61)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61)) { return TEXT_STATE_14; } - if (msgCtx->unk12020 == 0x62) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62) { return TEXT_STATE_15; } - if (msgCtx->unk12020 == 0x63) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_63) { return TEXT_STATE_17; } - if (msgCtx->unk12020 == 0x12) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_12) { return TEXT_STATE_18; } return TEXT_STATE_DONE; @@ -526,7 +527,7 @@ void func_80152EC0(PlayState* play) { if (1) {} if ((msgCtx->songPlayed < 0x17) && (msgCtx->songPlayed != 0xE) && ((msgCtx->ocarinaAction < 0x43) || (msgCtx->ocarinaAction >= 0x47))) { - msgCtx->unk120B0 = 1; + msgCtx->ocarinaSongEffectActive = true; if (msgCtx->songPlayed != 0x16) { Actor_Spawn(&play->actorCtx, play, D_801D02D8[msgCtx->songPlayed], player->actor.world.pos.x, player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, D_801D02F8[msgCtx->songPlayed]); @@ -541,16 +542,14 @@ void func_80152EC0(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153750.s") -void func_80153E7C(PlayState* play, void* arg1) { - if ((gSaveContext.options.language == 0) && (play->msgCtx.unk12090 == 0)) { - func_8014ADBC(play, arg1); - return; +void func_80153E7C(PlayState* play, Gfx** gfxP) { + if ((gSaveContext.options.language == 0) && !play->msgCtx.textIsCredits) { + func_8014ADBC(play, gfxP); + } else if (play->msgCtx.textIsCredits) { + Message_DrawTextCredits(play, gfxP); + } else { + func_8015966C(play, gfxP, 0); } - if (play->msgCtx.unk12090 != 0) { - func_8015E7EC(play, arg1); - return; - } - func_8015966C(play, arg1, 0); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153EF0.s") @@ -586,39 +585,39 @@ void func_801586A4(PlayState* play) { void Message_Init(PlayState* play) { Font* font; - MessageContext* messageCtx = &play->msgCtx; + MessageContext* msgCtx = &play->msgCtx; func_801586A4(play); play->msgCtx.ocarinaMode = 0; - messageCtx->msgMode = 0; - messageCtx->msgLength = 0; - messageCtx->currentTextId = 0; - messageCtx->unk12020 = 0; - messageCtx->choiceIndex = 0; - messageCtx->ocarinaAction = messageCtx->unk11FF2 = 0; - messageCtx->unk1201E = 0xFF; - View_Init(&messageCtx->view, play->state.gfxCtx); - messageCtx->unk11EF8 = THA_AllocTailAlign16(&play->state.heap, 0x13C00); + msgCtx->msgMode = 0; + msgCtx->msgLength = 0; + msgCtx->currentTextId = 0; + msgCtx->textboxEndType = 0; + msgCtx->choiceIndex = 0; + msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; + msgCtx->textColorAlpha = 0xFF; + View_Init(&msgCtx->view, play->state.gfxCtx); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.heap, 0x13C00); font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; - messageCtx->unk12090 = messageCtx->unk12092 = 0; - messageCtx->unk12094 = 0; - messageCtx->unk1209C = 0; - messageCtx->unk120A0 = 0; - messageCtx->unk12068 = 0x34; - messageCtx->unk1206A = 0x24; - messageCtx->unk120B0 = 0; - messageCtx->unk120BE = 0; - messageCtx->unk120C0 = 0; - messageCtx->unk120C2 = 0; - messageCtx->unk120C4 = 0; - messageCtx->unk120C8 = 0; - messageCtx->unk120CA = 0; - messageCtx->unk120CC = 0; - messageCtx->unk120CE = 0; - messageCtx->unk120D0 = 0; - messageCtx->unk120D2 = 0; - messageCtx->unk120D4 = 0; - messageCtx->unk120D6 = 0; + msgCtx->textIsCredits = msgCtx->messageHasSetSfx = false; + msgCtx->textboxSkipped = 0; + msgCtx->textFade = 0; + msgCtx->ocarinaAvailableSongs = 0; + msgCtx->textboxX = 0x34; + msgCtx->textboxY = 0x24; + msgCtx->ocarinaSongEffectActive = false; + msgCtx->unk120BE = 0; + msgCtx->unk120C0 = 0; + msgCtx->unk120C2 = 0; + msgCtx->unk120C4 = 0; + msgCtx->unk120C8 = 0; + msgCtx->unk120CA = 0; + msgCtx->unk120CC = 0; + msgCtx->unk120CE = 0; + msgCtx->unk120D0 = 0; + msgCtx->unk120D2 = 0; + msgCtx->unk120D4 = 0; + msgCtx->unk120D6 = 0; } diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 759c3d611..1dcb16474 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -91,7 +91,7 @@ void Message_LoadCharNES(PlayState* play, u8 codePointIndex, s32* offset, f32* a Font_LoadCharNES(play, codePointIndex, temp1); msgCtx->decodedBuffer.schar[decodedBufPos] = codePointIndex; temp1 += FONT_CHAR_TEX_SIZE; - temp2 += (16.0f * msgCtx->unk12098); + temp2 += (16.0f * msgCtx->textCharScale); *offset = temp1; *arg3 = temp2; } @@ -128,7 +128,7 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse o += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.schar[p] = 's'; - f += 16.0f * msgCtx->unk12098 * 6.0f; + f += 16.0f * msgCtx->textCharScale * 6.0f; *decodedBufPos = p; *offset = o; *arg3 = f; @@ -152,7 +152,7 @@ void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* of } p--; - f += 16.0f * msgCtx->unk12098 * (D_801D0710[gSaveContext.options.language - 1] + 1); + f += 16.0f * msgCtx->textCharScale * (D_801D0710[gSaveContext.options.language - 1] + 1); *decodedBufPos = p; *offset = o; *arg3 = f; @@ -191,9 +191,9 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32 Font_LoadCharNES(play, 's', o); o += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.schar[p] = 's'; - f += 16.0f * msgCtx->unk12098 * 6.0f; + f += 16.0f * msgCtx->textCharScale * 6.0f; } else { - f += 16.0f * msgCtx->unk12098 * 5.0f; + f += 16.0f * msgCtx->textCharScale * 5.0f; } *decodedBufPos = p; @@ -246,7 +246,7 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* } } - f += 5.0f * (16.0f * msgCtx->unk12098); + f += 5.0f * (16.0f * msgCtx->textCharScale); *decodedBufPos = p - 1; *offset = o; *arg3 = f; @@ -278,11 +278,11 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de } currentChar = msgCtx->decodedBuffer.schar[p]; p++; - f += (D_801D0470[currentChar - ' '] * msgCtx->unk12098); + f += (D_801D0470[currentChar - ' '] * msgCtx->textCharScale); } p--; - f += (stringLimit - 1) * (16.0f * msgCtx->unk12098); + f += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); *decodedBufPos = p; *offset = o; *arg2 = f; diff --git a/src/code/z_message_staff.c b/src/code/z_message_staff.c index ab30a3d9c..a093ef5c1 100644 --- a/src/code/z_message_staff.c +++ b/src/code/z_message_staff.c @@ -17,12 +17,660 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId) { nextSegment = msgEntry->segment; font->messageStart = foundSegment - segment; font->messageEnd = nextSegment - foundSegment; - return; + break; } msgEntry++; } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015E7EC.s") +f32 sCreditsFontWidths[144] = { + 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, + 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, + 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f, + 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f, + 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f, + 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 10.0f, + 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 9.0f, + 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 14.0f, + 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015F8A8.s") +#ifdef NON_MATCHING +// https://decomp.me/scratch/yc8Or +// v0/v1 swap between `character` and `i` +void Message_DrawTextCredits(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + u16 lookAheadCharacter; + u16 j; + u16 i; + u16 sfxHi; + char character; + u16 charTexIndex; + Font* font = &msgCtx->font; + Gfx* gfx = *gfxP; + + msgCtx->textPosX = msgCtx->unk11FF8; + + if (!msgCtx->textIsCredits) { + msgCtx->textPosY = msgCtx->unk11FFA; + } else { + msgCtx->textPosY = 48; + } + + if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + + charTexIndex = 0; + + for (i = 0; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.schar[i]; + + switch (character) { + case 0x1: // MESSAGE_NEWLINE + msgCtx->textPosX = msgCtx->unk11FF8; + if ((msgCtx->choiceNum == 1) || (msgCtx->choiceNum == 3)) { + msgCtx->textPosX += 32; + } + if ((msgCtx->choiceNum == 2) && (msgCtx->textPosY != msgCtx->unk11FFA)) { + msgCtx->textPosX += 32; + } + msgCtx->textPosY += msgCtx->unk11FFC; + break; + + case 0x5: // Remnant of MESSAGE_COLOR + break; + + case ' ': + msgCtx->textPosX += 6; + break; + + case 0x4: // MESSAGE_BOX_BREAK + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + } + *gfxP = gfx; + return; + + case 0x6: // MESSAGE_SHIFT + msgCtx->textPosX += msgCtx->decodedBuffer.schar[++i]; + break; + + case 0x7: // MESSAGE_TEXTID + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_20; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + Font_LoadMessageBoxEndIcon(font, 0); + } + *gfxP = gfx; + return; + + case 0x8: // MESSAGE_QUICKTEXT_ENABLE + if (((i + 1) == msgCtx->textDrawPos) && + ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) { + j = i; + while (true) { + lookAheadCharacter = msgCtx->decodedBuffer.schar[j]; + if (lookAheadCharacter == 6) { + j += 2; + continue; + } + if ((lookAheadCharacter != 9) && (lookAheadCharacter != 0xA) && (lookAheadCharacter != 0xB) && + (lookAheadCharacter != 0xC) && (lookAheadCharacter != 0xD) && (lookAheadCharacter != 4) && + (lookAheadCharacter != 2)) { + j++; + continue; + } + break; + } + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + // fallthrough + case 0x9: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0xD: // MESSAGE_AWAIT_BUTTON_PRESS + if ((i + 1) == msgCtx->textDrawPos) { + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_INPUT; + Font_LoadMessageBoxEndIcon(font, 0); + } + *gfxP = gfx; + return; + } + break; + + case 0xC: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i]; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x11: // MESSAGE_FADE2 + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i] << 8; + msgCtx->stateTimer |= msgCtx->decodedBuffer.schar[++i]; + } + *gfxP = gfx; + return; + + case 0x12: // MESSAGE_SFX + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && !msgCtx->messageHasSetSfx) { + msgCtx->messageHasSetSfx = true; + sfxHi = msgCtx->decodedBuffer.schar[i + 1]; + sfxHi = sfxHi << 8; + Audio_PlaySfx(sfxHi | msgCtx->decodedBuffer.schar[i + 2]); + } + i += 2; + break; + + case 0x13: // remnant of MESSAGE_ITEM_ICON + break; + + case 0x15: // MESSAGE_BACKGROUND + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 1) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0xC2) << 2, (msgCtx->unk12012 + 0x31) << 2, 0, 0, 0, 1 << 10, + 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2, + (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + msgCtx->textPosX += 0x20; + break; + + case 0x14: // MESSAGE_TEXT_SPEED + msgCtx->textDelay = msgCtx->decodedBuffer.schar[++i]; + break; + + case 0x1A: // MESSAGE_UNSKIPPABLE + msgCtx->textUnskippable = true; + break; + + case 0x1B: // MESSAGE_TWO_CHOICE + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + msgCtx->choiceIndex = 0; + Font_LoadMessageBoxEndIcon(font, 2); + } + break; + + case 0x1C: // MESSAGE_THREE_CHOICE + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + msgCtx->choiceIndex = 0; + Font_LoadMessageBoxEndIcon(font, 2); + } + break; + + case 0x2: // MESSAGE_END + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + } + *gfxP = gfx; + return; + + case 0x10: // MESSAGE_OCARINA + if ((i + 1) == msgCtx->textDrawPos) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + break; + + case 0xE: // MESSAGE_FADE + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i]; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0xA: // MESSAGE_PERSISTENT + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30; + } + *gfxP = gfx; + return; + + case 0xB: // MESSAGE_EVENT + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos) && + (msgCtx->textDelayTimer == msgCtx->textDelay)) { + Audio_PlaySfx(NA_SE_NONE); + } + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + charTexIndex += FONT_CHAR_TEX_SIZE; + + msgCtx->textPosX += (s32)(sCreditsFontWidths[character - ' '] * msgCtx->textCharScale); + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = msgCtx->textDelay; + } else { + msgCtx->textDelayTimer--; + } + + *gfxP = gfx; +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s") +#endif + +void Message_DecodeCredits(PlayState* play) { + u16 curChar; + s16 loadChar; + s16 i; + s16 playerNameLen; + s16 decodedBufPos = 0; + s16 charOffset; + f32 timeInSeconds; + s16 numLines = 0; + s16 value; + s16 digits[4]; + s32 charTexIdx = 0; + MessageContext* msgCtx = &play->msgCtx; + Font* font = &play->msgCtx.font; + + msgCtx->nextTextId = 0xFFFF; + + while (true) { + curChar = font->msgBuf.schar[msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos]; + + if ((curChar == 4) || (curChar == 7) || (curChar == 0xC) || (curChar == 0xB) || (curChar == 2)) { + // Textbox decoding ends with any of the above text control characters + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + msgCtx->unk11FFA = msgCtx->textboxY + 8; + + if (msgCtx->textBoxType != TEXTBOX_TYPE_4) { + if (numLines == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + 26; + } else if (numLines == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + 20; + } else if (numLines == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 16; + } + } + + if (curChar == 7) { + value = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2]; + value <<= 8; + msgCtx->nextTextId = msgCtx->decodedBuffer.schar[decodedBufPos] | value; + } + + if (curChar == 0xC) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->msgBufPos += 2; + } + + msgCtx->decodedTextLen = decodedBufPos; + + if (msgCtx->textboxSkipped) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + break; + } else if (curChar == 0xF) { + // Substitute the player name control character for the file's player name. + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + curChar = gSaveContext.save.saveInfo.playerData.playerName[i]; + if (curChar == 62) { + curChar = ' '; + } else if (curChar == 64) { + curChar = '.'; + } else if (curChar == 63) { + curChar = '-'; + } else if (curChar < 10) { + charOffset = curChar; + curChar = '0' + charOffset; + } else if (curChar < 36) { + charOffset = curChar; + curChar = 'A' - 10 + charOffset; + } else if (curChar < 62) { + charOffset = curChar; + curChar = 'a' - 36 + charOffset; + } + + if (curChar != ' ') { + Font_LoadCharNES(play, curChar - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = curChar; + decodedBufPos++; + } + decodedBufPos--; + } else if ((curChar == 0x16) || (curChar == 0x17)) { + digits[0] = digits[1] = digits[2] = 0; + if (curChar == 0x17) { + digits[3] = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; + } else { + digits[3] = gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED]; + } + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + } + } + + } else if (curChar == 0x18) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + charTexIdx += FONT_CHAR_TEX_SIZE; + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar != 0x19) { + if (curChar == 0x1D) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x1E) { + value = HIGH_SCORE((u8)font->msgBuf.schar[++msgCtx->msgBufPos]); + if ((font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) == HS_FISHING) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = + (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + value = SQ((f32)value) * 0.0036f + 0.5f; + } + switch (font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) { + case 0: + case 1: + case 2: + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + charTexIdx += FONT_CHAR_TEX_SIZE; + decodedBufPos++; + } + } + decodedBufPos--; + break; + + case 3: + case 4: + case 6: + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + } + } + break; + + default: + break; + } + } else if (curChar == 0x1F) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, ':' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = ':'; + decodedBufPos++; + } + } + + decodedBufPos--; + } else if (curChar == 0x13) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + Message_LoadItemIcon(play, font->msgBuf.schar[msgCtx->msgBufPos + 1], msgCtx->textboxY + 10); + } else if (curChar == 0x15) { + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + msgCtx->msgBufPos += 3; + msgCtx->unk12012 = msgCtx->textboxY + 8; + numLines = 2; + } else if (curChar == 5) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 1) { + numLines++; + } else if ((curChar != 8) && (curChar != 9) && (curChar != 0xD) && (curChar != 0x10) && (curChar != 0xA) && + (curChar != 0x1A)) { + if (curChar == 0xE) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x11) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if ((curChar == 6) || (curChar == 0x14)) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos] & 0xFF; + } else if (curChar == 0x12) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x1B) { + msgCtx->choiceNum = 2; + } else if (curChar == 0x1C) { + msgCtx->choiceNum = 3; + } else if (curChar != ' ') { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + } + } + + decodedBufPos++; + msgCtx->msgBufPos++; + } +} diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index a3dc07aaf..2c4106e05 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6870,7 +6870,7 @@ void Interface_Update(PlayState* play) { interfaceCtx->aButtonRoll = -15700.0f; interfaceCtx->aButtonState = A_BTN_STATE_2; - if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) { + if ((msgCtx->msgMode != 0) && (msgCtx->textboxYTarget == 0x26)) { R_A_BTN_Y_OFFSET = -14; } else { R_A_BTN_Y_OFFSET = 0; diff --git a/src/code/z_play.c b/src/code/z_play.c index 9bb8d5817..44efbfbfb 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -961,9 +961,9 @@ void Play_UpdateMain(PlayState* this) { Play_UpdateTransition(this); if (gTransitionTileState != TRANS_TILE_READY) { if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && - (((this->msgCtx.msgMode == 0)) || - ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == 0x42) && - (this->msgCtx.unk12020 == 0x41)) || + (((this->msgCtx.msgMode == MSGMODE_NONE)) || + ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == MSGMODE_TEXT_DONE) && + (this->msgCtx.textboxEndType == TEXTBOX_ENDTYPE_41)) || ((this->msgCtx.currentTextId >= 0x100) && (this->msgCtx.currentTextId <= 0x200))) && (this->gameOverCtx.state == GAMEOVER_INACTIVE)) { KaleidoSetup_Update(this); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index a890090ff..2e36ea553 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -620,7 +620,7 @@ PlayerItemAction func_80123810(PlayState* play) { if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B)) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; - Interface_SetHudVisibility(play->msgCtx.unk_120BC); + Interface_SetHudVisibility(play->msgCtx.hudVisibility); return PLAYER_IA_MINUS1; } } else { @@ -634,7 +634,7 @@ PlayerItemAction func_80123810(PlayState* play) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; - Interface_SetHudVisibility(play->msgCtx.unk_120BC); + Interface_SetHudVisibility(play->msgCtx.hudVisibility); if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) { Audio_PlaySfx(NA_SE_SY_ERROR); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 768314490..198dac4e9 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -396,11 +396,11 @@ void Sram_ActivateOwl(u8 owlId) { } void Sram_ClearHighscores(void) { - 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); + HS_SET_BOAT_ARCHERY_HIGH_SCORE(19); + HS_SET_HIGH_SCORE_3_LOWER(10); + HS_SET_HORSE_BACK_BALLOON_TIME(SECONDS_TO_TIMER(60)); + HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39); + HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10); gSaveContext.save.saveInfo.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75); gSaveContext.save.saveInfo.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75); 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 4ae5482bf..39269c2ac 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -835,8 +835,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (sLinkAge != 1) { - // HIGH_SCORE(HS_FISHING) from OoT - if (gSaveContext.save.saveInfo.unk_EC0 & 0x1000) { + if (HIGH_SCORE(HS_FISHING) & 0x1000) { D_8090CD08 = 0; } else { D_8090CD08 = 1; @@ -854,18 +853,18 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1); if (sLinkAge == 1) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { - D_809171CC = gSaveContext.save.saveInfo.unk_EC0 & 0x7F; + if (HIGH_SCORE(HS_FISHING) & 0x7F) { + D_809171CC = HIGH_SCORE(HS_FISHING) & 0x7F; } else { D_809171CC = 40.0f; } - } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { - D_809171CC = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; + } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) { + D_809171CC = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18; } else { D_809171CC = 45.0f; } - D_809171D1 = (gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) >> 0x10; + D_809171D1 = (HIGH_SCORE(HS_FISHING) & 0xFF0000) >> 0x10; if ((D_809171D1 & 7) == 7) { play->roomCtx.unk7A[0] = 90; D_809171CA = 1; @@ -2799,8 +2798,8 @@ void func_80903C60(EnFishing* this, u8 arg1) { void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x80) { + if (HIGH_SCORE(HS_FISHING) & 0x7F) { + if (HIGH_SCORE(HS_FISHING) & 0x80) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -2808,8 +2807,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { } else { this->actor.textId = 0x40AE; } - } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x80000000) { + } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) { + if (HIGH_SCORE(HS_FISHING) & 0x80000000) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -3749,8 +3748,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.saveInfo.unk_EC0 & 0x400)) || - ((sLinkAge != 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x800))) { + if (((sLinkAge == 1) && (HIGH_SCORE(HS_FISHING) & 0x400)) || + ((sLinkAge != 1) && (HIGH_SCORE(HS_FISHING) & 0x800))) { // Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch } } else { @@ -4694,7 +4693,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { case 0: if (D_809171FC == 0) { if (sLinkAge != 1) { - if ((gSaveContext.save.saveInfo.unk_EC0 & 0x100) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x200)) { + if ((HIGH_SCORE(HS_FISHING) & 0x100) && !(HIGH_SCORE(HS_FISHING) & 0x200)) { this->actor.textId = 0x4093; } else { this->actor.textId = 0x407B; @@ -4712,9 +4711,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (D_809171FC == 0) { this->unk_154 = 1; if (sLinkAge != 1) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x200; + HIGH_SCORE(HS_FISHING) |= 0x200; } else { - gSaveContext.save.saveInfo.unk_EC0 |= 0x100; + HIGH_SCORE(HS_FISHING) |= 0x100; } } else { this->unk_154 = 10; @@ -4805,8 +4804,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { D_8090CD04 = 20; this->unk_154 = 0; - if ((gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) < 0xFF0000) { - gSaveContext.save.saveInfo.unk_EC0 += 0x10000; + if ((HIGH_SCORE(HS_FISHING) & 0xFF0000) < 0xFF0000) { + HIGH_SCORE(HS_FISHING) += 0x10000; } } break; @@ -4924,29 +4923,29 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { f32 temp; - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF00; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F); - temp = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF00; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F); + temp = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18; if (temp < D_809171CC) { - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; + HIGH_SCORE(HS_FISHING) |= 0x80000000; } } if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80; + HIGH_SCORE(HS_FISHING) |= 0x80; this->unk_154 = 0; break; } } else { - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; + HIGH_SCORE(HS_FISHING) |= 0x80000000; this->unk_154 = 0; break; } @@ -4963,14 +4962,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } if (sLinkAge == 1) { - if ((D_809171CC >= 50.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x400)) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x400; + if ((D_809171CC >= 50.0f) && !(HIGH_SCORE(HS_FISHING) & 0x400)) { + HIGH_SCORE(HS_FISHING) |= 0x400; getItemId = GI_HEART_PIECE; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } } else { - if ((D_809171CC >= 60.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x800)) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x800; + if ((D_809171CC >= 60.0f) && !(HIGH_SCORE(HS_FISHING) & 0x800)) { + HIGH_SCORE(HS_FISHING) |= 0x800; getItemId = GI_SKULL_TOKEN; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } @@ -5140,9 +5139,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { } if (D_8090CD08 == 0) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x1000; + HIGH_SCORE(HS_FISHING) |= 0x1000; } else if (D_8090CD08 == 1) { - gSaveContext.save.saveInfo.unk_EC0 &= ~0x1000; + HIGH_SCORE(HS_FISHING) &= ~0x1000; } if (D_8090CCFC != 0) { 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 f106aa406..917624a64 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -126,7 +126,7 @@ static Vec3f sShopItemPositions[3] = { s32 EnFsn_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || 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 387763de1..ea3f9fea2 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.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 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 @@ -154,7 +154,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); } - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; } @@ -167,22 +167,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x45A: - if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) && + if ((HS_GET_BANK_RUPEES() >= 200) && (this->previousBankValue < 200) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; - } else if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 1000) && - ((this->previousBankValue) < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { + } else if ((HS_GET_BANK_RUPEES() >= 1000) && ((this->previousBankValue) < 1000) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); this->curTextId = 0x45C; - } else if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + } else if (HS_GET_BANK_RUPEES() >= 5000) { if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) { SET_WEEKEVENTREG(WEEKEVENTREG_60_01); Message_StartTextbox(play, 0x45D, &this->actor); this->curTextId = 0x45D; - } else if (this->previousBankValue < (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) { + } else if (this->previousBankValue < (s16)HS_GET_BANK_RUPEES()) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x45E, &this->actor); this->curTextId = 0x45E; @@ -229,7 +229,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x465: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; break; @@ -248,7 +248,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x46C: case 0x47E: if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) { - if ((u32)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + if (HS_GET_BANK_RUPEES() >= 5000) { Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; } else if (gSaveContext.save.saveInfo.playerData.rupees == 0) { @@ -301,11 +301,11 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x472: case 0x473: case 0x474: - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { Message_StartTextbox(play, 0x478, &this->actor); this->curTextId = 0x478; } else { - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; } @@ -335,7 +335,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { switch (this->curTextId) { case 0x44E: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + if (HS_GET_BANK_RUPEES() >= 5000) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; // bank full, cannot accept more @@ -378,20 +378,18 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x453; } - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { this->isNewAccount = true; } Rupees_ChangeBy(-play->msgCtx.bankRupeesSelected); - this->previousBankValue = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; - gSaveContext.save.saveInfo.bankRupees = - ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) | - (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); + this->previousBankValue = HS_GET_BANK_RUPEES(); + HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() + play->msgCtx.bankRupeesSelected); } } else { // GINKOMAN_CHOICE_NO Audio_PlaySfx_MessageCancel(); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { Message_StartTextbox(play, 0x456, &this->actor); this->curTextId = 0x456; } else { @@ -422,8 +420,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { case 0x471: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) < - ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) { + if ((s32)HS_GET_BANK_RUPEES() < (play->msgCtx.bankRupeesSelected + this->serviceFee)) { Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x476, &this->actor); @@ -447,11 +444,8 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x472; } - this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF); - gSaveContext.save.saveInfo.bankRupees = - (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) - - this->serviceFee) | - (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); + this->previousBankValue = HS_GET_BANK_RUPEES(); + HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() - play->msgCtx.bankRupeesSelected - this->serviceFee); Rupees_ChangeBy(play->msgCtx.bankRupeesSelected); } } else { @@ -615,7 +609,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) { case 0x469: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - play->msgCtx.bankRupees = (gSaveContext.save.saveInfo.bankRupees & 0xFFFF); + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) { Message_StartTextbox(play, 0x46C, &this->actor); this->curTextId = 0x46C; 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 06409d524..be787e8d9 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -274,8 +274,10 @@ void func_8096FAAC(EnKakasi* this, PlayState* play) { * goes off every frame of song teach, but... doing what? */ void func_8096FBB8(EnKakasi* this, PlayState* play) { - if ((play->msgCtx.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) || - (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) { + if ((play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_A) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_DOWN) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_RIGHT) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_LEFT) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_UP)) { // why not 0 < x < 4? fewer branches this->unk190++; } 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 ca2dfac2b..beb994374 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.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))) +#define CHECK_LOTTERY_NUMBERS() \ + (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \ + ((HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \ + ((HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \ + (HS_GET_LOTTERY_CODE_GUESS() & 0xF))) void EnKujiya_Init(Actor* thisx, PlayState* play) { EnKujiya* this = THIS; @@ -159,7 +159,7 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) { break; case 0x2B65: - if (CHECK_LOTTERY_NUMBERS) { + if (CHECK_LOTTERY_NUMBERS()) { Message_StartTextbox(play, 0x2B66, &this->actor); this->textId = 0x2B66; // Won 50 Rupees } else { 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 241260524..516112d3d 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -916,9 +916,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.saveInfo.horseBackBalloonHighScore) { + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { // [Score] New record! - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + HS_SET_HORSE_BACK_BALLOON_TIME(time); EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -960,8 +960,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.saveInfo.horseBackBalloonHighScore) { - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { + HS_SET_HORSE_BACK_BALLOON_TIME(time); EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -987,9 +987,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.saveInfo.horseBackBalloonHighScore) { + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { // New record - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + HS_SET_HORSE_BACK_BALLOON_TIME(time); Message_StartTextbox(play, 0x335D, &this->actor); this->textId = 0x335D; } else { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 15648514e..fe7333cf7 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -198,7 +198,7 @@ void EnOssan_SetupAction(EnOssan* this, EnOssanActionFunc action) { s32 EnOssan_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || 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 9c197223c..90a625c88 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -176,7 +176,7 @@ void EnSob1_SetupAction(EnSob1* this, EnSob1ActionFunc action) { s32 EnSob1_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || 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 d3b88bb2d..52c6d42f9 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 @@ -1140,8 +1140,8 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) { this->guayFlags = 0; this->wolfosFlags = 0; if (this->talkWaitTimer <= 0) { - if (GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { - SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score); + if (HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { + HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score); } this->talkWaitTimer = 15; @@ -1409,8 +1409,8 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { if ((this->talkWaitTimer <= 0) && !play->interfaceCtx.perfectLettersOn) { Flags_SetAllTreasure(play, this->score); this->talkWaitTimer = 15; - if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { - if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { + if ((HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { + if (HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) { // You got a new record! Message_StartTextbox(play, 0x407, &this->actor); @@ -1430,7 +1430,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0x406; } - SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score); + HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score); this->shootingGameState = SG_GAME_STATE_ENDED; } else { if (CURRENT_DAY != 3) { 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 bf5a0900a..0eb54ed34 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -126,7 +126,7 @@ void EnTrt_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 a s32 EnTrt_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || 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 0297339d9..8ca8857db 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 @@ -350,11 +350,8 @@ void func_80B76980(EnTruMt* this, PlayState* play) { this->actor.speed = 0.0f; this->actionFunc = func_80B76BB8; } else if (CHECK_EVENTINF(EVENTINF_40)) { - u32 score = gSaveContext.minigameScore; - - if (((gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) >> 0x10) < score) { - gSaveContext.save.saveInfo.unk_EC4 = - ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF); + if (((void)0, gSaveContext.minigameScore) > HS_GET_BOAT_ARCHERY_HIGH_SCORE()) { + HS_SET_BOAT_ARCHERY_HIGH_SCORE((u32)((void)0, gSaveContext.minigameScore)); SET_EVENTINF(EVENTINF_37); } } diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 015f1d8ae..406e4ba0f 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -80,7 +80,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) { this->unk16C -= 0.05f; } else { Actor_Kill(&this->actor); - if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) { + if ((R_TIME_SPEED != 400) && !play->msgCtx.blockSunsSong) { if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) { gSaveContext.sunsSongState = SUNSSONG_START; } diff --git a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c index c73e67a1d..59cd120cf 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c +++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c @@ -41,7 +41,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play) { OceffWipe* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c index 641d49f49..6dbea9128 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -43,7 +43,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play) { OceffWipe2* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe2_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c index f7156878c..f0ab978c8 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c +++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c @@ -44,7 +44,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play) { OceffWipe3* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe3_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c index d82c117e9..0bda6d1b9 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c +++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c @@ -43,7 +43,7 @@ void OceffWipe4_Destroy(Actor* thisx, PlayState* play) { OceffWipe4* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe4_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c index 3dcb06d5d..272d0fb88 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -41,7 +41,7 @@ void OceffWipe5_Destroy(Actor* thisx, PlayState* play) { OceffWipe5* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe5_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c index 244870f9d..28a5dfb04 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c +++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c @@ -39,7 +39,7 @@ void OceffWipe6_Init(Actor* thisx, PlayState* play) { void OceffWipe6_Destroy(Actor* thisx, PlayState* play) { Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe6_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c index fb8011c60..49f9fc0dd 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c +++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c @@ -43,7 +43,7 @@ void OceffWipe7_Destroy(Actor* thisx, PlayState* play) { OceffWipe7* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe7_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 6462c3665..ad5591c54 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -16394,8 +16394,8 @@ void func_80851D30(PlayState* play, Player* this) { var_s0++; } } else if (play->msgCtx.ocarinaMode == 1) { - if (play->msgCtx.unk12048 != 0xFF) { - var_s0[play->msgCtx.unk12048] = 1.2f; + if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { + var_s0[play->msgCtx.ocarinaButtonIndex] = 1.2f; func_8082DB90(play, this, D_8085D190[this->transformation]); } else { s32 i; @@ -16419,11 +16419,11 @@ struct_8085D714 D_8085D714[] = { }; void func_80851EC8(PlayState* play, Player* this) { - struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048]; - f32* temp2 = &this->unk_B10[play->msgCtx.unk12048]; + struct_8085D714* temp3 = &D_8085D714[play->msgCtx.ocarinaButtonIndex]; + f32* temp2 = &this->unk_B10[play->msgCtx.ocarinaButtonIndex]; s16* temp_a3 = &this->unk_B86[temp3->unk_0]; - temp_a3[0] = play->msgCtx.unk12048; + temp_a3[0] = play->msgCtx.ocarinaButtonIndex; temp2[0] = 3.0f; } @@ -16479,7 +16479,7 @@ void func_808521E0(PlayState* play, Player* this) { func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); } else if (play->msgCtx.ocarinaMode == 1) { - if (play->msgCtx.unk12048 != 0xFF) { + if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { func_80851EC8(play, this); } @@ -16500,7 +16500,7 @@ void func_80852290(PlayState* play, Player* this) { s16 var_a1_3; s16 sp38; - if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) { + if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { this->unk_A90->flags |= ACTOR_FLAG_20000000; this->unk_A94 = 0.0f; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c index 2011d10fd..f8f228eaa 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c @@ -4,7 +4,6 @@ * Description: Entering name on a new file, selecting options from the options menu */ -#include "prevent_bss_reordering.h" #include "z_file_select.h" #include "z64rumble.h" #include "misc/title_static/title_static.h" diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index e2d456ee6..56d6477ca 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -566,6 +566,7 @@ 0x801C5FC0 : "z_sram_NES", 0x801C6A70 : "z_message", 0x801D0470 : "z_message_nes", + 0x801D0910 : "z_message_staff", 0x801D0B50 : "z_player_call", 0x801D0B70 : "z_kaleido_manager", 0x801D0BB0 : "", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 09f7da10d..4ddf144d5 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2835,13 +2835,13 @@ 0x801491DC:("func_801491DC",), 0x80149454:("func_80149454",), 0x801496C8:("func_801496C8",), - 0x8014995C:("func_8014995C",), + 0x8014995C:("Message_DrawTextChar",), 0x80149C18:("func_80149C18",), 0x80149EBC:("Message_FindMessage",), 0x80149F74:("func_80149F74",), - 0x8014AAD0:("func_8014AAD0",), + 0x8014AAD0:("Message_HandleOcarina",), 0x8014ADBC:("func_8014ADBC",), - 0x8014C70C:("func_8014C70C",), + 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), 0x8014CDF0:("func_8014CDF0",), @@ -2885,8 +2885,8 @@ 0x8015966C:("func_8015966C",), 0x8015B198:("func_8015B198",), 0x8015E750:("Message_FindCreditsMessage",), - 0x8015E7EC:("func_8015E7EC",), - 0x8015F8A8:("func_8015F8A8",), + 0x8015E7EC:("Message_DrawTextCredits",), + 0x8015F8A8:("Message_DecodeCredits",), 0x80160A90:("PlayerCall_InitFuncPtrs",), 0x80160AF8:("PlayerCall_Init",), 0x80160B40:("PlayerCall_Destroy",), diff --git a/tools/namefixer.py b/tools/namefixer.py index fa4efc6d3..86db40f18 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -767,6 +767,11 @@ wordReplace = { "func_8015926C": "Message_LoadOwlWarpTextNES", "func_8015E750": "Message_FindCreditsMessage", "func_80151BB4": "Message_BombersNotebookQueueEvent", + "func_8014995C": "Message_DrawTextChar", + "func_8014AAD0": "Message_HandleOcarina", + "func_8014C70C": "Message_LoadItemIcon", + "func_8015E7EC": "Message_DrawTextCredits", + "func_80133038": "Schedule_RunScript", "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", @@ -1097,7 +1102,36 @@ wordReplace = { "play->msgCtx.unk12023": "play->msgCtx.stateTimer", "play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode", "play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction", - "play->msgCtx.unk11F04": "play->msgCtx.currentTextId", + "play->msgCtx.unk12048": "play->msgCtx.lastOcarinaButtonIndex", + "play->msgCtx.unk120B0": "play->msgCtx.ocarinaSongEffectActive", + "play->msgCtx.unk12046": "play->msgCtx.blockSunsSong", + "play->msgCtx.unk12090": "play->msgCtx.textIsCredits", + "play->msgCtx.unk_120BC": "play->msgCtx.hudVisibility", + + "msgCtx->unk11EF8": "msgCtx->textboxSegment", + "msgCtx->unk11F14": "msgCtx->nextTextId", + "msgCtx->unk11FF2": "msgCtx->textUnskippable", + "msgCtx->unk11FF4": "msgCtx->textPosX", + "msgCtx->unk11FF6": "msgCtx->textPosY", + "msgCtx->unk12004": "msgCtx->textboxXTarget", + "msgCtx->unk12006": "msgCtx->textboxYTarget", + "msgCtx->unk1201E": "msgCtx->textColorAlpha", + "msgCtx->unk12020": "msgCtx->textboxEndType", + "msgCtx->unk12024": "msgCtx->textDelayTimer", + "msgCtx->unk1203A": "msgCtx->textboxColorAlphaTarget", + "msgCtx->unk1203C": "msgCtx->textboxColorAlphaCurrent", + "msgCtx->unk1204A": "msgCtx->ocarinaButtonsPosY", + "msgCtx->unk12068": "msgCtx->textboxX", + "msgCtx->unk1206A": "msgCtx->textboxY", + "msgCtx->unk12090": "msgCtx->textIsCredits", + "msgCtx->unk12092": "msgCtx->messageHasSetSfx", + "msgCtx->unk12094": "msgCtx->textboxSkipped", + "msgCtx->unk12098": "msgCtx->textCharScale", + "msgCtx->unk1209C": "msgCtx->textFade", + "msgCtx->unk120A0": "msgCtx->ocarinaAvailableSongs", + "msgCtx->unk120B0": "msgCtx->ocarinaSongEffectActive", + "msgCtx->unkActor": "msgCtx->talkActor", + "play->actorCtx.unk3": "play->actorCtx.lensActive", "play->actorCtx.unk4": "play->actorCtx.lensMaskSize", "play->actorCtx.targetContext": "play->actorCtx.targetCtx", From a017b8f2284f58d1606ff70215521b9600fa1651 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 24 Sep 2023 06:23:44 -0300 Subject: [PATCH 098/121] Cleanup pass for CIC6105.c (#1371) * IO_READ * CIC6105.h * CIC defines * sRomInfoFaultClient * CIC6105_Init * CIC6105_Destroy * hopefully final cleanup * review * bss * bss --- include/CIC6105.h | 21 ++++++++++++++++ include/build.h | 8 ++++++ include/functions.h | 8 ++---- include/variables.h | 7 ------ src/boot/CIC6105.c | 27 +++++++++++---------- src/boot/boot_main.c | 3 ++- src/code/main.c | 1 + src/overlays/actors/ovl_En_Ot/z_en_ot.c | 1 + src/overlays/gamestates/ovl_title/z_title.c | 3 ++- tools/disasm/functions.txt | 8 +++--- tools/disasm/variables.txt | 6 ++--- tools/sizes/boot_functions.csv | 8 +++--- 12 files changed, 62 insertions(+), 39 deletions(-) create mode 100644 include/CIC6105.h create mode 100644 include/build.h diff --git a/include/CIC6105.h b/include/CIC6105.h new file mode 100644 index 000000000..09a363a4d --- /dev/null +++ b/include/CIC6105.h @@ -0,0 +1,21 @@ +#ifndef CIC6105_H +#define CIC6105_H + +#include "ultra64.h" + +// IPL3 puts values in those addresses as part of the anti-piracy checks +#define CIC_ADDRESS_1 0x002FB1F4 +#define CIC_ADDRESS_2 0x002FE1C0 + + +void CIC6105_Noop1(void); +void CIC6105_Noop2(void); +void CIC6105_PrintRomInfo(void); +void CIC6105_AddRomInfoFaultPage(void); +void CIC6105_Destroy(void); +void CIC6105_Init(void); + +extern s32 gCICAddr1Val; +extern s32 gCICAddr2Val; + +#endif diff --git a/include/build.h b/include/build.h new file mode 100644 index 000000000..5099e5d3c --- /dev/null +++ b/include/build.h @@ -0,0 +1,8 @@ +#ifndef BUILD_H +#define BUILD_H + +extern char gBuildTeam[]; +extern char gBuildDate[]; +extern char gBuildMakeOption[]; + +#endif diff --git a/include/functions.h b/include/functions.h index 00e992e9e..c24ab583d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -34,13 +34,9 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr); void IrqMgr_HandleRetrace(IrqMgr* irqmgr); void IrqMgr_ThreadEntry(IrqMgr* irqmgr); void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount); -void CIC6105_Nop80081820(void); -void CIC6105_Nop80081828(void); -void CIC6105_PrintRomInfo(void); -void CIC6105_AddRomInfoFaultPage(void); -void CIC6105_RemoveRomInfoFaultPage(void); -void func_800818F4(void); + void osSyncPrintfUnused(const char* fmt, ...); + void rmonPrintf(const char* fmt, ...); void RcpUtils_PrintRegisterStatus(void); diff --git a/include/variables.h b/include/variables.h index fdc9e91b0..e071b2036 100644 --- a/include/variables.h +++ b/include/variables.h @@ -24,19 +24,12 @@ extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE4 D_80097524; // extern u32 sRandInt; -extern char gBuildTeam[]; -extern char gBuildDate[]; -extern char gBuildMakeOption[]; - extern u8 sYaz0DataBuffer[0x400]; extern u8* sYaz0CurDataEnd; extern u32 sYaz0CurRomStart; extern u32 sYaz0CurSize; extern u8* sYaz0MaxPtr; extern void* gYaz0DecompressDstEnd; -// extern UNK_TYPE4 D_8009BE30; -// extern UNK_TYPE4 D_8009BE34; -// extern FaultClient romInfoFaultClient; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; diff --git a/src/boot/CIC6105.c b/src/boot/CIC6105.c index e18223b03..f42edf656 100644 --- a/src/boot/CIC6105.c +++ b/src/boot/CIC6105.c @@ -1,32 +1,33 @@ #include "prevent_bss_reordering.h" -#include "global.h" +#include "CIC6105.h" +#include "build.h" #include "fault.h" -UNK_TYPE4 D_8009BE30; -UNK_TYPE4 D_8009BE34; -FaultClient romInfoFaultClient; +s32 gCICAddr1Val; +s32 gCICAddr2Val; +FaultClient sRomInfoFaultClient; -void CIC6105_Nop80081820(void) { +void CIC6105_Noop1(void) { } -void CIC6105_Nop80081828(void) { +void CIC6105_Noop2(void) { } void CIC6105_PrintRomInfo(void) { - FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", HW_REG(SP_STATUS_REG, u32)); + FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", IO_READ(SP_STATUS_REG)); FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", gBuildTeam); FaultDrawer_DrawText(56, 192, "[Date:%s]", gBuildDate); } void CIC6105_AddRomInfoFaultPage(void) { - Fault_AddClient(&romInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL); + Fault_AddClient(&sRomInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL); } -void CIC6105_RemoveRomInfoFaultPage(void) { - Fault_RemoveClient(&romInfoFaultClient); +void CIC6105_Destroy(void) { + Fault_RemoveClient(&sRomInfoFaultClient); } -void func_800818F4(void) { - D_8009BE30 = *(u32*)0xA02FB1F4; - D_8009BE34 = *(u32*)0xA02FE1C0; +void CIC6105_Init(void) { + gCICAddr1Val = IO_READ(CIC_ADDRESS_1); + gCICAddr2Val = IO_READ(CIC_ADDRESS_2); } diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c index dcb66fefd..cc2097f0f 100644 --- a/src/boot/boot_main.c +++ b/src/boot/boot_main.c @@ -3,6 +3,7 @@ #include "idle.h" #include "stack.h" #include "stackcheck.h" +#include "CIC6105.h" #include "z64thread.h" StackEntry sBootStackInfo; @@ -14,7 +15,7 @@ STACK(sBootStack, 0x400); void bootproc(void) { StackCheck_Init(&sBootStackInfo, sBootStack, STACK_TOP(sBootStack), 0, -1, "boot"); osMemSize = osGetMemSize(); - func_800818F4(); + CIC6105_Init(); osInitialize(); osUnmapTLBAll(); gCartHandle = osCartRomInit(); diff --git a/src/code/main.c b/src/code/main.c index 7fbb7ccb8..d3840eca5 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -4,6 +4,7 @@ #include "irqmgr.h" #include "padmgr.h" #include "scheduler.h" +#include "CIC6105.h" #include "stack.h" #include "stackcheck.h" 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 4e9b7a162..b8967e329 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -4,6 +4,7 @@ * Description: Seahorse */ +#include "prevent_bss_reordering.h" #include "z_en_ot.h" #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 21f034e12..c829e79a9 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -7,6 +7,7 @@ #include "z_title.h" #include "z64shrink_window.h" #include "z64view.h" +#include "CIC6105.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "misc/nintendo_rogo_static/nintendo_rogo_static.h" @@ -146,7 +147,7 @@ void ConsoleLogo_Destroy(GameState* thisx) { Sram_InitSram(&this->state, &this->sramCtx); ShrinkWindow_Destroy(); - CIC6105_Nop80081828(); + CIC6105_Noop2(); } void ConsoleLogo_Init(GameState* thisx) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4ddf144d5..c8330232d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -40,12 +40,12 @@ 0x800815CC:("IrqMgr_HandleRetrace",), 0x80081684:("IrqMgr_ThreadEntry",), 0x80081754:("IrqMgr_Init",), - 0x80081820:("CIC6105_Nop80081820",), - 0x80081828:("CIC6105_Nop80081828",), + 0x80081820:("CIC6105_Noop1",), + 0x80081828:("CIC6105_Noop2",), 0x80081830:("CIC6105_PrintRomInfo",), 0x8008189C:("CIC6105_AddRomInfoFaultPage",), - 0x800818D0:("CIC6105_RemoveRomInfoFaultPage",), - 0x800818F4:("func_800818F4",), + 0x800818D0:("CIC6105_Destroy",), + 0x800818F4:("CIC6105_Init",), 0x80081920:("osSyncPrintfUnused",), 0x8008193C:("osSyncPrintf",), 0x80081958:("rmonPrintf",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d0ad05d81..4b224cf3f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -310,9 +310,9 @@ 0x8009BE18:("sYaz0CurSize","u32","",0x4), 0x8009BE1C:("sYaz0MaxPtr","u8*","",0x4), 0x8009BE20:("gYaz0DecompressDstEnd","void*","",0x4), - 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4), - 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4), - 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10), + 0x8009BE30:("gCICAddr1Val","UNK_TYPE4","",0x4), + 0x8009BE34:("gCICAddr2Val","UNK_TYPE4","",0x4), + 0x8009BE38:("sRomInfoFaultClient","FaultClient","",0x10), 0x8009BE50:("sFaultInstance","FaultMgr*","",0x4), 0x8009BE54:("sFaultTimeTotal","f32","",0x4), 0x8009BE58:("faultCustomOptions","u32","",0x4), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 61a69fe7f..47bc17b62 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -37,12 +37,12 @@ asm/non_matchings/boot/irqmgr/IrqMgr_HandlePRENMI500.s,IrqMgr_HandlePRENMI500,0x asm/non_matchings/boot/irqmgr/IrqMgr_HandleRetrace.s,IrqMgr_HandleRetrace,0x800815CC,0x2E asm/non_matchings/boot/irqmgr/IrqMgr_ThreadEntry.s,IrqMgr_ThreadEntry,0x80081684,0x34 asm/non_matchings/boot/irqmgr/IrqMgr_Init.s,IrqMgr_Init,0x80081754,0x33 -asm/non_matchings/boot/CIC6105/CIC6105_Nop80081820.s,CIC6105_Nop80081820,0x80081820,0x2 -asm/non_matchings/boot/CIC6105/CIC6105_Nop80081828.s,CIC6105_Nop80081828,0x80081828,0x2 +asm/non_matchings/boot/CIC6105/CIC6105_Noop1.s,CIC6105_Noop1,0x80081820,0x2 +asm/non_matchings/boot/CIC6105/CIC6105_Noop2.s,CIC6105_Noop2,0x80081828,0x2 asm/non_matchings/boot/CIC6105/CIC6105_PrintRomInfo.s,CIC6105_PrintRomInfo,0x80081830,0x1B asm/non_matchings/boot/CIC6105/CIC6105_AddRomInfoFaultPage.s,CIC6105_AddRomInfoFaultPage,0x8008189C,0xD -asm/non_matchings/boot/CIC6105/CIC6105_RemoveRomInfoFaultPage.s,CIC6105_RemoveRomInfoFaultPage,0x800818D0,0x9 -asm/non_matchings/boot/CIC6105/func_800818F4.s,func_800818F4,0x800818F4,0xB +asm/non_matchings/boot/CIC6105/CIC6105_Destroy.s,CIC6105_Destroy,0x800818D0,0x9 +asm/non_matchings/boot/CIC6105/CIC6105_Init.s,CIC6105_Init,0x800818F4,0xB asm/non_matchings/boot/syncprintf/osSyncPrintfUnused.s,osSyncPrintfUnused,0x80081920,0x7 asm/non_matchings/boot/syncprintf/osSyncPrintf.s,osSyncPrintf,0x8008193C,0x7 asm/non_matchings/boot/syncprintf/rmonPrintf.s,rmonPrintf,0x80081958,0xA From c6d3115fd3e9380476599fbe766a41a5a18b5b89 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Sun, 24 Sep 2023 07:10:06 -0300 Subject: [PATCH 099/121] document object_ha (donkeys) (#1366) * initial commit of doc * line * headerrr * forgot about renamed anims * format * horrrse * format --- assets/xml/objects/object_ha.xml | 289 ++++++++++-------- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 13 +- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 4 +- 3 files changed, 166 insertions(+), 140 deletions(-) diff --git a/assets/xml/objects/object_ha.xml b/assets/xml/objects/object_ha.xml index 1ef654330..860b592df 100644 --- a/assets/xml/objects/object_ha.xml +++ b/assets/xml/objects/object_ha.xml @@ -1,135 +1,162 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 1bb7640dc..00a5fd3b1 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -122,9 +122,8 @@ static AnimationHeader* sEponaAnimations[] = { }; static AnimationHeader* sHniAnimations[] = { - &object_ha_Anim_00C850, &object_ha_Anim_00CE70, &object_ha_Anim_00B9C8, - &object_ha_Anim_00B00C, &object_ha_Anim_00D648, &object_ha_Anim_00A650, - &object_ha_Anim_009208, &object_ha_Anim_009858, &object_ha_Anim_00A05C, + &gHorseIdleAnim, &gHorseShakeHeadAnim, &gHorseStopAnim, &gHorseWhinnyAnim, &gHorseWalkAnim, + &gHorseTrotAnim, &gHorseGallopAnim, &gHorseJumpLowAnim, &gHorseJumpHighAnim, }; static AnimationHeader** sAnimationHeaders[] = { @@ -931,11 +930,11 @@ void func_8087D540(Actor* thisx, PlayState* play) { this->actor.update = EnHorse_Update; if (this->unk_1EC & 1) { if (this->type == HORSE_TYPE_BANDIT) { - SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_008C68, NULL, this->jointTable, - this->morphTable, OBJECT_HA_1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skin.skelAnime, &gHorseBanditSkel, NULL, this->jointTable, + this->morphTable, HORSE_BANDIT_LIMB_MAX); } else { - SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_0150D8, NULL, this->jointTable, - this->morphTable, OBJECT_HA_2_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skin.skelAnime, &gDonkeySkel, NULL, this->jointTable, this->morphTable, + DONKEY_LIMB_MAX); } } else { Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 3cfc1fb54..75f0254fc 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -206,8 +206,8 @@ typedef struct EnHorse { /* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4]; /* 0x3E8 */ f32 unk_3E8; /* 0x3EC */ s16 unk_3EC; - /* 0x3EE */ Vec3s jointTable[OBJECT_HA_1_LIMB_MAX]; - /* 0x48A */ Vec3s morphTable[OBJECT_HA_1_LIMB_MAX]; + /* 0x3EE */ Vec3s jointTable[HORSE_BANDIT_LIMB_MAX]; + /* 0x48A */ Vec3s morphTable[HORSE_BANDIT_LIMB_MAX]; /* 0x528 */ f32 unk_528; /* 0x52C */ s32 unk_52C; /* 0x530 */ s32 cueChannel; From b96732818af4c35ecd6da0450f85dd36aa09a691 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 24 Sep 2023 04:49:04 -0700 Subject: [PATCH 100/121] Add original asset names to all `object_k*` files (#1388) * Add original asset names to all `object_k*` files * Comment first, name second * Comment for object_ka --- assets/xml/objects/object_az.xml | 2 +- assets/xml/objects/object_boss03.xml | 8 +- assets/xml/objects/object_boss07.xml | 14 +-- assets/xml/objects/object_dblue_object.xml | 2 +- assets/xml/objects/object_dog.xml | 4 +- assets/xml/objects/object_f52_obj.xml | 8 +- assets/xml/objects/object_ka.xml | 15 +-- assets/xml/objects/object_kaizoku_obj.xml | 20 +-- assets/xml/objects/object_kamejima.xml | 32 ++--- assets/xml/objects/object_kanban.xml | 24 ++-- assets/xml/objects/object_kbt.xml | 26 ++-- assets/xml/objects/object_keikoku_demo.xml | 10 +- assets/xml/objects/object_keikoku_obj.xml | 8 +- assets/xml/objects/object_kepn_koya.xml | 6 +- assets/xml/objects/object_kgy.xml | 24 ++-- assets/xml/objects/object_kibako.xml | 4 +- assets/xml/objects/object_kibako2.xml | 8 +- assets/xml/objects/object_kin2_obj.xml | 38 +++--- assets/xml/objects/object_kinsta1_obj.xml | 4 +- assets/xml/objects/object_kinsta2_obj.xml | 2 +- assets/xml/objects/object_kitan.xml | 6 +- assets/xml/objects/object_knight.xml | 114 ++++++++++-------- assets/xml/objects/object_kumo30.xml | 6 +- assets/xml/objects/object_kusa.xml | 4 +- assets/xml/objects/object_kz.xml | 38 +++--- assets/xml/objects/object_kzsaku.xml | 4 +- assets/xml/objects/object_shn.xml | 2 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.c | 2 +- 28 files changed, 220 insertions(+), 215 deletions(-) diff --git a/assets/xml/objects/object_az.xml b/assets/xml/objects/object_az.xml index ea6fd5e7d..e4e56aa88 100644 --- a/assets/xml/objects/object_az.xml +++ b/assets/xml/objects/object_az.xml @@ -65,7 +65,7 @@ - + diff --git a/assets/xml/objects/object_boss03.xml b/assets/xml/objects/object_boss03.xml index f4def4991..0b4ab9aa2 100644 --- a/assets/xml/objects/object_boss03.xml +++ b/assets/xml/objects/object_boss03.xml @@ -5,7 +5,7 @@ whip assets, along with an unused duplicate of the small fishes. --> - + @@ -69,12 +69,12 @@ - + - - + + diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml index ac2f9afc1..f1be3cf31 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -10,7 +10,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -150,13 +150,13 @@ - - - - + + + + - + diff --git a/assets/xml/objects/object_dblue_object.xml b/assets/xml/objects/object_dblue_object.xml index 08cb20ec3..63d28bd33 100644 --- a/assets/xml/objects/object_dblue_object.xml +++ b/assets/xml/objects/object_dblue_object.xml @@ -14,7 +14,7 @@ - + diff --git a/assets/xml/objects/object_dog.xml b/assets/xml/objects/object_dog.xml index 0e3d318b4..d0f306b24 100644 --- a/assets/xml/objects/object_dog.xml +++ b/assets/xml/objects/object_dog.xml @@ -3,13 +3,13 @@ - + - + diff --git a/assets/xml/objects/object_f52_obj.xml b/assets/xml/objects/object_f52_obj.xml index 697a5b100..0da643be0 100644 --- a/assets/xml/objects/object_f52_obj.xml +++ b/assets/xml/objects/object_f52_obj.xml @@ -1,10 +1,10 @@  - - + + - - + + diff --git a/assets/xml/objects/object_ka.xml b/assets/xml/objects/object_ka.xml index 69ea2d929..914617b41 100644 --- a/assets/xml/objects/object_ka.xml +++ b/assets/xml/objects/object_ka.xml @@ -1,6 +1,7 @@  + - + @@ -59,11 +60,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml index 9ae61accf..a8e773034 100644 --- a/assets/xml/objects/object_kaizoku_obj.xml +++ b/assets/xml/objects/object_kaizoku_obj.xml @@ -1,22 +1,22 @@  - + - - + + - - + + - + @@ -27,15 +27,15 @@ - - + + - + - + diff --git a/assets/xml/objects/object_kamejima.xml b/assets/xml/objects/object_kamejima.xml index cce285475..272a541be 100644 --- a/assets/xml/objects/object_kamejima.xml +++ b/assets/xml/objects/object_kamejima.xml @@ -5,29 +5,29 @@ - + - + - - + + - - - + + + - + - + @@ -88,12 +88,12 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml index b821aa288..c52be1022 100644 --- a/assets/xml/objects/object_kanban.xml +++ b/assets/xml/objects/object_kanban.xml @@ -1,18 +1,18 @@  - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_kbt.xml b/assets/xml/objects/object_kbt.xml index 102aed91d..bf6078da8 100644 --- a/assets/xml/objects/object_kbt.xml +++ b/assets/xml/objects/object_kbt.xml @@ -1,16 +1,16 @@  - - - - - - - - - - - + + + + + + + + + + + @@ -69,7 +69,7 @@ - - + + diff --git a/assets/xml/objects/object_keikoku_demo.xml b/assets/xml/objects/object_keikoku_demo.xml index 3a0a20b65..b9433a48f 100644 --- a/assets/xml/objects/object_keikoku_demo.xml +++ b/assets/xml/objects/object_keikoku_demo.xml @@ -7,21 +7,21 @@ - + - + - + - + - + diff --git a/assets/xml/objects/object_keikoku_obj.xml b/assets/xml/objects/object_keikoku_obj.xml index ff5a6899c..b6d61e91f 100644 --- a/assets/xml/objects/object_keikoku_obj.xml +++ b/assets/xml/objects/object_keikoku_obj.xml @@ -8,19 +8,19 @@ - + - + - + - + diff --git a/assets/xml/objects/object_kepn_koya.xml b/assets/xml/objects/object_kepn_koya.xml index 893892d25..cc14f0556 100644 --- a/assets/xml/objects/object_kepn_koya.xml +++ b/assets/xml/objects/object_kepn_koya.xml @@ -1,7 +1,7 @@  - - + + @@ -13,6 +13,6 @@ - + diff --git a/assets/xml/objects/object_kgy.xml b/assets/xml/objects/object_kgy.xml index 5bbf17793..b83234b8c 100644 --- a/assets/xml/objects/object_kgy.xml +++ b/assets/xml/objects/object_kgy.xml @@ -1,13 +1,13 @@  - - - - - - - - + + + + + + + + @@ -39,10 +39,10 @@ - + - + @@ -68,7 +68,7 @@ - - + + diff --git a/assets/xml/objects/object_kibako.xml b/assets/xml/objects/object_kibako.xml index 43276080a..2cdd6ce36 100644 --- a/assets/xml/objects/object_kibako.xml +++ b/assets/xml/objects/object_kibako.xml @@ -2,8 +2,8 @@ - + - + diff --git a/assets/xml/objects/object_kibako2.xml b/assets/xml/objects/object_kibako2.xml index 4b6ce5ac7..180038e82 100644 --- a/assets/xml/objects/object_kibako2.xml +++ b/assets/xml/objects/object_kibako2.xml @@ -4,11 +4,11 @@ - - + + - - + + diff --git a/assets/xml/objects/object_kin2_obj.xml b/assets/xml/objects/object_kin2_obj.xml index d36766ee4..6e63f19cd 100644 --- a/assets/xml/objects/object_kin2_obj.xml +++ b/assets/xml/objects/object_kin2_obj.xml @@ -4,32 +4,28 @@ Piece, bookshelves and chests of drawers. --> - + + - - - - + + + - + + + - - - - + + + - - + + + - - - - - - - - - + + + diff --git a/assets/xml/objects/object_kinsta1_obj.xml b/assets/xml/objects/object_kinsta1_obj.xml index 48d40c527..be178d1e8 100644 --- a/assets/xml/objects/object_kinsta1_obj.xml +++ b/assets/xml/objects/object_kinsta1_obj.xml @@ -1,7 +1,7 @@  - - + + diff --git a/assets/xml/objects/object_kinsta2_obj.xml b/assets/xml/objects/object_kinsta2_obj.xml index 85e829c66..66bec962d 100644 --- a/assets/xml/objects/object_kinsta2_obj.xml +++ b/assets/xml/objects/object_kinsta2_obj.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_kitan.xml b/assets/xml/objects/object_kitan.xml index edc2e5cc6..cd7db0005 100644 --- a/assets/xml/objects/object_kitan.xml +++ b/assets/xml/objects/object_kitan.xml @@ -1,8 +1,8 @@  - - - + + + diff --git a/assets/xml/objects/object_knight.xml b/assets/xml/objects/object_knight.xml index fa0e900e4..2a8595627 100644 --- a/assets/xml/objects/object_knight.xml +++ b/assets/xml/objects/object_knight.xml @@ -1,49 +1,57 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,14 +109,14 @@ - - + + - + @@ -201,11 +209,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_kumo30.xml b/assets/xml/objects/object_kumo30.xml index 24e8d3974..3a74c0988 100644 --- a/assets/xml/objects/object_kumo30.xml +++ b/assets/xml/objects/object_kumo30.xml @@ -1,12 +1,12 @@  - - + + - + diff --git a/assets/xml/objects/object_kusa.xml b/assets/xml/objects/object_kusa.xml index 36c61f364..9ed22b39f 100644 --- a/assets/xml/objects/object_kusa.xml +++ b/assets/xml/objects/object_kusa.xml @@ -1,6 +1,6 @@  - - + + diff --git a/assets/xml/objects/object_kz.xml b/assets/xml/objects/object_kz.xml index f500ba141..6295d7b1d 100644 --- a/assets/xml/objects/object_kz.xml +++ b/assets/xml/objects/object_kz.xml @@ -1,17 +1,17 @@  - - - - - - - - - - - - + + + + + + + + + + + + @@ -82,12 +82,12 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_kzsaku.xml b/assets/xml/objects/object_kzsaku.xml index 4cfce2de2..af957d700 100644 --- a/assets/xml/objects/object_kzsaku.xml +++ b/assets/xml/objects/object_kzsaku.xml @@ -1,7 +1,7 @@  - + - + diff --git a/assets/xml/objects/object_shn.xml b/assets/xml/objects/object_shn.xml index 97d2e4854..3e39b2eff 100644 --- a/assets/xml/objects/object_shn.xml +++ b/assets/xml/objects/object_shn.xml @@ -80,7 +80,7 @@ - + diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c index b13fbd9d7..b26948090 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -47,7 +47,7 @@ void DmOpstage_Init(Actor* thisx, PlayState* play) { if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) { DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorColliderHeader); + DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorCol); } if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) > DMOPSTAGE_TYPE_GROUND) { From 4e9e6c007c399dbe727fc0b73a382de7ceb52bc6 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:16:58 +0200 Subject: [PATCH 101/121] Ovl_Dm_Hina decompiled (#1380) * data * all functions without func_80A1F75C * func_80A1F75C * improvements * usage update * fix * x->y->z orders * improvements * != 0 --- spec | 3 +- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c | 162 ++++++++++++++++-- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h | 18 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 6 +- 4 files changed, 168 insertions(+), 21 deletions(-) diff --git a/spec b/spec index 233a9605c..ae8d89485 100644 --- a/spec +++ b/spec @@ -2440,8 +2440,7 @@ beginseg name "ovl_Dm_Hina" compress include "build/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.o" - include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.data.o" - include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.reloc.o" + include "build/src/overlays/actors/ovl_Dm_Hina/ovl_Dm_Hina_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c index a2a2589fb..22bc9544b 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c @@ -5,6 +5,7 @@ */ #include "z_dm_hina.h" +#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -20,7 +21,6 @@ void func_80A1F56C(DmHina* this, PlayState* play); void func_80A1F5AC(DmHina* this, PlayState* play); void func_80A1F63C(DmHina* this, PlayState* play); -#if 0 ActorInit Dm_Hina_InitVars = { ACTOR_DM_HINA, ACTORCAT_ITEMACTION, @@ -33,24 +33,162 @@ ActorInit Dm_Hina_InitVars = { (ActorFunc)DmHina_Draw, }; -#endif +void DmHina_Init(Actor* thisx, PlayState* play) { + DmHina* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Init.s") + this->isDrawn = true; + this->actionFunc = func_80A1F470; + this->unk158 = this->actor.world.pos.y; + this->unk148 = 0.0f; + this->unk15C = 1.0f; + this->actor.focus.pos.x = this->actor.world.pos.x; + this->actor.focus.pos.y = this->actor.world.pos.y; + this->actor.focus.pos.z = this->actor.world.pos.z; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Destroy.s") +void DmHina_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F470.s") +void func_80A1F470(DmHina* this, PlayState* play) { + Player* player = GET_PLAYER(play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F56C.s") + Math_SmoothStepToF(&this->unk148, 0.6f, 0.5f, 0.05f, 0.001f); + this->unk154 = Math_SinS(play->gameplayFrames * 0x708) * 8.0f; + if ((player->stateFlags1 & PLAYER_STATE1_400) && (this->actor.xzDistToPlayer < 80.0f)) { + this->isDrawn = false; + this->unk154 = 0.0f; + this->actor.world.pos.y += 40.0f; + this->actionFunc = func_80A1F56C; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F5AC.s") +void func_80A1F56C(DmHina* this, PlayState* play) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + this->unk17C = 2; + this->actionFunc = func_80A1F5AC; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F63C.s") +void func_80A1F5AC(DmHina* this, PlayState* play) { + this->unk17C--; + if (this->unk17C == 0) { + this->isDrawn = true; + Cutscene_StartManual(play, &play->csCtx); + this->subCamId = Play_CreateSubCamera(play); + Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); + Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); + this->actionFunc = func_80A1F63C; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F75C.s") +void func_80A1F63C(DmHina* this, PlayState* play) { + this->subCamEye.x = this->actor.world.pos.x + 100.0f; + this->subCamEye.y = this->unk158 + 260.0f; + this->subCamEye.z = this->actor.world.pos.z + 100.0f; + this->subCamAt.x = this->actor.world.pos.x; + this->subCamAt.y = this->actor.world.pos.y + this->unk154 * this->unk15C + 40.0f * this->unk15C; + this->subCamAt.z = this->actor.world.pos.z; + Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye); + Math_SmoothStepToF(&this->actor.world.pos.y, this->unk158 + 300.0f, 0.5f, 2.0f, 0.1f); + if (((this->unk158 + 240.0f) < this->actor.world.pos.y) && (this->unk17E != 1)) { + this->unk17E = 1; + Actor_PlaySfx(&this->actor, NA_SE_OC_WHITE_OUT_INTO_KYOJIN); + } + Actor_PlaySfx(&this->actor, NA_SE_EV_MASK_RISING - SFX_FLAG); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Update.s") +void func_80A1F75C(DmHina* this, PlayState* play) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F9AC.s") + switch (this->unk17E) { + case 0: + this->unk17F = 0; + this->unk14C = 0.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Draw.s") + case 1: + Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f); + this->unk17F = this->unk14C * 255.0f; + this->unk150 = Math_SinS(play->state.frames * 0x1F40); + for (i = 0; i < 3; i++) { + play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.fogColor[i] = + play->envCtx.lightSettings.diffuseColor1[i] = -255.0f * this->unk14C; + } + play->envCtx.lightSettings.fogNear = -500.0f * this->unk14C; + if (play->envCtx.lightSettings.fogNear < -300) { + play->roomCtx.curRoom.segment = NULL; + } + break; + + default: + break; + } +} + +void DmHina_Update(Actor* thisx, PlayState* play) { + DmHina* this = THIS; + + this->actionFunc(this, play); + func_80A1F75C(this, play); +} + +void func_80A1F9AC(DmHina* this, PlayState* play) { + GraphicsContext* gfxCtx = play->state.gfxCtx; + + if (this->unk17E != 0) { + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)(this->unk14C * 100.0f) + 155, this->unk17F); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, (u8)(this->unk150 * 100.0f) + 50, 0); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + + Matrix_Translate(this->actor.world.pos.x, + this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C), + this->actor.world.pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(this->unk14C * 20.0f, this->unk14C * 20.0f, this->unk14C * 20.0f, MTXMODE_APPLY); + Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); + + CLOSE_DISPS(gfxCtx); + } +} + +void DmHina_Draw(Actor* thisx, PlayState* play) { + DmHina* this = THIS; + f32 scale; + + if (this->isDrawn) { + Matrix_Translate(this->actor.world.pos.x, + this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C), + this->actor.world.pos.z, MTXMODE_NEW); + Matrix_RotateZYX(0, play->gameplayFrames * 0x3E8, 0, MTXMODE_APPLY); + scale = this->unk148 * (1.0f - this->unk14C) * this->unk15C; + Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); + switch (this->actor.params) { + case 0: + GetItem_Draw(play, GID_REMAINS_ODOLWA); + break; + + case 1: + GetItem_Draw(play, GID_REMAINS_GOHT); + break; + + case 2: + GetItem_Draw(play, GID_REMAINS_GYORG); + break; + + case 3: + GetItem_Draw(play, GID_REMAINS_TWINMOLD); + break; + + default: + break; + } + func_80A1F9AC(this, play); + } +} diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h index 21c9e55dc..a3ef636be 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h @@ -10,10 +10,20 @@ typedef void (*DmHinaActionFunc)(struct DmHina*, PlayState*); typedef struct DmHina { /* 0x000 */ Actor actor; /* 0x144 */ DmHinaActionFunc actionFunc; - /* 0x148 */ char unk_148[0x10]; - /* 0x158 */ f32 unk_158; - /* 0x15C */ f32 unk_15C; - /* 0x160 */ char unk_160[0x24]; + /* 0x148 */ f32 unk148; + /* 0x14C */ f32 unk14C; + /* 0x150 */ f32 unk150; + /* 0x154 */ f32 unk154; + /* 0x158 */ f32 unk158; + /* 0x15C */ f32 unk15C; + /* 0x160 */ Vec3f subCamEye; + /* 0x16C */ Vec3f subCamAt; + /* 0x178 */ UNK_TYPE1 pad178[2]; + /* 0x17A */ s16 subCamId; + /* 0x17C */ s16 unk17C; + /* 0x17E */ u8 unk17E; + /* 0x17F */ u8 unk17F; + /* 0x180 */ u8 isDrawn; } DmHina; // size = 0x184 #endif // Z_DM_HINA_H 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 798edb09d..32a7ba7f0 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -919,10 +919,10 @@ void DoorWarp1_Update(Actor* thisx, PlayState* play) { this->unk_204 = 1.0f; } - if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk_15C != this->unk_204)) { + if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk15C != this->unk_204)) { this->unk_1A0->actor.world.pos.y = this->dyna.actor.world.pos.y; - this->unk_1A0->unk_158 = this->dyna.actor.world.pos.y; - this->unk_1A0->unk_15C = this->unk_204; + this->unk_1A0->unk158 = this->dyna.actor.world.pos.y; + this->unk_1A0->unk15C = this->unk_204; } this->actionFunc(this, play); From 1d1e6ef03b446e8d0ff7533f87989734d88de4ba Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 26 Sep 2023 03:15:40 +1000 Subject: [PATCH 102/121] Name player's generic `actionVar`s (#1392) * action-vars * single bracket --- include/z64player.h | 4 +- src/code/z_player_lib.c | 14 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 10 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 8 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 4 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 4 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 2 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 6 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 2 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 4 +- .../actors/ovl_player_actor/z_player.c | 819 +++++++++--------- tools/namefixer.py | 2 + 17 files changed, 447 insertions(+), 444 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index ce5f33144..11145480e 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1221,8 +1221,8 @@ typedef struct Player { /* 0xADE */ u8 unk_ADE; /* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin /* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ? - /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc - /* 0xAE8 */ s16 unk_AE8; // multipurpose timer + /* 0xAE7 */ s8 actionVar1; // context dependent variable that has different meanings depending on what action is currently running + /* 0xAE8 */ s16 actionVar2; // context dependent variable that has different meanings depending on what action is currently running /* 0xAEC */ f32 unk_AEC; /* 0xAF0 */ union { Vec3f unk_AF0[2]; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2e36ea553..db9a8c974 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -369,13 +369,13 @@ void func_80122F28(Player* player) { s32 func_80122F9C(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 2); + return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->actionVar1 == 2); } s32 func_80122FCC(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->unk_AE7 == 1) || (player->unk_AE7 == 3)); + return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->actionVar1 == 1) || (player->actionVar1 == 3)); } void func_8012300C(PlayState* play, s32 arg1) { @@ -389,15 +389,15 @@ void func_8012301C(Actor* thisx, PlayState* play2) { PlayState* play = play2; Player* this = (Player*)thisx; - this->unk_AE7++; + this->actionVar1++; - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); - } else if (this->unk_AE7 >= 3) { + } else if (this->actionVar1 >= 3) { s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { @@ -3744,7 +3744,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } } - if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->unk_AE8 != 0)) { + if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->actionVar2 != 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 @@ -3764,7 +3764,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } 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); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->actionVar2); gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_054C90); Matrix_Pop(); 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 20a25036f..e9a3e79c7 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -685,7 +685,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) { (player->actor.shape.feetPos[0].y >= WATER_HEIGHT + 8.0f)) || (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; } @@ -781,7 +781,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) || (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -909,7 +909,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { // Stop chewing when the timer runs out if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -1751,7 +1751,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) { } if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -1903,7 +1903,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_DAMAGE_OLD); if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index 8d3fc8db4..f002bc8bd 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -132,7 +132,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) { if ((this->actor.targetMode != TARGET_MODE_0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) && - (player->unk_AE7 == 0)) { + (player->actionVar1 == 0)) { if (grottoType == DOORANA_TYPE_VISIBLE_SCENE_EXIT) { s32 exitIndex = DOORANA_GET_EXIT_INDEX(&this->actor); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index d3ffc59a2..c7c3e0fad 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -168,7 +168,7 @@ void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) { if (&this->picto.actor == player->actor.parent) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; player->actor.velocity.y = 0.0f; player->actor.world.pos.x += 20.0f * Math_SinS(this->picto.actor.home.rot.y); player->actor.world.pos.z += 20.0f * Math_CosS(this->picto.actor.home.rot.y); @@ -309,7 +309,7 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) { this->timer++; } - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_Vec3f_Copy(&player->actor.world.pos, &this->playerPos); if (Math_Vec3f_StepTo(&player->actor.world.pos, &this->playerHoldPos, sqrtf(this->timer) * 5.0f) < 0.1f) { s16 rotY = this->picto.actor.shape.rot.y; 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 744b46e24..a7287b67e 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -729,7 +729,7 @@ void EnBigslime_SetPlayerParams(EnBigslime* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; func_800B8D98(play, &this->actor, 10.0f, this->actor.world.rot.y, 10.0f); } } @@ -1528,7 +1528,7 @@ void EnBigslime_CutsceneGrabPlayer(EnBigslime* this, PlayState* play) { s32 i; s32 j; - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400); EnBigslime_UpdateCameraGrabPlayer(this, play); if (this->grabPlayerTimer > 0) { @@ -1577,7 +1577,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 pitch = this->scaleFactor * 0x3333; // polar (zenith) angle - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400); EnBigslime_UpdateCameraGrabPlayer(this, play); EnBigslime_UpdateWavySurface(this); @@ -1710,7 +1710,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { if (this->windupPunchTimer == -5) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; } player->actor.velocity.y = 0.0f; 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 1bde48910..a66b176c3 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -450,7 +450,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { return true; } - if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->unk_AE7 == 1) && + if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->actionVar1 == 1) && (this->unk_28B == 0)) { this->unk_28B = 1; for (i = 0; i < ARRAY_COUNT(this->colliderJntSphElement) - 3; i++) { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index efaa851e6..59d504705 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -548,7 +548,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) { play->unk_18770(play, player); player->actor.parent = &this->actor; - player->unk_AE8 = 50; + player->actionVar2 = 50; this->action = DEEP_PYTHON_ACTION_GRAB; Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_EAT); EnDragon_SetupAttack(this); @@ -626,7 +626,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->grabWaitTimer = 30; CutsceneManager_Stop(this->grabCsId); if (player->stateFlags2 & PLAYER_STATE2_80) { - player->unk_AE8 = 100; + player->actionVar2 = 100; } this->actor.flags &= ~ACTOR_FLAG_100000; 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 cb9449b32..1c6a669a2 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -319,7 +319,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) { if (player->transformation == PLAYER_FORM_GORON) { this->grabTarget = EN_RAF_GRAB_TARGET_GORON_PLAYER; } else { - player->unk_AE8 = 50; + player->actionVar2 = 50; } this->playerRotYWhenGrabbed = player->actor.world.rot.y; @@ -455,7 +455,7 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) { case EN_RAF_GRAB_TARGET_GORON_PLAYER: if (this->chewCount > (BREG(54) + 4)) { player->actor.parent = NULL; - player->unk_AE8 = 1000; + player->actionVar2 = 1000; EnRaf_Explode(this, play); } break; 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 d4a1eaa1c..ad20b3d07 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -463,7 +463,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); 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 1cd0a7861..276ff8db7 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -842,7 +842,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Animation_Change(&this->skelAnime, &gGibdoRedeadGrabEndAnim, 0.5f, 0.0f, Animation_GetLastFrame(&gGibdoRedeadGrabEndAnim), ANIMMODE_ONCE_INTERP, 0.0f); 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 d37bf2605..24fc306cf 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -299,7 +299,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 110; this->unk_1F6 = 2500; @@ -636,7 +636,7 @@ void func_808FB1C0(EnRr* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE); } - player->unk_AE8 = 0; + player->actionVar2 = 0; this->unk_1F0 = 8; this->unk_1EA--; @@ -654,7 +654,7 @@ void func_808FB2C0(EnRr* this, PlayState* play) { Player* player = GET_PLAYER(play); this->unk_1E6--; - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_StepToF(&player->actor.world.pos.x, this->unk_228.x, 30.0f); Math_StepToF(&player->actor.world.pos.y, this->unk_228.y + this->unk_218, 30.0f); Math_StepToF(&player->actor.world.pos.z, this->unk_228.z, 30.0f); 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 9faa6664a..15b7507e1 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 @@ -421,7 +421,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_END); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index c5fdf30af..d167e51fd 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -332,7 +332,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { } } else { player = GET_PLAYER(play); - if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) { + if ((player->stateFlags1 & PLAYER_STATE1_400) && (player->actionVar1 != 0)) { Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN); 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 02aa83ab8..a708038f5 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 @@ -638,8 +638,8 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { } } - if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->unk_AE8 < 90)) { - player->unk_AE8 = 90; + if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->actionVar2 < 90)) { + player->actionVar2 = 90; } if (!this->hitByIceArrow && !sPoolHitByIceArrow && diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index ad5591c54..22fca02c8 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -647,14 +647,14 @@ void func_8082DE50(PlayState* play, Player* this) { s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { s16 controlStickAngleDiff = this->prevControlStickAngle - sPlayerControlStickAngle; - this->unk_AE8 += + this->actionVar2 += arg1 + TRUNCF_BINANG(ABS_ALT(controlStickAngleDiff) * fabsf(sPlayerControlStickMagnitude) * (1.0f / 0x600F0)); if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) { - this->unk_AE8 += 5; + this->actionVar2 += 5; } - return this->unk_AE8 >= arg2; + return this->actionVar2 >= arg2; } void func_8082DF2C(PlayState* play) { @@ -4191,8 +4191,8 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | PLAYER_STATE3_20000 | PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | PLAYER_STATE3_200000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_20000000); - this->unk_AE7 = 0; - this->unk_AE8 = 0; + this->actionVar1 = 0; + this->actionVar2 = 0; this->unk_AA4 = 0; this->unk_B86[0] = 0; this->unk_B86[1] = 0; @@ -4416,7 +4416,7 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { if (Inventory_ConsumeFairy(play)) { play->gameOverCtx.state = GAMEOVER_REVIVE_START; - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { play->gameOverCtx.state = GAMEOVER_DEATH_START; func_801A41F8(0); @@ -5098,7 +5098,7 @@ void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { func_8083375C(this, meleeWeaponAnim); Player_SetAction(play, this, Player_Action_84, 0); - this->unk_AE8 = 0; + this->actionVar2 = 0; if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { func_8082DC38(this); @@ -5165,7 +5165,7 @@ void func_80833A64(Player* this) { void func_80833AA0(Player* this, PlayState* play) { if (Player_SetAction(play, this, Player_Action_25, 0)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); - this->unk_AE8 = 1; + this->actionVar2 = 1; } if (this->unk_AA5 != PLAYER_UNKAA5_4) { this->unk_AA5 = PLAYER_UNKAA5_0; @@ -5228,7 +5228,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock); func_8082DAD4(this); - this->unk_AE8 = 20; + this->actionVar2 = 20; this->actor.velocity.y = 0.0f; Player_RequestRumble(play, this, 255, 80, 150, SQ(0)); @@ -5260,7 +5260,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc func_8082DAD4(this); if (arg2 == 2) { - this->unk_AE8 = 4; + this->actionVar2 = 4; this->actor.speed = 3.0f; this->linearVelocity = 3.0f; @@ -5355,11 +5355,11 @@ void func_80834140(PlayState* play, Player* this, PlayerAnimationHeader* anim) { if (!(this->stateFlags1 & PLAYER_STATE1_80)) { func_80834104(play, this); if (func_8082DA90(play)) { - this->unk_AE8 = -30; + this->actionVar2 = -30; } this->stateFlags1 |= PLAYER_STATE1_80; PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, 84.0f, ANIMMODE_ONCE, -6.0f); - this->unk_AE7 = 1; + this->actionVar1 = 1; this->linearVelocity = 0.0f; } } @@ -5519,7 +5519,7 @@ s32 func_80834600(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_19, 0); } - this->unk_AE7 = sp64; + this->actionVar1 = sp64; if ((s8)sp64 == 0) { Player_SetUpperAction(play, this, Player_UpperAction_4); var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] @@ -5748,8 +5748,8 @@ void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { func_8082DD2C(play, this); this->csId = CS_ID_NONE; - this->unk_AE7 = 1; - this->unk_AE8 = 1; + this->actionVar1 = 1; + this->actionVar2 = 1; this->unk_3A0.x = Math_SinS(arg3) * arg2 + this->actor.world.pos.x; this->unk_3A0.z = Math_CosS(arg3) * arg2 + this->actor.world.pos.z; @@ -5828,7 +5828,7 @@ void func_808354A4(PlayState* play, s32 exitIndex, s32 arg2) { void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { func_80833AA0(this, play); - this->unk_AE8 = -2; + this->actionVar2 = -2; func_8082E5EC(play, this, anim); func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE); } @@ -5949,11 +5949,11 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol this->stateFlags1 |= PLAYER_STATE1_20000000; } else { func_80834104(play, this); - this->unk_AE8 = 9999; + this->actionVar2 = 9999; if (this->floorProperty == FLOOR_PROPERTY_5) { - this->unk_AE7 = -1; + this->actionVar1 = -1; } else { - this->unk_AE7 = 1; + this->actionVar1 = 1; } } } @@ -6052,7 +6052,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { func_80835324(play, this, 50.0f, this->actor.shape.rot.y); this->unk_397 = this->doorType; - this->unk_AE7 = 0; + this->actionVar1 = 0; this->stateFlags1 |= PLAYER_STATE1_20000000; func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0); @@ -6065,7 +6065,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); if (this->doorTimer != 0) { - this->unk_AE8 = 0; + this->actionVar2 = 0; func_8082E438(play, this, func_8082ED20(this)); this->skelAnime.endFrame = 0.0f; } else { @@ -6096,7 +6096,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { } func_80835324(play, this, 50.0f, this->actor.shape.rot.y); - this->unk_AE7 = 0; + this->actionVar1 = 0; this->unk_397 = this->doorType; this->stateFlags1 |= PLAYER_STATE1_20000000; Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos); @@ -6112,7 +6112,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); if (this->doorTimer != 0) { - this->unk_AE8 = 0; + this->actionVar2 = 0; func_8082E438(play, this, func_8082ED20(this)); this->skelAnime.endFrame = 0.0f; } else { @@ -6215,14 +6215,14 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { } else if (enDoorType != ENDOOR_TYPE_7) { Camera* mainCam; - this->unk_AE7 = 38.0f * D_8085C3E8; + this->actionVar1 = 38.0f * D_8085C3E8; mainCam = Play_GetCamera(play, CAM_ID_MAIN); Camera_ChangeDoorCam(mainCam, &knobDoor->dyna.actor, play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&knobDoor->dyna.actor)] .sides[(this->doorDirection > 0) ? 0 : 1] .bgCamIndex, - 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); + 0.0f, this->actionVar1, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); } } } @@ -6337,7 +6337,7 @@ void func_808369F4(Player* this, PlayState* play) { void func_80836A5C(Player* this, PlayState* play) { func_808369F4(this, play); if (func_80123420(this)) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -6533,9 +6533,9 @@ void func_80837134(PlayState* play, Player* this) { } } else if (this->stateFlags2 & PLAYER_STATE2_80000) { if (func_80123420(this)) { - anim = D_8085C2A4[this->unk_AE7].unk_8; + anim = D_8085C2A4[this->actionVar1].unk_8; } else { - anim = D_8085C2A4[this->unk_AE7].unk_4; + anim = D_8085C2A4[this->actionVar1].unk_4; } } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) { anim = &gPlayerAnim_link_normal_run_jump_end; @@ -6554,9 +6554,9 @@ void func_80837134(PlayState* play, Player* this) { this->skelAnime.endFrame = 8.0f; if (temp_v0_2 == 1) { - this->unk_AE8 = 0xA; + this->actionVar2 = 0xA; } else { - this->unk_AE8 = 0x14; + this->actionVar2 = 0x14; } } else if (temp_v0_2 == 0) { func_80836A98(this, anim, play); @@ -6601,9 +6601,9 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { } func_80834D50(play, this, D_8085C2A4[var_v1].unk_0, speed, ((var_v1 == 4) ? NA_SE_VO_LI_SWORD_N : sfxId)); - this->unk_AE8 = -1; + this->actionVar2 = -1; this->stateFlags2 |= PLAYER_STATE2_80000; - this->unk_AE7 = var_v1; + this->actionVar1 = var_v1; return true; } anim = &gPlayerAnim_link_normal_run_jump; @@ -6619,7 +6619,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { if ((this->actor.depthInWater > 0.0f) && (this->remainingHopsCounter != 0)) { this->actor.world.pos.y += this->actor.depthInWater; func_80834D50(play, this, anim, speed, NA_SE_NONE); - this->unk_AE8 = 1; + this->actionVar2 = 1; this->stateFlags3 |= PLAYER_STATE3_200000; Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter)); Player_AnimSfx_PlayVoice(this, sfxId); @@ -6638,7 +6638,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { } func_80834D50(play, this, anim, speed, sfxId); - this->unk_AE8 = 1; + this->actionVar2 = 1; return true; } @@ -6749,14 +6749,14 @@ void func_80837BF8(PlayState* play, Player* this) { } void func_80837C20(PlayState* play, Player* this) { - s32 sp1C = this->unk_AE8; - s32 sp18 = this->unk_AE7; + s32 sp1C = this->actionVar2; + s32 sp18 = this->actionVar1; Player_SetAction_PreserveMoveFlags(play, this, Player_Action_50, 0); this->actor.velocity.y = 0.0f; - this->unk_AE8 = sp1C; - this->unk_AE7 = sp18; + this->actionVar2 = sp1C; + this->actionVar1 = sp18; } void func_80837C78(PlayState* play, Player* this) { @@ -6764,9 +6764,9 @@ void func_80837C78(PlayState* play, Player* this) { this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000); if (this->getItemId == GI_HEART_CONTAINER) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } else if (this->getItemId >= GI_NONE) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } else { this->getItemId = -this->getItemId; } @@ -6862,8 +6862,8 @@ s32 func_80837DEC(Player* this, PlayState* play) { func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); - this->unk_AE8 = -1; - this->unk_AE7 = var_v1_2; + this->actionVar2 = -1; + this->actionVar1 = var_v1_2; } else { this->stateFlags1 |= PLAYER_STATE1_2000; this->stateFlags1 &= ~PLAYER_STATE1_20000; @@ -7284,8 +7284,8 @@ s32 func_80838A90(Player* this, PlayState* play) { func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]); } this->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_AE8 = 80; - this->unk_AE7 = -1; + this->actionVar2 = 80; + this->actionVar1 = -1; this->lockOnActor = this->talkActor; } else { this->csId = CS_ID_GLOBAL_TALK; @@ -7297,13 +7297,13 @@ s32 func_80838A90(Player* this, PlayState* play) { } else { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]; - this->unk_AE7 = 1; + this->actionVar1 = 1; this->actor.textId = 0xFE; } this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; this->exchangeItemAction = this->itemAction; - if (this->unk_AE7 >= 0) { - Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]); + if (this->actionVar1 >= 0) { + Player_AnimationPlayOnce(play, this, D_8085D1F8[this->actionVar1]); } func_8082DAD4(this); return true; @@ -7359,7 +7359,7 @@ s32 func_80838A90(Player* this, PlayState* play) { Player_StopCutscene(this); if (!(this->stateFlags1 & PLAYER_STATE1_800000)) { Player_SetAction(play, this, Player_Action_43, 1); - this->unk_AE8 = 13; + this->actionVar2 = 13; func_80836D8C(this); if (this->unk_AA5 == PLAYER_UNKAA5_2) { play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; @@ -7551,8 +7551,8 @@ void func_80839860(Player* this, PlayState* play, s32 arg2) { func_80834D50(play, this, D_8085C2A4[arg2].unk_0, speed, NA_SE_VO_LI_SWORD_N); - this->unk_AE8 = 1; - this->unk_AE7 = arg2; + this->actionVar2 = 1; + this->actionVar1 = arg2; this->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE); this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f; @@ -7710,7 +7710,7 @@ void func_8083A04C(Player* this) { this->currentBoots = PLAYER_BOOTS_ZORA_LAND; } if (Player_Action_54 == this->actionFunc) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } } else { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { @@ -7861,9 +7861,9 @@ s32 func_8083A6C0(PlayState* play, Player* this) { if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { Player_SetAction(play, this, Player_Action_68, 0); if (this->actor.depthInWater > 12.0f) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } - func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0); + func_8082DB90(play, this, D_8085D200[this->actionVar2].unk_0); Player_PlaySfx(this, NA_SE_IT_SWORD_SWING); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); return true; @@ -7901,7 +7901,7 @@ s32 func_8083A878(PlayState* play, Player* this, f32 arg2) { Player_SetAction(play, this, Player_Action_55, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000); - this->unk_AE8 = 20; + this->actionVar2 = 20; this->linearVelocity = 2.0f; func_80123140(play, this); return false; @@ -7930,11 +7930,11 @@ void func_8083A98C(Actor* thisx, PlayState* play2) { return; } - if (DECR(this->unk_AE8) != 0) { + if (DECR(this->actionVar2) != 0) { camMode = (play->sceneId != SCENE_AYASHIISHOP) ? CAM_MODE_FIRSTPERSON : CAM_MODE_DEKUHIDE; // Show controls overlay. SCENE_AYASHIISHOP does not have Zoom, so has a different one. - if (this->unk_AE8 == 1) { + if (this->actionVar2 == 1) { Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL); } } else { @@ -8014,15 +8014,15 @@ void Player_InitMode_Telescope(PlayState* play, Player* this) { if (play->sceneId == SCENE_00KEIKOKU) { this->actor.focus.rot.x = 0xBD8; this->actor.focus.rot.y = -0x4D74; - this->unk_AE8 = 20; + this->actionVar2 = 20; } else if (play->sceneId == SCENE_AYASHIISHOP) { this->actor.focus.rot.x = 0x9A6; this->actor.focus.rot.y = 0x2102; - this->unk_AE8 = 2; + this->actionVar2 = 2; } else { this->actor.focus.rot.x = 0x9A6; this->actor.focus.rot.y = 0x2102; - this->unk_AE8 = 20; + this->actionVar2 = 20; } play->actorCtx.flags |= ACTORCTX_FLAG_1; } @@ -8033,7 +8033,7 @@ void Player_InitMode_B(PlayState* play, Player* this) { void Player_InitMode_D(PlayState* play, Player* this) { if (func_8083A878(play, this, 180.0f)) { - this->unk_AE8 = -20; + this->actionVar2 = -20; } } @@ -8043,7 +8043,7 @@ void func_8083ADF0(PlayState* play, Player* this) { gSaveContext.entranceSpeed = 2.0f; if (func_8083A878(play, this, 120.0f)) { - this->unk_AE8 = -15; + this->actionVar2 = -15; } } @@ -8054,9 +8054,9 @@ void Player_InitMode_F(PlayState* play, Player* this) { this->linearVelocity = gSaveContext.entranceSpeed; if (func_8083A878(play, this, 800.0f)) { - this->unk_AE8 = -80.0f / this->linearVelocity; - if (this->unk_AE8 < -20) { - this->unk_AE8 = -20; + this->actionVar2 = -80.0f / this->linearVelocity; + if (this->actionVar2 < -20) { + this->actionVar2 = -20; } } } @@ -8118,7 +8118,7 @@ void func_8083B1A0(Player* this, PlayState* play) { void func_8083B23C(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_2, 1); func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]); - this->unk_AE8 = 1; + this->actionVar2 = 1; } void func_8083B29C(Player* this, PlayState* play) { @@ -8211,7 +8211,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { if (this->stateFlags1 & PLAYER_STATE1_400) { this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); } - this->unk_AE8 = 2; + this->actionVar2 = 2; } func_8082E438(play, this, @@ -8238,7 +8238,7 @@ void func_8083B798(PlayState* play, Player* this) { this->unk_B48 = 2.0f; } else { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } this->unk_AAA = 0x3E80; @@ -8280,7 +8280,7 @@ void func_8083B930(PlayState* play, Player* this) { } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && (this->stateFlags2 & PLAYER_STATE2_400)) { this->stateFlags2 &= ~PLAYER_STATE2_400; func_8083B3B4(play, this, NULL); - this->unk_AE7 = 1; + this->actionVar1 = 1; } else if (Player_Action_27 == this->actionFunc) { Player_SetAction(play, this, Player_Action_59, 0); func_8083B798(play, this); @@ -8764,11 +8764,11 @@ s32 Player_HandleSlopes(PlayState* play, Player* this) { } else { Player_SetAction(play, this, Player_Action_73, 0); func_8082DE50(play, this); - func_8082E514(play, this, sPlayerSlopeSlipAnims[this->unk_AE7]); + func_8082E514(play, this, sPlayerSlopeSlipAnims[this->actionVar1]); this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); this->currentYaw = downwardSlopeYaw; if (sPlayerFloorPitchShape >= 0) { - this->unk_AE7 = 1; + this->actionVar1 = 1; Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); } @@ -9016,7 +9016,7 @@ s32 func_8083D860(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_8000000; if ((var_t0 != 0) || temp_t2) { - if ((this->unk_AE7 = var_t0) != 0) { + if ((this->actionVar1 = var_t0) != 0) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { anim = &gPlayerAnim_link_normal_Fclimb_startA; @@ -9029,14 +9029,14 @@ s32 func_8083D860(Player* this, PlayState* play) { distToInteractWall = 20.5f; } - this->unk_AE8 = -2; + this->actionVar2 = -2; this->actor.world.pos.y += yOut; this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; } else { anim = this->ageProperties->unk_B0; distToInteractWall = (this->ageProperties->wallCheckRadius - this->ageProperties->unk_3C) + 17.0f; - this->unk_AE8 = -4; + this->actionVar2 = -4; this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE } @@ -9720,7 +9720,7 @@ s32 func_8083FD80(Player* this, PlayState* play) { //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab". func_8083375C(this, PLAYER_MWA_STAB_1H); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); - this->unk_AE7 = 1; + this->actionVar1 = 1; this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H; this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y; this->unk_ADD = 0; @@ -9952,10 +9952,10 @@ s32 func_808401F4(PlayState* play, Player* this) { Vec3f D_8085D2A4 = { 0.0f, 0.0f, 5.0f }; void func_80840770(PlayState* play, Player* this) { - if (this->unk_AE8 != 0) { - if (this->unk_AE8 > 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + if (this->actionVar2 != 0) { + if (this->actionVar2 > 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { if (this->stateFlags1 & PLAYER_STATE1_8000000) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_wait, 1.0f, 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_wait), ANIMMODE_ONCE, @@ -9966,7 +9966,7 @@ void func_80840770(PlayState* play, Player* this) { 0.0f); } gSaveContext.healthAccumulator = 0xA0; - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else if (gSaveContext.healthAccumulator == 0) { Player_StopCutscene(this); @@ -9982,10 +9982,10 @@ void func_80840770(PlayState* play, Player* this) { func_808339B4(this, -20); Audio_SetBgmVolumeOn(); } - } else if (this->unk_AE7 != 0) { + } else if (this->actionVar1 != 0) { Player_StopCutscene(this); this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE]; - this->unk_AE8 = 60; + this->actionVar2 = 60; Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, FAIRY_PARAMS(FAIRY_TYPE_5, false, 0)); Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) { @@ -10056,7 +10056,7 @@ s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { } else { Player_SetAction(play, this, Player_Action_26, 0); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -10115,7 +10115,7 @@ void func_80840E5C(Player* this, PlayState* play) { void func_80840EC0(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_30, 1); Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); - this->unk_AE8 = 1; + this->actionVar2 = 1; this->unk_B38 = 0.0f; } @@ -10234,7 +10234,7 @@ void Player_InitMode_1(PlayState* play, Player* this) { if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { func_80841358(play, this, false); } - this->unk_AE8 = 20; + this->actionVar2 = 20; } void Player_InitMode_3(PlayState* play, Player* this) { @@ -10264,7 +10264,7 @@ void Player_InitMode_6(PlayState* play, Player* this) { Player_SetAction(play, this, Player_Action_0, 0); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); this->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_AE8 = 0x28; + this->actionVar2 = 0x28; gSaveContext.save.isOwlSave = false; } else { Player_SetAction(play, this, Player_Action_4, 0); @@ -10288,7 +10288,7 @@ void func_80841744(PlayState* play, Player* this) { } this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_ABC = -10000.0f; - this->unk_AE8 = 0x2710; + this->actionVar2 = 0x2710; this->unk_B10[5] = 8.0f; } @@ -11296,7 +11296,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) || (this->stateFlags3 & PLAYER_STATE3_8) || - ((Player_Action_52 == this->actionFunc) && (this->unk_AE8 == 0)) || + ((Player_Action_52 == this->actionFunc) && (this->actionVar2 == 0)) || (Player_Action_53 == this->actionFunc)) { camMode = CAM_MODE_STILL; } else { @@ -11580,7 +11580,7 @@ void func_80844784(PlayState* play, Player* this) { Audio_SetSfxTimerLerpInterval(4, 2); } - this->unk_AE8 = 0x270F; + this->actionVar2 = 0x270F; Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); } @@ -11770,7 +11770,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { func_8083B930(play, this); this->stateFlags2 &= ~PLAYER_STATE2_400; if (Player_Action_54 == this->actionFunc) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } } this->prevBoots = this->currentBoots; @@ -11778,7 +11778,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) { this->actor.parent = this->rideActor; func_80837BD0(play, this); - this->unk_AE8 = -1; + this->actionVar2 = -1; Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_1); func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } @@ -12076,7 +12076,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) { if ((Player_Action_93 != this->actionFunc) && - ((Player_Action_96 != this->actionFunc) || (this->unk_AE7 != 1))) { + ((Player_Action_96 != this->actionFunc) || (this->actionVar1 != 1))) { if (this->cylinder.base.atFlags != AT_NONE) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base); } @@ -12305,7 +12305,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { spE0 = 0.0f; } else { Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY); - spE0 = this->unk_AE8 - 6; + spE0 = this->actionVar2 - 6; if (spE0 < 0.0f) { spE8 = D_8085D55C; spE0 = this->unk_B86[0]; @@ -12386,11 +12386,11 @@ void Player_Draw(Actor* thisx, PlayState* play) { func_80122BA4(play, &this->unk_3D0, 2, 255); if (this->unk_B86[1] < 3) { - if (this->unk_AE7 >= 5) { + if (this->actionVar1 >= 5) { f32 var_fa1; u8 sp9B; - var_fa1 = (this->unk_AE7 - 4) * 0.02f; + var_fa1 = (this->actionVar1 - 4) * 0.02f; if (this->unk_B86[1] != 0) { sp9B = (-this->unk_B86[1] * 0x55) + 0xFF; @@ -12679,7 +12679,7 @@ void func_808479F4(PlayState* play, Player* this, f32 arg2) { } void func_80847A50(Player* this) { - Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + + Player_PlaySfx(this, ((this->actionVar1 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + this->ageProperties->surfaceSfxIdOffset); } @@ -12731,8 +12731,8 @@ s32 func_80847BF0(Player* this, PlayState* play) { s32 var_a2; f32 sp34; - if (this->unk_AE8 < 0) { - this->unk_AE8 = 0x63; + if (this->actionVar2 < 0) { + this->actionVar2 = 0x63; } else { var_a2 = (this->mountSide < 0) ? 0 : 1; @@ -12896,10 +12896,10 @@ s32 func_808482E0(PlayState* play, Player* this) { return true; } - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; - this->unk_AE7 = 1; + this->actionVar1 = 1; Message_StartTextbox(play, giEntry->textId, &this->actor); Item_Give(play, giEntry->itemId); @@ -13393,15 +13393,15 @@ void Player_Action_0(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { Player_StopCutscene(this); Player_SetAction(play, this, Player_Action_4, 0); this->stateFlags1 &= ~PLAYER_STATE1_20000000; } - } else if (this->unk_AE8 == 30) { + } else if (this->actionVar2 == 30) { if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { - this->unk_AE8++; + this->actionVar2++; } else { Message_StartTextbox(play, 0xC03, NULL); } @@ -13447,7 +13447,7 @@ void Player_Action_1(Player* this, PlayState* play) { Player_AnimationPlayOnce(play, this, func_8082ED20(this)); if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) { - this->unk_AE8 = 5; + this->actionVar2 = 5; } else { play->roomCtx.curRoom.num = -1; play->roomCtx.prevRoom.num = -1; @@ -13455,19 +13455,19 @@ void Player_Action_1(Player* this, PlayState* play) { play->roomCtx.prevRoom.segment = NULL; func_8012EBF8(play, &play->roomCtx); - this->unk_AE8 = -1; - this->unk_AE7 = this->unk_3CE; + this->actionVar2 = -1; + this->actionVar1 = this->unk_3CE; } } } - } else if (this->unk_AE8 < 0) { - if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) { + } else if (this->actionVar2 < 0) { + if (Room_StartRoomTransition(play, &play->roomCtx, this->actionVar1)) { Map_InitRoomData(play, play->roomCtx.curRoom.num); Minimap_SavePlayerRoomInitInfo(play); - this->unk_AE8 = 5; + this->actionVar2 = 5; } - } else if (this->unk_AE8 > 0) { - this->unk_AE8--; + } else if (this->actionVar2 > 0) { + this->actionVar2--; } else { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; if (R_PLAY_FILL_SCREEN_ALPHA < 0) { @@ -13485,11 +13485,11 @@ void Player_Action_2(Player* this, PlayState* play) { s16 yawTarget; s32 temp_v0; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082E794(this); Player_AnimationPlayLoop(play, this, func_8082EF54(this)); - this->unk_AE8 = 0; + this->actionVar2 = 0; this->stateFlags3 &= ~PLAYER_STATE3_8; } func_8082FC60(this); @@ -13607,13 +13607,13 @@ void Player_Action_4(Player* this, PlayState* play) { if (animFinished || ((this->currentMask == PLAYER_MASK_SCENTS) && (this->skelAnime.animation != &gPlayerAnim_cl_msbowait)) || ((this->currentMask != PLAYER_MASK_SCENTS) && (this->skelAnime.animation == &gPlayerAnim_cl_msbowait))) { - if (this->unk_AE8 != 0) { - if (DECR(this->unk_AE8) == 0) { + if (this->actionVar2 != 0) { + if (DECR(this->actionVar2) == 0) { this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = - (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->unk_AE8 & 1) * 0x50)) - 0x28; + (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->actionVar2 & 1) * 0x50)) - 0x28; } else { func_8082E794(this); Player_ChooseIdleAnim(play, this); @@ -13622,7 +13622,7 @@ void Player_Action_4(Player* this, PlayState* play) { } func_80832F24(this); - if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if ((this->actionVar2 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { if (func_8082FB68(this)) { func_8083B23C(this, play); return; @@ -14079,7 +14079,7 @@ void Player_Action_17(Player* this, PlayState* play) { func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]); } - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { if (!func_80838A90(this, play)) { func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); } @@ -14118,8 +14118,8 @@ void Player_Action_18(Player* this, PlayState* play) { Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]); } - this->unk_AE8 = 1; - this->unk_AE7 = 0; + this->actionVar2 = 1; + this->actionVar1 = 0; } if (!Player_IsGoronOrDeku(this)) { @@ -14131,7 +14131,7 @@ void Player_Action_18(Player* this, PlayState* play) { } } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { f32 yStick = sPlayerControlInput->rel.stick_y * 180; f32 xStick = sPlayerControlInput->rel.stick_x * -120; s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); @@ -14154,14 +14154,14 @@ void Player_Action_18(Player* this, PlayState* play) { this->upperLimbRot.x = this->actor.focus.rot.x; Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3); - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (!func_808401F4(play, this)) { if (this->skelAnime.curFrame < 2.0f) { func_8082FA5C(play, this, PLAYER_MELEE_WEAPON_STATE_1); } } else { - this->unk_AE8 = 1; - this->unk_AE7 = 0; + this->actionVar2 = 1; + this->actionVar1 = 0; } } else if (!func_8083FE38(this, play)) { if (func_8083A274(this, play)) { @@ -14197,7 +14197,7 @@ void Player_Action_18(Player* this, PlayState* play) { void Player_Action_19(Player* this, PlayState* play) { func_80832F24(this); - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { D_80862B04 = func_8083216C(this, play); if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { Player_SetAction(play, this, Player_Action_2, 1); @@ -14236,7 +14236,7 @@ void Player_Action_21(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; func_808345A8(this); - if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->unk_AE8 == 0) && (this->unk_B75 != 0)) { + if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->actionVar2 == 0) && (this->unk_B75 != 0)) { s16 temp_v0 = this->unk_B76; s16 temp_v1 = this->actor.shape.rot.y - temp_v0; @@ -14255,15 +14255,15 @@ void Player_Action_21(Player* this, PlayState* play) { } if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - if (this->unk_AE8 != 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + if (this->actionVar2 != 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { func_8085B384(this, play); } } else if ((this->stateFlags1 & PLAYER_STATE1_20000000) || (!(this->cylinder.base.acFlags & AC_HIT) && (this->unk_B75 == 0))) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { - this->unk_AE8++; + this->actionVar2++; } else { Player_SetAction(play, this, Player_Action_22, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; @@ -14288,7 +14288,7 @@ void Player_Action_22(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { - this->unk_AE8++; + this->actionVar2++; } else { Player_SetAction(play, this, Player_Action_23, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; @@ -14406,22 +14406,23 @@ void Player_Action_25(Player* this, PlayState* play) { } func_8083216C(this, play); - if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 4))) || + if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->actionVar1 == 2) || (this->actionVar1 >= 4))) || !func_80839770(this, play)) && (this->actor.velocity.y < 0.0f)) { - if (this->unk_AE8 >= 0) { - if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) { + if (this->actionVar2 >= 0) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actionVar2 == 0) || + (this->fallDistance > 0)) { if ((sPlayerYDistToFloor > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) { func_80840980(this, NA_SE_VO_LI_FALL_S); this->stateFlags3 &= ~PLAYER_STATE3_10000; } PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f); - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else { - if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) { - this->unk_AE8 = -2; + if ((this->actionVar2 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) { + this->actionVar2 = -2; func_80840980(this, NA_SE_VO_LI_FALL_L); } @@ -14498,7 +14499,7 @@ void Player_Action_26(Player* this, PlayState* play) { return; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { s32 temp_v0; Math_StepToF(&this->linearVelocity, 0.0f, 2.0f); @@ -14620,16 +14621,16 @@ void Player_Action_30(Player* this, PlayState* play) { func_8083133C(this); this->stateFlags1 &= ~PLAYER_STATE1_20000; Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); - this->unk_AE8 = -1; + this->actionVar2 = -1; } func_80832F24(this); - if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) { + if (!func_8083FE38(this, play) && (this->actionVar2 != 0)) { func_80840F34(this); - if (this->unk_AE8 < 0) { + if (this->actionVar2 < 0) { if (this->unk_B08 >= 0.1f) { this->unk_ADD = 0; - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { func_80840E5C(this, play); } @@ -14789,7 +14790,7 @@ void Player_Action_33(Player* this, PlayState* play) { } func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP); - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else { temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); @@ -14822,9 +14823,9 @@ void Player_Action_33(Player* this, PlayState* play) { } if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { Player_AnimSfx_PlayFloorJump(this); - this->unk_AE8 = 1; + this->actionVar2 = 1; } Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f); } @@ -14854,13 +14855,13 @@ void Player_Action_35(Player* this, PlayState* play) { if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { func_80833AA0(this, play); this->stateFlags1 |= PLAYER_STATE1_20000000; - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { PlayerAnimation_Update(play, &this->skelAnime); if (DECR(this->doorTimer) == 0) { this->linearVelocity = 0.1f; - this->unk_AE8 = 1; + this->actionVar2 = 1; } - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { f32 sp6C = 5.0f * D_8085C3E4; s32 var_t0 = func_808411D4(play, this, &sp6C, -1); @@ -14887,7 +14888,7 @@ void Player_Action_35(Player* this, PlayState* play) { } if (var_t0 < 0x1E) { - this->unk_AE7 = 1; + this->actionVar1 = 1; this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_3A0.x = this->unk_3AC.x; this->unk_3A0.z = this->unk_3AC.z; @@ -14904,8 +14905,8 @@ void Player_Action_35(Player* this, PlayState* play) { this->unk_3A0.z = (Math_CosS(sPlayerConveyorYaw) * 400.0f) + this->actor.world.pos.z; } } else { - if (this->unk_AE8 < 0) { - this->unk_AE8++; + if (this->actionVar2 < 0) { + this->actionVar2++; sp5C = gSaveContext.entranceSpeed; sp58 = -1; } else if (this->unk_397 == 4) { @@ -14971,7 +14972,7 @@ void Player_Action_35(Player* this, PlayState* play) { Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D644, &this->unk_3AC); this->actor.shape.rot.y += (this->doorDirection != 0) ? 0x4000 : -0x4000; - this->unk_AE7 = 0; + this->actionVar1 = 0; this->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y; } @@ -14984,8 +14985,8 @@ void Player_Action_35(Player* this, PlayState* play) { } temp_v0_8 = func_808411D4(play, this, &sp5C, sp58); - if ((this->unk_AE8 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) && - (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { + if ((this->actionVar2 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) && + (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { if (this->unk_397 == 4) { Map_InitRoomData(play, play->roomCtx.curRoom.num); Minimap_SavePlayerRoomInitInfo(play); @@ -15026,7 +15027,7 @@ void Player_Action_36(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; - if (DECR(this->unk_AE7) == 0) { + if (DECR(this->actionVar1) == 0) { func_80835DF8(play, this, &poly, &bgId); } @@ -15034,9 +15035,9 @@ void Player_Action_36(Player* this, PlayState* play) { func_8083216C(this, play); if (animFinished) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (DECR(this->doorTimer) == 0) { - this->unk_AE8 = 1; + this->actionVar2 = 1; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } } else { @@ -15095,8 +15096,8 @@ void Player_Action_38(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait); - this->unk_AE8 = 1; - } else if (this->unk_AE8 == 0) { + this->actionVar2 = 1; + } else if (this->actionVar2 == 0) { if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) { Actor* interactRangeActor = this->interactRangeActor; @@ -15131,10 +15132,10 @@ void Player_Action_39(Player* this, PlayState* play) { void Player_Action_40(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait); - this->unk_AE8 = 15; - } else if (this->unk_AE8 != 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + this->actionVar2 = 15; + } else if (this->actionVar2 != 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { func_80836A98(this, &gPlayerAnim_link_normal_nocarry_free_end, play); this->stateFlags1 &= ~PLAYER_STATE1_800; Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); @@ -15208,7 +15209,7 @@ void Player_Action_43(Player* this, PlayState* play) { func_808391D8(this, play)))) { func_80839ED0(this, play); Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); - } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { + } else if ((DECR(this->actionVar2) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { if (func_801240DC(this)) { this->unk_AA6 |= 0x43; } else { @@ -15233,10 +15234,10 @@ void Player_Action_44(Player* this, PlayState* play) { func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); CutsceneManager_Stop(CS_ID_GLOBAL_TALK); if (this->stateFlags1 & PLAYER_STATE1_800000) { - s32 sp44 = this->unk_AE8; + s32 sp44 = this->actionVar2; func_80837BD0(play, this); - this->unk_AE8 = sp44; + this->actionVar2 = sp44; } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) && ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) { if (func_801242B4(this)) { @@ -15274,11 +15275,11 @@ void Player_Action_44(Player* this, PlayState* play) { if (this->lockOnActor != NULL) { this->currentYaw = func_8083C62C(this, false); this->actor.shape.rot.y = this->currentYaw; - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { if (PlayerAnimation_Update(play, &this->unk_284)) { - this->unk_AE7--; - if (this->unk_AE7 != 0) { + this->actionVar1--; + if (this->actionVar1 != 0) { PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), ANIMMODE_ONCE, -6.0f); @@ -15295,7 +15296,7 @@ void Player_Action_44(Player* this, PlayState* play) { PlayerAnimation_Change( play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); - this->unk_AE7 = 2; + this->actionVar1 = 2; } } } @@ -15329,8 +15330,8 @@ void Player_Action_46(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) { - this->unk_AE8 = 1; - } else if ((this->unk_AE8 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { + this->actionVar2 = 1; + } else if ((this->actionVar2 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); } @@ -15372,8 +15373,8 @@ void Player_Action_47(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); if (func_8082E67C(play, this, anim)) { - this->unk_AE8 = 1; - } else if (this->unk_AE8 == 0) { + this->actionVar2 = 1; + } else if (this->actionVar2 == 0) { if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); } @@ -15432,9 +15433,9 @@ void Player_Action_48(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, - (this->unk_AE7 > 0) ? &gPlayerAnim_link_normal_fall_wait - : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]); - } else if (this->unk_AE7 == 0) { + (this->actionVar1 > 0) ? &gPlayerAnim_link_normal_fall_wait + : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]); + } else if (this->actionVar1 == 0) { f32 frame; if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { @@ -15446,25 +15447,25 @@ void Player_Action_48(Player* this, PlayState* play) { if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) { Player_AnimSfx_PlayFloor(this, NA_SE_PL_WALK_GROUND); if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { - this->unk_AE7 = -1; + this->actionVar1 = -1; } } } Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800); - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); if (this->unk_ADF[this->unk_ADE] >= 0) { func_808381A0(this, - (this->unk_AE7 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType] - : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType], + (this->actionVar1 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType], play); } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) { func_80833A64(this); - if (this->unk_AE7 < 0) { + if (this->actionVar1 < 0) { this->linearVelocity = -0.8f; } else { this->linearVelocity = 0.8f; @@ -15512,7 +15513,7 @@ void Player_Action_50(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; - if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { + if ((this->actionVar1 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { var_fv0 = ABS_ALT(xStick) * 0.0325f; yStick = 0; } else { @@ -15534,7 +15535,7 @@ void Player_Action_50(Player* this, PlayState* play) { this->skelAnime.playSpeed = var_fv1 * var_fv0; - if (this->unk_AE8 >= 0) { + if (this->actionVar2 >= 0) { if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) { dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); @@ -15551,14 +15552,14 @@ void Player_Action_50(Player* this, PlayState* play) { func_80831944(play, this); - if ((this->unk_AE8 < 0) || !func_8083E354(this, play)) { + if ((this->actionVar2 < 0) || !func_8083E354(this, play)) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 < 0) { - this->unk_AE8 = ABS_ALT(this->unk_AE8) & 1; + if (this->actionVar2 < 0) { + this->actionVar2 = ABS_ALT(this->actionVar2) & 1; } else if (yStick != 0) { f32 yIntersect; - sp78 = this->unk_AE7 + this->unk_AE8; + sp78 = this->actionVar1 + this->actionVar2; if (yStick > 0) { sp6C.x = 0.0f; @@ -15568,7 +15569,7 @@ void Player_Action_50(Player* this, PlayState* play) { yIntersect = func_80835D2C(play, this, &sp6C, &sp60); if (this->actor.world.pos.y < yIntersect) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { this->actor.world.pos.y = yIntersect; this->stateFlags1 &= ~PLAYER_STATE1_200000; func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C, @@ -15578,22 +15579,22 @@ void Player_Action_50(Player* this, PlayState* play) { func_808381A0(this, &gPlayerAnim_link_normal_jump_climb_up_free, play); this->stateFlags1 |= PLAYER_STATE1_4000; } else { - func_8083DCC4(this, this->ageProperties->unk_D4[this->unk_AE8], play); + func_8083DCC4(this, this->ageProperties->unk_D4[this->actionVar2], play); } } else { this->skelAnime.prevTransl = this->ageProperties->unk_4A[sp78]; Player_AnimationPlayOnce(play, this, this->ageProperties->unk_B4[sp78]); } } else if ((this->actor.world.pos.y - this->actor.floorHeight) < 15.0f) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { func_8083E2F4(this, play); } else { - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { this->skelAnime.prevTransl = this->ageProperties->unk_44; } - func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play); - this->unk_AE8 = 1; + func_8083DCC4(this, this->ageProperties->unk_CC[this->actionVar2], play); + this->actionVar2 = 1; } } else { sp78 ^= 1; @@ -15603,15 +15604,15 @@ void Player_Action_50(Player* this, PlayState* play) { 0.0f); } - this->unk_AE8 ^= 1; - } else if ((this->unk_AE7 != 0) && (xStick != 0)) { - anim2 = this->ageProperties->unk_C4[this->unk_AE8]; + this->actionVar2 ^= 1; + } else if ((this->actionVar1 != 0) && (xStick != 0)) { + anim2 = this->ageProperties->unk_C4[this->actionVar2]; if (xStick > 0) { - this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8]; + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2]; Player_AnimationPlayOnce(play, this, anim2); } else { - this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2]; + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2 + 2]; PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2, 0.0f); } @@ -15623,10 +15624,10 @@ void Player_Action_50(Player* this, PlayState* play) { } } - if (this->unk_AE8 < 0) { - if (((this->unk_AE8 == -2) && + if (this->actionVar2 < 0) { + if (((this->actionVar2 == -2) && (PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) || - ((this->unk_AE8 == -4) && + ((this->actionVar2 == -4) && (PlayerAnimation_OnFrame(&this->skelAnime, 22.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 35.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 49.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 55.0f)))) { func_80847A50(this); @@ -15659,7 +15660,7 @@ void Player_Action_51(Player* this, PlayState* play) { } else { f32* var_v1 = D_8085D66C; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { Player_PlayAnimSfx(this, D_8085D67C); var_v1 = D_8085D674; } @@ -15756,10 +15757,10 @@ void Player_Action_52(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80847E2C(this, 1.0f, 10.0f); - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1; - this->unk_AE8 = 0x63; + this->actionVar2 = 0x63; } else { s32 var_v0 = (this->mountSide < 0) ? 0 : 1; @@ -15779,8 +15780,8 @@ void Player_Action_52(Player* this, PlayState* play) { this->skelAnime.prevTransl = D_8085D6E0; - if ((this->unk_AE8 < 0) || ((rideActor->animIndex != (this->unk_AE8 & 0xFFFF)) && - ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->unk_AE8 >= 2)))) { + if ((this->actionVar2 < 0) || ((rideActor->animIndex != (this->actionVar2 & 0xFFFF)) && + ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->actionVar2 >= 2)))) { s32 animIndex = rideActor->animIndex; if (animIndex < ENHORSE_ANIM_STOPPING) { @@ -15797,24 +15798,24 @@ void Player_Action_52(Player* this, PlayState* play) { Player_AnimationPlayOnce(play, this, D_8085D6D0[index]); } else { this->skelAnime.animation = D_8085D688[animIndex - 2]; - if (this->unk_AE8 >= 0) { + if (this->actionVar2 >= 0) { Animation_SetMorph(play, &this->skelAnime, 8.0f); } if (animIndex < ENHORSE_ANIM_WALK) { func_808309CC(play, this); - this->unk_AE7 = 0; + this->actionVar1 = 0; } } - this->unk_AE8 = animIndex; + this->actionVar2 = animIndex; } - if (this->unk_AE8 == 1) { + if (this->actionVar2 == 1) { if (D_80862B04 || func_8082DAFC(play)) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3); } else if (PlayerAnimation_Update(play, &this->skelAnime)) { - this->unk_AE8 = 0x63; + this->actionVar2 = 0x63; } else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) { Player_PlayAnimSfx(this, D_8085D6E8); } @@ -15828,11 +15829,11 @@ void Player_Action_52(Player* this, PlayState* play) { if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_NONE)) { this->unk_AA5 = PLAYER_UNKAA5_0; - this->unk_AE7 = 0; - } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) { + this->actionVar1 = 0; + } else if ((this->actionVar2 < 2) || (this->actionVar2 >= 4)) { D_80862B04 = func_8083216C(this, play); if (D_80862B04) { - this->unk_AE7 = 0; + this->actionVar1 = 0; } } @@ -15843,10 +15844,10 @@ void Player_Action_52(Player* this, PlayState* play) { this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; if (!D_80862B04) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (PlayerAnimation_Update(play, &this->unk_284)) { rideActor->stateFlags &= ~ENHORSE_FLAG_8; - this->unk_AE7 = 0; + this->actionVar1 = 0; } if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { @@ -15872,14 +15873,14 @@ void Player_Action_52(Player* this, PlayState* play) { if (EN_HORSE_CHECK_3(rideActor)) { anim = &gPlayerAnim_link_uma_stop_muti; } else if (EN_HORSE_CHECK_2(rideActor)) { - if ((this->unk_AE8 >= 2) && (this->unk_AE8 != 0x63)) { - anim = D_8085D6A4[this->unk_AE8]; + if ((this->actionVar2 >= 2) && (this->actionVar2 != 0x63)) { + anim = D_8085D6A4[this->actionVar2]; } } if (anim != NULL) { PlayerAnimation_PlayOnce(play, &this->unk_284, anim); - this->unk_AE7 = 1; + this->actionVar1 = 1; } } } @@ -15968,7 +15969,7 @@ s32 func_80850734(PlayState* play, Player* this) { this->stateFlags2 |= PLAYER_STATE2_400; PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_waterroll, 2.0f / 3.0f, 4.0f, Animation_GetLastFrame(&gPlayerAnim_pz_waterroll), ANIMMODE_ONCE, -6.0f); - this->unk_AE8 = 5; + this->actionVar2 = 5; this->unk_B86[0] = 0; this->unk_B48 = this->linearVelocity; this->actor.velocity.y = 0.0f; @@ -15996,18 +15997,18 @@ void Player_Action_54(Player* this, PlayState* play) { func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait); func_808475B4(this); - if (this->unk_AE8 != 0) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + this->actionVar2--; } func_8082F164(this, BTN_R); if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { - this->unk_AE8 = 0; + this->actionVar2 = 0; } if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) && - !func_8083B3B4(play, this, sPlayerControlInput) && ((this->unk_AE8 != 0) || !func_80850734(play, this))) { + !func_8083B3B4(play, this, sPlayerControlInput) && ((this->actionVar2 != 0) || !func_80850734(play, this))) { speedTarget = 0.0f; yawTarget = this->actor.shape.rot.y; @@ -16048,7 +16049,7 @@ void Player_Action_55(Player* this, PlayState* play) { func_808477D0(play, this, NULL, this->linearVelocity); func_808475B4(this); - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { func_808353DC(play, this); } } @@ -16103,13 +16104,13 @@ void Player_Action_56(Player* this, PlayState* play) { speedTarget = 0.0f; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || (this->currentBoots != PLAYER_BOOTS_ZORA_LAND)) { this->unk_B86[0] = 1; } - if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->unk_AE8) == 0)) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->actionVar2) == 0)) { if (this->unk_B86[0] != 0) { this->stateFlags3 &= ~PLAYER_STATE3_8000; func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); @@ -16276,10 +16277,10 @@ void Player_Action_59(Player* this, PlayState* play) { if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { func_808353DC(play, this); - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { f32 temp_fv0; - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { func_8083B798(play, this); @@ -16295,7 +16296,7 @@ void Player_Action_59(Player* this, PlayState* play) { !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { func_808481CC(play, this, -2.0f); } else { - this->unk_AE7++; + this->actionVar1++; func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); } } @@ -16304,16 +16305,16 @@ void Player_Action_59(Player* this, PlayState* play) { if (temp_fv0 < this->actor.velocity.y) { this->actor.velocity.y = temp_fv0; } - } else if (this->unk_AE7 == 1) { + } else if (this->actionVar1 == 1) { PlayerAnimation_Update(play, &this->skelAnime); func_808475B4(this); if (this->unk_AAA < 0x2710) { - this->unk_AE7++; - this->unk_AE8 = this->actor.depthInWater; + this->actionVar1++; + this->actionVar2 = this->actor.depthInWater; func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); } } else if (!func_8083B3B4(play, this, sPlayerControlInput)) { - f32 var_fv1 = (this->unk_AE8 * 0.018f) + 4.0f; + f32 var_fv1 = (this->actionVar2 * 0.018f) + 4.0f; if (this->stateFlags1 & PLAYER_STATE1_800) { sPlayerControlInput = NULL; @@ -16561,7 +16562,7 @@ void func_8085255C(PlayState* play, Player* this) { } void func_808525C4(PlayState* play, Player* this) { - if (this->unk_AE8++ >= 3) { + if (this->actionVar2++ >= 3) { if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) { func_8082E5A8(play, this, D_8085D190[this->transformation]); } else if (this->transformation == PLAYER_FORM_GORON) { @@ -16578,12 +16579,12 @@ void func_808525C4(PlayState* play, Player* this) { void Player_Action_63(Player* this, PlayState* play) { if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == D_8085D17C[this->transformation])) || - ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) { + ((this->skelAnime.mode == 0) && (this->actionVar2 == 0)))) { func_808525C4(play, this); if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) { func_80152434(play, 1); } - } else if (this->unk_AE8 != 0) { + } else if (this->actionVar2 != 0) { if (play->msgCtx.ocarinaMode == 4) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); @@ -16699,12 +16700,12 @@ void Player_Action_65(Player* this, PlayState* play) { func_8083249C(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 != 0) { - if (this->unk_AE8 > 1) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + if (this->actionVar2 > 1) { + this->actionVar2--; } - if (func_808482E0(play, this) && (this->unk_AE8 == 1)) { + if (func_808482E0(play, this) && (this->actionVar2 == 1)) { Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) || @@ -16762,10 +16763,10 @@ void Player_Action_65(Player* this, PlayState* play) { ANIM_FLAG_80); Player_StopCutscene(this); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET]; - this->unk_AE8 = 2; + this->actionVar2 = 2; } } - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { if (this->transformation == PLAYER_FORM_HUMAN) { Player_PlayAnimSfx(this, D_8085D73C); } else if (this->transformation == PLAYER_FORM_DEKU) { @@ -16794,9 +16795,9 @@ AnimSfxEntry D_8085D75C[] = { void Player_Action_66(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 == 0) { - if (DECR(this->unk_AE8) == 0) { - this->unk_AE7 = 1; + if (this->actionVar1 == 0) { + if (DECR(this->actionVar2) == 0) { + this->actionVar1 = 1; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } } else { @@ -16843,7 +16844,7 @@ void Player_Action_67(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (this->itemAction == PLAYER_IA_BOTTLE_POE) { s32 health = Rand_S16Offset(-1, 3); @@ -16882,31 +16883,31 @@ void Player_Action_67(Player* this, PlayState* play) { func_8082DB60(play, this, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink : &gPlayerAnim_link_bottle_drink_demo_wait); - this->unk_AE8 = 1; + this->actionVar2 = 1; //! FAKE dummy_label_235515:; - } else if (this->unk_AE8 < 0) { - this->unk_AE8++; - if (this->unk_AE8 == 0) { - this->unk_AE8 = 3; + } else if (this->actionVar2 < 0) { + this->actionVar2++; + if (this->actionVar2 == 0) { + this->actionVar2 = 3; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; - } else if (this->unk_AE8 == -6) { + } else if (this->actionVar2 == -6) { func_808530E0(play, this); } } else { Player_StopCutscene(this); func_80839E74(this, play); } - } else if (this->unk_AE8 == 1) { + } else if (this->actionVar2 == 1) { if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { if (this->transformation == PLAYER_FORM_DEKU) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pn_drinkend, 2.0f / 3.0f, 0.0f, 5.0f, 2, -6.0f); - this->unk_AE8 = -7; + this->actionVar2 = -7; } else { func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end); - this->unk_AE8 = 2; + this->actionVar2 = 2; } Player_UpdateBottleHeld(play, this, @@ -16915,7 +16916,7 @@ void Player_Action_67(Player* this, PlayState* play) { } Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG); - } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { + } else if ((this->actionVar2 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); } } @@ -16940,23 +16941,23 @@ struct_8085D798 D_8085D798[] = { }; void Player_Action_68(Player* this, PlayState* play) { - struct_8085D200* sp24 = &D_8085D200[this->unk_AE8]; + struct_8085D200* sp24 = &D_8085D200[this->actionVar2]; func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]); - if (this->unk_AE8 == 0) { - Message_StartTextbox(play, D_8085D798[this->unk_AE7 - 1].textId, &this->actor); + if (this->actionVar2 == 0) { + Message_StartTextbox(play, D_8085D798[this->actionVar1 - 1].textId, &this->actor); Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { Actor* talkActor; - this->unk_AE7 = 0; + this->actionVar1 = 0; Player_StopCutscene(this); func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); @@ -16969,11 +16970,11 @@ void Player_Action_68(Player* this, PlayState* play) { func_80839E74(this, play); } } else { - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { s32 temp_ft5 = this->skelAnime.curFrame - sp24->unk_8; if ((temp_ft5 >= 0) && (sp24->unk_9 >= temp_ft5)) { - if ((this->unk_AE8 != 0) && (temp_ft5 == 0)) { + if ((this->actionVar2 != 0) && (temp_ft5 == 0)) { Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); } @@ -16994,8 +16995,8 @@ void Player_Action_68(Player* this, PlayState* play) { } if (i < ARRAY_COUNT(D_8085D798)) { - this->unk_AE7 = i + 1; - this->unk_AE8 = 0; + this->actionVar1 = i + 1; + this->actionVar2 = 0; this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; interactRangeActor->parent = &this->actor; Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction); @@ -17133,12 +17134,12 @@ void Player_Action_71(Player* this, PlayState* play) { this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); } - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) { Message_StartTextbox(play, this->actor.textId, &this->actor); } - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { Player_StopCutscene(this); this->getItemDrawIdPlusOne = GID_NONE + 1; @@ -17147,7 +17148,7 @@ void Player_Action_71(Player* this, PlayState* play) { this->unk_B5E = 0xA; } } - } else if (this->unk_AE8 >= 0) { + } else if (this->actionVar2 >= 0) { if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) && PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) { Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE); @@ -17159,7 +17160,7 @@ void Player_Action_71(Player* this, PlayState* play) { Player_PlayAnimSfx(this, D_8085D840); } - if ((this->unk_AE7 == 0) && (this->lockOnActor != NULL)) { + if ((this->actionVar1 == 0) && (this->lockOnActor != NULL)) { this->currentYaw = func_8083C62C(this, 0); this->actor.shape.rot.y = this->currentYaw; } @@ -17213,7 +17214,7 @@ void Player_Action_73(Player* this, PlayState* play) { Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw); var_v0 = downwardSlopeYaw; - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { var_v0 = downwardSlopeYaw + 0x8000; } if (this->linearVelocity < 0.0f) { @@ -17233,8 +17234,8 @@ void Player_Action_73(Player* this, PlayState* play) { if (Math_AsymStepToF(&this->linearVelocity, var_fv0, temp_fv1, var_fa0) && (var_fv0 == 0.0f)) { func_80836A98(this, - (this->unk_AE7 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType] - : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType], + (this->actionVar1 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType], play); } @@ -17245,7 +17246,7 @@ void Player_Action_73(Player* this, PlayState* play) { void func_80859CE0(PlayState* play, Player* this, s32 arg2); void Player_Action_74(Player* this, PlayState* play) { - if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) { + if ((DECR(this->actionVar2) == 0) && func_808387A0(play, this)) { func_80859CE0(play, this, 0); Player_SetAction(play, this, Player_Action_97, 0); Player_Action_97(this, play); @@ -17254,7 +17255,7 @@ void Player_Action_74(Player* this, PlayState* play) { void Player_Action_75(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_74, 0); - this->unk_AE8 = 0x28; + this->actionVar2 = 0x28; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); } @@ -17263,11 +17264,11 @@ void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue); void Player_Action_76(Player* this, PlayState* play) { if (sPlayerYDistToFloor < 150.0f) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; Player_AnimSfx_PlayFloorLand(this); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } else { func_8085B384(this, play); @@ -17300,9 +17301,9 @@ void Player_Action_77(Player* this, PlayState* play) { } } - if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) { - if (this->unk_AE7 != 0) { - if (this->unk_AE7 < 0) { + if ((this->actionVar2++ >= 9) && !func_8082DA90(play)) { + if (this->actionVar1 != 0) { + if (this->actionVar1 < 0) { func_80169FDC(&play->state); } else { func_80169EFC(&play->state); @@ -17343,12 +17344,12 @@ void Player_Action_80(Player* this, PlayState* play) { if (play->unk_1887C < 0) { play->unk_1887C = 0; func_80839ED0(this, play); - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { play->unk_1887C = 10; func_80847880(play, this); Player_SetAction(play, this, Player_Action_80, 1); - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { play->unk_1887C = 0; func_80847190(play, this, 0); @@ -17371,7 +17372,7 @@ void Player_Action_80(Player* this, PlayState* play) { play->unk_1887C = -1; Player_Action_81(this, play); Player_SetAction(play, this, Player_Action_80, 0); - this->unk_AE7 = 0; + this->actionVar1 = 0; } else { play->unk_1887C = 10; Player_Action_81(this, play); @@ -17395,13 +17396,13 @@ void Player_Action_81(Player* this, PlayState* play) { } void Player_Action_82(Player* this, PlayState* play) { - if (this->unk_AE7 >= 0) { - if (this->unk_AE7 < 6) { - this->unk_AE7++; + if (this->actionVar1 >= 0) { + if (this->actionVar1 < 6) { + this->actionVar1++; } else { - this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f; + this->unk_B48 = (this->actionVar1 >> 1) * 22.0f; if (func_8082DE88(this, 1, 0x64)) { - this->unk_AE7 = -1; + this->actionVar1 = -1; EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x); Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN); } @@ -17409,8 +17410,8 @@ void Player_Action_82(Player* this, PlayState* play) { if (this->transformation == PLAYER_FORM_ZORA) { func_80834104(play, this); this->skelAnime.animation = NULL; - this->unk_AE8 = -0x28; - this->unk_AE7 = 1; + this->actionVar2 = -0x28; + this->actionVar1 = 1; this->linearVelocity = 0.0f; } else if (play->gameplayFrames % 4 == 0) { Player_InflictDamage(play, -1); @@ -17428,8 +17429,8 @@ void Player_Action_83(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808345A8(this); - if (((this->unk_AE8 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) { - if (DECR(this->unk_AE8) == 0) { + if (((this->actionVar2 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) { + if (DECR(this->actionVar2) == 0) { func_80836988(this, play); } } @@ -17479,7 +17480,7 @@ void Player_Action_84(Player* this, PlayState* play) { ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) && func_808333CC(this))) { - D_80862B48 = this->unk_AE8; + D_80862B48 = this->actionVar2; if (!func_80848570(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; @@ -17515,7 +17516,7 @@ void Player_Action_84(Player* this, PlayState* play) { (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_JUMPKICK_FINISH)) || ((this->transformation == PLAYER_FORM_GORON) && (this->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))) { - this->unk_AE8 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0; + this->actionVar2 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0; } } @@ -17685,19 +17686,19 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend); } else if ((this->skelAnime.animation == &gPlayerAnim_cl_setmask) || (this->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) { - if (this->unk_AE7 >= 58) { - Math_StepToS(&this->unk_AE8, 255, 50); + if (this->actionVar1 >= 58) { + Math_StepToS(&this->actionVar2, 255, 50); } - if (this->unk_AE7 >= 64) { + if (this->actionVar1 >= 64) { Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f); - } else if (this->unk_AE7 >= 0xE) { + } else if (this->actionVar1 >= 0xE) { Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f); } - if (this->unk_AE7 > 65) { + if (this->actionVar1 > 65) { Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f); - } else if (this->unk_AE7 >= 0x10) { + } else if (this->actionVar1 >= 0x10) { Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f); } @@ -17705,13 +17706,13 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { Player_PlayAnimSfx(this, D_8085D8F0); } } else { - if (this->unk_AE7 >= 20) { - Math_StepToS(&this->unk_AE8, 255, 20); + if (this->actionVar1 >= 20) { + Math_StepToS(&this->actionVar2, 255, 20); } if (R_PLAY_FILL_SCREEN_ON == 0) { Player_PlayAnimSfx(this, D_8085D904); - if (this->unk_AE7 == 15) { + if (this->actionVar1 == 15) { Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE); } } @@ -17743,7 +17744,7 @@ void Player_Action_86(Player* this, PlayState* play) { func_80855218(play, this, &sp4C); - if (this->unk_AE7 == 0x14) { + if (this->actionVar1 == 0x14) { Play_EnableMotionBlurPriority(100); } @@ -17753,12 +17754,12 @@ void Player_Action_86(Player* this, PlayState* play) { R_PLAY_FILL_SCREEN_ALPHA = 255; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; Play_DisableMotionBlurPriority(); SET_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM]); } - } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || - ((this->unk_AE7 >= 5) && + } else if ((this->actionVar1++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || + ((this->actionVar1 >= 5) && (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) || CHECK_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM])) && CHECK_BTN_ANY(sPlayerControlInput->press.button, @@ -17785,11 +17786,11 @@ void Player_Action_86(Player* this, PlayState* play) { Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH); } - if (this->unk_AE7 >= sp4C->unk_0) { - if (this->unk_AE7 < sp4C->unk_2) { + if (this->actionVar1 >= sp4C->unk_0) { + if (this->actionVar1 < sp4C->unk_2) { Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f); - } else if (this->unk_AE7 < sp4C->unk_3) { - if (this->unk_AE7 == sp4C->unk_2) { + } else if (this->actionVar1 < sp4C->unk_3) { + if (this->actionVar1 == sp4C->unk_2) { Lib_PlaySfx_2(NA_SE_EV_LIGHTNING_HARD); } @@ -17799,10 +17800,10 @@ void Player_Action_86(Player* this, PlayState* play) { } } - if (this->unk_AE7 >= 0x10) { - if (this->unk_AE7 < 0x40) { + if (this->actionVar1 >= 0x10) { + if (this->actionVar1 < 0x40) { Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f); - } else if (this->unk_AE7 < 0x37) { + } else if (this->actionVar1 < 0x37) { Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f); } else { Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f); @@ -17824,8 +17825,8 @@ void Player_Action_87(Player* this, PlayState* play) { } } - if (this->unk_AE7++ < 4) { - if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) { + if (this->actionVar1++ < 4) { + if ((this->prevMask == PLAYER_MASK_NONE) && (this->actionVar1 == 4)) { PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE, 20.0f); } @@ -17835,7 +17836,7 @@ void Player_Action_87(Player* this, PlayState* play) { s16 angle; Lib_GetControlStickData(&dist, &angle, play->state.input); - if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) { + if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->actionVar1 > 10) && (dist != 0.0f))) { if (R_PLAY_FILL_SCREEN_ON == 0) { this->stateFlags1 &= ~PLAYER_STATE1_2; this->prevMask = this->currentMask; @@ -17854,10 +17855,10 @@ void Player_Action_87(Player* this, PlayState* play) { } void Player_Action_88(Player* this, PlayState* play) { - if (this->unk_AE8++ > 90) { + if (this->actionVar2++ > 90) { play->msgCtx.ocarinaMode = 4; func_8085B384(this, play); - } else if (this->unk_AE8 == 10) { + } else if (this->actionVar2 == 10) { func_80848640(play, this); } } @@ -17867,7 +17868,7 @@ void Player_Action_89(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80855218(play, this, NULL); - this->unk_AE7++; + this->actionVar1++; if (!(this->stateFlags1 & PLAYER_STATE1_100)) { this->prevMask = this->currentMask; @@ -17909,10 +17910,10 @@ void Player_Action_91(Player* this, PlayState* play) { var_a0 = 0; if ((this->actor.floorHeight - this->actor.world.pos.y) < 60.0f) { Math_StepToF(&this->unk_B10[5], 200.0f, 150.0f); - var_a0 = Math_StepToS(&this->unk_AE8, 0xFA0, 0x15E); + var_a0 = Math_StepToS(&this->actionVar2, 0xFA0, 0x15E); } - this->actor.shape.rot.y += this->unk_AE8; + this->actor.shape.rot.y += this->actionVar2; this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = 0; this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = 0; this->unk_ABC += this->unk_B10[5]; @@ -17933,9 +17934,9 @@ void Player_Action_91(Player* this, PlayState* play) { } } } - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT); - this->unk_AE7 = 1; + this->actionVar1 = 1; } } @@ -18030,15 +18031,15 @@ void Player_Action_93(Player* this, PlayState* play) { return; } - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { this->unk_ABC += this->unk_B48; if (this->unk_ABC < -1000.0f) { this->unk_ABC = -1000.0f; - this->unk_AE7 = 1; + this->actionVar1 = 1; this->unk_B48 = 0.0f; } func_80856074(play, this); - } else if (this->unk_AE7 == 1) { + } else if (this->actionVar1 == 1) { this->unk_B48 += -22.0f; if (this->unk_B48 < -170.0f) { this->unk_B48 = -170.0f; @@ -18046,7 +18047,7 @@ void Player_Action_93(Player* this, PlayState* play) { this->unk_ABC += this->unk_B48; if (this->unk_ABC < -3900.0f) { this->unk_ABC = -3900.0f; - this->unk_AE7 = 2; + this->actionVar1 = 2; this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); this->actor.scale.y = 0.01f; this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y; @@ -18066,22 +18067,22 @@ void Player_Action_93(Player* this, PlayState* play) { } func_80856074(play, this); - } else if (this->unk_AE7 == 2) { + } else if (this->actionVar1 == 2) { if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { if (func_80856000(play, this)) { - this->unk_AE8 = 0; + this->actionVar2 = 0; } else { - this->unk_AE7 = 3; - if (this->unk_AE8 >= 10) { + this->actionVar1 = 3; + if (this->actionVar2 >= 10) { this->unk_B48 = 2700.0f; } else { this->unk_B48 = 1450.0f; } func_8082E1F0(this, NA_SE_PL_DEKUNUTS_OUT_GRD); } - } else if (this->unk_AE8 < 15) { - this->unk_AE8++; - if (this->unk_AE8 == 10) { + } else if (this->actionVar2 < 15) { + this->actionVar2++; + if (this->actionVar2 == 10) { func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15); } } @@ -18093,7 +18094,7 @@ void Player_Action_93(Player* this, PlayState* play) { if (temp_fv0_2 >= 0.0f) { f32 speed; - sp38 = (this->unk_AE8 >= 10); + sp38 = (this->actionVar2 >= 10); var_v1 = -1; speed = this->unk_B48 * this->actor.scale.y; if (this->actor.floorBgId != BGCHECK_SCENE) { @@ -18120,8 +18121,8 @@ void Player_Action_93(Player* this, PlayState* play) { this->stateFlags3 |= PLAYER_STATE3_40000; } - this->unk_AE7 = var_v1; - this->unk_AE8 = 9999; + this->actionVar1 = var_v1; + this->actionVar2 = 9999; Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); } else if (this->unk_ABC < 0.0f) { func_80856074(play, this); @@ -18232,7 +18233,7 @@ void Player_Action_94(Player* this, PlayState* play) { func_80833AA0(this, play); } else if (this->stateFlags3 & PLAYER_STATE3_200) { if (this->actor.velocity.y < 0.0f) { - if (this->unk_AE7 < 0) { + if (this->actionVar1 < 0) { func_80833AA0(this, play); } else { PlayerAnimation_Update(play, &this->skelAnime); @@ -18282,14 +18283,14 @@ void Player_Action_94(Player* this, PlayState* play) { func_8085687C(this); - if (this->unk_AE8 != 0) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + this->actionVar2--; } - temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); + temp_fv1 = D_8085D958[this->actionVar1] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); PlayerAnimation_Update(play, &this->skelAnime); - if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) { + if ((this->actionVar2 != 0) && (temp_fv1 > 300.0f)) { sp76 = 0x1770; if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) { func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish); @@ -18306,7 +18307,7 @@ void Player_Action_94(Player* this, PlayState* play) { func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.6f, 1.0f, 0.8f, 17); } } - } else if ((this->unk_AE8 == 0) || (temp_fv1 < 0.0f)) { + } else if ((this->actionVar2 == 0) || (temp_fv1 < 0.0f)) { sp76 = 0; func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish); } else { @@ -18445,10 +18446,10 @@ void func_80857640(Player* this, f32 arg1, s32 arg2) { func_80834CD0(this, arg1, NA_SE_VO_LI_SWORD_N); Player_PlaySfx(this, NA_SE_PL_GORON_BALLJUMP); Player_StopHorizontalMovement(this); - if (this->unk_AE8 < arg2) { - this->unk_AE8 = arg2; + if (this->actionVar2 < arg2) { + this->actionVar2 = arg2; } - this->unk_AE7 = 1; + this->actionVar1 = 1; this->unk_B48 = 1.0f; } @@ -18457,7 +18458,7 @@ void func_808576BC(PlayState* play, Player* this) { (this->actor.velocity.x * Math_SinS(this->currentYaw))) * 800.0f; - var_v0 -= this->unk_AE8; + var_v0 -= this->actionVar2; var_v0 = ABS_ALT(var_v0); if (var_v0 <= 0x7D0) { @@ -18476,7 +18477,7 @@ void func_808576BC(PlayState* play, Player* this) { } void func_808577E0(Player* this) { - f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f; + f32 temp_fa1 = ABS_ALT(this->actionVar2) * 0.00004f; if (this->unk_ABC < temp_fa1) { this->unk_B48 += 0.08f; @@ -18497,7 +18498,7 @@ void func_808577E0(Player* this) { s32 func_80857950(PlayState* play, Player* this) { if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || - ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) { + ((this->actionVar1 == 3) && (this->actor.velocity.y < 0.0f))) { Player_SetAction(play, this, Player_Action_4, 1); Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f, @@ -18515,9 +18516,9 @@ s32 func_80857A44(PlayState* play, Player* this) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800; - this->unk_AE7 = 4; + this->actionVar1 = 4; this->actor.shape.shadowScale = 30.0f; - this->unk_AE8 = this->linearVelocity * 500.0f; + this->actionVar2 = this->linearVelocity * 500.0f; this->unk_B08 = this->linearVelocity; this->unk_B0C = 0.0f; this->actor.home.rot.y = this->currentYaw; @@ -18533,17 +18534,17 @@ void func_80857AEC(PlayState* play, Player* this) { this->unk_B0C += this->unk_B08 * 0.05f; if (this->unk_B86[1] == 0) { - if (this->unk_AE7 == 1) { - this->unk_AE7 = 2; + if (this->actionVar1 == 1) { + this->actionVar1 = 2; Player_RequestQuakeAndRumble(play, this, NA_SE_PL_GORON_PUNCH); play->actorCtx.unk2 = 4; EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f); - this->unk_AE8 = 0; + this->actionVar2 = 0; this->unk_B08 = 0.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } else { - this->unk_AE7 = 4; + this->actionVar1 = 4; } } @@ -18557,7 +18558,7 @@ void Player_Action_96(Player* this, PlayState* play) { return; } - if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) { + if ((this->actionVar1 == 0) && !func_80857A44(play, this)) { return; } @@ -18580,7 +18581,7 @@ void Player_Action_96(Player* this, PlayState* play) { func_80834CD0(this, 10.0f, 0); if (this->unk_B86[1] != 0) { this->unk_B86[1] = 0; - this->unk_AE7 = 3; + this->actionVar1 = 3; } } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) { s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000); @@ -18613,17 +18614,17 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] != 0) { speedTarget = 18.0f; - Math_StepToC(&this->unk_AE7, 4, 1); + Math_StepToC(&this->actionVar1, 4, 1); if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (gSaveContext.save.saveInfo.playerData.magic == 0) || - ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) { + ((this->actionVar1 == 4) && (this->unk_B08 < 12.0f)))) { if (Math_StepToS(&this->unk_B86[1], 0, 1)) { this->stateFlags3 &= ~PLAYER_STATE3_80000; Magic_Reset(play); Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED); } - this->unk_AE7 = 4; + this->actionVar1 = 4; } else if (this->unk_B86[1] < 7) { if (!(this->stateFlags3 & PLAYER_STATE3_80000)) { this->unk_3D0.unk_00 = 2; @@ -18637,9 +18638,9 @@ void Player_Action_96(Player* this, PlayState* play) { Math_AsymStepToF(&this->unk_B10[0], (this->unk_B8A != 0) ? 1.0f : 0.0f, 0.8f, 0.05f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_80857AEC(play, this); - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { if (this->unk_B8A == 0) { - this->unk_AE7 = 4; + this->actionVar1 = 4; } else { this->unk_B8A--; this->unk_ABC = 0.0f; @@ -18670,7 +18671,7 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] == 0) { this->unk_B0C = 0.0f; - if (this->unk_AE7 >= 0x36) { + if (this->actionVar1 >= 0x36) { Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA); this->unk_B08 = 18.0f; this->unk_B86[1] = 1; @@ -18707,12 +18708,12 @@ void Player_Action_96(Player* this, PlayState* play) { spCC = speedTarget; spCA = yawTarget; - if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) { + if (func_8083A4A4(this, &spCC, &spCA, (this->actionVar1 >= 5) ? 0.0f : 1.0f)) { if (this->unk_B86[1] == 0) { - this->unk_AE7 = 4; + this->actionVar1 = 4; } - if (this->unk_AE7 == 4) { + if (this->actionVar1 == 4) { spDC = -0xFA0; } } else { @@ -18724,7 +18725,7 @@ void Player_Action_96(Player* this, PlayState* play) { (sPlayerFloorType == FLOOR_TYPE_5)) && (spC0 >= 0x7D0)) ? 0.08f - : this->unk_AE8 * 0.0003f; + : this->actionVar2 * 0.0003f; f32 sp80 = (Math_SinS(this->floorPitch) * 8.0f) + 0.6f; s16 var_a3; s16 sp7C; @@ -18734,11 +18735,11 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] == 0) { if ((gSaveContext.magicState == MAGIC_STATE_IDLE) && - (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) { - this->unk_AE7++; + (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->actionVar2 >= 0x36B0)) { + this->actionVar1++; Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); } else { - this->unk_AE7 = 4; + this->actionVar1 = 4; } } @@ -18780,9 +18781,9 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] != 0) { if ((ABS_ALT(sp8E) + ABS_ALT(this->floorPitch)) > 0x3A98) { this->unk_B86[1] = 0; - this->unk_AE7 = 4; + this->actionVar1 = 4; this->unk_B8E = 0x14; - this->unk_AE8 = 0; + this->actionVar2 = 0; this->stateFlags3 &= ~PLAYER_STATE3_80000; Magic_Reset(play); } @@ -18813,7 +18814,7 @@ void Player_Action_96(Player* this, PlayState* play) { this->unk_B28 = Math_Atan2S_XY(spA0, spA4); } - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { s32 temp_v0_10 = this->unk_B86[0]; s32 temp_ft3_2 = sp54 * 800.0f; @@ -18840,7 +18841,7 @@ void Player_Action_96(Player* this, PlayState* play) { func_808576BC(play, this); - if (ABS_ALT(this->unk_AE8) > 0xFA0) { + if (ABS_ALT(this->actionVar2) > 0xFA0) { this->stateFlags2 |= PLAYER_STATE2_8; } @@ -18870,7 +18871,7 @@ void Player_Action_96(Player* this, PlayState* play) { this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f); } else { this->unk_B48 += this->actor.velocity.y * 0.005f; - if (this->unk_AE7 == 1) { + if (this->actionVar1 == 1) { if (this->actor.velocity.y > 0.0f) { if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) { this->actor.velocity.y = -this->actor.gravity; @@ -18893,21 +18894,21 @@ void Player_Action_96(Player* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0); - Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); + Math_AsymStepToS(&this->actionVar2, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { spD8 = this->actor.shape.rot.x; - this->actor.shape.rot.x += this->unk_AE8; + this->actor.shape.rot.x += this->actionVar2; - Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8)); - if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) { + Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->actionVar2)); + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->actionVar2 + spD8) * spD8) <= 0)) { spE0 = Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL); Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, spE0, this->unk_B08); } } - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { Player_SetCylinderForAttack(this, DMG_GORON_POUND, 4, 60); Actor_SetPlayerImpact(play, PLAYER_IMPACT_GORON_GROUND_POUND, 2, 100.0f, &this->actor.world.pos); } else if (this->unk_B86[1] != 0) { @@ -19124,7 +19125,7 @@ AnimSfxEntry D_8085DA90[] = { void Player_CsAnim_12(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_80858D48(play, this, anim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) { @@ -19154,7 +19155,7 @@ void Player_CsAnim_17(PlayState* play, Player* this, void* anim) { void Player_CsAnim_13(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082EB18(play, this, anim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -19184,9 +19185,9 @@ void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) { void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { this->actor.gravity = 0.0f; - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) { - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y)); Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); @@ -19194,7 +19195,7 @@ void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { } } else { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 == 1) { + if (this->actionVar1 == 1) { func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); } else { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait); @@ -19598,7 +19599,7 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; } } else if (R_PLAY_FILL_SCREEN_ON < 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; @@ -19609,8 +19610,8 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { sp24 = 2.5f; func_808411D4(play, this, &sp24, 0xA); - this->unk_AE8++; - if (this->unk_AE8 >= 0x15) { + this->actionVar2++; + if (this->actionVar2 >= 0x15) { this->csMode = PLAYER_CSMODE_10; } } @@ -19633,10 +19634,10 @@ void Player_CsAction_9(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_10(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80859248(this); - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, func_8082EF54(this)); - this->unk_AE8 = 0; + this->actionVar2 = 0; } func_8082FC60(this); } else { @@ -19744,7 +19745,7 @@ void Player_CsAction_19(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_20(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_CsAction_End(play, this, cue); - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { Item_Give(play, ITEM_SWORD_RAZOR); func_80841358(play, this, false); } else { @@ -19841,7 +19842,7 @@ void Player_CsAction_30(PlayState* play, Player* this, CsCmdActorCue* cue) { func_808525C4(play, this); return; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { func_8085255C(play, this); } } @@ -19876,12 +19877,12 @@ void Player_CsAction_33(PlayState* play, Player* this, CsCmdActorCue* cue) { } void Player_CsAction_34(PlayState* play, Player* this, CsCmdActorCue* cue) { - if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) && + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actionVar2 == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB); - this->unk_AE8 = 1; + this->actionVar2 = 1; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { func_80832F24(this); } } @@ -19894,7 +19895,7 @@ void Player_CsAction_35(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_36(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8++ >= 0x15) { + if (this->actionVar2++ >= 0x15) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -16.0f); } @@ -19933,18 +19934,18 @@ void Player_CsAction_40(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_41(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) || (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) { this->getItemDrawIdPlusOne = GID_NONE + 1; - this->unk_AE8 = -1; + this->actionVar2 = -1; } else { this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1; } - } else if (this->unk_AE8 < 0) { + } else if (this->actionVar2 < 0) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - this->unk_AE8 = 1; + this->actionVar2 = 1; } else { Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f); } @@ -19974,7 +19975,7 @@ void Player_CsAction_43(PlayState* play, Player* this, CsCmdActorCue* cue) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; } } else if (R_PLAY_FILL_SCREEN_ON < 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; @@ -20124,8 +20125,8 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8085AD5C(play, this, ABS_ALT(csMode)); func_8085AC9C(play, this, playerCue, &sPlayerCsModeInitFuncs[ABS_ALT(csMode)]); - this->unk_AE8 = 0; - this->unk_AE7 = 0; + this->actionVar2 = 0; + this->actionVar1 = 0; this->cueId = playerCue->id; } @@ -20264,11 +20265,11 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) { } if (player->stateFlags1 & PLAYER_STATE1_800000) { - s32 sp24 = player->unk_AE8; + s32 sp24 = player->actionVar2; func_8082DE14(play, player); func_80837B60(play, player); - player->unk_AE8 = sp24; + player->actionVar2 = sp24; } else { if (func_801242B4(player)) { func_80832558(play, player, func_80837B60); diff --git a/tools/namefixer.py b/tools/namefixer.py index 86db40f18..7fb2fe912 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1049,6 +1049,8 @@ wordReplace = { "player->unk_AA0": "player->closestSecretDistSq", "player->unk_AAC": "player->headLimbRot", "player->unk_AB2": "player->upperLimbRot", + "player->unk_AE7": "player->actionVar1", + "player->unk_AE8": "player->actionVar2", "player->unk_B2A": "player->getItemDrawIdPlusOne", "player->getItemDrawId": "player->getItemDrawIdPlusOne", "player->unk_B68": "player->fallStartHeight", From 775501b28bcac057c9054cba70e28ecbb8f48d5e Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 27 Sep 2023 07:24:12 +1000 Subject: [PATCH 103/121] Animation Cleanup: En_G* (#1395) * wip * more cleanup * more cleanup * one more thing * one more default case * missed brackets * PR Review --- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 65 +++-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 5 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 11 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 41 +-- src/overlays/actors/ovl_En_Ge3/z_en_ge3.c | 6 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 151 ++++++---- src/overlays/actors/ovl_En_Geg/z_en_geg.h | 7 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 192 ++++++++----- src/overlays/actors/ovl_En_Gg/z_en_gg.h | 11 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 110 ++++--- src/overlays/actors/ovl_En_Gg2/z_en_gg2.h | 7 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 147 +++++----- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 26 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.h | 5 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 271 +++++++++++------- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 9 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 211 ++++++++------ src/overlays/actors/ovl_En_Gm/z_en_gm.h | 9 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 86 +++--- src/overlays/actors/ovl_En_Go/z_en_go.h | 4 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 8 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 24 +- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 41 ++- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 69 +++-- .../ovl_En_Guard_Nuts/z_en_guard_nuts.h | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 35 ++- .../actors/ovl_En_Guruguru/z_en_guruguru.h | 7 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 29 +- src/overlays/actors/ovl_En_Jg/z_en_jg.h | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 6 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 18 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 21 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 2 +- tools/disasm/functions.txt | 10 +- tools/disasm/variables.txt | 2 +- 36 files changed, 976 insertions(+), 676 deletions(-) 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 9b96771be..36e18e350 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -5,7 +5,6 @@ */ #include "z_en_gb2.h" -#include "objects/object_ps/object_ps.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -163,7 +162,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14E4; } - if (gSaveContext.save.saveInfo.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 0x30) { return 0x14D2; } @@ -171,7 +170,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14D3; case 0x14E4: - if (gSaveContext.save.saveInfo.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 0x30) { return 0x14D2; } @@ -193,8 +192,10 @@ u16 func_80B0F7FC(EnGb2* this) { case 0x14D9: return 0x14DA; + + default: + return 0; } - return 0; } u16 func_80B0F8F8(EnGb2* this) { @@ -213,8 +214,10 @@ u16 func_80B0F8F8(EnGb2* this) { case 0x14E1: return 0x14E2; + + default: + return 0; } - return 0; } u16 func_80B0F97C(EnGb2* this) { @@ -236,8 +239,10 @@ u16 func_80B0F97C(EnGb2* this) { case 0x14FA: this->unk_26C |= 2; return 0x14FB; + + default: + return 0; } - return 0; } void func_80B0FA04(EnGb2* this) { @@ -262,17 +267,19 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_40)) { this->unk_26E = 0x14EB; return false; + } else { + this->unk_26E = 0x14EE; + return true; } - this->unk_26E = 0x14EE; - return true; - } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) { - this->unk_26E = 0x14EF; - return false; - } else { - this->unk_26E = 0x14F4; - return true; + default: + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) { + this->unk_26E = 0x14EF; + return false; + } else { + this->unk_26E = 0x14F4; + return true; + } } } @@ -314,12 +321,14 @@ u16 func_80B0FB24(EnGb2* this) { case 0x14F2: this->unk_26C |= 2; return 0x14F3; + + default: + return 0; } - return 0; } void func_80B0FBF0(EnGb2* this, PlayState* play) { - Vec3f sp90[4] = { + Vec3f sp90[] = { { 120.0f, 0.0f, 800.0f }, { -120.0f, 0.0f, 750.0f }, { 60.0f, 0.0f, 750.0f }, @@ -425,6 +434,9 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } else if (this->unk_26E == 0x14DA) { switch (play->msgCtx.choiceIndex) { @@ -443,6 +455,9 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } } @@ -505,7 +520,7 @@ void func_80B10344(EnGb2* this, PlayState* play) { } } - if (gSaveContext.save.saveInfo.playerData.health < 49) { + if (gSaveContext.save.saveInfo.playerData.health <= 0x30) { gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; SET_EVENTINF(EVENTINF_46); SET_EVENTINF(EVENTINF_45); @@ -596,6 +611,9 @@ void func_80B10634(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } } @@ -673,6 +691,9 @@ void func_80B10A48(EnGb2* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; break; + + default: + break; } } } @@ -877,7 +898,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { this->actor.room = -1; Actor_ProcessInitChain(&this->actor, sInitChain); SkelAnime_InitFlex(play, &this->skelAnime, &object_ps_Skel_007230, &object_ps_Anim_00049C, this->jointTable, - this->morphTable, 12); + this->morphTable, OBJECT_PS_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); @@ -981,11 +1002,11 @@ s32 EnGb2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p Gfx** gfx) { EnGb2* this = THIS; - if (limbIndex == 7) { + if (limbIndex == OBJECT_PS_LIMB_07) { Matrix_RotateYS(this->unk_270.y, MTXMODE_APPLY); } - if (limbIndex == 1) { + if (limbIndex == OBJECT_PS_LIMB_01) { *dList = NULL; } @@ -996,7 +1017,7 @@ void EnGb2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnGb2* this = THIS; Vec3f sp18 = { 2400.0f, 0.0f, 0.0f }; - if (limbIndex == 7) { + if (limbIndex == OBJECT_PS_LIMB_07) { Matrix_MultVec3f(&sp18, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h index a257ab3d4..fa500f15c 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -2,6 +2,7 @@ #define Z_EN_GB2_H #include "global.h" +#include "objects/object_ps/object_ps.h" struct EnGb2; @@ -19,8 +20,8 @@ typedef enum { typedef struct EnGb2 { /* 0x0000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[12]; - /* 0x1D0 */ Vec3s morphTable[12]; + /* 0x188 */ Vec3s jointTable[OBJECT_PS_LIMB_MAX]; + /* 0x1D0 */ Vec3s morphTable[OBJECT_PS_LIMB_MAX]; /* 0x218 */ EnGb2ActionFunc actionFunc; /* 0x21C */ ColliderCylinder collider; /* 0x268 */ Actor* unk_268; 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 25556fdf7..c83305a8c 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -69,10 +69,11 @@ typedef enum { /* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING, /* 7 */ GERUDO_WHITE_ANIM_SALUTE, /* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT, - /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY + /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY, + /* 10 */ GERUDO_WHITE_ANIM_MAX } GerudoWhiteAnimation; -void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames); void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play); void EnGe1_Wait(EnGe1* this, PlayState* play); void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play); @@ -127,8 +128,8 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) { - static AnimationHeader* sAnimations[] = { +void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames) { + static AnimationHeader* sAnimations[GERUDO_WHITE_ANIM_MAX] = { &gGerudoWhiteArmsFoldedAnim, // GERUDO_WHITE_ANIM_ARMS_FOLDED, &gGerudoWhiteUnfoldingArmsAnim, // GERUDO_WHITE_ANIM_UNFOLDING_ARMS &gGerudoWhiteStandingHeadBowedAnim, // GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED, @@ -154,7 +155,7 @@ void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) { default: Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); break; } 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 eeacf00a5..45d304aaf 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -119,7 +119,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) { switch (GERUDO_PURPLE_GET_TYPE(&this->picto.actor)) { case GERUDO_PURPLE_TYPE_BOAT_SENTRY: Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, 0.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, 0.0f); this->actionFunc = EnGe2_GuardStationary; this->picto.actor.speed = 0.0f; this->picto.actor.uncullZoneForward = 4000.0f; @@ -343,18 +343,18 @@ s32 EnGe2_FollowPathWithoutGravity(EnGe2* this) { /* Action and helper functions */ void EnGe2_SpawnEffects(EnGe2* this, PlayState* play) { - static Vec3f effectVelocity = { 0.0f, -0.05f, 0.0f }; - static Vec3f effectAccel = { 0.0f, -0.025f, 0.0f }; - static Color_RGBA8 effectPrimColor = { 255, 255, 255, 0 }; - static Color_RGBA8 effectEnvColor = { 255, 150, 0, 0 }; + static Vec3f sEffectVelocity = { 0.0f, -0.05f, 0.0f }; + static Vec3f sEffectAccel = { 0.0f, -0.025f, 0.0f }; + static Color_RGBA8 sEffectPrimColor = { 255, 255, 255, 0 }; + static Color_RGBA8 sEffectEnvColor = { 255, 150, 0, 0 }; s16 effectAngle = play->state.frames * 0x2800; Vec3f effectPos; effectPos.x = (Math_CosS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.x; effectPos.y = this->picto.actor.focus.pos.y + 10.0f; effectPos.z = (Math_SinS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.z; - EffectSsKirakira_SpawnDispersed(play, &effectPos, &effectVelocity, &effectAccel, &effectPrimColor, &effectEnvColor, - 1000, 16); + EffectSsKirakira_SpawnDispersed(play, &effectPos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, + &sEffectEnvColor, 1000, 16); } void EnGe2_Scream(EnGe2* this) { @@ -396,7 +396,7 @@ void EnGe2_SetupCapturePlayer(EnGe2* this) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_CapturePlayer; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } void EnGe2_Charge(EnGe2* this, PlayState* play) { @@ -429,7 +429,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) { if (this->picto.actor.shape.rot.y == this->picto.actor.yawTowardsPlayer) { Animation_Change(&this->skelAnime, &gGerudoPurpleChargingAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleChargingAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleChargingAnim), ANIMMODE_LOOP, -8.0f); this->timer = 50; this->picto.actor.speed = 4.0f; this->actionFunc = EnGe2_Charge; @@ -438,7 +438,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) { void EnGe2_SetupLookAround(EnGe2* this) { Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); this->timer = 60; this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_LookAround; @@ -483,13 +483,13 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); this->stateFlags |= GERUDO_PURPLE_STATE_CAPTURING; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_08)) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_TurnToPlayerFast; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } else if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos, this->picto.actor.shape.rot.y, 0x1800, visionRange, this->verticalDetectRange)) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { @@ -499,7 +499,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { Message_StartTextbox(play, 0x1194, &this->picto.actor); this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } } else if (this->collider.base.acFlags & AC_HIT) { if ((this->collider.info.acHitInfo != NULL) && @@ -510,7 +510,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->stateFlags |= GERUDO_PURPLE_STATE_STUNNED; } else { Animation_Change(&this->skelAnime, &gGerudoPurpleFallingToGroundAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), 2, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), ANIMMODE_ONCE, -8.0f); this->timer = 200; this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_KnockedOut; @@ -543,7 +543,7 @@ void EnGe2_LookAround(EnGe2* this, PlayState* play) { } else { this->actionFunc = EnGe2_Walk; Animation_Change(&this->skelAnime, &gGerudoPurpleWalkingAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), ANIMMODE_LOOP, -8.0f); this->headRot.y = 0; this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; } @@ -602,13 +602,14 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { switch (cueId) { case ENGE2_CUEID_BEEHIVE_PATROL: Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); EnGe2_GetNextPath(this, play); break; case ENGE2_CUEID_BEEHIVE_RUN_AWAY: Animation_Change(&this->skelAnime, &gGerudoPurpleRunningAwayCutsceneAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), 0, -5.0f); + Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), ANIMMODE_LOOP, + -5.0f); this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); break; @@ -617,11 +618,13 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { break; case ENGE2_CUEID_GBT_ENTR_STAND_STILL: - Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, 2, 0.0f); + Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, + ANIMMODE_ONCE, 0.0f); break; case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY: - Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, 2, 0.0f); + Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, + ANIMMODE_ONCE, 0.0f); EnGe2_SetupBlownAwayPath(this, play); this->stateFlags |= GERUDO_PURPLE_STATE_DISABLE_MOVEMENT; this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index e55d0746e..21f207e7c 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -15,7 +15,7 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play); void EnGe3_Update(Actor* thisx, PlayState* play); void EnGe3_Draw(Actor* thisx, PlayState* play); -void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames); void EnGe3_SetupPath(EnGe3* this, PlayState* play); void EnGe3_Idle(EnGe3* this, PlayState* play); void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play); @@ -111,7 +111,7 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames) { static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = { &gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND &gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK @@ -125,7 +125,7 @@ void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { }; Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); this->animIndex = animIndex; } 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 a01bfbd19..9183856ab 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -7,7 +7,6 @@ #include "z_en_geg.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_taisou/object_taisou.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -126,68 +125,112 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ ENGEG_ANIM_NONE = -1, + /* 0x00 */ ENGEG_ANIM_0, + /* 0x01 */ ENGEG_ANIM_1, + /* 0x02 */ ENGEG_ANIM_2, + /* 0x03 */ ENGEG_ANIM_3, + /* 0x04 */ ENGEG_ANIM_4, + /* 0x05 */ ENGEG_ANIM_5, + /* 0x06 */ ENGEG_ANIM_6, + /* 0x07 */ ENGEG_ANIM_7, + /* 0x08 */ ENGEG_ANIM_8, + /* 0x09 */ ENGEG_ANIM_9, + /* 0x0A */ ENGEG_ANIM_10, + /* 0x0B */ ENGEG_ANIM_11, + /* 0x0C */ ENGEG_ANIM_12, + /* 0x0D */ ENGEG_ANIM_13, + /* 0x0E */ ENGEG_ANIM_14, + /* 0x0F */ ENGEG_ANIM_15, + /* 0x10 */ ENGEG_ANIM_16, + /* 0x11 */ ENGEG_ANIM_17, + /* 0x12 */ ENGEG_ANIM_18, + /* 0x13 */ ENGEG_ANIM_19, + /* 0x14 */ ENGEG_ANIM_20, + /* 0x15 */ ENGEG_ANIM_MAX +} EnGegAnimation; + +static AnimationInfoS sAnimationInfo[ENGEG_ANIM_MAX] = { + { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_0 + { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_1 + { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_2 + { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_3 + { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_4 + { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_5 + { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_6 + { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_7 + { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_8 + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_9 + { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_10 + { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_11 + { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_12 + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_13 + { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_14 + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_15 + { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_16 + { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_17 + { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_18 + { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_19 + { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_20 }; u16 func_80BB16D0(EnGeg* this) { switch (this->unk_496) { case 0xD5E: return 0xD5F; + case 0xD5F: return 0xD60; + case 0xD60: return 0xD61; + case 0xD62: return 0xD63; + case 0xD64: return 0xD65; + case 0xD66: return 0xD67; + case 0xD67: return 0xD68; + case 0xD68: return 0xD69; + case 0xD6A: return 0xD6B; + case 0xD6B: return 0xD6C; + case 0xD6C: return 0xD6D; + case 0xD6E: return 0xD6F; + case 0xD70: return 0xD71; + case 0xD71: return 0xD72; + case 0xD73: return 0xD74; + case 0xD74: return 0xD75; + case 0xD89: return 0xD8A; + + default: + return 0; } - return 0; } void func_80BB178C(EnGeg* this, PlayState* play) { @@ -372,14 +415,14 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { return true; } -void func_80BB1FCC(EnGeg* this, PlayState* play) { +void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); SkelAnime_Update(&this->skelAnime); } -void func_80BB2020(EnGeg* this, PlayState* play) { +void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_4AC); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } s32 func_80BB2088(EnGeg* this, PlayState* play) { @@ -393,7 +436,7 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) { } if (Actor_IsFacingAndNearPlayer(&this->actor, 300.0f, 0x7FF8) && - ((this->unk_4AC == 5) || ((this->unk_4AC == 13) && (this->unk_496 == 0xD69)))) { + ((this->animIndex == ENGEG_ANIM_5) || ((this->animIndex == ENGEG_ANIM_13) && (this->unk_496 == 0xD69)))) { this->unk_230 |= 2; func_80BB1D64(this, play); } else { @@ -412,8 +455,8 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) { void func_80BB217C(EnGeg* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->unk_248)) { - this->unk_4AC = 5; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_5; + EnGeg_ChangeAnim(this, play); Actor_SetScale(&this->actor, 0.01f); this->unk_230 = 0; this->actor.shape.shadowScale = 20.0f; @@ -509,8 +552,8 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD66: this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { - this->unk_4AC = 19; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_19; + EnGeg_ChangeAnim(this, play); } this->unk_230 |= 0x20; this->actionFunc = func_80BB2944; @@ -527,11 +570,14 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD8B: this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { - this->unk_4AC = 4; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_4; + EnGeg_ChangeAnim(this, play); } this->actionFunc = func_80BB2E00; break; + + default: + break; } } else { if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { @@ -557,6 +603,9 @@ void func_80BB26EC(EnGeg* this, PlayState* play) { this->unk_230 &= ~0x10; this->actionFunc = func_80BB221C; return; + + default: + break; } this->unk_496 = func_80BB16D0(this); @@ -609,12 +658,12 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { void func_80BB2944(EnGeg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (this->unk_4AC == 19) { - if (curFrame == lastFrame) { - this->unk_4AC = 6; - func_80BB2020(this, play); + if (this->animIndex == ENGEG_ANIM_19) { + if (curFrame == endFrame) { + this->animIndex = ENGEG_ANIM_6; + EnGeg_ChangeAnim(this, play); } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_496 == 0xD67) { @@ -666,8 +715,8 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { Message_ContinueTextbox(play, this->unk_496); this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); if (this->unk_248 >= 0) { - this->unk_4AC = 13; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_13; + EnGeg_ChangeAnim(this, play); } this->actionFunc = func_80BB27D4; } else { @@ -704,21 +753,21 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { } void func_80BB2E00(EnGeg* this, PlayState* play) { - s16 sp2E = this->skelAnime.curFrame; - s16 sp2C = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (this->unk_4AC == 2) { + if (this->animIndex == ENGEG_ANIM_2) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - if (sp2E == sp2C) { + if (curFrame == endFrame) { CutsceneManager_Stop(this->csId); - this->unk_4AC = 20; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_20; + EnGeg_ChangeAnim(this, play); this->actionFunc = func_80BB30B4; } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_STAND_IMT); } - } else if (this->unk_4AC == 4) { + } else if (this->animIndex == ENGEG_ANIM_4) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { this->unk_230 |= 1; this->actor.shape.yOffset = 14.0f; @@ -740,11 +789,11 @@ void func_80BB2F7C(EnGeg* this, PlayState* play) { if ((this->actor.xzDistToPlayer < 150.0f) && (fabsf(this->actor.playerHeightRel) < 10.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - this->unk_4AC = 2; + this->animIndex = ENGEG_ANIM_2; this->actor.speed = 0.0f; this->unk_230 &= ~1; this->actor.shape.yOffset = 0.0f; - func_80BB2020(this, play); + EnGeg_ChangeAnim(this, play); this->actionFunc = func_80BB2E00; } else { this->actor.speed = 5.0f; @@ -902,7 +951,7 @@ void EnGeg_Update(Actor* thisx, PlayState* play) { EnGeg* this = THIS; this->actionFunc(this, play); - func_80BB1FCC(this, play); + EnGeg_UpdateSkelAnime(this, play); func_80BB2088(this, play); func_80BB1C8C(this); SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGEG_FIDGET_TABLE_LEN); diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.h b/src/overlays/actors/ovl_En_Geg/z_en_geg.h index 522312fc2..980ada9fd 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h @@ -2,6 +2,7 @@ #define Z_EN_GEG_H #include "global.h" +#include "objects/object_oF1d_map/object_oF1d_map.h" struct EnGeg; @@ -23,8 +24,8 @@ typedef struct EnGeg { /* 0x242 */ s16 unk_242; /* 0x244 */ s16 unk_244; /* 0x248 */ s32 unk_248; - /* 0x24C */ Vec3s jointTable[18]; - /* 0x2B8 */ Vec3s morphTable[18]; + /* 0x24C */ Vec3s jointTable[GORON_LIMB_MAX]; + /* 0x2B8 */ Vec3s morphTable[GORON_LIMB_MAX]; /* 0x324 */ UNK_TYPE1 unk324[0x144]; /* 0x468 */ s16 unk_468; /* 0x46A */ s16 unk_46A; @@ -38,7 +39,7 @@ typedef struct EnGeg { /* 0x498 */ s16 csId; /* 0x49A */ s16 nextCsId; /* 0x49C */ s16 csIdList[8]; - /* 0x4AC */ s32 unk_4AC; + /* 0x4AC */ s32 animIndex; /* 0x4B0 */ s16 unk_4B0; /* 0x4B4 */ Vec3f unk_4B4; /* 0x4C0 */ Vec3f unk_4C0[2]; 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 ab1f8b539..1d59139a4 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -6,7 +6,6 @@ #include "z_en_gg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "objects/object_gg/object_gg.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) @@ -95,15 +94,44 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfo sAnimationInfo[] = { - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGG_ANIM_NONE = -1, + /* 0x00 */ ENGG_ANIM_0, + /* 0x01 */ ENGG_ANIM_1, + /* 0x02 */ ENGG_ANIM_2, + /* 0x03 */ ENGG_ANIM_3, + /* 0x04 */ ENGG_ANIM_4, + /* 0x05 */ ENGG_ANIM_5, + /* 0x06 */ ENGG_ANIM_6, + /* 0x07 */ ENGG_ANIM_7, + /* 0x08 */ ENGG_ANIM_8, + /* 0x09 */ ENGG_ANIM_9, + /* 0x0A */ ENGG_ANIM_10, + /* 0x0B */ ENGG_ANIM_11, + /* 0x0C */ ENGG_ANIM_12, + /* 0x0D */ ENGG_ANIM_13, + /* 0x0E */ ENGG_ANIM_14, + /* 0x0F */ ENGG_ANIM_15, + /* 0x10 */ ENGG_ANIM_MAX +} EnGgAnimation; + +static AnimationInfo sAnimationInfo[ENGG_ANIM_MAX] = { + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_0 + { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_1 + { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_2 + { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_3 + { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_4 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_5 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_6 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_7 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_8 + { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_9 + { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_10 + { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_11 + { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_12 + { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_13 + { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_14 + { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_15 }; void func_80B34F70(EnGg* this) { @@ -149,7 +177,7 @@ void func_80B35108(EnGg* this, PlayState* play) { } void func_80B351A4(EnGg* this) { - if ((this->unk_2E6 == 2) || (this->unk_2E6 == 3)) { + if ((this->animIndex == ENGG_ANIM_2) || (this->animIndex == ENGG_ANIM_3)) { this->unk_2E2 = 3; } else { s16 temp = this->unk_2E4 - 1; @@ -170,57 +198,57 @@ void func_80B351A4(EnGg* this) { void func_80B35250(EnGg* this) { this->unk_2E4 = 20; this->unk_2E2 = 0; - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); this->actionFunc = func_80B35450; } void func_80B352A4(EnGg* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E6].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp26 == lastFrame) { + if (curFrame == endFrame) { switch (this->actor.textId) { case 0xCE5: - this->unk_2E6 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->animIndex = ENGG_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_1); break; case 0xCE6: case 0xCEC: - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); break; case 0xCE8: - this->unk_2E6 = 2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + this->animIndex = ENGG_ANIM_2; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_2); break; case 0xCE9: - this->unk_2E6 = 3; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + this->animIndex = ENGG_ANIM_3; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_3); break; case 0xCED: case 0xCEE: - this->unk_2E6 = 4; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = ENGG_ANIM_4; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4); break; default: - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); break; } SET_WEEKEVENTREG(WEEKEVENTREG_19_80); this->actionFunc = func_80B3556C; - } else if ((this->unk_2E6 == 0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) { - if (sp26 < (lastFrame - 1)) { + } else if ((this->animIndex == ENGG_ANIM_0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) { + if (curFrame < (endFrame - 1)) { this->skelAnime.playSpeed = 2.0f; } else { - this->unk_2E6 = 4; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = ENGG_ANIM_4; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4); } } } @@ -249,7 +277,7 @@ void func_80B35450(EnGg* this, PlayState* play) { void func_80B3556C(EnGg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - if (this->unk_2E6 == 4) { + if (this->animIndex == ENGG_ANIM_4) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_308 = 0; @@ -275,47 +303,43 @@ void func_80B35634(EnGg* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->unk_2DA = 0; - this->unk_2E6 = 0; + this->csAnimIndex = ENGG_ANIM_0; + this->animIndex = ENGG_ANIM_0; break; case 2: - this->unk_2DA = 9; - this->unk_2E6 = 9; + this->csAnimIndex = ENGG_ANIM_9; + this->animIndex = ENGG_ANIM_9; break; case 3: - this->unk_2DA = 10; - this->unk_2E6 = 10; + this->csAnimIndex = ENGG_ANIM_10; + this->animIndex = ENGG_ANIM_10; break; case 4: - do { - this->unk_344.unk_30 = this->unk_2DA = 11; - } while (0); - this->unk_2E6 = 11; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_11; + this->animIndex = ENGG_ANIM_11; func_80B364D4(&this->unk_344, play); break; case 5: - do { - this->unk_344.unk_30 = this->unk_2DA = 12; - } while (0); - this->unk_2E6 = 12; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_12; + //! FAKE: + if (1) {} + this->animIndex = ENGG_ANIM_12; break; case 6: - do { - this->unk_344.unk_30 = this->unk_2DA = 13; - } while (0); - this->unk_2E6 = 13; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_13; + //! FAKE: + if (1) {} + this->animIndex = ENGG_ANIM_13; break; case 7: - do { - this->unk_344.unk_30 = this->unk_2DA = 14; - } while (0); - this->unk_2E6 = 14; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_14; + this->animIndex = ENGG_ANIM_14; func_80B364D4(&this->unk_344, play); break; @@ -324,13 +348,13 @@ void func_80B35634(EnGg* this, PlayState* play) { return; default: - this->unk_2DA = 0; + this->csAnimIndex = ENGG_ANIM_0; break; } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2DA); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } - if (this->unk_2DA == 14) { + if (this->csAnimIndex == ENGG_ANIM_14) { func_80B358D8(this, play); } @@ -345,16 +369,22 @@ u16 func_80B357F0(EnGg* this) { switch (this->actor.textId) { case 0xCE5: return 0xCE6; + case 0xCE6: return 0xCE8; + case 0xCE8: return 0xCE9; + case 0xCE9: return 0xCEC; + case 0xCEC: return 0xCED; + + default: + return 0; } - return 0; } void func_80B3584C(EnGg* this) { @@ -366,12 +396,12 @@ void func_80B3584C(EnGg* this) { } void func_80B358D8(EnGg* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2DA].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation); - if ((this->unk_2E6 == 14) && (sp1E == lastFrame)) { - this->unk_2E6 = 15; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 15); + if ((this->animIndex == ENGG_ANIM_14) && (curFrame == endFrame)) { + this->animIndex = ENGG_ANIM_15; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_15); } } @@ -379,8 +409,8 @@ void func_80B35968(EnGg* this, PlayState* play) { if (this->unk_344.unk_34 != NULL) { this->unk_344.unk_34(&this->unk_344, play); } else { - if ((this->unk_2DA == 11) || (this->unk_2DA == 14)) { - this->unk_344.unk_30 = this->unk_2DA; + if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_14)) { + this->unk_344.animIndex = this->csAnimIndex; } func_80B363E8(&this->unk_344, play, &this->unk_320, &this->unk_32C, &this->unk_338); } @@ -433,7 +463,7 @@ void func_80B35B24(EnGgStruct* ptr, PlayState* play) { } void func_80B35B44(EnGgStruct* ptr, PlayState* play) { - if (ptr->unk_30 == 0xE) { + if (ptr->animIndex == ENGG_ANIM_14) { ptr->unk_40++; if (ptr->unk_40 > 0x46) { ptr->unk_48 = 1; @@ -455,13 +485,13 @@ void func_80B35B44(EnGgStruct* ptr, PlayState* play) { ptr->unk_44 = 0x37; } } - } else if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12)) { + } else if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12)) { ptr->unk_40++; if (ptr->unk_40 > 0x46) { ptr->unk_48 = 1; ptr->unk_40 = 0; } - } else if (ptr->unk_30 == 0xD) { + } else if (ptr->animIndex == ENGG_ANIM_13) { ptr->unk_48 = 0; ptr->unk_40++; if (ptr->unk_40 > 0x46) { @@ -496,7 +526,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { sp74 = ptr->unk_40 % temp; ptr->unk_40 = sp74; phi_s7 = 0x46; - } else if (ptr->unk_30 == 0xD) { + } else if (ptr->animIndex == ENGG_ANIM_13) { sp74 = ptr->unk_40; phi_s7 = 0x46; } else { @@ -519,6 +549,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { temp_f26 = ptr->unk_00.z + (ptr->unk_18.z * temp_f20) + (0.5f * ptr->unk_24.z * temp_f20 * temp_f20); temp_f20 = Rand_ZeroOne() * 0.003f; + //! FAKE: if (1) {} Matrix_Translate(temp_f22, temp_f24, temp_f26, MTXMODE_NEW); @@ -630,9 +661,9 @@ void func_80B363E8(EnGgStruct* ptr, PlayState* play, Vec3f* arg1, Vec3f* arg2, V ptr->unk_00.x += -4.0f; ptr->unk_0C.x += 4.0f; - if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12) || (ptr->unk_30 == 13)) { + if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12) || (ptr->animIndex == ENGG_ANIM_13)) { ptr->unk_38 = func_80B35C84; - } else if (ptr->unk_30 == 14) { + } else if (ptr->animIndex == ENGG_ANIM_14) { ptr->unk_38 = func_80B3610C; } } @@ -655,7 +686,7 @@ void EnGg_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GG_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -700,11 +731,13 @@ void EnGg_Update(Actor* thisx, PlayState* play) { } if ((play->csCtx.state == CS_STATE_IDLE) && - ((this->unk_2DA != 14) && (this->unk_2DA != 11) && (this->unk_2DA != 12) && (this->unk_2DA != 13))) { + ((this->csAnimIndex != ENGG_ANIM_14) && (this->csAnimIndex != ENGG_ANIM_11) && + (this->csAnimIndex != ENGG_ANIM_12) && (this->csAnimIndex != ENGG_ANIM_13))) { func_80B364D4(&this->unk_344, play); } - if (((this->unk_2DA == 14) || (this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) && + if (((this->csAnimIndex == ENGG_ANIM_14) || (this->csAnimIndex == ENGG_ANIM_11) || + (this->csAnimIndex == ENGG_ANIM_12) || (this->csAnimIndex == ENGG_ANIM_13)) && (this->unk_309 == 1)) { func_80B35968(this, play); } @@ -738,7 +771,7 @@ s32 EnGg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Gfx** gfx) { EnGg* this = THIS; - if (limbIndex == 2) { + if (limbIndex == OBJECT_GG_LIMB_02) { Matrix_RotateZS(this->unk_2E8, MTXMODE_APPLY); } return false; @@ -750,12 +783,13 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30 = { 0.0f, 0.0f, 0.0f }; Vec3f sp24 = { 0.0f, 0.0f, 0.0f }; - if (this->unk_2DA == 14) { + if (this->csAnimIndex == ENGG_ANIM_14) { sp30.y = 3.0f; sp30.z = -1.0f; sp24.y = -0.07f; this->unk_309 = 1; - } else if ((this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) { + } else if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_12) || + (this->csAnimIndex == ENGG_ANIM_13)) { sp30.x = 3.0f; sp24.x = 0.5f; this->unk_309 = 1; @@ -763,7 +797,7 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->unk_309 = 0; } - if (limbIndex == 4) { + if (limbIndex == OBJECT_GG_LIMB_04) { Matrix_MultVec3f(&D_80B36DF0, &this->unk_320); Matrix_Push(); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.h b/src/overlays/actors/ovl_En_Gg/z_en_gg.h index 802024897..436d5a4ab 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h @@ -2,6 +2,7 @@ #define Z_EN_GG_H #include "global.h" +#include "objects/object_gg/object_gg.h" struct EnGg; struct EnGgStruct; @@ -14,7 +15,7 @@ typedef struct EnGgStruct { /* 0x0C */ Vec3f unk_0C; /* 0x18 */ Vec3f unk_18; /* 0x24 */ Vec3f unk_24; - /* 0x30 */ u8 unk_30; + /* 0x30 */ u8 animIndex; /* 0x34 */ EnGgUnkFunc unk_34; /* 0x38 */ EnGgUnkFunc unk_38; /* 0x3C */ s32 unk_3C; @@ -30,16 +31,16 @@ typedef struct EnGg { /* 0x1D4 */ EnGgActionFunc actionFunc; /* 0x1D8 */ Vec3s unk_1D8; /* 0x1DE */ Vec3s unk_1DE; - /* 0x1E4 */ Vec3s jointTable[20]; - /* 0x25C */ Vec3s morphTable[20]; + /* 0x1E4 */ Vec3s jointTable[OBJECT_GG_LIMB_MAX]; + /* 0x25C */ Vec3s morphTable[OBJECT_GG_LIMB_MAX]; /* 0x2D4 */ UNK_TYPE1 unk_2D4[0x6]; - /* 0x2DA */ u8 unk_2DA; + /* 0x2DA */ u8 csAnimIndex; /* 0x2DB */ u8 cueId; /* 0x2DC */ s16 csId; /* 0x2DE */ UNK_TYPE1 unk2DE[4]; /* 0x2E2 */ s16 unk_2E2; /* 0x2E4 */ s16 unk_2E4; - /* 0x2E6 */ s16 unk_2E6; + /* 0x2E6 */ s16 animIndex; /* 0x2E8 */ s16 unk_2E8; /* 0x2EA */ UNK_TYPE1 unk2EA[0x1A]; /* 0x304 */ s16 unk_304; 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 abb80780d..e106c8f88 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -5,7 +5,6 @@ */ #include "z_en_gg2.h" -#include "objects/object_gg/object_gg.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) @@ -39,15 +38,44 @@ ActorInit En_Gg2_InitVars = { (ActorFunc)EnGg2_Draw, }; -AnimationInfo D_80B3BF00[] = { - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGG2_ANIM_NONE = -1, + /* 0x00 */ ENGG2_ANIM_0, + /* 0x01 */ ENGG2_ANIM_1, + /* 0x02 */ ENGG2_ANIM_2, + /* 0x03 */ ENGG2_ANIM_3, + /* 0x04 */ ENGG2_ANIM_4, + /* 0x05 */ ENGG2_ANIM_5, + /* 0x06 */ ENGG2_ANIM_6, + /* 0x07 */ ENGG2_ANIM_7, + /* 0x08 */ ENGG2_ANIM_8, + /* 0x09 */ ENGG2_ANIM_9, + /* 0x0A */ ENGG2_ANIM_10, + /* 0x0B */ ENGG2_ANIM_11, + /* 0x0C */ ENGG2_ANIM_12, + /* 0x0D */ ENGG2_ANIM_13, + /* 0x0E */ ENGG2_ANIM_14, + /* 0x0F */ ENGG2_ANIM_15, + /* 0x10 */ ENGG2_ANIM_MAX +} EnGg2Animation; + +static AnimationInfo sAnimationInfo[ENGG2_ANIM_MAX] = { + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_0 + { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_1 + { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_2 + { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_3 + { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_4 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_5 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_6 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_7 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_8 + { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_9 + { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_10 + { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_11 + { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_12 + { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_13 + { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_14 + { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_15 }; Color_RGBA8 D_80B3C080 = { 255, 255, 255, 255 }; @@ -116,38 +144,38 @@ void func_80B3ADD8(EnGg2* this) { void func_80B3AE60(EnGg2* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(D_80B3BF00[this->unk_2EE].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (curFrame == lastFrame) { - switch (this->unk_2EE) { - case 0: - this->unk_2EE = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 1); + if (curFrame == endFrame) { + switch (this->animIndex) { + case ENGG2_ANIM_0: + this->animIndex = ENGG2_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_1); this->actionFunc = func_80B3B0A0; break; - case 1: - case 8: - this->unk_2EE = 5; + case ENGG2_ANIM_1: + case ENGG2_ANIM_8: + this->animIndex = ENGG2_ANIM_5; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5); this->actionFunc = func_80B3B120; break; - case 5: - this->unk_2EE = 6; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + case ENGG2_ANIM_5: + this->animIndex = ENGG2_ANIM_6; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B21C; break; - case 6: - this->unk_2EE = 7; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); + case ENGG2_ANIM_6: + this->animIndex = ENGG2_ANIM_7; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5); this->actionFunc = func_80B3B294; break; default: - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3AFB0; break; } @@ -338,7 +366,7 @@ f32 func_80B3B7E4(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { void func_80B3B8A4(EnGg2* this) { f32 sp1C; - if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) { + if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) { this->unk_2F2 += 0x62C; sp1C = 1100.0f; } else { @@ -368,7 +396,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GG_LIMB_MAX); this->path = SubS_GetPathByIndex(play, ENGG2_GET_PATH_INDEX(&this->actor), ENGG2_PATH_INDEX_NONE); this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; this->unk_2F0 = 0; @@ -384,15 +412,15 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); - this->unk_2EE = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3AFB0; } else if (play->sceneId == SCENE_17SETUGEN) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); - this->unk_2EE = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B05C; } else { Actor_Kill(&this->actor); @@ -401,8 +429,8 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); - this->unk_2EE = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B05C; } else { Actor_Kill(&this->actor); @@ -424,7 +452,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; this->actor.flags |= ACTOR_FLAG_TARGETABLE; - if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) { + if ((this->animIndex == ENGG2_ANIM_5) && (this->animIndex == ENGG2_ANIM_7)) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else { @@ -441,7 +469,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { func_80B3B8A4(this); Actor_TrackPlayer(play, &this->actor, &this->unk_1E0, &this->unk_1E6, this->actor.focus.pos); - if ((this->unk_2EE == 5) || (this->unk_2EE == 7)) { + if ((this->animIndex == ENGG2_ANIM_5) || (this->animIndex == ENGG2_ANIM_7)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG); if ((play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) && ((play->state.frames % 4) == 0)) { func_80B3B4B0(this, play); @@ -454,12 +482,12 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnGg2* this = THIS; - if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) { - if (limbIndex == 1) { + if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) { + if (limbIndex == OBJECT_GG_LIMB_01) { Matrix_RotateYS(this->unk_2F6, MTXMODE_APPLY); } - if (limbIndex == 2) { + if (limbIndex == OBJECT_GG_LIMB_02) { Matrix_RotateZS(this->unk_2F4, MTXMODE_APPLY); } } @@ -469,7 +497,7 @@ s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s void func_80B3BDC0(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnGg2* this = THIS; - if (limbIndex == 4) { + if (limbIndex == OBJECT_GG_LIMB_04) { Matrix_MultVec3f(&D_80B3C0A0, &this->unk_304); } } diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h index 83b4bad42..dd68c20b1 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h @@ -2,6 +2,7 @@ #define Z_EN_GG2_H #include "global.h" +#include "objects/object_gg/object_gg.h" struct EnGg2; @@ -20,14 +21,14 @@ typedef struct EnGg2 { /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ Vec3s unk_1E0; /* 0x1E6 */ Vec3s unk_1E6; - /* 0x1EC */ Vec3s jointTable[20]; - /* 0x264 */ Vec3s morphTable[20]; + /* 0x1EC */ Vec3s jointTable[OBJECT_GG_LIMB_MAX]; + /* 0x264 */ Vec3s morphTable[OBJECT_GG_LIMB_MAX]; /* 0x2DC */ UNK_TYPE1 unk2DC[0x8]; /* 0x2E4 */ s16 csId; /* 0x2E6 */ UNK_TYPE1 unk2E6[4]; /* 0x2EA */ s16 unk_2EA; /* 0x2EC */ s16 unk_2EC; - /* 0x2EE */ s16 unk_2EE; + /* 0x2EE */ s16 animIndex; /* 0x2F0 */ u8 unk_2F0; /* 0x2F1 */ u8 unk_2F1; /* 0x2F2 */ s16 unk_2F2; 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 8d244c09c..d68e6902f 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -28,10 +28,45 @@ void EnGiant_PerformCutsceneActions(EnGiant* this, PlayState* play); #define GIANT_TYPE_IS_CLOCK_TOWER_FAILURE(type) \ (type >= GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE && type <= GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE) +/** + * Used as values for cueId. The UNKNOWN ones are never used in-game. + */ +typedef enum { + /* 0 */ GIANT_CUEID_NONE, + /* 1 */ GIANT_CUEID_IDLE, + /* 2 */ GIANT_CUEID_WALKING, + /* 3 */ GIANT_CUEID_LOOKING_UP, + /* 4 */ GIANT_CUEID_RAISING_ARMS, + /* 5 */ GIANT_CUEID_STRUGGLING, + /* 6 */ GIANT_CUEID_FALLING_OVER, + /* 7 */ GIANT_CUEID_IDLE_FADE_IN, + /* 8 */ GIANT_CUEID_TALKING, + /* 9 */ GIANT_CUEID_DONE_TALKING, + /* 10 */ GIANT_CUEID_TEACHING_OATH_TO_ORDER, + /* 11 */ GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER, + /* 12 */ GIANT_CUEID_UNKNOWN_12, + /* 13 */ GIANT_CUEID_UNKNOWN_13, + /* 14 */ GIANT_CUEID_UNKNOWN_14, + /* 15 */ GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER +} GiantCueId; + +ActorInit En_Giant_InitVars = { + ACTOR_EN_GIANT, + ACTORCAT_NPC, + FLAGS, + OBJECT_GIANT, + sizeof(EnGiant), + (ActorFunc)EnGiant_Init, + (ActorFunc)EnGiant_Destroy, + (ActorFunc)EnGiant_Update, + (ActorFunc)EnGiant_Draw, +}; + /** * These values are used to index into sAnimations to pick the appropriate animation. */ typedef enum { + /* -1 */ GIANT_ANIM_NONE = -1, /* 0 */ GIANT_ANIM_LOOK_UP_START, /* 1 */ GIANT_ANIM_LOOK_UP_LOOP, /* 2 */ GIANT_ANIM_FALLING_OVER, @@ -50,49 +85,26 @@ typedef enum { /* 15 */ GIANT_ANIM_MAX } GiantAnimation; -/** - * Used as values for cueId. The UNKNOWN ones are never used in-game. - */ -typedef enum { - /* 0 */ GIANT_CUE_ID_NONE, - /* 1 */ GIANT_CUE_ID_IDLE, - /* 2 */ GIANT_CUE_ID_WALKING, - /* 3 */ GIANT_CUE_ID_LOOKING_UP, - /* 4 */ GIANT_CUE_ID_RAISING_ARMS, - /* 5 */ GIANT_CUE_ID_STRUGGLING, - /* 6 */ GIANT_CUE_ID_FALLING_OVER, - /* 7 */ GIANT_CUE_ID_IDLE_FADE_IN, - /* 8 */ GIANT_CUE_ID_TALKING, - /* 9 */ GIANT_CUE_ID_DONE_TALKING, - /* 10 */ GIANT_CUE_ID_TEACHING_OATH_TO_ORDER, - /* 11 */ GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER, - /* 12 */ GIANT_CUE_ID_UNKNOWN_12, - /* 13 */ GIANT_CUE_ID_UNKNOWN_13, - /* 14 */ GIANT_CUE_ID_UNKNOWN_14, - /* 15 */ GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER -} GiantCueId; - -ActorInit En_Giant_InitVars = { - ACTOR_EN_GIANT, - ACTORCAT_NPC, - FLAGS, - OBJECT_GIANT, - sizeof(EnGiant), - (ActorFunc)EnGiant_Init, - (ActorFunc)EnGiant_Destroy, - (ActorFunc)EnGiant_Update, - (ActorFunc)EnGiant_Draw, -}; - -static AnimationHeader* sAnimations[] = { - &gGiantLookUpStartAnim, &gGiantLookUpLoopAnim, &gGiantFallingOverAnim, &gGiantRaisedArmsStartAnim, - &gGiantRaisedArmsLoopAnim, &gGiantStruggleStartAnim, &gGiantStruggleLoopAnim, &gGiantIdleAnim, - &gGiantWalkingAnim, &gGiantBigCallStartAnim, &gGiantBigCallLoopAnim, &gGiantBigCallEndAnim, - &gGiantSmallCallStartAnim, &gGiantSmallCallLoopAnim, &gGiantSmallCallEndAnim, +static AnimationHeader* sAnimations[GIANT_ANIM_MAX] = { + &gGiantLookUpStartAnim, // GIANT_ANIM_LOOK_UP_START + &gGiantLookUpLoopAnim, // GIANT_ANIM_LOOK_UP_LOOP + &gGiantFallingOverAnim, // GIANT_ANIM_FALLING_OVER + &gGiantRaisedArmsStartAnim, // GIANT_ANIM_RAISED_ARMS_START + &gGiantRaisedArmsLoopAnim, // GIANT_ANIM_RAISED_ARMS_LOOP + &gGiantStruggleStartAnim, // GIANT_ANIM_STRUGGLE_START + &gGiantStruggleLoopAnim, // GIANT_ANIM_STRUGGLE_LOOP + &gGiantIdleAnim, // GIANT_ANIM_IDLE_LOOP + &gGiantWalkingAnim, // GIANT_ANIM_WALKING_LOOP + &gGiantBigCallStartAnim, // GIANT_ANIM_BIG_CALL_START + &gGiantBigCallLoopAnim, // GIANT_ANIM_BIG_CALL_LOOP + &gGiantBigCallEndAnim, // GIANT_ANIM_BIG_CALL_END + &gGiantSmallCallStartAnim, // GIANT_ANIM_SMALL_CALL_START + &gGiantSmallCallLoopAnim, // GIANT_ANIM_SMALL_CALL_LOOP + &gGiantSmallCallEndAnim, // GIANT_ANIM_SMALL_CALL_END }; void EnGiant_ChangeAnim(EnGiant* this, s16 animIndex) { - if (animIndex >= GIANT_ANIM_LOOK_UP_START && animIndex < GIANT_ANIM_MAX) { + if ((animIndex >= GIANT_ANIM_LOOK_UP_START) && (animIndex < GIANT_ANIM_MAX)) { if (((this->animIndex == GIANT_ANIM_WALKING_LOOP) && (animIndex != GIANT_ANIM_WALKING_LOOP)) || ((animIndex == GIANT_ANIM_WALKING_LOOP) && (this->animIndex != GIANT_ANIM_WALKING_LOOP))) { Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, @@ -160,7 +172,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGiantSkel, &gGiantLargeStrideAnim, this->jointTable, this->morphTable, GIANT_LIMB_MAX); EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); - this->cueId = GIANT_CUE_ID_NONE; + this->cueId = GIANT_CUEID_NONE; this->actionFunc = EnGiant_PerformCutsceneActions; this->actor.draw = NULL; this->alpha = 0; @@ -275,58 +287,58 @@ void EnGiant_ChangeToStartOrLoopAnimation(EnGiant* this, s16 requestedAnimIndex) */ void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) { switch (this->cueId) { - case GIANT_CUE_ID_IDLE: + case GIANT_CUEID_IDLE: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_WALKING: + case GIANT_CUEID_WALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CUE_ID_STRUGGLING: + case GIANT_CUEID_STRUGGLING: EnGiant_ChangeAnim(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: EnGiant_ChangeAnim(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CUE_ID_IDLE_FADE_IN: + case GIANT_CUEID_IDLE_FADE_IN: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); this->alpha = 0; break; - case GIANT_CUE_ID_TALKING: + case GIANT_CUEID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_START); break; - case GIANT_CUE_ID_DONE_TALKING: + case GIANT_CUEID_DONE_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_END); break; - case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: + case GIANT_CUEID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_START); break; - case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: + case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_END); break; - case GIANT_CUE_ID_UNKNOWN_12: + case GIANT_CUEID_UNKNOWN_12: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_UNKNOWN_13: + case GIANT_CUEID_UNKNOWN_13: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CUE_ID_UNKNOWN_14: + case GIANT_CUEID_UNKNOWN_14: if (this->animIndex != GIANT_ANIM_WALKING_LOOP) { EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); } break; - case GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER: + case GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER: Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f, Animation_GetLastFrame(&gGiantRaisedArmsStartAnim) - 1.0f, Animation_GetLastFrame(&gGiantRaisedArmsStartAnim), ANIMMODE_ONCE, 0.0f); @@ -339,14 +351,16 @@ void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) { void EnGiant_UpdateAlpha(EnGiant* this) { switch (this->cueId) { - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: if (this->skelAnime.curFrame >= 90.0f && this->alpha > 0) { this->alpha -= 12; } break; - case GIANT_CUE_ID_UNKNOWN_14: + + case GIANT_CUEID_UNKNOWN_14: this->alpha -= 12; break; + default: if (this->alpha < 255) { this->alpha += 8; @@ -363,36 +377,37 @@ void EnGiant_UpdateAlpha(EnGiant* this) { */ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) { if (SkelAnime_Update(&this->skelAnime) && - (this->animIndex != GIANT_ANIM_FALLING_OVER || this->cueId != GIANT_CUE_ID_FALLING_OVER)) { + ((this->animIndex != GIANT_ANIM_FALLING_OVER) || (this->cueId != GIANT_CUEID_FALLING_OVER))) { EnGiant_ChangeAnim(this, this->animIndex); + switch (this->cueId) { - case GIANT_CUE_ID_LOOKING_UP: + case GIANT_CUEID_LOOKING_UP: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START); break; - case GIANT_CUE_ID_RAISING_ARMS: + case GIANT_CUEID_RAISING_ARMS: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START); break; - case GIANT_CUE_ID_STRUGGLING: + case GIANT_CUEID_STRUGGLING: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: // Unused EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CUE_ID_TALKING: + case GIANT_CUEID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP); break; - case GIANT_CUE_ID_DONE_TALKING: - case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: + case GIANT_CUEID_DONE_TALKING: + case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: + case GIANT_CUEID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP); break; @@ -445,7 +460,7 @@ void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) { } EnGiant_PlaySound(this); - if (this->cueId == GIANT_CUE_ID_STRUGGLING) { + if (this->cueId == GIANT_CUEID_STRUGGLING) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG); } EnGiant_PlayAndUpdateAnimation(this); 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 ea3f9fea2..566f35ba0 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 @@ -5,7 +5,6 @@ */ #include "z_en_ginko_man.h" -#include "objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -47,15 +46,16 @@ typedef enum { /* 1 */ GINKO_ANIM_SITTING, /* 2 */ GINKO_ANIM_REACHING, /* 3 */ GINKO_ANIM_AMAZED, - /* 4 */ GINKO_ANIM_ADVERTISING + /* 4 */ GINKO_ANIM_ADVERTISING, // looking around for customers + /* 5 */ GINKO_ANIM_MAX } GinkoAnimation; -static AnimationInfo sAnimationInfo[] = { - { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // looking around for customers - { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, +static AnimationInfo sAnimationInfo[GINKO_ANIM_MAX] = { + { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_LEGSMACKING + { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_SITTING + { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // GINKO_ANIM_REACHING + { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_AMAZED + { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_ADVERTISING }; void EnGinkoMan_Init(Actor* thisx, PlayState* play) { @@ -71,7 +71,7 @@ void EnGinkoMan_Init(Actor* thisx, PlayState* play) { this->choiceDepositWithdrawl = GINKOMAN_CHOICE_RESET; this->serviceFee = 0; SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, &object_boj_Anim_0043F0, this->jointTable, - this->morphTable, 16); + this->morphTable, OBJECT_BOJ_LIMB_MAX); EnGinkoMan_SetupIdle(this); } @@ -172,7 +172,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; - } else if ((HS_GET_BANK_RUPEES() >= 1000) && ((this->previousBankValue) < 1000) && + } else if ((HS_GET_BANK_RUPEES() >= 1000) && (this->previousBankValue < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); @@ -664,16 +664,16 @@ void EnGinkoMan_Update(Actor* thisx, PlayState* play) { s32 EnGinkoMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGinkoMan* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { *dList = object_boj_DL_00B1D8; } - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->limb15Rot.y, MTXMODE_APPLY); Matrix_RotateZS(this->limb15Rot.x, MTXMODE_APPLY); Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); - } else if (limbIndex == 8) { + } else if (limbIndex == OBJECT_BOJ_LIMB_08) { Matrix_RotateXS(-this->limb8Rot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->limb8Rot.x, MTXMODE_APPLY); } diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h index b8a19d0f3..48ef4bdb1 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h @@ -2,6 +2,7 @@ #define Z_EN_GINKO_MAN_H #include "global.h" +#include "objects/object_boj/object_boj.h" struct EnGinkoMan; @@ -11,8 +12,8 @@ typedef struct EnGinkoMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnGinkoManActionFunc actionFunc; - /* 0x18C */ Vec3s jointTable[0x10]; - /* 0x1EC */ Vec3s morphTable[0x10]; + /* 0x18C */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX]; + /* 0x1EC */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX]; /* 0x24C */ Vec3s limb15Rot; /* 0x252 */ Vec3s limb8Rot; /* 0x258 */ s16 curTextId; 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 dd87be400..ad5bc484f 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -5,7 +5,6 @@ */ #include "z_en_gk.h" -#include "objects/object_gk/object_gk.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -102,14 +101,38 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfo sAnimationInfo[] = { - { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGK_ANIM_NONE = -1, + /* 0x0 */ ENGK_ANIM_0, + /* 0x1 */ ENGK_ANIM_1, + /* 0x2 */ ENGK_ANIM_2, + /* 0x3 */ ENGK_ANIM_3, + /* 0x4 */ ENGK_ANIM_4, + /* 0x5 */ ENGK_ANIM_5, + /* 0x6 */ ENGK_ANIM_6, + /* 0x7 */ ENGK_ANIM_7, + /* 0x8 */ ENGK_ANIM_8, + /* 0x9 */ ENGK_ANIM_9, + /* 0xA */ ENGK_ANIM_10, + /* 0xB */ ENGK_ANIM_11, + /* 0xC */ ENGK_ANIM_12, + /* 0xD */ ENGK_ANIM_MAX +} EnGkAnimation; + +static AnimationInfo sAnimationInfo[ENGK_ANIM_MAX] = { + { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_0 + { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_1 + { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_2 + { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_3 + { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_4 + { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_5 + { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_6 + { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_7 + { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_8 + { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_9 + { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_10 + { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_11 + { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_12 }; Color_RGBA8 D_80B533A0 = { 255, 255, 255, 255 }; @@ -124,18 +147,24 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE7A: return 0xE7B; + case 0xE7B: return 0xE7C; + case 0xE7C: return 0xE7D; + case 0xE7D: return 0xE7E; + case 0xE7E: return 0xE7F; + case 0xE7F: SET_WEEKEVENTREG(WEEKEVENTREG_40_80); this->unk_1E4 |= 1; return 0xE80; + default: return 0xE7A; } @@ -147,16 +176,21 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE82: return 0xE83; + case 0xE83: return 0xE7D; + case 0xE7D: return 0xE7E; + case 0xE7E: return 0xE7F; + case 0xE7F: SET_WEEKEVENTREG(WEEKEVENTREG_41_01); this->unk_1E4 |= 1; return 0xE80; + default: return 0xE82; } @@ -197,10 +231,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE85: return 0xE86; + case 0xE86: SET_WEEKEVENTREG(WEEKEVENTREG_41_02); this->unk_1E4 |= 1; return 0xE87; + default: return 0xE85; } @@ -208,9 +244,9 @@ u16 func_80B50410(EnGk* this, PlayState* play) { this->unk_1E4 |= 1; return 0xE87; } - } else { - return 0; } + + return 0; } u16 func_80B50710(EnGk* this) { @@ -229,8 +265,10 @@ u16 func_80B50710(EnGk* this) { this->unk_1E4 |= 0x10; this->unk_1E4 |= 1; return 0xE8C; + + default: + return 0; } - return 0; } void func_80B507A0(EnGk* this, PlayState* play) { @@ -259,8 +297,8 @@ s32 func_80B50854(EnGk* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); - this->unk_2E4 = 3; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + this->animIndex = ENGK_ANIM_3; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_3); this->actionFunc = func_80B521E8; return true; } @@ -285,12 +323,13 @@ void func_80B509A8(EnGk* this, PlayState* play) { this->unk_30C.y += Rand_ZeroOne(); this->unk_30C.z += 2.0f * Rand_Centered(); - if (this->unk_2E4 == 0) { + if (this->animIndex == ENGK_ANIM_0) { sp4C.x = 0.0f; sp4C.z = 0.0f; sp4C.y = -1.2f; phi_s1 = 25; - } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) { + } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) || + (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) { sp4C.x = 0.0f; sp4C.z = 0.0f; sp4C.y = -0.5f; @@ -307,28 +346,28 @@ void func_80B50B38(EnGk* this, PlayState* play) { s16 i; s16 temp; - switch (this->unk_2E4) { - case 0: + switch (this->animIndex) { + case ENGK_ANIM_0: this->unk_2E0 = 3; for (i = 0; i < 2; i++) { func_80B509A8(this, play); } break; - case 2: + case ENGK_ANIM_2: this->unk_2E0 = 3; func_80B509A8(this, play); break; - case 1: - case 3: - case 12: + case ENGK_ANIM_1: + case ENGK_ANIM_3: + case ENGK_ANIM_12: this->unk_2E0 = 2; break; - case 9: - case 10: - case 11: + case ENGK_ANIM_9: + case ENGK_ANIM_10: + case ENGK_ANIM_11: this->unk_2E0 = 3; func_80B509A8(this, play); break; @@ -483,22 +522,22 @@ s32 func_80B5123C(EnGk* this, PlayState* play) { } void func_80B51308(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_31A].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation); - if ((this->unk_2E4 == 7) && (sp1E == lastFrame)) { - this->unk_2E4 = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + if ((this->animIndex == ENGK_ANIM_7) && (curFrame == endFrame)) { + this->animIndex = ENGK_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_8); } } void func_80B51398(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[9].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[9].animation); - if ((this->unk_2E4 == 9) && (sp1E == lastFrame)) { - this->unk_2E4 = 10; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 10); + if ((this->animIndex == ENGK_ANIM_9) && (curFrame == endFrame)) { + this->animIndex = ENGK_ANIM_10; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_10); } } @@ -541,35 +580,35 @@ void func_80B51510(EnGk* this, PlayState* play) { this->cueId = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->unk_31A = 0; - this->unk_2E4 = 0; + this->csAnimIndex = ENGK_ANIM_0; + this->animIndex = ENGK_ANIM_0; break; case 2: - this->unk_31A = 2; - this->unk_2E4 = 2; + this->csAnimIndex = ENGK_ANIM_2; + this->animIndex = ENGK_ANIM_2; break; case 3: - this->unk_31A = 7; - this->unk_2E4 = 7; + this->csAnimIndex = ENGK_ANIM_7; + this->animIndex = ENGK_ANIM_7; break; case 4: - this->unk_31A = 3; - this->unk_2E4 = 3; + this->csAnimIndex = ENGK_ANIM_3; + this->animIndex = ENGK_ANIM_3; break; case 5: - this->unk_31A = 1; - this->unk_2E4 = 1; + this->csAnimIndex = ENGK_ANIM_1; + this->animIndex = ENGK_ANIM_1; this->unk_1E4 |= 0x80; this->actionFunc = func_80B5227C; break; case 6: - this->unk_31A = 12; - this->unk_2E4 = 12; + this->csAnimIndex = ENGK_ANIM_12; + this->animIndex = ENGK_ANIM_12; break; case 7: @@ -579,10 +618,10 @@ void func_80B51510(EnGk* this, PlayState* play) { default: break; } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_31A); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } - if (this->unk_31A == 7) { + if (this->csAnimIndex == ENGK_ANIM_7) { func_80B51308(this, play); } @@ -594,41 +633,44 @@ void func_80B51510(EnGk* this, PlayState* play) { } void func_80B51698(EnGk* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp26 == lastFrame) { - switch (this->unk_2E4) { - case 0: - this->unk_2E4 = 2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + if (curFrame == endFrame) { + switch (this->animIndex) { + case ENGK_ANIM_0: + this->animIndex = ENGK_ANIM_2; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_2); this->actionFunc = func_80B5216C; break; - case 2: - this->unk_2E4 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + case ENGK_ANIM_2: + this->animIndex = ENGK_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0); this->actionFunc = func_80B5202C; break; + + default: + break; } } } void func_80B51760(EnGk* this, PlayState* play) { - s16 sp2E = this->skelAnime.curFrame; - s16 lastFrame; + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame; - if (this->unk_2E4 == 11) { - lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); - if (sp2E == lastFrame) { - this->unk_2E4 = 5; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4); + if (this->animIndex == ENGK_ANIM_11) { + endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_5; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } - } else if (this->unk_2E4 == 10) { - lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); - if (sp2E == lastFrame) { - this->unk_2E4 = 11; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4); + } else if (this->animIndex == ENGK_ANIM_10) { + endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_11; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { @@ -643,7 +685,7 @@ void func_80B51760(EnGk* this, PlayState* play) { Message_StartTextbox(play, this->unk_31C, &this->actor); this->actionFunc = func_80B51970; if (this->unk_31C == 0xE81) { - this->unk_2E4 = 0; + this->animIndex = ENGK_ANIM_0; this->unk_1E4 |= 2; } } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && @@ -673,7 +715,7 @@ void func_80B51970(EnGk* this, PlayState* play) { if (this->unk_1E4 & 1) { this->unk_1E4 &= ~1; this->unk_1E4 &= ~4; - if (this->unk_2E4 == 10) { + if (this->animIndex == ENGK_ANIM_10) { this->unk_1E4 &= ~2; } this->actionFunc = func_80B51760; @@ -691,10 +733,10 @@ void func_80B51970(EnGk* this, PlayState* play) { if (this->unk_1E4 & 2) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); - if (this->unk_2E4 != 10) { - if (this->unk_2E4 != 9) { - this->unk_2E4 = 9; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9); + if (this->animIndex != ENGK_ANIM_10) { + if (this->animIndex != ENGK_ANIM_9) { + this->animIndex = ENGK_ANIM_9; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9); } else { func_80B51398(this, play); } @@ -703,7 +745,7 @@ void func_80B51970(EnGk* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - if (this->unk_2E4 == 6) { + if (this->animIndex == ENGK_ANIM_6) { func_80B50954(this); } } @@ -717,7 +759,7 @@ void func_80B51B40(EnGk* this, PlayState* play) { this->unk_1E4 &= ~1; this->unk_1E4 &= ~4; - if (this->unk_2E4 == 10) { + if (this->animIndex == ENGK_ANIM_10) { this->unk_1E4 &= ~2; } @@ -752,15 +794,18 @@ void func_80B51B40(EnGk* this, PlayState* play) { this->unk_31C = 0xE8A; Message_StartTextbox(play, this->unk_31C, &this->actor); break; + + default: + break; } } if (this->unk_1E4 & 2) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); - if (this->unk_2E4 != 10) { - if (this->unk_2E4 != 9) { - this->unk_2E4 = 9; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9); + if (this->animIndex != ENGK_ANIM_10) { + if (this->animIndex != ENGK_ANIM_9) { + this->animIndex = ENGK_ANIM_9; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9); } else { func_80B51398(this, play); } @@ -778,8 +823,8 @@ void func_80B51D9C(EnGk* this, PlayState* play) { CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); if (this->unk_1E4 & 4) { this->unk_1E4 &= ~4; - this->unk_2E4 = 6; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6); + this->animIndex = ENGK_ANIM_6; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_6); this->actionFunc = func_80B51EA4; } else { this->unk_1E4 |= 4; @@ -880,21 +925,21 @@ void func_80B5216C(EnGk* this, PlayState* play) { } void func_80B521E8(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp1E == lastFrame) { - this->unk_2E4 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_1); this->actionFunc = func_80B5227C; } } void func_80B5227C(EnGk* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((sp26 + 1) == lastFrame) { + if (curFrame == (endFrame - 1)) { func_800B14D4(play, 20.0f, &this->actor.home.pos); this->unk_350 = 60; if (!(this->unk_1E4 & 0x80)) { @@ -948,6 +993,9 @@ void func_80B52430(EnGk* this, PlayState* play) { this->unk_1E4 &= ~4; this->actionFunc = func_80B51760; return; + + default: + break; } } @@ -1005,7 +1053,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { EnGk* this = THIS; SkelAnime_InitFlex(play, &this->skelAnime, &object_gk_Skel_0079C0, &object_gk_Anim_00787C, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GK_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -1019,16 +1067,16 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; if (ENGK_GET_F(&this->actor) == ENGK_F_1) { - this->unk_2E4 = 5; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + this->animIndex = ENGK_ANIM_5; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_5); if (play->sceneId == SCENE_17SETUGEN2) { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { Actor_Kill(&this->actor); - } else { - this->csId = this->actor.csId; - this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE); - this->actionFunc = func_80B51760; + return; } + this->csId = this->actor.csId; + this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE); + this->actionFunc = func_80B51760; } else if (play->sceneId == SCENE_GORONRACE) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) { @@ -1054,11 +1102,11 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { - this->unk_2E4 = 0; + this->animIndex = ENGK_ANIM_0; this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0); this->actionFunc = func_80B5202C; } else { this->actionFunc = func_80B52654; @@ -1111,7 +1159,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp28.x = 1100.0f; sp28.z = -500.0f; - if (this->unk_2E4 == 0) { + if (this->animIndex == ENGK_ANIM_0) { sp34.y = -100.0f; sp28.y = -100.0f; @@ -1121,7 +1169,8 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp4C = sp40; sp4C.x *= -1.0f; - } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) { + } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) || + (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) { sp34.y = 400.0f; sp28.y = 400.0f; @@ -1133,7 +1182,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp4C.x *= -1.0f; } - if (limbIndex == 17) { + if (limbIndex == OBJECT_GK_LIMB_11) { if (ENGK_GET_F(&this->actor) == ENGK_F_1) { phi_f0 = 100.0f; } else { @@ -1164,7 +1213,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { s32 phi_v1; switch (limbIndex) { - case 18: + case OBJECT_GK_LIMB_12: if (this->unk_1E4 & 8) { phi_v1 = true; } else { @@ -1191,7 +1240,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_Push(); break; - case 9: + case OBJECT_GK_LIMB_09: if (this->unk_1E4 & 8) { phi_v1 = true; } else { @@ -1216,6 +1265,9 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_Push(); break; + + default: + break; } } @@ -1260,8 +1312,9 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { if (ENGK_GET_F(&this->actor) != ENGK_F_2) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); - if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) || - (this->unk_2E4 == 4)) { + if ((this->animIndex == ENGK_ANIM_0) || (this->animIndex == ENGK_ANIM_1) || + (this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_3) || + (this->animIndex == ENGK_ANIM_4)) { pos.x = this->actor.world.pos.x - 15.0f; pos.y = this->actor.world.pos.y; pos.z = this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index 130b97675..6bd28ad94 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -2,6 +2,7 @@ #define Z_EN_GK_H #include "global.h" +#include "objects/object_gk/object_gk.h" struct EnGk; @@ -32,17 +33,17 @@ typedef struct EnGk { /* 0x1E4 */ u16 unk_1E4; /* 0x1E8 */ Path* path; /* 0x1EC */ s32 unk_1EC; - /* 0x1F0 */ Vec3s jointTable[20]; - /* 0x1F0 */ Vec3s morphTable[20]; + /* 0x1F0 */ Vec3s jointTable[OBJECT_GK_LIMB_MAX]; + /* 0x1F0 */ Vec3s morphTable[OBJECT_GK_LIMB_MAX]; /* 0x2E0 */ s16 unk_2E0; /* 0x2E2 */ s16 unk_2E2; - /* 0x2E4 */ s16 unk_2E4; + /* 0x2E4 */ s16 animIndex; /* 0x2E8 */ Vec3f unk_2E8; /* 0x2F4 */ Vec3f unk_2F4; /* 0x300 */ Vec3f unk_300; /* 0x30C */ Vec3f unk_30C; /* 0x318 */ s16 csId; - /* 0x31A */ u8 unk_31A; + /* 0x31A */ u8 csAnimIndex; /* 0x31B */ u8 cueId; /* 0x31C */ u16 unk_31C; /* 0x31E */ s16 unk_31E; 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 787ce43b9..39b705649 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -6,7 +6,6 @@ #include "z_en_gm.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#include "objects/object_in2/object_in2.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -209,20 +208,38 @@ static ColliderSphereInit sSphereInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum { + /* -1 */ ENGM_ANIM_NONE = -1, + /* 0x0 */ ENGM_ANIM_0, + /* 0x1 */ ENGM_ANIM_1, + /* 0x2 */ ENGM_ANIM_2, + /* 0x3 */ ENGM_ANIM_3, + /* 0x4 */ ENGM_ANIM_4, + /* 0x5 */ ENGM_ANIM_5, + /* 0x6 */ ENGM_ANIM_6, + /* 0x7 */ ENGM_ANIM_7, + /* 0x8 */ ENGM_ANIM_8, + /* 0x9 */ ENGM_ANIM_9, + /* 0xA */ ENGM_ANIM_10, + /* 0xB */ ENGM_ANIM_11, + /* 0xC */ ENGM_ANIM_12, + /* 0xD */ ENGM_ANIM_MAX +} EnGmAnimation; + +static AnimationInfoS sAnimationInfo[ENGM_ANIM_MAX] = { + { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_0 + { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_1 + { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_2 + { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_3 + { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_4 + { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_5 + { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_6 + { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_7 + { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_8 + { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGM_ANIM_9 + { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_10 + { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_11 + { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_12 }; Actor* func_8094DEE0(EnGm* this, PlayState* play, u8 arg2, s16 arg3) { @@ -286,43 +303,43 @@ EnDoor* func_8094DF90(PlayState* play, s32 arg1) { return SubS_FindDoor(play, phi_a1); } -s32 func_8094DFF8(EnGm* this, PlayState* play) { - s32 ret = false; +s32 EnGm_UpdateSkelAnime(EnGm* this, PlayState* play) { + s32 isAnimFinished = false; if (this->unk_262 < 0) { return false; } if (this->unk_262 >= 0) { - this->skelAnime.playSpeed = this->unk_3A8; - ret = SkelAnime_Update(&this->skelAnime); + this->skelAnime.playSpeed = this->animPlaySpeed; + isAnimFinished = SkelAnime_Update(&this->skelAnime); } - return ret; + return isAnimFinished; } -s32 func_8094E054(EnGm* this, PlayState* play, s32 arg2) { +s32 EnGm_ChangeAnim(EnGm* this, PlayState* play, s32 animIndex) { s8 tmp = this->unk_262; - s32 phi_v1 = false; - s32 ret = false; + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg2 == 0) || (arg2 == 1)) { - if ((this->unk_3E8 != 0) && (this->unk_3E8 != 1)) { - phi_v1 = true; + if ((animIndex == ENGM_ANIM_0) || (animIndex == ENGM_ANIM_1)) { + if ((this->animIndex != ENGM_ANIM_0) && (this->animIndex != ENGM_ANIM_1)) { + changeAnim = true; } - } else if (arg2 != this->unk_3E8) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { + if (changeAnim) { if (tmp >= 0) { - this->unk_3E8 = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); - this->unk_3A8 = this->skelAnime.playSpeed; + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } } - return ret; + return didAnimChange; } s32 func_8094E0F8(EnGm* this, PlayState* play) { @@ -486,6 +503,9 @@ s32 func_8094E52C(EnGm* this, PlayState* play) { this->unk_3E0++; ret = true; break; + + default: + break; } return ret; @@ -502,7 +522,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { switch (this->unk_3E0) { case 0: Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); this->unk_3E2 = 0; this->unk_3E0++; break; @@ -558,6 +578,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { this->unk_3E2 = 0; this->unk_3E0++; break; + case 9: sp48 = this->actor.world.rot.y; this->unk_3E2++; @@ -565,13 +586,16 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, sp48, 3, 0x2AA8); this->unk_3A4 &= ~0x20; } else { - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); this->actor.shape.rot.y = sp48; this->unk_3E0++; this->unk_3E2 = 0; ret = true; } break; + + default: + break; } return ret; } @@ -639,7 +663,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) { break; } Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); this->unk_3E2 = 0; this->unk_3E0++; @@ -669,7 +693,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, oldYaw, 3, 0x2AA8); this->unk_3A4 &= ~0x20; } else { - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); this->actor.shape.rot.y = oldYaw; this->unk_3E2 = 0; this->unk_3E0++; @@ -763,7 +787,7 @@ s32 func_8094EFC4(EnGm* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (this->unk_3F8 == 0) { if ((play->sceneId == SCENE_MILK_BAR) && (gSaveContext.sceneLayer == 2)) { - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); this->unk_258 = 255; } this->cueId = 255; @@ -879,9 +903,9 @@ void func_8094F3D0(EnGm* this, PlayState* play) { } s32 func_8094F4EC(EnGm* this, PlayState* play) { - if ((this->unk_258 != 6) && (this->unk_3E8 == 12)) { + if ((this->unk_258 != 6) && (this->animIndex == ENGM_ANIM_12)) { this->unk_3A4 &= ~0x2000; - func_8094E054(this, play, 8); + EnGm_ChangeAnim(this, play, ENGM_ANIM_8); } return true; } @@ -897,30 +921,30 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { if (this->unk_3A6 != sp32) { switch (sp32) { case 0x2B13: - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); break; case 0x2B14: case 0x2B18: - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); break; case 0x2B16: - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); break; case 0x2B15: - func_8094E054(this, play, 5); + EnGm_ChangeAnim(this, play, ENGM_ANIM_5); break; case 0x2B17: - func_8094E054(this, play, 6); + EnGm_ChangeAnim(this, play, ENGM_ANIM_6); break; default: - if ((this->unk_3E8 == 7) || (this->unk_3E8 == 8)) { + if ((this->animIndex == ENGM_ANIM_7) || (this->animIndex == ENGM_ANIM_8)) { this->unk_3A4 |= 0x2000; - func_8094E054(this, play, 12); + EnGm_ChangeAnim(this, play, ENGM_ANIM_12); } break; } @@ -941,6 +965,9 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { this->unk_268 = toto; } break; + + default: + break; } if (sp32 == 0x2AA8) { @@ -963,7 +990,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { this->unk_18C(this, play); } - if ((this->unk_3E8 == 6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) && + if ((this->animIndex == ENGM_ANIM_6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) && Animation_OnFrame(&this->skelAnime, 20.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); } @@ -1039,7 +1066,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; - func_8094E054(this, play, 7); + EnGm_ChangeAnim(this, play, ENGM_ANIM_7); this->actor.gravity = 0.0f; ret = true; } @@ -1087,7 +1114,7 @@ s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; - func_8094E054(this, play, 7); + EnGm_ChangeAnim(this, play, ENGM_ANIM_7); this->actor.gravity = -1.0f; ret = true; } @@ -1102,9 +1129,9 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (this->unk_258 == 0) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951D90); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); } else { - func_8094E054(this, play, 9); + EnGm_ChangeAnim(this, play, ENGM_ANIM_9); this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_3A4 |= 0x100; @@ -1118,7 +1145,7 @@ s32 func_8094FD88(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_RECEPGIRL)) { - func_8094E054(this, play, 11); + EnGm_ChangeAnim(this, play, ENGM_ANIM_11); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; @@ -1134,7 +1161,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL); if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TOTO) && (al != NULL) && (al->update != NULL)) { - func_8094E054(this, play, 11); + EnGm_ChangeAnim(this, play, ENGM_ANIM_11); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_268 = al; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) { @@ -1176,11 +1203,11 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); func_8094E278(play); } else { Math_Vec3f_Copy(&this->actor.world.pos, &sp30); - func_8094E054(this, play, 9); + EnGm_ChangeAnim(this, play, ENGM_ANIM_9); this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_400 = 0; @@ -1202,7 +1229,7 @@ s32 func_80950088(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x2000 | 0x100); this->unk_3A4 |= 0x200; - func_8094E054(this, play, 12); + EnGm_ChangeAnim(this, play, ENGM_ANIM_12); return true; } @@ -1217,7 +1244,7 @@ s32 func_80950120(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x800 | 0x100); this->unk_3A4 |= 0x200; - func_8094E054(this, play, 4); + EnGm_ChangeAnim(this, play, ENGM_ANIM_4); return true; } @@ -1238,7 +1265,7 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3CC = 8; this->actor.targetMode = TARGET_MODE_6; this->unk_3B4 = 60.0f; - func_8094E054(this, play, 10); + EnGm_ChangeAnim(this, play, ENGM_ANIM_10); return true; } @@ -1334,11 +1361,11 @@ s32 func_80950388(EnGm* this, PlayState* play) { s32 func_809503F8(EnGm* this, PlayState* play) { s32 pad; - if (this->unk_3E8 == 9) { + if (this->animIndex == ENGM_ANIM_9) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); } else { AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f); } @@ -1348,7 +1375,8 @@ s32 func_809503F8(EnGm* this, PlayState* play) { s32 func_80950490(EnGm* this, PlayState* play) { static s32 D_80951DE4[] = { - 1, 5, 5, 1, 6, 5, 1, 5, 6, 1, 5, 6, + ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_5, ENGM_ANIM_1, ENGM_ANIM_6, ENGM_ANIM_5, + ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6, ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6, }; s32 pad; @@ -1358,32 +1386,32 @@ s32 func_80950490(EnGm* this, PlayState* play) { this->unk_3CA = 1; this->unk_3CC = 8; this->unk_400 = 1; - func_8094E054(this, play, 3); + EnGm_ChangeAnim(this, play, ENGM_ANIM_3); } return false; } this->unk_400 = 0; - switch (this->unk_3E8) { - case 9: + switch (this->animIndex) { + case ENGM_ANIM_9: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); func_8094E278(play); } else { AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f); } break; - case 5: - case 6: + case ENGM_ANIM_5: + case ENGM_ANIM_6: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8094E054(this, play, D_80951DE4[this->unk_3F4]); + EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]); this->unk_3F4++; this->unk_3F4 %= 12; this->unk_3DE = Rand_S16Offset(30, 30); @@ -1392,7 +1420,7 @@ s32 func_80950490(EnGm* this, PlayState* play) { default: if (DECR(this->unk_3DE) == 0) { - func_8094E054(this, play, D_80951DE4[this->unk_3F4]); + EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]); this->unk_3F4++; this->unk_3F4 %= 12; this->unk_3DE = Rand_S16Offset(30, 30); @@ -1433,6 +1461,7 @@ s32 func_80950690(EnGm* this, PlayState* play) { break; case 8: + default: break; } @@ -1574,6 +1603,9 @@ void func_80950C24(EnGm* this, PlayState* play) { case 30: func_8095097C(this, play); break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); @@ -1629,7 +1661,7 @@ void func_80950DB8(EnGm* this, PlayState* play) { } void func_80950F2C(EnGm* this, PlayState* play) { - s32 sp50[] = { 0, 0, 3, 2 }; + s32 csAnimIndex[] = { ENGM_ANIM_0, ENGM_ANIM_0, ENGM_ANIM_3, ENGM_ANIM_2 }; Player* player = GET_PLAYER(play); s32 pad; Vec3f sp3C; @@ -1644,7 +1676,7 @@ void func_80950F2C(EnGm* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); } this->cueId = cueId; - func_8094E054(this, play, sp50[cueId]); + EnGm_ChangeAnim(this, play, csAnimIndex[cueId]); } if ((this->cueId == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) { @@ -1670,9 +1702,10 @@ void EnGm_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 22.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable, 20); - this->unk_3E8 = -1; - func_8094E054(this, play, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable, + OBJECT_IN2_LIMB_MAX); + this->animIndex = ENGM_ANIM_NONE; + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); @@ -1698,7 +1731,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { if (!func_8094E0F8(this, play)) { if (!func_8094EE84(this, play) && func_8094EFC4(this, play)) { func_80950F2C(this, play); - func_8094DFF8(this, play); + EnGm_UpdateSkelAnime(this, play); func_8094E2D0(this); return; } @@ -1708,7 +1741,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { func_8094F53C(this, play); if (this->unk_258 != 0) { - func_8094DFF8(this, play); + EnGm_UpdateSkelAnime(this, play); func_8094E2D0(this); func_8094F2E8(this); SubS_Offer(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & SUBS_OFFER_MODE_MASK); @@ -1726,20 +1759,20 @@ s32 EnGm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po EnGm* this = THIS; s32 fidgetIndex; - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN2_LIMB_10) { func_8094F3D0(this, play); } switch (limbIndex) { - case 9: + case OBJECT_IN2_LIMB_09: fidgetIndex = 0; break; - case 10: + case OBJECT_IN2_LIMB_0A: fidgetIndex = 1; break; - case 13: + case OBJECT_IN2_LIMB_0D: fidgetIndex = 2; break; @@ -1763,20 +1796,20 @@ void EnGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30; s32 pad2; - if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == 16)) { + if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == OBJECT_IN2_LIMB_10)) { Matrix_MultVec3f(&D_80951E24, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } OPEN_DISPS(play->state.gfxCtx); - if ((limbIndex == 15) && (this->unk_3A4 & 0x800)) { + if ((limbIndex == OBJECT_IN2_LIMB_0F) && (this->unk_3A4 & 0x800)) { gSPDisplayList(POLY_OPA_DISP++, object_in2_DL_007528); } CLOSE_DISPS(play->state.gfxCtx); - if (limbIndex == 9) { + if (limbIndex == OBJECT_IN2_LIMB_09) { Matrix_MultVec3f(&gZeroVec3f, &sp30); Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30); } @@ -1799,7 +1832,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN2_LIMB_10) { SubS_UpdateLimb(BINANG_ADD(this->unk_3BC + this->unk_3C0, 0x4000), BINANG_ADD(this->unk_3BE + this->unk_3C2 + this->actor.shape.rot.y, 0x4000), &this->unk_290, &this->unk_2A8, stepRot, overrideRot); @@ -1810,7 +1843,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == 9) { + } else if (limbIndex == OBJECT_IN2_LIMB_09) { SubS_UpdateLimb(BINANG_ADD(this->unk_3C0, 0x4000), BINANG_ADD(this->unk_3C2 + this->actor.shape.rot.y, 0x4000), &this->unk_29C, &this->unk_2AE, stepRot, overrideRot); Matrix_Pop(); @@ -1824,8 +1857,10 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } void EnGm_Draw(Actor* thisx, PlayState* play) { - static TexturePtr D_80951E30[] = { object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828, - object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68 }; + static TexturePtr D_80951E30[] = { + object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828, + object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68, + }; EnGm* this = THIS; if ((this->unk_258 != 0) && (this->unk_262 >= 0)) { diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h index 572fa322f..968d6dd07 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -2,6 +2,7 @@ #define Z_EN_GM_H #include "global.h" +#include "objects/object_in2/object_in2.h" struct EnGm; @@ -42,11 +43,11 @@ typedef struct EnGm { /* 0x29C */ Vec3f unk_29C; /* 0x2A8 */ Vec3s unk_2A8; /* 0x2AE */ Vec3s unk_2AE; - /* 0x2B4 */ Vec3s jointTable[20]; - /* 0x32C */ Vec3s morphTable[20]; + /* 0x2B4 */ Vec3s jointTable[OBJECT_IN2_LIMB_MAX]; + /* 0x32C */ Vec3s morphTable[OBJECT_IN2_LIMB_MAX]; /* 0x3A4 */ u16 unk_3A4; /* 0x3A6 */ u16 unk_3A6; - /* 0x3A8 */ f32 unk_3A8; + /* 0x3A8 */ f32 animPlaySpeed; /* 0x3AC */ f32 unk_3AC; /* 0x3B0 */ f32 unk_3B0; /* 0x3B4 */ f32 unk_3B4; @@ -69,7 +70,7 @@ typedef struct EnGm { /* 0x3E0 */ s16 unk_3E0; /* 0x3E2 */ s16 unk_3E2; /* 0x3E4 */ EnGmUnkFunc unk_3E4; - /* 0x3E8 */ s32 unk_3E8; + /* 0x3E8 */ s32 animIndex; /* 0x3EC */ UNK_TYPE1 unk3EC[0x4]; /* 0x3F0 */ s32 prevTalkState; /* 0x3F4 */ s32 unk_3F4; 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 10dda353c..f5678eedd 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -82,8 +82,8 @@ typedef enum EnGoEffectType { /* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN } EnGoEffectType; -typedef enum EnGoAnimationIndex { - /* -1 */ ENGO_ANIM_INVALID = -1, +typedef enum EnGoAnimation { + /* -1 */ ENGO_ANIM_NONE = -1, /* 0 */ ENGO_ANIM_GORON_MIN, /* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN, /* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM, @@ -95,21 +95,21 @@ typedef enum EnGoAnimationIndex { /* 7 */ ENGO_ANIM_DROPKEG, /* 8 */ ENGO_ANIM_COVEREARS, /* 9 */ ENGO_ANIM_SHIVERINGSURPRISED, - /* 10 */ ENGO_ANIM_ATHLETICS_MIN, - /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN, - /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, - /* 12 */ ENGO_ANIM_SHAKE_LIMBS, - /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND, - /* 14 */ ENGO_ANIM_SITTING_STRETCH, - /* 15 */ ENGO_ANIM_CHEER, - /* 16 */ ENGO_ANIM_SHOUT, - /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH, - /* 18 */ ENGO_ANIM_SPRING_MIN, - /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN, - /* 19 */ ENGO_ANIM_SHOW_LOOPED, - /* 20 */ ENGO_ANIM_LOOK_AROUND, - /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED -} EnGoAnimationIndex; + /* 10 */ ENGO_ANIM_ATHLETICS_MIN, + /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN, + /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, + /* 12 */ ENGO_ANIM_SHAKE_LIMBS, + /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND, + /* 14 */ ENGO_ANIM_SITTING_STRETCH, + /* 15 */ ENGO_ANIM_CHEER, + /* 16 */ ENGO_ANIM_SHOUT, + /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH, + /* 18 */ ENGO_ANIM_SPRING_MIN, + /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN, + /* 19 */ ENGO_ANIM_SHOW_LOOPED, + /* 20 */ ENGO_ANIM_LOOK_AROUND, + /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED +} EnGoAnimation; void EnGo_Idle(EnGo* this, PlayState* play); void EnGo_Sleep(EnGo* this, PlayState* play); @@ -309,7 +309,7 @@ static DamageTable sDamageTable = { /** * Animations used in the actor. * - * @see EnGoAnimationIndex + * @see EnGoAnimation */ static AnimationInfoS sAnimationInfo[] = { @@ -530,7 +530,7 @@ void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { * @param pos Position around which the effects appear */ void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) { - static u8 effectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = { + static u8 sEffectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = { ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, @@ -570,7 +570,7 @@ void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) { effect->alphaDenom = effect->alphaNumer = 1; // Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3' - effect->type = effectIndexToSnowEffectTable[i]; + effect->type = sEffectIndexToSnowEffectTable[i]; // Initialize the parameters for the paired element randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x; @@ -977,27 +977,27 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { * * @return True if non-repeating animation has finished */ -s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { +s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) { s8 objIndex = this->actor.objBankIndex; s8 extraObjIndex = -1; - s32 ret = false; + s32 isAnimFinished = false; - if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { + if ((this->animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { extraObjIndex = this->hakuginDemoObjIndex; - } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { + } else if ((this->animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { extraObjIndex = this->taisouObjIndex; - } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) { + } else if (this->animIndex < ENGO_ANIM_ATHLETICS_MIN) { extraObjIndex = this->actor.objBankIndex; } if (extraObjIndex >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); - this->skelAnime.playSpeed = this->curAnimPlaySpeed; - ret = SkelAnime_Update(&this->skelAnime); + this->skelAnime.playSpeed = this->animPlaySpeed; + isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } - return ret; + return isAnimFinished; } /** @@ -1005,7 +1005,7 @@ s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { */ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { - if (this->curAnimIndex == ENGO_ANIM_ROLL) { + if (this->animIndex == ENGO_ANIM_ROLL) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); } @@ -1013,7 +1013,7 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 22.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); } - } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) { + } else if ((this->animIndex == ENGO_ANIM_UNROLL) || (this->animIndex == ENGO_ANIM_UNROLL_IMM)) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF); } @@ -1037,10 +1037,10 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { * * @return True if animation was changed */ -s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { s8 objIndex = this->actor.objBankIndex; s8 extraObjIndex = -1; - s32 ret = false; + s32 didAnimChange = false; if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { extraObjIndex = this->hakuginDemoObjIndex; @@ -1052,13 +1052,13 @@ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { if (extraObjIndex >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); - this->curAnimIndex = animIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - this->curAnimPlaySpeed = this->skelAnime.playSpeed; + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } - return ret; + return didAnimChange; } /** @@ -1651,7 +1651,7 @@ void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]); // Move the sitting Goron forward, since their spawn location is the same as their standing counterpart. - if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) { Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset, &newSittingStretcherPos); @@ -1701,7 +1701,7 @@ void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) { Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->curAnimIndex = -1; + this->animIndex = ENGO_ANIM_NONE; EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); this->sleepState = ENGO_AWAKE; this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f; @@ -1899,7 +1899,7 @@ void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - this->curAnimIndex = ENGO_ANIM_INVALID; + this->animIndex = ENGO_ANIM_NONE; EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL); this->actor.draw = EnGo_Draw; @@ -2168,14 +2168,14 @@ void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) { switch (this->springArrivalCueId) { case 3: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && - (this->curAnimIndex == ENGO_ANIM_LOOK_AROUND)) { + (this->animIndex == ENGO_ANIM_LOOK_AROUND)) { EnGo_ChangeAnim(this, play, ENGO_ANIM_LOOK_AROUND_LOOPED); } break; case 4: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && - (this->curAnimIndex == ENGO_ANIM_SHOW)) { + (this->animIndex == ENGO_ANIM_SHOW)) { EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED); } break; @@ -2439,7 +2439,7 @@ void EnGo_Update(Actor* thisx, PlayState* play) { if (!(this->actionFlags & ENGO_FLAG_FROZEN)) { EnGo_UpdateEyes(this); - EnGo_UpdateAnimationToCurrent(this, play); + EnGo_UpdateSkelAnime(this, play); EnGo_UpdateAttentionTargetAndReactions(this, play); EnGo_UpdateSfx(this, play); } @@ -2599,7 +2599,7 @@ void EnGo_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); - if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) { Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY); } SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 0ada7fe1e..97959a03e 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -106,7 +106,7 @@ typedef struct EnGo { /* 0x390 */ u16 actionFlags; /* 0x392 */ u16 lastTextId; /* 0x394 */ u8 springArrivalCueId; - /* 0x398 */ f32 curAnimPlaySpeed; + /* 0x398 */ f32 animPlaySpeed; /* 0x39C */ f32 iceBlockScale; /* 0x3A0 */ f32 iceBlockAlpha; /* 0x3A4 */ f32 scaleFactor; @@ -132,7 +132,7 @@ typedef struct EnGo { /* 0x3CE */ s16 fidgetTableY[ENGO_FIDGET_TABLE_LEN]; /* 0x3D4 */ s16 surprisePhase; /* 0x3D8 */ MsgEventFunc msgEventFunc; - /* 0x3DC */ s32 curAnimIndex; + /* 0x3DC */ s32 animIndex; /* 0x3E0 */ UNK_TYPE1 unk3E0[0x4]; /* 0x3E4 */ s32 indexPathPoint; /* 0x3E8 */ s32 indexEffect; 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 148b2d116..aa6eb041f 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -674,6 +674,7 @@ void func_80940090(EnGoroiwa* this, PlayState* play) { sp10C.x = this->actor.world.pos.x; sp10C.y = this->actor.world.pos.y + this->unk_1DC; sp10C.z = this->actor.world.pos.z; + //! FAKE: if (1) {} spD8 = spEC * 150.0f; spA8 = 0x10000 / spD8; @@ -1117,8 +1118,8 @@ void func_809419D0(EnGoroiwa* this) { void func_80941A10(EnGoroiwa* this, PlayState* play) { static EnGoroiwaUnkFunc D_80942E94[] = { - &func_8093F498, - &func_8093F34C, + func_8093F498, + func_8093F34C, }; static u16 D_80942E9C[][2] = { { NA_SE_EV_BIGBALL_ROLL - SFX_FLAG, NA_SE_EV_BIGBALL_ROLL_SR - SFX_FLAG }, @@ -1507,6 +1508,9 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { this->actor.floorBgId = 50; } break; + + default: + break; } func_8093FAA4(this, play); 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 3c0d97d20..90b39f860 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -75,8 +75,9 @@ typedef enum { /* 4 */ DRAGONFLY_ANIM_HOVER, /* 5 */ DRAGONFLY_ANIM_DAMAGE, /* 6 */ DRAGONFLY_ANIM_DEAD, - /* 7 */ DRAGONFLY_ANIM_FALL -} EnGrasshopperAnim; + /* 7 */ DRAGONFLY_ANIM_FALL, + /* 8 */ DRAGONFLY_ANIM_MAX +} DragonflyAnimation; static s32 sOccupiedIndices[] = { false, false, false, false, false, @@ -333,7 +334,7 @@ void EnGrasshopper_Destroy(Actor* thisx, PlayState* play) { sOccupiedIndices[this->index] = false; } -static AnimationHeader* sAnimations[] = { +static AnimationHeader* sAnimations[DRAGONFLY_ANIM_MAX] = { &gDragonflyRaiseTailAnim, // DRAGONFLY_ANIM_RAISE_TAIL &gDragonflyLowerTailAnim, // DRAGONFLY_ANIM_LOWER_TAIL &gDragonflyFlyAnim, // DRAGONFLY_ANIM_FLY @@ -344,7 +345,7 @@ static AnimationHeader* sAnimations[] = { &gDragonflyFallAnim, // DRAGONFLY_ANIM_FALL }; -static u8 sAnimationModes[] = { +static u8 sAnimationModes[DRAGONFLY_ANIM_MAX] = { ANIMMODE_ONCE, // DRAGONFLY_ANIM_RAISE_TAIL ANIMMODE_ONCE, // DRAGONFLY_ANIM_LOWER_TAIL ANIMMODE_LOOP, // DRAGONFLY_ANIM_FLY @@ -358,15 +359,15 @@ static u8 sAnimationModes[] = { void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) { f32 morphFrames; - this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]); + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); morphFrames = 0.0f; if ((animIndex == DRAGONFLY_ANIM_ATTACK) || (animIndex == DRAGONFLY_ANIM_HOVER) || (animIndex == DRAGONFLY_ANIM_DAMAGE)) { morphFrames = -3.0f; } - Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->endFrame, sAnimationModes[animIndex], - morphFrames); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[animIndex], morphFrames); } void EnGrasshopper_RaiseTail(EnGrasshopper* this) { @@ -389,7 +390,7 @@ void EnGrasshopper_LowerTail(EnGrasshopper* this) { void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { if (this->decision == DRAGONFLY_DECISION_ATTACK) { EnGrasshopper_SetupAttack(this); } else { @@ -580,6 +581,9 @@ void EnGrasshopper_Bank(EnGrasshopper* this, PlayState* play) { this->actionFunc = EnGrasshopper_RoamInCircles; } break; + + default: + break; } } @@ -735,7 +739,7 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.y, this->targetApproachPos.y, 0.1f, this->approachSpeed); Math_ApproachF(&this->approachSpeed, 10.0f, 0.1f, 1.0f); Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0xA); - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { EnGrasshopper_SetupWaitAfterAttack(this); } } @@ -831,7 +835,7 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { this->actor.flags &= ~ACTOR_FLAG_10; EnGrasshopper_SetupFall(this); } diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index cf0e50cbe..a07091dd8 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -91,7 +91,7 @@ typedef struct EnGrasshopper { /* 0x035E */ s16 type; /* 0x0360 */ f32 dragonflyScale; /* 0x0364 */ f32 angularVelocity; - /* 0x0368 */ f32 endFrame; + /* 0x0368 */ f32 animEndFrame; /* 0x036C */ f32 approachSpeed; /* 0x0370 */ f32 baseFlyHeight; /* 0x0374 */ f32 targetPosY; 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 e3ddfee6a..55bd83106 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -250,6 +250,9 @@ void func_80997E4C(EnGs* this, PlayState* play) { case ENGS_2: this->unk_210 = this->unk_195 + 0x20F7; break; + + default: + break; } Message_ContinueTextbox(play, this->unk_210); break; @@ -260,6 +263,9 @@ void func_80997E4C(EnGs* this, PlayState* play) { } } break; + + default: + break; } } @@ -329,6 +335,9 @@ void func_8099807C(EnGs* this, PlayState* play) { func_809984F4(this, play); } break; + + default: + break; } break; @@ -339,6 +348,9 @@ void func_8099807C(EnGs* this, PlayState* play) { case 26: func_80997D14(this, play); break; + + default: + break; } } @@ -444,6 +456,9 @@ void func_8099874C(EnGs* this, PlayState* play) { case 4: phi_v0 = func_809995A4(this, play); break; + + default: + break; } if (phi_v0 == 0) { @@ -483,6 +498,9 @@ void func_8099874C(EnGs* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_77_20); } break; + + default: + break; } if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) { @@ -754,16 +772,16 @@ void func_80999584(Color_RGB8* arg0, Color_RGB8* arg1) { } s32 func_809995A4(EnGs* this, PlayState* play) { - static Color_RGB8 flashColours[] = { + static Color_RGB8 sFlashColours[] = { { 255, 50, 50 }, { 50, 50, 255 }, { 255, 255, 255 }, }; - static Vec3f dustAccel = { 0.0f, -0.3f, 0.0f }; - static Color_RGBA8 dustPrim = { 200, 200, 200, 128 }; - static Color_RGBA8 dustEnv = { 100, 100, 100, 0 }; - static Vec3f bomb2Velocity = { 0.0f, 0.0f, 0.0f }; - static Vec3f bomb2Accel = { 0.0f, 0.0f, 0.0f }; + static Vec3f sDustAccel = { 0.0f, -0.3f, 0.0f }; + static Color_RGBA8 sDustPrimColor = { 200, 200, 200, 128 }; + static Color_RGBA8 sDustEnvColor = { 100, 100, 100, 0 }; + static Vec3f sBomb2Velocity = { 0.0f, 0.0f, 0.0f }; + static Vec3f sBomb2Accel = { 0.0f, 0.0f, 0.0f }; s32 sp7C = -1; if (this->unk_19D == 0) { @@ -784,18 +802,18 @@ s32 func_809995A4(EnGs* this, PlayState* play) { u8 pad; this->unk_1D4--; - func_80999584(&this->unk_1FA, &flashColours[2]); + func_80999584(&this->unk_1FA, &sFlashColours[2]); if (this->unk_1D4 < 80) { if ((this->unk_1D4 % 20) < 8) { if (this->unk_1D4 < 20) { if ((this->unk_1D4 % 20) == 7) { - func_80999584(&this->unk_1FA, &flashColours[0]); + func_80999584(&this->unk_1FA, &sFlashColours[0]); this->unk_1F4 = this->unk_1FA; Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); this->unk_200 = 0.0f; } } else if ((this->unk_1D4 % 20) == 7) { - func_80999584(&this->unk_1FA, &flashColours[1]); + func_80999584(&this->unk_1FA, &sFlashColours[1]); this->unk_1F4 = this->unk_1FA; Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N); this->unk_200 = 0.0f; @@ -826,7 +844,8 @@ s32 func_809995A4(EnGs* this, PlayState* play) { sp6C.y = this->actor.world.pos.y + 7.0f; sp6C.z = this->actor.world.pos.z + (2.0f * sp60.z); - func_800B0EB0(play, &sp6C, &sp60, &dustAccel, &dustPrim, &dustEnv, Rand_ZeroFloat(50.0f) + 200.0f, 40, 15); + func_800B0EB0(play, &sp6C, &sp60, &sDustAccel, &sDustPrimColor, &sDustEnvColor, + Rand_ZeroFloat(50.0f) + 200.0f, 40, 15); } Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG); @@ -856,7 +875,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { sp54.y = this->actor.world.pos.y; sp54.z = this->actor.world.pos.z; Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); - EffectSsBomb2_SpawnLayered(play, &sp54, &bomb2Velocity, &bomb2Accel, 100, 20); + EffectSsBomb2_SpawnLayered(play, &sp54, &sBomb2Velocity, &sBomb2Accel, 100, 20); this->unk_1D4 = 10; this->unk_19A |= 8; this->unk_216 = 0; 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 d51cf7703..7fcf32bf4 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 @@ -61,18 +61,32 @@ s32 sGuardCount = 0; s32 D_80ABBE20 = 0; -static u16 sTextIDs[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C }; +static u16 sTextIds[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C }; s16 D_80ABBE38[] = { 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0002 }; -static AnimationHeader* sAnimations[] = { - &gDekuPalaceGuardWaitAnim, - &gDekuPalaceGuardWalkAnim, - &gDekuPalaceGuardDigAnim, - &gDekuPalaceGuardWalkAnim, +typedef enum { + /* -1 */ GUARD_NUTS_ANIM_NONE = -1, + /* 0 */ GUARD_NUTS_ANIM_WAIT_HEAD_TILT, + /* 1 */ GUARD_NUTS_ANIM_WALK, + /* 2 */ GUARD_NUTS_ANIM_DIG, + /* 3 */ GUARD_NUTS_ANIM_WALK_2, + /* 4 */ GUARD_NUTS_ANIM_MAX +} EnGuardNutsAnimation; + +static AnimationHeader* sAnimations[GUARD_NUTS_ANIM_MAX] = { + &gDekuPalaceGuardWaitAnim, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT + &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK + &gDekuPalaceGuardDigAnim, // GUARD_NUTS_ANIM_DIG + &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK_2 }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE }; +static u8 sAnimationModes[GUARD_NUTS_ANIM_MAX] = { + ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT + ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WALK + ANIMMODE_ONCE, // GUARD_NUTS_ANIM_DIG + ANIMMODE_ONCE, // GUARD_NUTS_ANIM_WALK_2 +}; static TexturePtr sEyeTextures[] = { gDekuPalaceGuardEyeOpenTex, @@ -80,13 +94,6 @@ static TexturePtr sEyeTextures[] = { gDekuPalaceGuardEyeClosedTex, }; -typedef enum { - /* 0 */ WAIT_HEAD_TILT_ANIM, - /* 1 */ WALK_ANIM, - /* 2 */ DIG_ANIM, - /* 3 */ WALK_ANIM_2 -} EnGuardNutsAnim; - typedef enum { /* 0 */ GUARD_NUTS_WAIT_STATE, /* 1 */ GUARD_NUTS_TALKING_STATE, @@ -123,20 +130,20 @@ void EnGuardNuts_Destroy(Actor* thisx, PlayState* play) { } /** - * @brief Changes the animation to the provided index. Updates animIndex and animFrameCount for the animation. + * @brief Changes the animation to the provided index. Updates animIndex and animEndFrame for the animation. * * @param this * @param animIndex the index of sAnimations to change to */ void EnGuardNuts_ChangeAnim(EnGuardNuts* this, s32 animIndex) { this->animIndex = animIndex; - this->animFrameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animFrameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -2.0f); } void EnGuardNuts_SetupWait(EnGuardNuts* this) { - EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT); this->state = GUARD_NUTS_WAIT_STATE; this->actionFunc = EnGuardNuts_Wait; } @@ -169,22 +176,22 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { // No place for an outsider this->guardTextIndex = 3; } - this->actor.textId = sTextIDs[this->guardTextIndex]; + this->actor.textId = sTextIds[this->guardTextIndex]; phi_a1 = this->actor.world.rot.y; if (D_80ABBE20 == 2) { EnGuardNuts_Burrow(this, play); return; } if (D_80ABBE20 == 1) { - if (this->animIndex != WALK_ANIM) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM); + if (this->animIndex != GUARD_NUTS_ANIM_WALK) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK); } phi_a1 = (this->actor.home.rot.y + 0x8000); } if (fabsf((f32)(this->actor.shape.rot.y - phi_a1)) < 100.0f) { this->actor.shape.rot.y = phi_a1; - if ((D_80ABBE20 == 1) && (this->animIndex != WALK_ANIM_2)) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM_2); + if ((D_80ABBE20 == 1) && (this->animIndex != GUARD_NUTS_ANIM_WALK_2)) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK_2); } } else { Math_SmoothStepToS(&this->actor.shape.rot.y, phi_a1, 1, 0xBB8, 0); @@ -199,7 +206,7 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { } void func_80ABB540(EnGuardNuts* this) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK); this->targetHeadPos.x = this->targetHeadPos.y = 0; this->timer = 16; this->state = GUARD_NUTS_TALKING_STATE; @@ -216,7 +223,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { if (fabsf((this->actor.shape.rot.y - yaw)) < 100.0f) { this->actor.shape.rot.y = yaw; curFrame = this->skelAnime.curFrame; - if ((curFrame < this->animFrameCount) || (this->guardTextIndex >= 7)) { + if ((curFrame < this->animEndFrame) || (this->guardTextIndex >= 7)) { SkelAnime_Update(&this->skelAnime); } } else { @@ -226,8 +233,8 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) { this->targetHeadPos.y = 0; this->targetHeadPos.x = 0; - if ((this->guardTextIndex == 3) && (this->animIndex == WAIT_HEAD_TILT_ANIM)) { - EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM); + if ((this->guardTextIndex == 3) && (this->animIndex == GUARD_NUTS_ANIM_WAIT_HEAD_TILT)) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT); } if (Message_ShouldAdvance(play)) { if (D_80ABBE38[this->guardTextIndex] != 1) { @@ -238,7 +245,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { EnGuardNuts_Burrow(this, play); } else { this->guardTextIndex++; - Message_StartTextbox(play, sTextIDs[this->guardTextIndex], &this->actor); + Message_StartTextbox(play, sTextIds[this->guardTextIndex], &this->actor); if (D_80ABBE38[this->guardTextIndex] == 2) { D_80ABBE20 = 1; } @@ -271,7 +278,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { void EnGuardNuts_Burrow(EnGuardNuts* this, PlayState* play) { Vec3f digPos; - EnGuardNuts_ChangeAnim(this, DIG_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_DIG); Math_Vec3f_Copy(&digPos, &this->actor.world.pos); digPos.y = this->actor.floorHeight; EffectSsHahen_SpawnBurst(play, &digPos, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -287,7 +294,7 @@ void EnGuardNuts_SetupUnburrow(EnGuardNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; SkelAnime_Update(&this->skelAnime); - if (this->animFrameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->state = GUARD_NUTS_BURROWED_STATE; this->actionFunc = EnGuardNuts_Unburrow; this->actor.world.rot.y = this->actor.home.rot.y; @@ -327,7 +334,7 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 20; } } - if ((this->animIndex == WALK_ANIM) && + if ((this->animIndex == GUARD_NUTS_ANIM_WALK) && (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h index 8cbe26f03..e07e70eaf 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h @@ -25,7 +25,7 @@ typedef struct EnGuardNuts { /* 0x228 */ Vec3f guardPos; /* 0x234 */ Vec3s headRot; /* 0x23A */ Vec3s targetHeadPos; - /* 0x240 */ f32 animFrameCount; + /* 0x240 */ f32 animEndFrame; /* 0x244 */ ColliderCylinder collider; } EnGuardNuts; // size = 0x290 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 28b37cc91..92afb3083 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -5,7 +5,6 @@ */ #include "z_en_guruguru.h" -#include "objects/object_fu/object_fu.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -62,9 +61,27 @@ static ColliderCylinderInit sCylinderInit = { { 15, 20, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { &gGuruGuruPlayStillAnim, &gGuruGuruPlayAndMoveHeadAnim }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP }; -static f32 sPlaySpeeds[] = { 1.0f, 1.0f }; +typedef enum { + /* 0 */ GURU_GURU_ANIM_PLAY_STILL, + /* 1 */ GURU_GURU_ANIM_PLAY_MOVE_HEAD, + /* 2 */ GURU_GURU_ANIM_MAX +} GuruGuruAnimation; + +static AnimationHeader* sAnimations[GURU_GURU_ANIM_MAX] = { + &gGuruGuruPlayStillAnim, // GURU_GURU_ANIM_PLAY_STILL + &gGuruGuruPlayAndMoveHeadAnim, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + +static u8 sAnimationModes[GURU_GURU_ANIM_MAX] = { + ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_STILL + ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + +static f32 sPlaySpeeds[GURU_GURU_ANIM_MAX] = { + 1.0f, // GURU_GURU_ANIM_PLAY_STILL + 1.0f, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + static TexturePtr sEyeTextures[] = { gGuruGuruEyeClosedTex, gGuruGuruEyeAngryTex }; static TexturePtr sMouthTextures[] = { gGuruGuruMouthOpenTex, gGuruGuruMouthAngryTex }; @@ -74,7 +91,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable, - this->morphTable, 16); + this->morphTable, GURU_GURU_LIMB_MAX); this->actor.targetMode = TARGET_MODE_0; if (this->actor.params != 2) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -106,8 +123,8 @@ void EnGuruguru_Destroy(Actor* thisx, PlayState* play) { } void EnGuruguru_ChangeAnim(EnGuruguru* this, s32 animIndex) { - this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->animEndFrame, sAnimationModes[animIndex], -4.0f); } @@ -115,7 +132,7 @@ void EnGuruguru_DoNothing(EnGuruguru* this, PlayState* play) { } void func_80BC6E10(EnGuruguru* this) { - EnGuruguru_ChangeAnim(this, 0); + EnGuruguru_ChangeAnim(this, GURU_GURU_ANIM_PLAY_STILL); this->textIdIndex = 0; this->unk270 = 0; if (this->actor.params == 0) { @@ -373,7 +390,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { s32 EnGuruguru_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGuruguru* this = THIS; - if (limbIndex == 14) { + if (limbIndex == GURU_GURU_LIMB_HEAD) { rot->x += this->headXRot; rot->z += this->headZRot; } diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h index 0158e3ddc..4913d4124 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h @@ -2,6 +2,7 @@ #define Z_EN_GURUGURU_H #include "global.h" +#include "objects/object_fu/object_fu.h" struct EnGuruguru; @@ -10,8 +11,8 @@ typedef void (*EnGuruguruActionFunc)(struct EnGuruguru*, PlayState*); typedef struct EnGuruguru { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[16]; - /* 0x1E8 */ Vec3s morphTable[16]; + /* 0x188 */ Vec3s jointTable[GURU_GURU_LIMB_MAX]; + /* 0x1E8 */ Vec3s morphTable[GURU_GURU_LIMB_MAX]; /* 0x248 */ EnGuruguruActionFunc actionFunc; /* 0x24C */ s16 headZRot; /* 0x24E */ s16 headXRot; @@ -22,7 +23,7 @@ typedef struct EnGuruguru { /* 0x264 */ s16 unusedTimer; // set to 6 and decremented, but never has any effect /* 0x266 */ s16 unk266; /* 0x268 */ s16 unk268; - /* 0x26C */ f32 frameCount; + /* 0x26C */ f32 animEndFrame; /* 0x270 */ u8 unk270; /* 0x272 */ s16 unk272; // set, but never used /* 0x274 */ s16 textIdIndex; 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 20be1b6c8..7e30676e2 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -631,7 +631,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->cutsceneAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE; + this->csAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE; if (this->drum != NULL) { Actor_Kill(this->drum); this->drum = NULL; @@ -639,50 +639,49 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { break; case 2: - this->cutsceneAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM; + this->csAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM; break; case 3: - this->cutsceneAnimIndex = EN_JG_ANIM_DRUM_IDLE; + this->csAnimIndex = EN_JG_ANIM_DRUM_IDLE; break; case 4: - this->cutsceneAnimIndex = EN_JG_ANIM_PLAYING_DRUM; + this->csAnimIndex = EN_JG_ANIM_PLAYING_DRUM; break; case 5: - this->cutsceneAnimIndex = EN_JG_ANIM_THINKING; + this->csAnimIndex = EN_JG_ANIM_THINKING; break; case 6: - this->cutsceneAnimIndex = EN_JG_ANIM_REMEMBERING; + this->csAnimIndex = EN_JG_ANIM_REMEMBERING; break; case 7: - this->cutsceneAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING; + this->csAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING; break; case 8: - this->cutsceneAnimIndex = EN_JG_ANIM_DEPRESSED; + this->csAnimIndex = EN_JG_ANIM_DEPRESSED; break; case 9: - this->cutsceneAnimIndex = EN_JG_ANIM_CRADLE; + this->csAnimIndex = EN_JG_ANIM_CRADLE; break; default: - this->cutsceneAnimIndex = EN_JG_ANIM_IDLE; + this->csAnimIndex = EN_JG_ANIM_IDLE; break; } - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->cutsceneAnimIndex); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } if (!(this->flags & FLAG_DRUM_SPAWNED) && - (((this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) && + (((this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) && (this->action != EN_JG_ACTION_LULLABY_INTRO_CS)) || - (((this->cutsceneAnimIndex == EN_JG_ANIM_DRUM_IDLE) || - (this->cutsceneAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) && + (((this->csAnimIndex == EN_JG_ANIM_DRUM_IDLE) || (this->csAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) && (this->action == EN_JG_ACTION_LULLABY_INTRO_CS)))) { this->flags |= FLAG_DRUM_SPAWNED; this->drum = Actor_SpawnAsChildAndCutscene( @@ -691,7 +690,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { this->actor.params, this->actor.csId, this->actor.halfDaysBits, NULL); } - if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { + if (this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { if (Animation_OnFrame(&this->skelAnime, 23.0f)) { Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_WOOD_BOUND_S); } else if (Animation_OnFrame(&this->skelAnime, 38.0f)) { diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.h b/src/overlays/actors/ovl_En_Jg/z_en_jg.h index b63f34dce..30c84973c 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h @@ -35,7 +35,7 @@ typedef struct EnJg { /* 0x3B0 */ Vec3f breathVelocity; /* 0x3BC */ Vec3f breathAccel; /* 0x3C8 */ s16 csId; - /* 0x3CA */ u8 cutsceneAnimIndex; + /* 0x3CA */ u8 csAnimIndex; /* 0x3CB */ u8 cueId; /* 0x3CC */ u16 flags; /* 0x3CE */ u16 textId; 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 694b9271d..b5819e333 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -17,7 +17,7 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play); void EnKgy_Update(Actor* thisx, PlayState* play); void EnKgy_Draw(Actor* thisx, PlayState* play); -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames); EnKbt* EnKgy_FindZubora(PlayState* play); ObjIcePoly* EnKgy_FindIceBlock(PlayState* play); void func_80B40D30(PlayState* play); @@ -109,7 +109,7 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); } -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames) { +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { static AnimationHeader* sAnimations[] = { &object_kgy_Anim_004B98, &object_kgy_Anim_0008FC, &object_kgy_Anim_00292C, &object_kgy_Anim_0042E4, &object_kgy_Anim_0101F0, &object_kgy_Anim_001764, &object_kgy_Anim_003334, &object_kgy_Anim_010B84, @@ -117,7 +117,7 @@ void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames) { }; Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); this->unk_2D2 = animIndex; } diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index 04b5b73b8..8113526f2 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -147,11 +147,11 @@ TexturePtr sMonkeyFaceTextures[] = { object_mnk_Tex_017120, object_mnk_Tex_017920, object_mnk_Tex_018120, }; -void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sMonkeyTiedUpAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), animMode, morphFrames); Animation_Change(&this->propSkelAnime, sMonkeyTiedUpPoleAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), animMode, morphFrames); switch (animIndex) { case MONKEY_TIEDUP_ANIM_KICKAROUND: @@ -184,11 +184,11 @@ void EnMnk_MonkeyTiedUp_SetNewAnim(EnMnk* this, s32 animIndex) { } } -void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sMonkeyHangingAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), animMode, morphFrames); Animation_Change(&this->propSkelAnime, sMonkeyHangingRopeAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), animMode, morphFrames); this->animIndex = animIndex; } @@ -196,7 +196,7 @@ void EnMnk_MonkeyHanging_SetAnim(EnMnk* this, s32 animIndex) { EnMnk_MonkeyHanging_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); } -void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { s32 pad; if (animIndex == 100) { @@ -204,10 +204,10 @@ void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrame } if ((animIndex == 4) || (animIndex == 6)) { Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], -1.0f, - Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, mode, morphFrames); + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, animMode, morphFrames); } else { Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), animMode, morphFrames); } this->unk_3E0 = 0; this->animIndex = animIndex; 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 ad20b3d07..9aa218e2f 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1182,37 +1182,40 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { this->cueId = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_IDLE; + this->csAnimIndex = EN_RAILGIBUD_ANIM_IDLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_IDLE); break; case 2: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START; + this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED2); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_START); break; case 3: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION; + this->csAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_CONVULSION); break; case 4: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START; + this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_START); break; case 5: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_WALK; + this->csAnimIndex = EN_RAILGIBUD_ANIM_WALK; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK); break; + + default: + break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) { - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP; + if (this->csAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) { + this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_LOOP); - } else if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) { - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP; + } else if (this->csAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) { + this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_LOOP); EnRailgibud_SetupSinkIntoGround(this); } diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h index 42b41ed8a..c9536d235 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -52,7 +52,7 @@ typedef struct EnRailgibud { /* 0x3EE */ s16 shouldWalkForwardNextFrame; // Only used by the "main" Gibdo /* 0x3F0 */ union { s16 grabState; - s16 cutsceneAnimIndex; + s16 csAnimIndex; }; /* 0x3F2 */ union { s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c8330232d..d54b83753 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7580,8 +7580,8 @@ 0x80949BD4:("EnClearTag_DrawEffects",), 0x8094DEE0:("func_8094DEE0",), 0x8094DF90:("func_8094DF90",), - 0x8094DFF8:("func_8094DFF8",), - 0x8094E054:("func_8094E054",), + 0x8094DFF8:("EnGm_UpdateSkelAnime",), + 0x8094E054:("EnGm_ChangeAnim",), 0x8094E0F8:("func_8094E0F8",), 0x8094E1DC:("func_8094E1DC",), 0x8094E278:("func_8094E278",), @@ -9696,7 +9696,7 @@ 0x80A12774:("EnGo_UpdateTalking",), 0x80A12868:("EnGo_DetectCollisions",), 0x80A12954:("EnGo_UpdateSpringArrivalCutscene",), - 0x80A12A64:("EnGo_UpdateAnimationToCurrent",), + 0x80A12A64:("EnGo_UpdateSkelAnime",), 0x80A12B78:("EnGo_UpdateSfx",), 0x80A12C48:("EnGo_ChangeAnim",), 0x80A12D6C:("EnGo_UpdateEyes",), @@ -15302,8 +15302,8 @@ 0x80BB1C8C:("func_80BB1C8C",), 0x80BB1D04:("func_80BB1D04",), 0x80BB1D64:("func_80BB1D64",), - 0x80BB1FCC:("func_80BB1FCC",), - 0x80BB2020:("func_80BB2020",), + 0x80BB1FCC:("EnGeg_UpdateSkelAnime",), + 0x80BB2020:("EnGeg_ChangeAnim",), 0x80BB2088:("func_80BB2088",), 0x80BB217C:("func_80BB217C",), 0x80BB221C:("func_80BB221C",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 4b224cf3f..90edb9bf5 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -14139,7 +14139,7 @@ 0x80B3A9E4:("D_80B3A9E4","f32","",0x4), 0x80B3A9E8:("D_80B3A9E8","f32","",0x4), 0x80B3BEE0:("En_Gg2_InitVars","UNK_TYPE1","",0x1), - 0x80B3BF00:("D_80B3BF00","UNK_TYPE4","",0x4), + 0x80B3BF00:("sAnimationInfo","UNK_TYPE4","",0x4), 0x80B3C080:("D_80B3C080","UNK_TYPE4","",0x4), 0x80B3C084:("D_80B3C084","UNK_TYPE4","",0x4), 0x80B3C088:("D_80B3C088","UNK_TYPE1","",0x1), From d4c41f02633ca059d93122fe750d77062984b099 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 26 Sep 2023 21:24:52 -0700 Subject: [PATCH 104/121] z_message_nes (1 NON_MATCHING) (#1394) * Bring over progress * Some docs * scratch urls + format * Fixes * Match Message_DrawTextNES * String macros * color structs --- include/functions.h | 21 +- include/macros.h | 1 + include/variables.h | 10 +- include/z64save.h | 17 +- spec | 1 - src/code/z_message.c | 8 +- src/code/z_message_nes.c | 1728 ++++++++++++++++++++++++++++++-- tools/disasm/functions.txt | 10 +- tools/disasm/variables.txt | 13 +- tools/sizes/code_functions.csv | 6 +- 10 files changed, 1707 insertions(+), 108 deletions(-) diff --git a/include/functions.h b/include/functions.h index c24ab583d..88d8468e9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1009,14 +1009,14 @@ void func_80148B98(PlayState* play, u8 arg1); void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); void func_80149C18(PlayState* play); // void Message_FindMessage(void); -void func_80149F74(PlayState* play, u32** ppuParm2); +void Message_DrawItemIcon(PlayState* play, Gfx** gfxP); void Message_HandleOcarina(PlayState* play); void func_8014ADBC(PlayState* play, UNK_PTR puParm2); void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); -void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos); +void Message_SetupLoadItemIcon(PlayState* play); // void func_8014CCB4(void); // void func_8014CDF0(void); -// void func_8014CFDC(void); +// void Message_SetupLoadItemIcon(void); void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_8014D62C(void); // void func_8014D7B4(void); @@ -1046,19 +1046,12 @@ void Message_Update(PlayState* play); void func_801586A4(PlayState* play); void Message_Init(PlayState* play); void Message_FindMessageNES(PlayState* play, u16 textId); -// void Message_LoadCharNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -// void Message_LoadPluralRupeesNES(void); -// void Message_LoadLocalizedRupeesNES(void); -// void Message_LoadRupeesNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -// void Message_LoadTimeNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void Message_LoadOwlWarpTextNES(void); -// void func_80159438(void); -void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3); -// void func_8015A144(void); -void func_8015B198(PlayState* play); +void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos); +void Message_DecodeNES(PlayState* play); +void Message_FindCreditsMessage(PlayState* play, u16 textId); void Message_FindCreditsMessage(PlayState* play, u16 textId); void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); -// void func_8015F8A8(UNK_TYPE4 ctxt); +void Message_DecodeCredits(PlayState* play); uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); diff --git a/include/macros.h b/include/macros.h index 46932a0a6..bc7439394 100644 --- a/include/macros.h +++ b/include/macros.h @@ -38,6 +38,7 @@ #define DAY_LENGTH (CLOCK_TIME(24, 0)) #define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000)) +#define TIME_TO_HOURS_F_ALT(time) (TIME_TO_MINUTES_F(time) / 60.0f) #define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f #define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f))) #define TIME_TO_SECONDS_F(time) ((time) * ((24.0f * 60.0f * 60.0f) / 0x10000)) diff --git a/include/variables.h b/include/variables.h index e071b2036..83427f55f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -334,9 +334,9 @@ extern char D_801D039C[]; // extern UNK_TYPE1 D_801D045A; // extern UNK_TYPE1 D_801D0462; //extern UNK_TYPE1 D_801D0468; -// extern UNK_TYPE1 D_801D0470; -// extern char D_801D06F0[]; -// extern UNK_TYPE1 D_801D0710; +// extern UNK_TYPE1 sNESFontWidths; +// extern char sRupeesTextLocalization[]; +// extern UNK_TYPE1 sRupeesTextLength; // extern char D_801D0714[]; // extern UNK_TYPE1 D_801D07C4; // extern UNK_TYPE1 D_801D07DC; @@ -348,8 +348,8 @@ extern char D_801D039C[]; // extern UNK_TYPE1 D_801D08CC; // extern UNK_TYPE1 D_801D08D8; // extern UNK_TYPE1 D_801D08E4; -// extern UNK_TYPE1 D_801D08E8; -// extern UNK_TYPE1 D_801D0900; +// extern UNK_TYPE1 sMaskCodeTextENG; +// extern UNK_TYPE1 sMaskCodeTextLengthENG; extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; // extern UNK_TYPE1 D_801D0B8C; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; diff --git a/include/z64save.h b/include/z64save.h index c8075d9ec..1db5a566d 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -154,12 +154,22 @@ typedef enum { /* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52 } HudVisibility; +// Based on sRupeesTextLocalization +typedef enum Language { + /* 0 */ LANGUAGE_JPN, + /* 1 */ LANGUAGE_ENG, + /* 2 */ LANGUAGE_GER, + /* 3 */ LANGUAGE_FRE, + /* 4 */ LANGUAGE_SPA, + /* 5 */ LANGUAGE_MAX +} Language; + typedef enum HighScore { /* 0 */ HS_BANK_RUPEES, /* 1 */ HS_UNK_1, /* 2 */ HS_FISHING, // Fishing flags /* 3 */ HS_BOAT_ARCHERY, - /* 4 */ HS_HOSRE_BACK_BALLOON, + /* 4 */ HS_HORSE_BACK_BALLOON, /* 5 */ HS_LOTTERY_GUESS, // Lottery code chosen by player (only uses lower three hex digits) /* 6 */ HS_SHOOTING_GALLERY, // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. /* 7 */ HS_MAX @@ -520,6 +530,7 @@ typedef enum { (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10)) #define HIGH_SCORE(type) (gSaveContext.save.saveInfo.highScores[(type)]) +#define GET_HIGH_SCORE(type) ((void)0, gSaveContext.save.saveInfo.highScores[(type)]) #define HS_GET_BANK_RUPEES() (HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF) #define HS_SET_BANK_RUPEES(rupees) (HIGH_SCORE(HS_BANK_RUPEES) = ((HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF0000) | (rupees))) @@ -529,8 +540,8 @@ typedef enum { #define HS_GET_BOAT_ARCHERY_HIGH_SCORE() ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) >> 0x10) #define HS_SET_BOAT_ARCHERY_HIGH_SCORE(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) | ((u16)(score) << 0x10))) -#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HOSRE_BACK_BALLOON)) -#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HOSRE_BACK_BALLOON) = (time)) +#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HORSE_BACK_BALLOON)) +#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HORSE_BACK_BALLOON) = (time)) #define HS_GET_LOTTERY_CODE_GUESS() (HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF) #define HS_SET_LOTTERY_CODE_GUESS(guess) (HIGH_SCORE(HS_LOTTERY_GUESS) = ((HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF0000) | ((guess) & 0xFFFF))) diff --git a/spec b/spec index ae8d89485..2e2878c69 100644 --- a/spec +++ b/spec @@ -531,7 +531,6 @@ beginseg include "build/data/code/z_message.data.o" include "build/data/code/z_message.bss.o" include "build/src/code/z_message_nes.o" - include "build/data/code/z_message_nes.data.o" include "build/src/code/z_message_staff.o" include "build/src/code/z_player_call.o" include "build/src/code/z_shrink_window.o" diff --git a/src/code/z_message.c b/src/code/z_message.c index 37e392aec..a922f237b 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -223,7 +223,7 @@ void Message_FindMessage(PlayState* play, u16 textId) { font->messageEnd = nextSegment - foundSegment; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149F74.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawItemIcon.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") @@ -272,7 +272,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CDF0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CFDC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s") @@ -363,7 +363,7 @@ void func_80151A68(PlayState* play, u16 textId) { msgCtx->msgLength = 0; func_80150D08(play, textId); func_80150A84(play); - func_8015B198(play); + Message_DecodeNES(play); msgCtx->msgMode = 0x45; msgCtx->textDelayTimer = 0; msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; @@ -548,7 +548,7 @@ void func_80153E7C(PlayState* play, Gfx** gfxP) { } else if (play->msgCtx.textIsCredits) { Message_DrawTextCredits(play, gfxP); } else { - func_8015966C(play, gfxP, 0); + Message_DrawTextNES(play, gfxP, 0); } } diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 1dcb16474..6ace9acc1 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -2,59 +2,20 @@ #include "message_data_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#if 0 - -//fontWidth -extern f32 D_801D0470[159]; - -//rupeesTextLocalization -u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN - { "rubin(e)" }, //DE - { "rubis" }, //FR - { "rupia(s)" } //SPA - }; - -// rupeesTextLength -u8 D_801D0710[4] = {8,8,5,8}; - -// sOwlWarpText -char D_801D0714[OWL_WARP_MAX][16] = { - "Great Bay Coast", // OWL_WARP_GREAT_BAY_COAST - "Zora Cape", // OWL_WARP_ZORA_CAPE - "Snowhead", // OWL_WARP_SNOWHEAD - "Mountain Village", // OWL_WARP_MOUNTAIN_VILLAGE - "Clock Town", // OWL_WARP_CLOCK_TOWN - "Milk Road", // OWL_WARP_MILK_ROAD - "Woodfall", // OWL_WARP_WOODFALL - "Southern Swamp", // OWL_WARP_SOUTHERN_SWAMP - "Ikana Canyon", // OWL_WARP_IKANA_CANYON - "Stone Tower", // OWL_WARP_STONE_TOWER - "Entrance", // OWL_WARP_ENTRANCE +// fontWidth +f32 sNESFontWidths[160] = { + 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, + 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, + 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f, + 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f, + 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f, + 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 6.0f, + 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 10.0f, 13.0f, 13.0f, + 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 10.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, + 4.0f, 4.0f, 4.0f, 4.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 11.0f, 6.0f, + 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, }; -// sOwlWarpTextLength -s16 D_801D07C4[OWL_WARP_MAX] = { - 15, // OWL_WARP_GREAT_BAY_COAST - 9, // OWL_WARP_ZORA_CAPE - 8, // OWL_WARP_SNOWHEAD - 16, // OWL_WARP_MOUNTAIN_VILLAGE - 10, // OWL_WARP_CLOCK_TOWN - 9, // OWL_WARP_MILK_ROAD - 8, // OWL_WARP_WOODFALL - 14, // OWL_WARP_SOUTHERN_SWAMP - 12, // OWL_WARP_IKANA_CANYON - 11, // OWL_WARP_STONE_TOWER - 8, // OWL_WARP_ENTRANCE -}; - -#endif - -extern f32 D_801D0470[159]; -extern u8 D_801D06F0[4][8]; -extern u8 D_801D0710[4]; -extern u8 D_801D0714[OWL_WARP_MAX][16]; -extern s16 D_801D07C4[OWL_WARP_MAX]; - void Message_FindMessageNES(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; Font* font = &msgCtx->font; @@ -102,7 +63,7 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse s32 o = *offset; f32 f = *arg3; - msgCtx->decodedBuffer.schar[p] = 0x20; + msgCtx->decodedBuffer.schar[p] = ' '; p++; Font_LoadCharNES(play, 'R', o); o += FONT_CHAR_TEX_SIZE; @@ -134,6 +95,25 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse *arg3 = f; } +#define RUPEES_STR_EN "Rupee(s)" +#define RUPEES_STR_DE "Rubin(e)" +#define RUPEES_STR_FR "Rubis" +#define RUPEES_STR_SPA "Rupia(s)" + +char sRupeesTextLocalization[LANGUAGE_MAX - 1][8] = { + RUPEES_STR_EN, // EN + RUPEES_STR_DE, // DE + RUPEES_STR_FR, // FR + RUPEES_STR_SPA, // SPA +}; + +u8 sRupeesTextLength[LANGUAGE_MAX - 1] = { + sizeof(RUPEES_STR_EN) - 1, + sizeof(RUPEES_STR_DE) - 1, + sizeof(RUPEES_STR_FR) - 1, + sizeof(RUPEES_STR_SPA) - 1, +}; + void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; @@ -144,15 +124,15 @@ void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* of msgCtx->decodedBuffer.schar[p] = ' '; p++; - for (j = 0; j < D_801D0710[gSaveContext.options.language - 1]; j++) { - Font_LoadCharNES(play, D_801D06F0[gSaveContext.options.language - 1][j], o); - msgCtx->decodedBuffer.schar[p] = D_801D06F0[gSaveContext.options.language - 1][j]; + for (j = 0; j < sRupeesTextLength[gSaveContext.options.language - 1]; j++) { + Font_LoadCharNES(play, sRupeesTextLocalization[gSaveContext.options.language - 1][j], o); + msgCtx->decodedBuffer.schar[p] = sRupeesTextLocalization[gSaveContext.options.language - 1][j]; o += FONT_CHAR_TEX_SIZE; p++; } p--; - f += 16.0f * msgCtx->textCharScale * (D_801D0710[gSaveContext.options.language - 1] + 1); + f += 16.0f * msgCtx->textCharScale * (sRupeesTextLength[gSaveContext.options.language - 1] + 1); *decodedBufPos = p; *offset = o; *arg3 = f; @@ -201,7 +181,7 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32 *arg3 = f; } -void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* decodedBufPos) { +void Message_LoadTimeNES(PlayState* play, u8 curChar, s32* offset, f32* arg3, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; s32 o = *offset; @@ -211,12 +191,11 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* f32 timeLeftInMinutes; s16 i; - if (arg1 == 0xCF) { + if (curChar == 0xCF) { timeLeft = TIME_UNTIL_MOON_CRASH; } else { timeLeft = TIME_UNTIL_NEW_DAY; } - timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft); digits[0] = 0; @@ -252,6 +231,46 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* *arg3 = f; } +#define GREAT_BAY_COAST_STR "Great Bay Coast" +#define ZORA_CAPE_STR "Zora Cape" +#define SNOWHEAD_STR "Snowhead" +#define MOUNTAIN_VILLAGE_STR "Mountain Village" +#define CLOCK_TOWN_STR "Clock Town" +#define MILK_ROAD_STR "Milk Road" +#define WOODFALL_STR "Woodfall" +#define SOUTHERN_SWAMP_STR "Southern Swamp" +#define IKANA_CANYON_STR "Ikana Canyon" +#define STONE_TOWER_STR "Stone Tower" +#define ENTRANCE_STR "Entrance" + +char sOwlWarpTextENG[OWL_WARP_MAX][16] = { + GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST + ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE + SNOWHEAD_STR, // OWL_WARP_SNOWHEAD + MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE + CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN + MILK_ROAD_STR, // OWL_WARP_MILK_ROAD + WOODFALL_STR, // OWL_WARP_WOODFALL + SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP + IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON + STONE_TOWER_STR, // OWL_WARP_STONE_TOWER + ENTRANCE_STR, // OWL_WARP_ENTRANCE +}; + +s16 sOwlWarpTextLengthENG[OWL_WARP_MAX] = { + sizeof(GREAT_BAY_COAST_STR) - 1, // OWL_WARP_GREAT_BAY_COAST + sizeof(ZORA_CAPE_STR) - 1, // OWL_WARP_ZORA_CAPE + sizeof(SNOWHEAD_STR) - 1, // OWL_WARP_SNOWHEAD + sizeof(MOUNTAIN_VILLAGE_STR) - 1, // OWL_WARP_MOUNTAIN_VILLAGE + sizeof(CLOCK_TOWN_STR) - 1, // OWL_WARP_CLOCK_TOWN + sizeof(MILK_ROAD_STR) - 1, // OWL_WARP_MILK_ROAD + sizeof(WOODFALL_STR) - 1, // OWL_WARP_WOODFALL + sizeof(SOUTHERN_SWAMP_STR) - 1, // OWL_WARP_SOUTHERN_SWAMP + sizeof(IKANA_CANYON_STR) - 1, // OWL_WARP_IKANA_CANYON + sizeof(STONE_TOWER_STR) - 1, // OWL_WARP_STONE_TOWER + sizeof(ENTRANCE_STR) - 1, // OWL_WARP_ENTRANCE +}; + void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; @@ -267,18 +286,18 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de } else { owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP]; } - stringLimit = D_801D07C4[owlWarpId]; + stringLimit = sOwlWarpTextLengthENG[owlWarpId]; for (i = 0; i < stringLimit; i++) { - msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i]; + msgCtx->decodedBuffer.schar[p] = sOwlWarpTextENG[owlWarpId][i]; currentChar = msgCtx->decodedBuffer.schar[p]; if (currentChar != ' ') { - Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o); + Font_LoadCharNES(play, sOwlWarpTextENG[owlWarpId][i], o); o += FONT_CHAR_TEX_SIZE; } currentChar = msgCtx->decodedBuffer.schar[p]; p++; - f += (D_801D0470[currentChar - ' '] * msgCtx->textCharScale); + f += (sNESFontWidths[currentChar - ' '] * msgCtx->textCharScale); } p--; @@ -288,8 +307,1585 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de *arg2 = f; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_80159438.s") +void Message_GetTimerDigitsNES(OSTime time, s16* digits) { + OSTime t = time; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015966C.s") + // 6 minutes + digits[0] = t / SECONDS_TO_TIMER(360); + t -= (digits[0] * SECONDS_TO_TIMER(360)); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015B198.s") + // minutes + digits[1] = t / SECONDS_TO_TIMER(60); + t -= (digits[1] * SECONDS_TO_TIMER(60)); + + digits[2] = '\''; + + // 10 seconds + digits[3] = t / SECONDS_TO_TIMER(10); + t -= digits[3] * SECONDS_TO_TIMER(10); + + // seconds + digits[4] = t / SECONDS_TO_TIMER(1); + t -= digits[4] * SECONDS_TO_TIMER(1); + + digits[5] = '"'; + + // 100 milliseconds + digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + + // 10 milliseconds + digits[7] = t; + + digits[0] += '0'; + digits[1] += '0'; + digits[3] += '0'; + digits[4] += '0'; + digits[6] += '0'; + digits[7] += '0'; +} + +Color_RGB16 D_801D07DC[] = { + { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 }, + { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D080C[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D083C[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D086C[] = { + { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D089C[] = { + { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +u8 D_801D08CC[] = { + 0x02, 0x01, 0x03, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x06, +}; + +void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { + MessageContext* msgCtx = &play->msgCtx; + u16 i; + u16 j; + Font* font = &msgCtx->font; + u16 charTexIndex; + u16 stateTimerHi; + Gfx* gfx = *gfxP; + u16 character; + s16 sp130; + s16 sp12E; + s16 sp12C; + s16 sp12A; + + msgCtx->textPosX = msgCtx->unk11F1A[0] + msgCtx->unk11FF8; + msgCtx->textPosY = msgCtx->unk11FFA; + + sp130 = 0; + if (!msgCtx->textIsCredits) { + msgCtx->textPosY = msgCtx->unk11FFA; + } else { + msgCtx->textPosY = 48; + } + + if (msgCtx->itemId != 0xFE) { + Message_DrawItemIcon(play, &gfx); + } + + msgCtx->textColorR = msgCtx->unk120C8; + msgCtx->textColorG = msgCtx->unk120CA; + msgCtx->textColorB = msgCtx->unk120CC; + + charTexIndex = 0; + + for (i = textDrawPos; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.schar[i]; + + switch (character) { + case 0x0: + if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: + case 0x8: + if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2) && + (character == 0x2)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + if (msgCtx->unk120D6) { + msgCtx->unk120D4 += 25; + if (msgCtx->unk120D4 >= 100) { + msgCtx->unk120D6 = false; + } + } else { + msgCtx->unk120D4 -= 25; + if (msgCtx->unk120D4 <= -100) { + msgCtx->unk120D6 = true; + } + } + + if (D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4 < 0) { + msgCtx->textColorR = 0; + } else { + msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4; + } + + if (D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4 >= 255) { + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g; + } else { + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4; + } + + if (D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4 < 0) { + msgCtx->textColorB = 0; + } else { + msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4; + } + + } else if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->textColorR = D_801D089C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D089C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D089C[(s16)(character - 1)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textColorR = D_801D086C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D086C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D086C[(s16)(character - 1)].b; + } else { + msgCtx->textColorR = D_801D080C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D080C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D080C[(s16)(character - 1)].b; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x20: // ` ` + msgCtx->textPosX += 6; + break; + + case 0x11: + msgCtx->textPosY += msgCtx->unk11FFC; + // fallthrough + case 0x13: + sp130++; + + msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8; + if (msgCtx->choiceNum == 1) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 16; + } else { + msgCtx->textPosX += 50; + } + } else if (msgCtx->choiceNum == 2) { + if (msgCtx->unk120D8 != 3) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 10; + } else { + msgCtx->textPosX += 57; + } + } else if (sp130 >= 2) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 10; + } else { + msgCtx->textPosX += 57; + } + } + } + continue; + + case 0x10: + case 0x12: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + msgCtx->unk120CE = msgCtx->textColorR; + msgCtx->unk120D0 = msgCtx->textColorG; + msgCtx->unk120D2 = msgCtx->textColorB; + } + *gfxP = gfx; + return; + + case 0x17: // MESSAGE_QUICKTEXT_ENABLE + if ((i + 1) == msgCtx->textDrawPos) { + j = i; + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26))) { + //! FAKE: + dummy:; + while (true) { + if ((msgCtx->decodedBuffer.schar[j] != 0x18) && (msgCtx->decodedBuffer.schar[j] != 0x1A) && + (msgCtx->decodedBuffer.schar[j] != 0x19) && (msgCtx->decodedBuffer.schar[j] != 0xE0) && + (msgCtx->decodedBuffer.schar[j] != 0x10) && (msgCtx->decodedBuffer.schar[j] != 0x12)) { + j++; + continue; + } + break; + } + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + } + break; + + case 0x18: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0x1B: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x1C: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->unk11F0C == 3) { + msgCtx->textboxEndType = 0x55; + } else { + msgCtx->textboxEndType = 0x50; + } + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x1D: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x52; + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x1E: // MESSAGE_SFX + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2]; + Audio_PlaySfx(stateTimerHi); + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos += 2; + } + i += 2; + break; + + case 0x1F: + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + msgCtx->msgMode = MSGMODE_9; + stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2]; + msgCtx->textDelayTimer = stateTimerHi; + } + i += 2; + break; + + case 0xA: + i++; + character = msgCtx->decodedBuffer.schar[i]; + switch (character) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + msgCtx->textDelay = character - 0x0; + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + } + break; + + case 0xC1: // MESSAGE_BACKGROUND + msgCtx->textPosX = 0x2D; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0xC1) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2, + (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + msgCtx->textPosX += 32; + break; + + case 0xC2: + msgCtx->textboxEndType = 0x10; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(font, 2); + if (msgCtx->unk120D8 != 3) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26); + } + } + break; + + case 0xC3: + msgCtx->textboxEndType = 0x11; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(font, 2); + if (msgCtx->unk120D8 != 3) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26); + } + } + break; + + case 0xCC: + msgCtx->textboxEndType = 0x60; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD0: + msgCtx->textboxEndType = 0x61; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD1: + msgCtx->textboxEndType = 0x62; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD2: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x41; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + break; + + case 0xD5: + msgCtx->textboxEndType = 0x63; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0x15: + case 0xBF: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == 0) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + if (character == 0xBF) { + Font_LoadMessageBoxEndIcon(font, 1); + } else { + Font_LoadMessageBoxEndIcon(font, 0); + } + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } else { + Audio_PlaySfx(NA_SE_NONE); + } + } + *gfxP = gfx; + return; + + case 0x1A: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x30; + } + *gfxP = gfx; + return; + + case 0x19: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x40; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + case 0xE0: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x42; + Font_LoadMessageBoxEndIcon(font, 1); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + switch (character) { + case 0x8169: + case 0x8175: + msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale); + break; + + case 0x8148: + case 0x8149: + msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale); + break; + + default: + break; + } + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { + Audio_PlaySfx(NA_SE_NONE); + } + if ((character >= 0xB0) && (character <= 0xBB)) { + sp12E = msgCtx->textColorR; + sp12C = msgCtx->textColorG; + sp12A = msgCtx->textColorB; + msgCtx->textColorR = D_801D083C[(s16)D_801D08CC[character - 0xB0]].r; + msgCtx->textColorG = D_801D083C[(s16)D_801D08CC[character - 0xB0]].g; + msgCtx->textColorB = D_801D083C[(s16)D_801D08CC[character - 0xB0]].b; + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + msgCtx->textColorR = sp12E; + msgCtx->textColorG = sp12C; + msgCtx->textColorB = sp12A; + } else if (msgCtx->msgMode >= MSGMODE_OWL_SAVE_0) { + if ((i < (msgCtx->decodedTextLen - 6)) || (i >= (msgCtx->decodedTextLen - 4))) { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + } else { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + charTexIndex += FONT_CHAR_TEX_SIZE; + + //! @TODO: u8 character but > 0x255 cases + switch (character) { + case 0x8144: + msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale); + break; + + case 0x816A: + case 0x8176: + msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale); + break; + + case 0x8141: + case 0x8142: + case 0x8168: + msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale); + break; + + case 0x8194: + msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale); + break; + + default: + if (((msgCtx->textboxEndType == 0x62) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 4) >= i)) || + ((msgCtx->textboxEndType == 0x63) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 2) >= i)) || + ((msgCtx->textboxEndType == 0x60) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 2) >= i)) || + ((msgCtx->textboxEndType == 0x61) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 1) >= i))) { + msgCtx->textPosX += (s32)(16.0f * msgCtx->textCharScale); + } else { + msgCtx->textPosX += (s32)(sNESFontWidths[character - ' '] * msgCtx->textCharScale); + } + break; + } + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = 0; + if (msgCtx->msgMode == MSGMODE_9) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + } + } else { + msgCtx->textDelayTimer--; + } + + *gfxP = gfx; +} + +char D_801D08D8[][4] = { + "Fast", + "----", + "Slow", +}; + +u8 D_801D08E4[] = { + 0x01, + 0x03, + 0x04, + 0x02, +}; + +#define RED_STR "RED" +#define BLUE_STR "BLUE" +#define YELLOW_STR "YELLOW" +#define GREEN_STR "GREEN" + +char sMaskCodeTextENG[][6] = { + RED_STR, + BLUE_STR, + YELLOW_STR, + GREEN_STR, +}; + +u8 sMaskCodeTextLengthENG[] = { + sizeof(RED_STR) - 1, + sizeof(BLUE_STR) - 1, + sizeof(YELLOW_STR) - 1, + sizeof(GREEN_STR) - 1, +}; + +#ifdef NON_MATCHING +// https://decomp.me/scratch/w2ckG +void Message_DecodeNES(PlayState* play) { + f32 var_fs0; + MessageContext* msgCtx = &play->msgCtx; + u8* ptr; + Font* font = &msgCtx->font; // spE0 + Player* player; // spDC + s16 decodedBufPos; // spDA + s16 value; + u32 timeToMoonCrash; + s16 i; // s1 + s16 spD0; // numLines + s16 digits[4]; // spC8/CA/CC/CE + s16 spC6; + f32 timeInSeconds; + s32 charTexIdx; // spBC + s16 loadChar; + s16 spA8[8]; + f32 spA4; + s16 playerNameLen; // s0 + s16 var_v1_3; + u8 curChar; // sp78 + s8 charOffset; + s16 temp_s2_2; + s16 var_s2_9; + + player = GET_PLAYER(play); + decodedBufPos = 0; + spC6 = 0; + charTexIdx = 0; + spD0 = 0; + msgCtx->textDelayTimer = 0; + msgCtx->textDelay = msgCtx->textDelayTimer; + msgCtx->textFade = 0; + spA4 = 0.0f; + font->unk_11D88 = (font->unk_11D88 ^ 1) & 1; + Message_SetupLoadItemIcon(play); + + while (true) { + curChar = font->msgBuf.schar[msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos]; + + if ((curChar == 0x10) || (curChar == 0x12) || (curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D) || + (curChar == 0x19) || (curChar == 0xE0) || (curChar == 0xBF) || (curChar == 0x15) || (curChar == 0x1A)) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + msgCtx->unk11FFA = msgCtx->textboxY + 2; + } else { + msgCtx->unk11FFA = msgCtx->textboxY + 8; + } + msgCtx->unk11F1A[spC6] = 0; + if (msgCtx->unk11F18 != 0) { + msgCtx->unk11F1A[spC6] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) / 2; + } + spA4 = 0.0f; + if (curChar == 0x12) { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spD0 < 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(10); + } else if (spD0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(11); + } else if (spD0 == 3) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(12); + } + } + } else { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spD0 == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(10); + } else if (spD0 == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(11); + } else if (spD0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(12); + } + } + } + + //! FAKE: Perhaps a locally required temp for scoping + dummy:; + if ((curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D)) { + //! FAKE: & 0xFFFF to fix regalloc + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1] & 0xFFFF; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2]; + msgCtx->msgBufPos += 3; + } + msgCtx->decodedTextLen = decodedBufPos; + msgCtx->unk120D8 = spD0; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + msgCtx->unk120C8 = msgCtx->unk120CE; + msgCtx->unk120CA = msgCtx->unk120D0; + msgCtx->unk120CC = msgCtx->unk120D2; + break; + } else if (curChar == 0x16) { + // Substitute the player name control character for the file's player name. + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + curChar = gSaveContext.save.saveInfo.playerData.playerName[i]; + if (curChar == 0x3E) { + curChar = ' '; + } else if (curChar == 0x40) { + curChar = '.'; + } else if (curChar == 0x3F) { + curChar = '-'; + } else if (curChar < 0xA) { + charOffset = curChar; + curChar = '0' + charOffset; + } else if (curChar < 0x24) { + charOffset = curChar; + curChar = 'A' - 10 + charOffset; + } else if (curChar < 0x3E) { + charOffset = curChar; + curChar = 'a' - 36 + charOffset; + } + if (curChar != ' ') { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = curChar; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xC1) { + //! TODO: + 0x900 on the first one? + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + spD0 = 2; + spC6 = 2; + msgCtx->unk12012 = msgCtx->textboxY + 8; + msgCtx->unk11F18 = 1; + msgCtx->unk12010 = XREG(47); + } else if (curChar == 0xC2) { + msgCtx->unk11F18 = 0; + msgCtx->choiceNum = 2; + } else if (curChar == 0xC3) { + msgCtx->unk11F18 = 0; + msgCtx->choiceNum = 3; + msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16; + } else if (curChar == 0xC4) { + Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8); + + loadChar = false; + for (i = 0; i < 5; i++) { + if ((i == 1) || (spA8[i + 3] != '0')) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, spA8[i + 3], &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if ((curChar == 0xC5) || (curChar == 0xC6) || (curChar == 0xC7) || (curChar == 0xC8) || + (curChar == 0xC9)) { + Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8); + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '0'))) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, spA8[i], &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0xCA) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x22; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, 0x27, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27; + } + } + spA4 += 6 * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xCB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = Flags_GetAllTreasure(play); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if (curChar == 0xCC) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 2; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + + for (i = 0; i < 3; i++) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + Message_LoadLocalizedRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xCD) { + digits[0] = digits[1] = 0; + digits[2] = msgCtx->bankRupeesSelected; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupeesSelected); + } else if (curChar == 0xCE) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = msgCtx->bankRupees; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupees); + } else if (curChar == 0xCF) { + Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos); + } else if (curChar == 0xC) { + digits[0] = digits[1] = 0; + digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 1) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 21)) { + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 2) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 22)) { + Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 3) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 23)) { + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else { + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xD) { + digits[0] = digits[1] = 0; + digits[2] = Inventory_GetSkullTokenCount(play->sceneId); + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + if ((Inventory_GetSkullTokenCount(play->sceneId) == 1) || + (Inventory_GetSkullTokenCount(play->sceneId) == 21)) { + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 2) || + (Inventory_GetSkullTokenCount(play->sceneId) == 22)) { + Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 3) || + (Inventory_GetSkullTokenCount(play->sceneId) == 23)) { + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else { + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xE) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + decodedBufPos--; + } else if (curChar == 0xF) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0xD0) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + for (i = 0; i < 2; i++) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xD1) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 5; i++) { + msgCtx->unk12054[i] = 1; + Message_LoadCharNES(play, '1', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xD3) { + if (gSaveContext.save.timeSpeedOffset == 18) { + var_s2_9 = 0; + } else if (gSaveContext.save.timeSpeedOffset == 0) { + var_s2_9 = 1; + } else { + var_s2_9 = 2; + } + + for (i = 0; i < 4; i++) { + msgCtx->decodedBuffer.schar[decodedBufPos] = D_801D08D8[var_s2_9][i]; + Font_LoadCharNES(play, D_801D08D8[var_s2_9][i], charTexIdx); + decodedBufPos++; + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos--; + spA4 += 3.0f * (16.0f * msgCtx->textCharScale); + msgCtx->choiceIndex = var_s2_9; + } else if (curChar == 0xD4) { + Message_LoadOwlWarpTextNES(play, &charTexIdx, &spA4, &decodedBufPos); + } else if (curChar == 0xD5) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 3; i++) { + msgCtx->unk12054[i] = 1; + Font_LoadCharNES(play, '1', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '1'; + spA4 += 16.0f * msgCtx->textCharScale; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xD6) { + for (i = 0; i < 6; i++) { + msgCtx->decodedBuffer.schar[decodedBufPos] = + (s8)D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])]; + decodedBufPos++; + Message_LoadCharNES(play, i + '1', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = 0; + } else if ((curChar >= 0xD7) && (curChar < 0xDB)) { + digits[0] = digits[1] = 0; + digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0xD7]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + } else if (curChar == 0xDB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xDC) || (curChar == 0xDD)) { + if (curChar == 0xDC) { + digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]; + digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]; + digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]; + } else { + digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8; + digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4; + digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF; + } + + for (i = 0; i < 3; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if (curChar == 0xDE) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)]; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xDF) { + for (i = 0; i < 5; i++) { + digits[i] = gSaveContext.save.saveInfo.bomberCode[i]; + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if ((curChar >= 0xE1) && (curChar < 0xE7)) { + msgCtx->decodedBuffer.schar[decodedBufPos] = + D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])]; + temp_s2_2 = sMaskCodeTextLengthENG[( + (void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])]; + decodedBufPos++; + + for (i = 0; i < temp_s2_2; i++) { + Message_LoadCharNES( + play, + sMaskCodeTextENG[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])] + [i], + &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + + msgCtx->decodedBuffer.schar[decodedBufPos] = 0; + } else if (curChar == 0xE7) { + timeToMoonCrash = TIME_UNTIL_MOON_CRASH; + digits[0] = 0; + digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash); + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + loadChar = false; + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + msgCtx->decodedBuffer.schar[decodedBufPos] = ' '; + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'o', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'u', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + if ((digits[0] != 0) || (digits[1] != 1)) { + decodedBufPos++; + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xE8) { + Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos); + + } else if ((curChar == 0xF0) || (curChar == 0xF1) || (curChar == 0xF2) || (curChar == 0xF8)) { + if (curChar == 0xF8) { + value = (s32)HS_GET_HIGH_SCORE_3_LOWER(); + } else { + value = HIGH_SCORE(curChar - 0xF0); + } + if (curChar == 0xF2) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + } + digits[3] = value; + digits[0] = digits[1] = digits[2] = 0; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xF7) || (curChar == 0xF9) || (curChar == 0xFA) || (curChar == 0xFB) || + (curChar == 0xFC)) { + var_fs0 = 8.0f; + if (curChar == 0xF7) { + Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_UNK_1), spA8); + } else if (curChar == 0xF9) { + Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spA8); + } else { + Message_GetTimerDigitsNES( + ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0xFA]), spA8); + } + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, spA8[i], charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = spA8[i]; + decodedBufPos++; + } else { + var_fs0 -= 1.0f; + } + } + spA4 += var_fs0 * (16.0f * msgCtx->textCharScale); + decodedBufPos--; + } else if ((curChar == 0xF3) || (curChar == 0xF4) || (curChar == 0xF5)) { + value = HIGH_SCORE(curChar - 0xF3 + HS_BOAT_ARCHERY); + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, 0x27, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27; + } + } + spA4 += 4.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xF6) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xFD) || (curChar == 0xFE) || (curChar == 0xFF)) { + for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) { + if (gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.schar[decodedBufPos + i] = 0xFD; + + for (var_v1_3 = 0; var_v1_3 < FONT_CHAR_TEX_SIZE; var_v1_3 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 0] = ptr[var_v1_3 + 0]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 1] = ptr[var_v1_3 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 2] = ptr[var_v1_3 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 3] = ptr[var_v1_3 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spA4 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if (curChar == 0x14) { + decodedBufPos--; + for (i = 0; i < font->msgBuf.schar[msgCtx->msgBufPos + 1]; i++) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = ' '; + spA4 += 6.0f; + } + msgCtx->msgBufPos++; + } else if ((curChar == 0x13) || (curChar == 0x11)) { + msgCtx->unk11F1A[spC6] = 0; + if (msgCtx->unk11F18 != 0) { + msgCtx->unk11F1A[spC6] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) * 0.5f; + } + spC6++; + spA4 = 0.0f; + if (curChar == 0x11) { + spD0++; + } + } else if ((curChar == 0x17) || (curChar == 0x18) || (curChar == 0x1A)) { + // pass + } else if (curChar == 0xA) { + decodedBufPos++; + } else if (curChar == 0x1C) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x1E) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + Audio_PlaySfx((msgCtx->decodedBuffer.schar[decodedBufPos - 1] << 8) | + msgCtx->decodedBuffer.schar[decodedBufPos]); + } + } else if (curChar == 0x1F) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if ((curChar != 0x20) && (curChar >= 9)) { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + spA4 += sNESFontWidths[curChar - ' '] * msgCtx->textCharScale; + } else if (curChar == 0x20) { + spA4 += 6.0f; + } + decodedBufPos++; + msgCtx->msgBufPos++; + } +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/Message_DecodeNES.s") +#endif diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d54b83753..d7350076d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2838,14 +2838,14 @@ 0x8014995C:("Message_DrawTextChar",), 0x80149C18:("func_80149C18",), 0x80149EBC:("Message_FindMessage",), - 0x80149F74:("func_80149F74",), + 0x80149F74:("Message_DrawItemIcon",), 0x8014AAD0:("Message_HandleOcarina",), 0x8014ADBC:("func_8014ADBC",), 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), 0x8014CDF0:("func_8014CDF0",), - 0x8014CFDC:("func_8014CFDC",), + 0x8014CFDC:("Message_SetupLoadItemIcon",), 0x8014D304:("func_8014D304",), 0x8014D62C:("func_8014D62C",), 0x8014D7B4:("func_8014D7B4",), @@ -2881,9 +2881,9 @@ 0x80158D98:("Message_LoadRupeesNES",), 0x80158FB0:("Message_LoadTimeNES",), 0x8015926C:("Message_LoadOwlWarpTextNES",), - 0x80159438:("func_80159438",), - 0x8015966C:("func_8015966C",), - 0x8015B198:("func_8015B198",), + 0x80159438:("Message_GetTimerDigitsNES",), + 0x8015966C:("Message_DrawTextNES",), + 0x8015B198:("Message_DecodeNES",), 0x8015E750:("Message_FindCreditsMessage",), 0x8015E7EC:("Message_DrawTextCredits",), 0x8015F8A8:("Message_DecodeCredits",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 90edb9bf5..f5905b769 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2058,10 +2058,10 @@ 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1), 0x801D0462:("D_801D0462","UNK_TYPE1","",0x1), 0x801D0468:("D_801D0468","UNK_TYPE1","",0x1), - 0x801D0470:("D_801D0470","UNK_TYPE1","",0x1), - 0x801D06F0:("D_801D06F0","char","[]",0x18), + 0x801D0470:("sNESFontWidths","UNK_TYPE1","",0x1), + 0x801D06F0:("sRupeesTextLocalization","char","[]",0x18), 0x801D0708:("D_801D0708","char","[]",1), - 0x801D0710:("D_801D0710","UNK_TYPE1","",0x1), + 0x801D0710:("sRupeesTextLength","UNK_TYPE1","",0x1), 0x801D0714:("D_801D0714","char","[]",0x1), 0x801D0724:("D_801D0724","char","[]",0x1), 0x801D0730:("D_801D0730","char","[]",0x1), @@ -2083,14 +2083,13 @@ 0x801D07DC:("D_801D07DC","UNK_TYPE1","",0x1), 0x801D080C:("D_801D080C","UNK_TYPE1","",0x1), 0x801D083C:("D_801D083C","UNK_TYPE1","",0x1), - 0x801D086C:("D_801D086C","UNK_TYPE1","",0x1), - 0x801D0890:("D_801D0890","UNK_TYPE1","",0x1), + 0x801D086C:("D_801D086C","UNK_TYPE1","",0x30), 0x801D089C:("D_801D089C","UNK_TYPE1","",0x1), 0x801D08CC:("D_801D08CC","UNK_TYPE1","",0x1), 0x801D08D8:("D_801D08D8","UNK_TYPE1","",0x1), 0x801D08E4:("D_801D08E4","UNK_TYPE1","",0x1), - 0x801D08E8:("D_801D08E8","UNK_TYPE1","",0x1), - 0x801D0900:("D_801D0900","UNK_TYPE1","",0x1), + 0x801D08E8:("sMaskCodeTextENG","UNK_TYPE1","",0x1), + 0x801D0900:("sMaskCodeTextLengthENG","UNK_TYPE1","",0x1), 0x801D0B50:("Player_InitVars","ActorInit","",0x20), 0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38), 0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 767d81514..caaa33d73 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2350,16 +2350,16 @@ asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5 asm/non_matchings/code/z_message/func_8014995C.s,func_8014995C,0x8014995C,0xAF -asm/non_matchings/code/z_message/func_80149C18.s,func_80149C18,0x80149C18,0xA9 +asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149C18,0xA9 asm/non_matchings/code/z_message/Message_FindMessage.s,Message_FindMessage,0x80149EBC,0x2E -asm/non_matchings/code/z_message/func_80149F74.s,func_80149F74,0x80149F74,0x2D7 +asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149F74,0x2D7 asm/non_matchings/code/z_message/func_8014AAD0.s,func_8014AAD0,0x8014AAD0,0xBB asm/non_matchings/code/z_message/func_8014ADBC.s,func_8014ADBC,0x8014ADBC,0x654 asm/non_matchings/code/z_message/func_8014C70C.s,func_8014C70C,0x8014C70C,0x142 asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28 asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F asm/non_matchings/code/z_message/func_8014CDF0.s,func_8014CDF0,0x8014CDF0,0x7B -asm/non_matchings/code/z_message/func_8014CFDC.s,func_8014CFDC,0x8014CFDC,0xCA +asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s,Message_SetupLoadItemIcon,0x8014CFDC,0xCA asm/non_matchings/code/z_message/func_8014D304.s,func_8014D304,0x8014D304,0xCA asm/non_matchings/code/z_message/func_8014D62C.s,func_8014D62C,0x8014D62C,0x62 asm/non_matchings/code/z_message/func_8014D7B4.s,func_8014D7B4,0x8014D7B4,0xCB4 From 0fdd63a350c47b5da87a58f00855bc95b6a32b47 Mon Sep 17 00:00:00 2001 From: Zach North Date: Wed, 27 Sep 2023 23:19:28 -0400 Subject: [PATCH 105/121] Document object_mk (#1389) * Updated object_mk animation, limb, and skeleton names * Updated object_mk texture and DList names * Added comment to object_mk.xml * Remove "ing" from Anim names Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update z_en_mk.c to not use "ing" in names * Running formatter --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_mk.xml | 83 +++++++++++++------------ src/overlays/actors/ovl_En_Mk/z_en_mk.c | 12 ++-- src/overlays/actors/ovl_En_Mk/z_en_mk.h | 4 +- 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/assets/xml/objects/object_mk.xml b/assets/xml/objects/object_mk.xml index 087fcc9e0..457eadf28 100644 --- a/assets/xml/objects/object_mk.xml +++ b/assets/xml/objects/object_mk.xml @@ -1,45 +1,46 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 ac816517c..43f9a3d99 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -57,8 +57,8 @@ static ColliderCylinderInit sCylinderInit = { s32 func_809592E0(EnMk* this, s16 index) { AnimationHeader* sAnimations[] = { - &object_mk_Anim_001C38, &object_mk_Anim_000438, &object_mk_Anim_0007D8, - &object_mk_Anim_0010F4, &object_mk_Anim_001964, + &gMarineResearcherIdleAnim, &gMarineResearcherHeadWaggleAnim, &gMarineResearcherYellAnim, + &gMarineResearcherShakeInFearAnim, &gMarineResearcherStrokeChinAnim, }; if (index == this->unk_27C) { @@ -82,8 +82,8 @@ void EnMk_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -4.0f; this->actor.gravity = -1.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_mk_Skel_006CA0, &object_mk_Anim_001C38, this->jointTable, - this->morphTable, OBJECT_MK_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gMarineResearcherSkel, &gMarineResearcherIdleAnim, this->jointTable, + this->morphTable, MARINE_RESEARCHER_LIMB_MAX); this->unk_27C = -1; func_809592E0(this, 0); @@ -463,7 +463,7 @@ void EnMk_Update(Actor* thisx, PlayState* play) { s32 EnMk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnMk* this = THIS; - if (limbIndex == OBJECT_MK_LIMB_0B) { + if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) { rot->y -= this->unk_270.y; rot->z += this->unk_270.x; } @@ -475,7 +475,7 @@ Vec3f D_8095A2A0 = { 1000.0f, -100.0f, 0.0f }; void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnMk* this = THIS; - if (limbIndex == OBJECT_MK_LIMB_0B) { + if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) { Matrix_MultVec3f(&D_8095A2A0, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.h b/src/overlays/actors/ovl_En_Mk/z_en_mk.h index 518b0406d..9d32e9374 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h @@ -12,8 +12,8 @@ typedef struct EnMk { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; - /* 0x1D4 */ Vec3s jointTable[OBJECT_MK_LIMB_MAX]; - /* 0x222 */ Vec3s morphTable[OBJECT_MK_LIMB_MAX]; + /* 0x1D4 */ Vec3s jointTable[MARINE_RESEARCHER_LIMB_MAX]; + /* 0x222 */ Vec3s morphTable[MARINE_RESEARCHER_LIMB_MAX]; /* 0x270 */ Vec3s unk_270; /* 0x276 */ s16 csIdList[2]; /* 0x27A */ u16 unk_27A; From 408a1bba5d879dd43ba40c279c0277c9d5bf78ac Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 12:58:00 +1000 Subject: [PATCH 106/121] Player Docs: Initial framework for "Action Change Lists" (#1397) * copy fig docs * adjust wording * another fix * fix bool * PR Suggestion --- .../actors/ovl_player_actor/z_player.c | 408 +++++++++++++----- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 26 +- 3 files changed, 318 insertions(+), 148 deletions(-) diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 22fca02c8..8c1de93e5 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -233,21 +233,21 @@ void Player_InitItemAction_SpawnExplosive(PlayState* play, Player* this); void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this); void Player_InitItemAction_5(PlayState* play, Player* this); -s32 func_80839518(Player* this, PlayState* play); -s32 func_808365DC(Player* this, PlayState* play); -s32 func_8083D23C(Player* this, PlayState* play); -s32 func_8083CCB4(Player* this, PlayState* play); -s32 func_808391D8(Player* this, PlayState* play); -s32 func_8083DFC4(Player* this, PlayState* play); -s32 func_8083A114(Player* this, PlayState* play); -s32 func_80848570(Player* this, PlayState* play); -s32 func_8083A580(Player* this, PlayState* play); -s32 func_8083D78C(Player* this, PlayState* play); -s32 func_80839B18(Player* this, PlayState* play); -s32 func_8083A274(Player* this, PlayState* play); -s32 func_80834DFC(Player* this, PlayState* play); -s32 func_80838A90(Player* this, PlayState* play); -s32 func_8083A0CC(Player* this, PlayState* play); +s32 Player_ActionChange_0(Player* this, PlayState* play); +s32 Player_ActionChange_1(Player* this, PlayState* play); +s32 Player_ActionChange_2(Player* this, PlayState* play); +s32 Player_ActionChange_3(Player* this, PlayState* play); +s32 Player_ActionChange_4(Player* this, PlayState* play); +s32 Player_ActionChange_5(Player* this, PlayState* play); +s32 Player_ActionChange_6(Player* this, PlayState* play); +s32 Player_ActionChange_7(Player* this, PlayState* play); +s32 Player_ActionChange_8(Player* this, PlayState* play); +s32 Player_ActionChange_9(Player* this, PlayState* play); +s32 Player_ActionChange_10(Player* this, PlayState* play); +s32 Player_ActionChange_11(Player* this, PlayState* play); +s32 Player_ActionChange_12(Player* this, PlayState* play); +s32 Player_ActionChange_13(Player* this, PlayState* play); +s32 Player_ActionChange_14(Player* this, PlayState* play); /* Init Mode functions */ void Player_InitMode_0(PlayState* play, Player* this); @@ -4817,37 +4817,203 @@ s32 Player_GetMovementSpeedAndYaw(Player* this, f32* outSpeedTarget, s16* outYaw return false; } - *outYawTarget += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + *outYawTarget += Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); return true; } +typedef enum ActionChangeIndex { + /* 0x0 */ PLAYER_ACTION_CHG_0, + /* 0x1 */ PLAYER_ACTION_CHG_1, + /* 0x2 */ PLAYER_ACTION_CHG_2, + /* 0x3 */ PLAYER_ACTION_CHG_3, + /* 0x4 */ PLAYER_ACTION_CHG_4, + /* 0x5 */ PLAYER_ACTION_CHG_5, + /* 0x6 */ PLAYER_ACTION_CHG_6, + /* 0x7 */ PLAYER_ACTION_CHG_7, + /* 0x8 */ PLAYER_ACTION_CHG_8, + /* 0x9 */ PLAYER_ACTION_CHG_9, + /* 0xA */ PLAYER_ACTION_CHG_10, + /* 0xB */ PLAYER_ACTION_CHG_11, + /* 0xC */ PLAYER_ACTION_CHG_12, + /* 0xD */ PLAYER_ACTION_CHG_13, + /* 0xE */ PLAYER_ACTION_CHG_14, + /* 0xF */ PLAYER_ACTION_CHG_MAX +} ActionChangeIndex; + /** - * The values of following arrays are used as indices for the `D_8085D054` array. + * The values of following arrays are used as indices for the `sPlayerActionChangeFuncs` array. * Each index correspond to a function which will be called sequentially until any of them return `true`. * Negative marks the end of the array. */ -s8 D_8085CFE4[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; -s8 D_8085CFEC[] = { 13, 1, 2, 5, 3, 4, 9, 10, 11, 7, 8, -6 }; -s8 D_8085CFF8[] = { 13, 1, 2, 3, 4, 9, 10, 11, 8, 7, -6 }; -s8 D_8085D004[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; -s8 D_8085D00C[] = { 13, 2, 4, 9, 10, 11, 12, 8, -7 }; -s8 D_8085D018[] = { -7 }; -s8 D_8085D01C[] = { 0, 11, 1, 2, 3, 5, 4, 9, 8, 7, -6 }; -s8 D_8085D028[] = { 0, 11, 1, 2, 3, 12, 5, 4, 9, 8, 7, -6 }; -s8 D_8085D034[] = { 13, 1, 2, 3, 12, 5, 4, 9, 10, 11, 8, 7, -6 }; -s8 D_8085D044[] = { 10, 8, -7 }; -s8 D_8085D048[] = { 0, 12, 5, 4, -14 }; -s8 D_8085D050[] = { 13, 2, -4 }; - -s32 (*D_8085D054[])(Player*, PlayState*) = { - func_80839518, func_808365DC, func_8083D23C, func_8083CCB4, func_808391D8, - func_8083DFC4, func_8083A114, func_80848570, func_8083A580, func_8083D78C, - func_80839B18, func_8083A274, func_80834DFC, func_80838A90, func_8083A0CC, +s8 sPlayerActionChangeList1[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_8, + /* 7 */ -PLAYER_ACTION_CHG_7, }; -s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { +s8 sPlayerActionChangeList2[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_5, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_4, + /* 6 */ PLAYER_ACTION_CHG_9, + /* 7 */ PLAYER_ACTION_CHG_10, + /* 8 */ PLAYER_ACTION_CHG_11, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ PLAYER_ACTION_CHG_8, + /* 11 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList3[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_3, + /* 4 */ PLAYER_ACTION_CHG_4, + /* 5 */ PLAYER_ACTION_CHG_9, + /* 6 */ PLAYER_ACTION_CHG_10, + /* 7 */ PLAYER_ACTION_CHG_11, + /* 8 */ PLAYER_ACTION_CHG_8, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList4[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_8, + /* 7 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList5[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_12, + /* 7 */ PLAYER_ACTION_CHG_8, + /* 8 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList6[] = { + /* 0 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList7[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_11, + /* 2 */ PLAYER_ACTION_CHG_1, + /* 3 */ PLAYER_ACTION_CHG_2, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_5, + /* 6 */ PLAYER_ACTION_CHG_4, + /* 7 */ PLAYER_ACTION_CHG_9, + /* 8 */ PLAYER_ACTION_CHG_8, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList8[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_11, + /* 2 */ PLAYER_ACTION_CHG_1, + /* 3 */ PLAYER_ACTION_CHG_2, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_12, + /* 6 */ PLAYER_ACTION_CHG_5, + /* 7 */ PLAYER_ACTION_CHG_4, + /* 8 */ PLAYER_ACTION_CHG_9, + /* 9 */ PLAYER_ACTION_CHG_8, + /* 10 */ PLAYER_ACTION_CHG_7, + /* 11 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList9[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_3, + /* 4 */ PLAYER_ACTION_CHG_12, + /* 5 */ PLAYER_ACTION_CHG_5, + /* 6 */ PLAYER_ACTION_CHG_4, + /* 7 */ PLAYER_ACTION_CHG_9, + /* 8 */ PLAYER_ACTION_CHG_10, + /* 9 */ PLAYER_ACTION_CHG_11, + /* 10 */ PLAYER_ACTION_CHG_8, + /* 11 */ PLAYER_ACTION_CHG_7, + /* 12 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList10[] = { + /* 0 */ PLAYER_ACTION_CHG_10, + /* 1 */ PLAYER_ACTION_CHG_8, + /* 2 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList11[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_12, + /* 2 */ PLAYER_ACTION_CHG_5, + /* 3 */ PLAYER_ACTION_CHG_4, + /* 4 */ -PLAYER_ACTION_CHG_14, +}; + +s8 sPlayerActionChangeList12[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ -PLAYER_ACTION_CHG_4, +}; + +s32 (*sPlayerActionChangeFuncs[PLAYER_ACTION_CHG_MAX])(Player*, PlayState*) = { + Player_ActionChange_0, // PLAYER_ACTION_CHG_0 + Player_ActionChange_1, // PLAYER_ACTION_CHG_1 + Player_ActionChange_2, // PLAYER_ACTION_CHG_2 + Player_ActionChange_3, // PLAYER_ACTION_CHG_3 + Player_ActionChange_4, // PLAYER_ACTION_CHG_4 + Player_ActionChange_5, // PLAYER_ACTION_CHG_5 + Player_ActionChange_6, // PLAYER_ACTION_CHG_6 + Player_ActionChange_7, // PLAYER_ACTION_CHG_7 + Player_ActionChange_8, // PLAYER_ACTION_CHG_8 + Player_ActionChange_9, // PLAYER_ACTION_CHG_9 + Player_ActionChange_10, // PLAYER_ACTION_CHG_10 + Player_ActionChange_11, // PLAYER_ACTION_CHG_11 + Player_ActionChange_12, // PLAYER_ACTION_CHG_12 + Player_ActionChange_13, // PLAYER_ACTION_CHG_13 + Player_ActionChange_14, // PLAYER_ACTION_CHG_14 +}; + +/** + * This function processes "Action Change Lists", which run various functions that + * check if it is appropriate to change to a new action. + * + * Action Change Lists are a list of indices for the `sPlayerActionChangeFuncs` array. + * The functions are ran in order until one of them returns true, or the end of the list is reached. + * An Action Change index having a negative value indicates that it is the last member in the list. + * + * Because these lists are processed sequentially, the order of the indices in the list determines its priority. + * + * If the `updateUpperBody` argument is true, Player's upper body will update before the Action Change List + * is processed. This allows for Upper Action functions to run. + * + * @return true if a new action has been chosen + * + */ +s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeList, s32 updateUpperBody) { if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { - if (arg3) { + if (updateUpperBody) { D_80862B04 = func_8083216C(this, play); if (Player_Action_64 == this->actionFunc) { return true; @@ -4860,14 +5026,16 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { } if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) { - while (*arg2 >= 0) { - if (D_8085D054[*arg2](this, play)) { + // Process all entries in the Action Change List with a positive index + while (*actionChangeList >= 0) { + if (sPlayerActionChangeFuncs[*actionChangeList](this, play)) { return true; } - arg2++; + actionChangeList++; } - if (D_8085D054[-*arg2](this, play)) { + // Try the last entry in the list. Negate the index to make it positive again. + if (sPlayerActionChangeFuncs[-*actionChangeList](this, play)) { return true; } } @@ -4887,7 +5055,7 @@ s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame f32 speedTarget; s16 yawTarget; - if (func_80833058(play, this, D_8085D01C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) { return 0; } @@ -5637,7 +5805,7 @@ void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlaySta func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N); } -s32 func_80834DFC(Player* this, PlayState* play) { +s32 Player_ActionChange_12(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->ledgeClimbType <= PLAYER_LEDGE_CLIMB_3)) && @@ -6229,7 +6397,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { } // door stuff -s32 func_808365DC(Player* this, PlayState* play) { +s32 Player_ActionChange_1(Player* this, PlayState* play) { if ((gSaveContext.save.saveInfo.playerData.health != 0) && (this->doorType != PLAYER_DOORTYPE_NONE)) { if ((this->actor.category != ACTORCAT_PLAYER) || ((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) || @@ -7205,7 +7373,7 @@ PlayerAnimationHeader* D_8085D1F8[] = { &gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here" }; -s32 func_80838A90(Player* this, PlayState* play) { +s32 Player_ActionChange_13(Player* this, PlayState* play) { PlayerBottle bottleAction; if (this->unk_AA5 != PLAYER_UNKAA5_0) { @@ -7382,7 +7550,7 @@ s32 func_80838A90(Player* this, PlayState* play) { return false; } -s32 func_808391D8(Player* this, PlayState* play) { +s32 Player_ActionChange_4(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* talkActor = this->talkActor; Actor* lockOnActor = this->lockOnActor; @@ -7468,9 +7636,9 @@ s32 func_808391D8(Player* this, PlayState* play) { return false; } -s32 func_80839518(Player* this, PlayState* play) { +s32 Player_ActionChange_0(Player* this, PlayState* play) { if (this->unk_AA5 != PLAYER_UNKAA5_0) { - func_80838A90(this, play); + Player_ActionChange_13(this, play); return true; } else if ((this->lockOnActor != NULL) && (CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || @@ -7599,7 +7767,7 @@ s32 func_80839A84(PlayState* play, Player* this) { return true; } -s32 func_80839B18(Player* this, PlayState* play) { +s32 Player_ActionChange_10(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerFloorType != FLOOR_TYPE_7) && (sPlayerFloorEffect != FLOOR_EFFECT_1)) { @@ -7719,14 +7887,14 @@ void func_8083A04C(Player* this) { } } -s32 func_8083A0CC(Player* this, PlayState* play) { +s32 Player_ActionChange_14(Player* this, PlayState* play) { if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) { func_8083A04C(this); } return false; } -s32 func_8083A114(Player* this, PlayState* play) { +s32 Player_ActionChange_6(Player* this, PlayState* play) { if (!D_80862B04 && !(this->stateFlags1 & PLAYER_STATE1_800000) && !func_8082FB68(this)) { if ((this->transformation == PLAYER_FORM_ZORA) && (this->stateFlags1 & PLAYER_STATE1_8000000)) { func_8083A04C(this); @@ -7751,7 +7919,7 @@ s32 func_8083A114(Player* this, PlayState* play) { return false; } -s32 func_8083A274(Player* this, PlayState* play) { +s32 Player_ActionChange_11(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R) && (this->unk_AA5 == PLAYER_UNKAA5_0) && (play->unk_1887C == 0)) { if (Player_IsGoronOrDeku(this) || @@ -7821,7 +7989,7 @@ void func_8083A548(Player* this) { } } -s32 func_8083A580(Player* this, PlayState* play) { +s32 Player_ActionChange_8(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { if (!(this->stateFlags1 & PLAYER_STATE1_400000) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { @@ -8656,7 +8824,7 @@ u16 D_8085D25C[] = { }; // Player_MountHorse -s32 func_8083CCB4(Player* this, PlayState* play) { +s32 Player_ActionChange_3(Player* this, PlayState* play) { EnHorse* rideActor = (EnHorse*)this->rideActor; if (rideActor != NULL) { @@ -8797,7 +8965,7 @@ void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) { Audio_PlaySfx((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); } -s32 func_8083D23C(Player* this, PlayState* play) { +s32 Player_ActionChange_2(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* interactRangeActor = this->interactRangeActor; @@ -8923,7 +9091,7 @@ s32 func_8083D738(Player* this, Actor* heldActor) { return true; } -s32 func_8083D78C(Player* this, PlayState* play) { +s32 Player_ActionChange_9(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_800) { if ((this->heldActor != NULL) && CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { @@ -9120,7 +9288,7 @@ void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; } -s32 func_8083DFC4(Player* this, PlayState* play) { +s32 Player_ActionChange_5(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (sPlayerShapeYawToTouchedWall < 0x3000)) { if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) { @@ -9290,7 +9458,7 @@ s32 func_8083E7F8(Player* this, f32* arg1, s16* arg2, PlayState* play) { func_8083C6E8(this, play); if ((*arg1 != 0.0f) || (ABS_ALT(this->unk_B4C) > 0x190)) { - s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); u16 temp; temp = (ABS_ALT(temp_a0) - 0x2000); @@ -9730,7 +9898,7 @@ s32 func_8083FD80(Player* this, PlayState* play) { } s32 func_8083FE38(Player* this, PlayState* play) { - return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play); + return Player_ActionChange_13(this, play) || Player_ActionChange_4(this, play) || Player_ActionChange_2(this, play); } void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { @@ -12662,7 +12830,7 @@ s32 func_80847994(PlayState* play, Player* this) { this->stateFlags3 &= ~PLAYER_STATE3_20; this->itemAction = PLAYER_IA_OCARINA; this->unk_AA5 = PLAYER_UNKAA5_5; - func_80838A90(this, play); + Player_ActionChange_13(this, play); return true; } return false; @@ -12966,7 +13134,7 @@ void func_808484F0(Player* this) { } } -s32 func_80848570(Player* this, PlayState* play) { +s32 Player_ActionChange_7(Player* this, PlayState* play) { if (!func_8083A6C0(play, this)) { if (func_808396B8(play, this)) { PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this); @@ -13498,7 +13666,7 @@ void Player_Action_2(Player* this, PlayState* play) { } func_80832F24(this); - if (func_80833058(play, this, D_8085CFE4, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList1, true)) { return; } @@ -13553,7 +13721,7 @@ void Player_Action_3(Player* this, PlayState* play) { } func_80832F24(this); - if (func_80833058(play, this, D_8085CFEC, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList2, true)) { return; } @@ -13622,7 +13790,8 @@ void Player_Action_4(Player* this, PlayState* play) { } func_80832F24(this); - if ((this->actionVar2 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if ((this->actionVar2 == 0) && !func_80847880(play, this) && + !Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) { if (func_8082FB68(this)) { func_8083B23C(this, play); return; @@ -13689,7 +13858,7 @@ void Player_Action_5(Player* this, PlayState* play) { Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); } - if (func_80833058(play, this, D_8085CFF8, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList3, true)) { return; } @@ -13741,7 +13910,7 @@ void Player_Action_6(Player* this, PlayState* play) { s32 sp2C; func_8083EE60(this, play); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13781,7 +13950,7 @@ void Player_Action_7(Player* this, PlayState* play) { func_80832F24(this); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13802,7 +13971,7 @@ void Player_Action_7(Player* this, PlayState* play) { void Player_Action_8(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13817,7 +13986,7 @@ void Player_Action_9(Player* this, PlayState* play) { s32 var_v0; func_8083F27C(play, this); - if (func_80833058(play, this, D_8085D00C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) { return; } @@ -13887,7 +14056,7 @@ void Player_Action_10(Player* this, PlayState* play) { yawTarget = this->actor.home.rot.y; } - if (func_80833058(play, this, D_8085D018, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList6, true)) { return; } @@ -13910,8 +14079,8 @@ void Player_Action_11(Player* this, PlayState* play) { } PlayerAnimation_Update(play, &this->skelAnime); - if (!func_80847880(play, this) && - (!func_80833058(play, this, D_8085D01C, 1) || (Player_Action_11 == this->actionFunc))) { + if (!func_80847880(play, this) && (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true) || + (Player_Action_11 == this->actionFunc))) { f32 speedTarget; f32 temp_fv0; f32 temp_fv1; @@ -13951,7 +14120,8 @@ void Player_Action_12(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_80832F24(this); if (!func_80847880(play, this)) { - if (!func_80833058(play, this, D_8085D01C, 0) || (Player_Action_12 == this->actionFunc)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, false) || + (Player_Action_12 == this->actionFunc)) { if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { func_80839E74(this, play); } @@ -13965,7 +14135,7 @@ void Player_Action_13(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083F57C(this, play); - if (func_80833058(play, this, D_8085D028, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList8, true)) { return; } @@ -13996,7 +14166,7 @@ void Player_Action_14(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083F57C(this, play); - if (func_80833058(play, this, D_8085D034, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList9, true)) { return; } @@ -14026,7 +14196,7 @@ void Player_Action_15(Player* this, PlayState* play) { f32 speedTarget; s16 yawTarget; - if (func_80833058(play, this, D_8085D00C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) { return; } @@ -14053,7 +14223,7 @@ void Player_Action_16(Player* this, PlayState* play) { s16 yawTarget; func_80832F24(this); - if (func_80833058(play, this, D_8085D044, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList10, true)) { return; } @@ -14080,7 +14250,7 @@ void Player_Action_17(Player* this, PlayState* play) { } if (DECR(this->actionVar2) == 0) { - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); } this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; @@ -14096,7 +14266,7 @@ void Player_Action_18(Player* this, PlayState* play) { SkelAnime_Update(&this->unk_2C8); if (!func_8083FE38(this, play)) { - if (!func_8083A274(this, play)) { + if (!Player_ActionChange_11(this, play)) { this->stateFlags1 &= ~PLAYER_STATE1_400000; if (this->itemAction <= PLAYER_IA_MINUS1) { @@ -14134,7 +14304,7 @@ void Player_Action_18(Player* this, PlayState* play) { if (this->actionVar2 != 0) { f32 yStick = sPlayerControlInput->rel.stick_y * 180; f32 xStick = sPlayerControlInput->rel.stick_x * -120; - s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); s16 var_a1; s16 temp_ft5; s16 var_a2; @@ -14164,7 +14334,7 @@ void Player_Action_18(Player* this, PlayState* play) { this->actionVar1 = 0; } } else if (!func_8083FE38(this, play)) { - if (func_8083A274(this, play)) { + if (Player_ActionChange_11(this, play)) { func_8083FD80(this, play); } else { this->stateFlags1 &= ~PLAYER_STATE1_400000; @@ -14464,7 +14634,7 @@ void Player_Action_25(Player* this, PlayState* play) { func_8083216C(this, play); } - func_80838A90(this, play); + Player_ActionChange_13(this, play); } // sPlayerRollingAnimSfx @@ -14510,7 +14680,7 @@ void Player_Action_26(Player* this, PlayState* play) { } } } else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) { - if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) { + if ((this->skelAnime.curFrame < 15.0f) || !Player_ActionChange_7(this, play)) { f32 speedTarget; s16 yawTarget; @@ -14851,7 +15021,7 @@ void Player_Action_34(Player* this, PlayState* play) { } void Player_Action_35(Player* this, PlayState* play) { - if (func_80838A90(this, play) == 0) { + if (!Player_ActionChange_13(this, play)) { if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { func_80833AA0(this, play); this->stateFlags1 |= PLAYER_STATE1_20000000; @@ -15005,7 +15175,7 @@ void Player_Action_35(Player* this, PlayState* play) { if (play->sceneId == SCENE_20SICHITAI) { play->unk_1887C = 0; } - } else if (!func_808391D8(this, play)) { + } else if (!Player_ActionChange_4(this, play)) { func_8083B2E4(this, play); } } @@ -15206,7 +15376,7 @@ void Player_Action_43(Player* this, PlayState* play) { ((this->unk_AA5 == PLAYER_UNKAA5_1) && CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) || - func_808391D8(this, play)))) { + Player_ActionChange_4(this, play)))) { func_80839ED0(this, play); Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } else if ((DECR(this->actionVar2) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { @@ -15239,7 +15409,7 @@ void Player_Action_44(Player* this, PlayState* play) { func_80837BD0(play, this); this->actionVar2 = sp44; } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) && - ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) { + ((this->talkActor != this->interactRangeActor) || !Player_ActionChange_2(this, play))) { if (func_801242B4(this)) { func_808353DC(play, this); } else { @@ -15893,8 +16063,8 @@ void Player_Action_52(Player* this, PlayState* play) { func_8084FD7C(play, this, &rideActor->actor); } } else if ((this->csMode != PLAYER_CSMODE_NONE) || - (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && - !func_80847BF0(this, play) && !func_80838A90(this, play))) { + (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionChange_4(this, play)) && + !func_80847BF0(this, play) && !Player_ActionChange_13(this, play))) { if (this->lockOnActor != NULL) { if (func_800B7128(this)) { this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; @@ -16007,7 +16177,7 @@ void Player_Action_54(Player* this, PlayState* play) { this->actionVar2 = 0; } - if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) && + if (!func_8082DAFC(play) && !Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && !func_8083B3B4(play, this, sPlayerControlInput) && ((this->actionVar2 != 0) || !func_80850734(play, this))) { speedTarget = 0.0f; yawTarget = this->actor.shape.rot.y; @@ -16044,7 +16214,7 @@ void Player_Action_54(Player* this, PlayState* play) { } void Player_Action_55(Player* this, PlayState* play) { - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { this->stateFlags2 |= PLAYER_STATE2_20; func_808477D0(play, this, NULL, this->linearVelocity); func_808475B4(this); @@ -16090,7 +16260,7 @@ void Player_Action_56(Player* this, PlayState* play) { func_808475B4(this); func_8082F164(this, BTN_R); - if (func_80833058(play, this, D_8085D048, false)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList11, false)) { return; } @@ -16217,8 +16387,8 @@ void Player_Action_57(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_808475B4(this); func_8082F164(this, BTN_R); - if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput) && - !func_80850854(play, this)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && + !func_8083B3B4(play, this, sPlayerControlInput) && !func_80850854(play, this)) { func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); if (func_8082DA90(play)) { speedTarget = this->linearVelocity; @@ -16249,7 +16419,8 @@ void Player_Action_58(Player* this, PlayState* play) { func_808475B4(this); func_8082F164(this, BTN_R); - if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && + !func_8083B3B4(play, this, sPlayerControlInput)) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); if (speedTarget == 0.0f) { @@ -16271,7 +16442,7 @@ void Player_Action_59(Player* this, PlayState* play) { func_8083216C(this, play); func_8082F164(this, BTN_R); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -16292,7 +16463,7 @@ void Player_Action_59(Player* this, PlayState* play) { func_808477D0(play, this, sPlayerControlInput, this->actor.velocity.y); this->unk_AAA = 0x3E80; - if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !func_8083D23C(this, play) && + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !Player_ActionChange_2(this, play) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { func_808481CC(play, this, -2.0f); } else { @@ -16596,7 +16767,7 @@ void Player_Action_63(Player* this, PlayState* play) { this->talkActor = this->tatlActor; this->tatlActor->textId = -this->tatlTextId; Player_TalkWithPlayer(play, this->talkActor); - } else if (!func_80838A90(this, play)) { + } else if (!Player_ActionChange_13(this, play)) { func_80836A5C(this, play); Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } @@ -16775,8 +16946,8 @@ void Player_Action_65(Player* this, PlayState* play) { } else { if ((this->skelAnime.animation == &gPlayerAnim_link_demo_get_itemB) || (this->skelAnime.animation == &gPlayerAnim_pn_getB)) { - Math_ScaledStepToS(&this->actor.shape.rot.y, - BINANG_ADD(Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]), 0x8000), 0xFA0); + Math_ScaledStepToS(&this->actor.shape.rot.y, BINANG_ADD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)), 0x8000), + 0xFA0); } else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) && PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { Player_AnimSfx_PlayFloorLand(this); @@ -17090,7 +17261,7 @@ void Player_Action_70(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_StopCutscene(this); - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { func_80839E74(this, play); } } else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) { @@ -17198,11 +17369,11 @@ void Player_Action_73(Player* this, PlayState* play) { Audio_PlaySfx_AtPosWithSyncedFreqAndVolume( &this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), this->actor.speed); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } - if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) { + if ((this->transformation == PLAYER_FORM_GORON) && Player_ActionChange_6(this, play)) { return; } @@ -17326,7 +17497,7 @@ void Player_Action_77(Player* this, PlayState* play) { } void Player_Action_78(Player* this, PlayState* play) { - func_808365DC(this, play); + Player_ActionChange_1(this, play); } void Player_Action_79(Player* this, PlayState* play) { @@ -17482,7 +17653,7 @@ void Player_Action_84(Player* this, PlayState* play) { func_808333CC(this))) { D_80862B48 = this->actionVar2; - if (!func_80848570(this, play)) { + if (!Player_ActionChange_7(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; func_8082DC38(this); @@ -17494,7 +17665,7 @@ void Player_Action_84(Player* this, PlayState* play) { u8 moveFlags = this->skelAnime.moveFlags; if (this->transformation == PLAYER_FORM_ZORA) { - if (func_8083A580(this, play)) { + if (Player_ActionChange_8(this, play)) { anim = this->unk_284.animation; } this->unk_ADC = 0; @@ -17737,10 +17908,10 @@ void Player_Action_86(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]); sPlayerControlInput = play->state.input; - Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + Camera_ChangeMode(GET_ACTIVE_CAM(play), (this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); this->stateFlags2 |= PLAYER_STATE2_40; - this->actor.shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]) + 0x8000; + this->actor.shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000; func_80855218(play, this, &sp4C); @@ -17814,8 +17985,7 @@ void Player_Action_86(Player* this, PlayState* play) { } void Player_Action_87(Player* this, PlayState* play) { - Camera_ChangeMode(play->cameraPtrs[play->activeCamId], - (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); + Camera_ChangeMode(GET_ACTIVE_CAM(play), (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); if (R_PLAY_FILL_SCREEN_ON != 0) { R_PLAY_FILL_SCREEN_ALPHA -= R_PLAY_FILL_SCREEN_ON; @@ -18027,7 +18197,7 @@ void Player_Action_93(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -18048,7 +18218,7 @@ void Player_Action_93(Player* this, PlayState* play) { if (this->unk_ABC < -3900.0f) { this->unk_ABC = -3900.0f; this->actionVar1 = 2; - this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + this->actor.shape.rot.y = Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); this->actor.scale.y = 0.01f; this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y; } else { @@ -18211,7 +18381,7 @@ void Player_Action_94(Player* this, PlayState* play) { this->boomerangActor = NULL; } - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -18404,7 +18574,7 @@ void Player_Action_95(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30); - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { s16 prevYaw = this->currentYaw; f32 speedTarget; s16 yawTarget; @@ -18554,7 +18724,7 @@ void func_80857AEC(PlayState* play, Player* this) { // Goron rolling related void Player_Action_96(Player* this, PlayState* play) { - if (func_80833058(play, this, D_8085D050, 0)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList12, false)) { return; } @@ -19502,7 +19672,7 @@ void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { func_8083216C(this, play); } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) { - func_8083D23C(this, play); + Player_ActionChange_2(this, play); } } } @@ -19920,7 +20090,7 @@ void Player_CsAction_38(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_39(PlayState* play, Player* this, CsCmdActorCue* cue) { Player_CsAnim_11(play, this, cue); - if (func_8083D23C(this, play)) { + if (Player_ActionChange_2(this, play)) { play->csCtx.state = CS_STATE_STOP; CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } @@ -20010,8 +20180,8 @@ void Player_CsAction_End(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8082DC64(play, this); } else { func_80839ED0(this, play); - if (!func_808391D8(this, play)) { - func_8083D23C(this, play); + if (!Player_ActionChange_4(this, play)) { + Player_ActionChange_2(this, play); } } @@ -20079,7 +20249,7 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { if ((sPlayerCsModes[this->cueId] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { this->unk_AA5 = PLAYER_UNKAA5_5; - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { this->csMode = PLAYER_CSMODE_NONE; } return; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d7350076d..7ecc8c4e3 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4383,7 +4383,7 @@ 0x80832CAC:("Player_CalcSpeedAndYawFromControlStick",), 0x80832F24:("func_80832F24",), 0x80832F78:("Player_GetMovementSpeedAndYaw",), - 0x80833058:("func_80833058",), + 0x80833058:("Player_TryActionChangeList",), 0x808331FC:("func_808331FC",), 0x808332A0:("func_808332A0",), 0x808333CC:("func_808333CC",), @@ -4413,7 +4413,7 @@ 0x80834CD0:("func_80834CD0",), 0x80834D50:("func_80834D50",), 0x80834DB8:("func_80834DB8",), - 0x80834DFC:("func_80834DFC",), + 0x80834DFC:("Player_ActionChange_12",), 0x80835324:("func_80835324",), 0x808353DC:("func_808353DC",), 0x80835428:("func_80835428",), @@ -4430,7 +4430,7 @@ 0x80835EAC:("Player_Door_Staircase",), 0x8083604C:("Player_Door_Sliding",), 0x80836258:("Player_Door_Knob",), - 0x808365DC:("func_808365DC",), + 0x808365DC:("Player_ActionChange_1",), 0x80836888:("func_80836888",), 0x8083692C:("func_8083692C",), 0x80836988:("func_80836988",), @@ -4470,9 +4470,9 @@ 0x808388B8:("func_808388B8",), 0x808389BC:("func_808389BC",), 0x80838A20:("func_80838A20",), - 0x80838A90:("func_80838A90",), - 0x808391D8:("func_808391D8",), - 0x80839518:("func_80839518",), + 0x80838A90:("Player_ActionChange_13",), + 0x808391D8:("Player_ActionChange_4",), + 0x80839518:("Player_ActionChange_0",), 0x808395F0:("func_808395F0",), 0x808396B8:("func_808396B8",), 0x80839770:("func_80839770",), @@ -4481,19 +4481,19 @@ 0x80839978:("func_80839978",), 0x80839A10:("func_80839A10",), 0x80839A84:("func_80839A84",), - 0x80839B18:("func_80839B18",), + 0x80839B18:("Player_ActionChange_10",), 0x80839CD8:("func_80839CD8",), 0x80839E3C:("func_80839E3C",), 0x80839E74:("func_80839E74",), 0x80839ED0:("func_80839ED0",), 0x80839F98:("func_80839F98",), 0x8083A04C:("func_8083A04C",), - 0x8083A0CC:("func_8083A0CC",), - 0x8083A114:("func_8083A114",), - 0x8083A274:("func_8083A274",), + 0x8083A0CC:("Player_ActionChange_14",), + 0x8083A114:("Player_ActionChange_6",), + 0x8083A274:("Player_ActionChange_11",), 0x8083A4A4:("func_8083A4A4",), 0x8083A548:("func_8083A548",), - 0x8083A580:("func_8083A580",), + 0x8083A580:("Player_ActionChange_8",), 0x8083A658:("func_8083A658",), 0x8083A6C0:("func_8083A6C0",), 0x8083A794:("func_8083A794",), @@ -4531,19 +4531,19 @@ 0x8083CB04:("func_8083CB04",), 0x8083CB58:("func_8083CB58",), 0x8083CBC4:("func_8083CBC4",), - 0x8083CCB4:("func_8083CCB4",), + 0x8083CCB4:("Player_ActionChange_3",), 0x8083CF68:("Player_HandleSlopes",), 0x8083D168:("func_8083D168",), - 0x8083D23C:("func_8083D23C",), + 0x8083D23C:("Player_ActionChange_2",), 0x8083D6DC:("func_8083D6DC",), 0x8083D738:("func_8083D738",), - 0x8083D78C:("func_8083D78C",), + 0x8083D78C:("Player_ActionChange_9",), 0x8083D860:("func_8083D860",), 0x8083DCC4:("func_8083DCC4",), 0x8083DD1C:("func_8083DD1C",), 0x8083DEE4:("func_8083DEE4",), 0x8083DF38:("func_8083DF38",), - 0x8083DFC4:("func_8083DFC4",), + 0x8083DFC4:("Player_ActionChange_5",), 0x8083E14C:("func_8083E14C",), 0x8083E234:("func_8083E234",), 0x8083E28C:("func_8083E28C",), @@ -4642,7 +4642,7 @@ 0x808482E0:("func_808482E0",), 0x808484CC:("func_808484CC",), 0x808484F0:("func_808484F0",), - 0x80848570:("func_80848570",), + 0x80848570:("Player_ActionChange_7",), 0x80848640:("func_80848640",), 0x80848780:("Player_UpperAction_0",), 0x808487B8:("Player_UpperAction_1",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f5905b769..01a46d7d1 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4967,19 +4967,19 @@ 0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1), 0x8085CFD4:("D_8085CFD4","UNK_TYPE1","",0x1), 0x8085CFDC:("D_8085CFDC","UNK_TYPE1","",0x1), - 0x8085CFE4:("D_8085CFE4","UNK_TYPE1","",0x1), - 0x8085CFEC:("D_8085CFEC","UNK_TYPE1","",0x1), - 0x8085CFF8:("D_8085CFF8","UNK_TYPE1","",0x1), - 0x8085D004:("D_8085D004","UNK_TYPE1","",0x1), - 0x8085D00C:("D_8085D00C","UNK_TYPE1","",0x1), - 0x8085D018:("D_8085D018","UNK_TYPE1","",0x1), - 0x8085D01C:("D_8085D01C","UNK_TYPE1","",0x1), - 0x8085D028:("D_8085D028","UNK_TYPE1","",0x1), - 0x8085D034:("D_8085D034","UNK_TYPE1","",0x1), - 0x8085D044:("D_8085D044","UNK_TYPE1","",0x1), - 0x8085D048:("D_8085D048","UNK_TYPE1","",0x1), - 0x8085D050:("D_8085D050","UNK_TYPE1","",0x1), - 0x8085D054:("D_8085D054","UNK_PTR","",0x4), + 0x8085CFE4:("sPlayerActionChangeList1","UNK_TYPE1","",0x1), + 0x8085CFEC:("sPlayerActionChangeList2","UNK_TYPE1","",0x1), + 0x8085CFF8:("sPlayerActionChangeList3","UNK_TYPE1","",0x1), + 0x8085D004:("sPlayerActionChangeList4","UNK_TYPE1","",0x1), + 0x8085D00C:("sPlayerActionChangeList5","UNK_TYPE1","",0x1), + 0x8085D018:("sPlayerActionChangeList6","UNK_TYPE1","",0x1), + 0x8085D01C:("sPlayerActionChangeList7","UNK_TYPE1","",0x1), + 0x8085D028:("sPlayerActionChangeList8","UNK_TYPE1","",0x1), + 0x8085D034:("sPlayerActionChangeList9","UNK_TYPE1","",0x1), + 0x8085D044:("sPlayerActionChangeList10","UNK_TYPE1","",0x1), + 0x8085D048:("sPlayerActionChangeList11","UNK_TYPE1","",0x1), + 0x8085D050:("sPlayerActionChangeList12","UNK_TYPE1","",0x1), + 0x8085D054:("sPlayerActionChangeFuncs","UNK_PTR","",0x4), 0x8085D090:("D_8085D090","UNK_TYPE1","",0x1), 0x8085D094:("D_8085D094","UNK_TYPE1","",0x6), 0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4), From 64b1fafd33bd7092c9cd2e703c3ccc41751c01a4 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 13:39:25 +1000 Subject: [PATCH 107/121] Animation Cleanup: En_H* (#1399) * begin H * more cleanup --- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 2 +- src/overlays/actors/ovl_Boss_04/z_boss_04.h | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.h | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 2 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 1 + .../actors/ovl_En_Heishi/z_en_heishi.c | 45 +++--- .../actors/ovl_En_Heishi/z_en_heishi.h | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 55 ++++--- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 68 +++++---- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 107 ++++++++----- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 9 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 113 ++++++++------ .../actors/ovl_En_Hint_Skb/z_en_hint_skb.h | 5 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 140 ++++++++++-------- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 6 +- .../z_en_horse_link_child.c | 92 ++++++------ src/overlays/actors/ovl_En_Hs/z_en_hs.c | 13 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 16 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 2 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.h | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.h | 2 +- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 4 +- 25 files changed, 406 insertions(+), 290 deletions(-) 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 82495ea1e..c35e6e9b1 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -173,7 +173,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->unk_6F8 = 1.0f; Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements); Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements); - SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphtable, + SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphTable, WART_LIMB_MAX); spA8.y = this->actor.world.pos.y + 200.0f; diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.h b/src/overlays/actors/ovl_Boss_04/z_boss_04.h index 6aa153597..97c296b84 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.h +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.h @@ -12,7 +12,7 @@ typedef struct Boss04 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[WART_LIMB_MAX]; - /* 0x1BE */ Vec3s morphtable[WART_LIMB_MAX]; + /* 0x1BE */ Vec3s morphTable[WART_LIMB_MAX]; /* 0x1F4 */ s16 unk_1F4; /* 0x1F6 */ u8 unk_1F6; /* 0x1F7 */ u8 unk_1F7; 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 21d8bf309..4f4b15545 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -142,7 +142,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); this->actor.gravity = -1.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, - this->morphtable, OBJECT_CS_LIMB_MAX); + this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h index 76013781b..500fff573 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h @@ -25,7 +25,7 @@ typedef struct EnBombers { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; - /* 0x206 */ Vec3s morphtable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBombersActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; 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 30dc3de26..89ee2e5fd 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -933,7 +933,7 @@ void EnEgol_Slam(EnEgol* this, PlayState* play) { } EnEgol_DestroyBlocks(this, play, this->rightHandPos, this->leftHandPos); } - if (this->animEndFrame <= curFrame) { + if (curFrame >= this->animEndFrame) { EnEgol_SetupSlamWait(this); } else if ((this->skelAnime.curFrame <= 17.0f) && (this->skelAnime.curFrame >= 10.0f)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base); diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c index 841e6f539..85000e5cb 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -194,6 +194,7 @@ void EnHanabi_Init(Actor* thisx, PlayState* play2) { EnHanabi* this = THIS; s32 i; + //! FAKE: if (1) {} Actor_SetScale(thisx, 1.0f); 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 83973d9e9..19c2a34a8 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -20,14 +20,6 @@ void EnHeishi_SetHeadRotation(EnHeishi* this); void EnHeishi_SetupIdle(EnHeishi* this); void EnHeishi_Idle(EnHeishi* this, PlayState* play); -typedef enum { - /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ HEISHI_ANIM_WAVE, - /* 3 */ HEISHI_ANIM_SIT_AND_REACH, - /* 4 */ HEISHI_ANIM_STAND_UP -} EnHeishiAnimation; - ActorInit En_Heishi_InitVars = { ACTOR_EN_HEISHI, ACTORCAT_NPC, @@ -97,19 +89,36 @@ void EnHeishi_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); } +typedef enum EnHeishiAnimation { + /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ HEISHI_ANIM_WAVE, + /* 3 */ HEISHI_ANIM_SIT_AND_REACH, + /* 4 */ HEISHI_ANIM_STAND_UP, + /* 5 */ HEISHI_ANIM_MAX +} EnHeishiAnimation; + +static AnimationHeader* sAnimations[HEISHI_ANIM_MAX] = { + &gSoldierStandHandOnHip, // HEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpear, // HEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWave, // HEISHI_ANIM_WAVE + &gSoldierSitAndReach, // HEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUp, // HEISHI_ANIM_STAND_UP +}; + +static u8 sAnimationModes[HEISHI_ANIM_MAX] = { + ANIMMODE_LOOP, // HEISHI_ANIM_STAND_HAND_ON_HIP + ANIMMODE_LOOP, // HEISHI_ANIM_CHEER_WITH_SPEAR + ANIMMODE_LOOP, // HEISHI_ANIM_WAVE + ANIMMODE_LOOP, // HEISHI_ANIM_SIT_AND_REACH + ANIMMODE_ONCE, // HEISHI_ANIM_STAND_UP +}; + void EnHeishi_ChangeAnim(EnHeishi* this, s32 animIndex) { - static AnimationHeader* sAnimations[] = { - &gSoldierStandHandOnHip, &gSoldierCheerWithSpear, &gSoldierWave, &gSoldierSitAndReach, &gSoldierStandUp, - }; - static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - }; this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -10.0f); } diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h index 1758ceae6..4d886cb3c 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h @@ -25,7 +25,7 @@ typedef struct EnHeishi { /* 0x26C */ s32 shouldSetHeadRotation; /* 0x270 */ s16 timer; /* 0x272 */ s16 yawTowardsPlayer; - /* 0x274 */ f32 frameCount; + /* 0x274 */ f32 animEndFrame; /* 0x278 */ s16 unk278; // set and not used /* 0x27C */ UNK_TYPE1 unk_27C[0x8]; /* 0x284 */ ColliderCylinder colliderCylinder; 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 2c652f11c..ded070de4 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -29,17 +29,6 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play); s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx); -typedef enum { - /* 0 */ HG_ANIM_IDLE, - /* 1 */ HG_ANIM_LURCH_FORWARD, - /* 2 */ HG_ANIM_RECOIL, - /* 3 */ HG_ANIM_LEAN_FORWARD, - /* 4 */ HG_ANIM_REACH_FORWARD, - /* 5 */ HG_ANIM_CURL_UP, - /* 6 */ HG_ANIM_CROUCHED_PANIC, - /* 7 */ HG_ANIM_PANIC -} HgAnimation; - typedef enum { /* 0 */ HG_CS_FIRST_ENCOUNTER, /* 1 */ HG_CS_GET_MASK, @@ -118,15 +107,27 @@ static CollisionCheckInfoInit2 sColChkInfoInit2 = { 0, 0, 0, 0, 0x80, }; -static AnimationInfo sAnimationInfo[] = { - { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ HG_ANIM_IDLE, + /* 1 */ HG_ANIM_LURCH_FORWARD, + /* 2 */ HG_ANIM_RECOIL, + /* 3 */ HG_ANIM_LEAN_FORWARD, + /* 4 */ HG_ANIM_REACH_FORWARD, + /* 5 */ HG_ANIM_CURL_UP, + /* 6 */ HG_ANIM_CROUCHED_PANIC, + /* 7 */ HG_ANIM_PANIC, + /* 8 */ HG_ANIM_MAX +} HgAnimation; + +static AnimationInfo sAnimationInfo[HG_ANIM_MAX] = { + { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_IDLE + { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_LURCH_FORWARD + { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_RECOIL + { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_LEAN_FORWARD + { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_REACH_FORWARD + { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_CURL_UP + { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_CROUCHED_PANIC + { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_PANIC }; static u32 sHasSoundPlayed = false; @@ -192,7 +193,7 @@ void EnHg_ChasePlayer(EnHg* this, PlayState* play) { s32 pad; this->actor.speed = 1.6f; - if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) { if (((this->skelAnime.curFrame > 9.0f) && (this->skelAnime.curFrame < 16.0f)) || ((this->skelAnime.curFrame > 44.0f) && (this->skelAnime.curFrame < 51.0f))) { Actor_MoveWithGravity(&this->actor); @@ -233,7 +234,6 @@ void EnHg_ReactToHit(EnHg* this, PlayState* play) { void EnHg_HandleTatlDialog(EnHg* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - // "...Sort of looks different..." Message_StartTextbox(play, 0x24F, &this->actor); } else { Actor_OfferTalk(&this->actor, play, 80.0f); @@ -295,7 +295,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->animIndex = 0; + this->animIndex = HG_ANIM_IDLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE); break; @@ -329,6 +329,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_75_20); Actor_Kill(&this->actor); break; + + default: + break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->animIndex) { @@ -341,6 +344,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { this->animIndex = HG_ANIM_CROUCHED_PANIC; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CROUCHED_PANIC); break; + + default: + break; } } @@ -360,6 +366,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 15bfd598b..c4d9c0371 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -38,16 +38,6 @@ typedef enum { /* 2 */ HGO_EYE_CLOSED } EyeState; -typedef enum { - /* 0 */ HGO_ANIM_ARMS_FOLDED, - /* 1 */ HGO_ANIM_ASTONISHED, - /* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG, - /* 3 */ HGO_ANIM_CONSOLE, - /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, - /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, - /* 6 */ HGO_ANIM_TOSS -} HgoAnimation; - ActorInit En_Hgo_InitVars = { ACTOR_EN_HGO, ACTORCAT_NPC, @@ -60,14 +50,25 @@ ActorInit En_Hgo_InitVars = { (ActorFunc)EnHgo_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ HGO_ANIM_ARMS_FOLDED, + /* 1 */ HGO_ANIM_ASTONISHED, + /* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG, + /* 3 */ HGO_ANIM_CONSOLE, + /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, + /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, + /* 6 */ HGO_ANIM_TOSS, + /* 7 */ HGO_ANIM_MAX +} HgoAnimation; + +static AnimationInfo sAnimationInfo[HGO_ANIM_MAX] = { + { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HGO_ANIM_ARMS_FOLDED + { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_ASTONISHED + { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_KNEEL_DOWN_AND_HUG + { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE + { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE_HEAD_UP + { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_REACH_DOWN_TO_LIFT + { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_TOSS }; static ColliderCylinderInit sCylinderInit = { @@ -109,6 +110,7 @@ void EnHgo_Init(Actor* thisx, PlayState* play) { this->textId = 0; this->talkFlags = TALK_FLAG_NONE; this->isInCutscene = false; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { EnHgo_SetupTalk(this); } else { @@ -143,7 +145,7 @@ void EnHgo_UpdateCollision(EnHgo* this, PlayState* play) { } void EnHgo_SetupTalk(EnHgo* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED); this->actionFunc = EnHgo_Talk; } @@ -206,6 +208,9 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) { EnHgo_SetupTalk(this); } break; + + default: + break; } Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x71C, 0xB6); @@ -271,6 +276,9 @@ void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) { Message_CloseTextbox(play); EnHgo_SetupTalk(this); break; + + default: + break; } } } @@ -285,33 +293,36 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = HGO_ANIM_ARMS_FOLDED; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED); break; case 2: this->actor.draw = EnHgo_Draw; this->animIndex = HGO_ANIM_ASTONISHED; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ASTONISHED); break; case 3: this->animIndex = HGO_ANIM_KNEEL_DOWN_AND_HUG; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_KNEEL_DOWN_AND_HUG); break; case 4: this->animIndex = HGO_ANIM_CONSOLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE); break; case 5: this->animIndex = HGO_ANIM_CONSOLE_HEAD_UP; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE_HEAD_UP); break; case 6: this->animIndex = HGO_ANIM_REACH_DOWN_TO_LIFT; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_REACH_DOWN_TO_LIFT); + break; + + default: break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { @@ -328,12 +339,15 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { case HGO_ANIM_KNEEL_DOWN_AND_HUG: this->animIndex = HGO_ANIM_CONSOLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE); break; case HGO_ANIM_REACH_DOWN_TO_LIFT: this->animIndex = HGO_ANIM_TOSS; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_TOSS); + + default: + break; } } 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 e07dfb8a9..5d1e0ee24 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 @@ -6,7 +6,6 @@ #include "z_en_hidden_nuts.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_hintnuts/object_hintnuts.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) @@ -63,15 +62,41 @@ static ColliderCylinderInit sCylinderInit = { { 30, 20, 0, { 0, 0, 0 } }, }; -static AnimationHeader* D_80BDC0FC[] = { - &object_hintnuts_Anim_000168, &object_hintnuts_Anim_0024CC, &object_hintnuts_Anim_0026C4, - &object_hintnuts_Anim_002894, &object_hintnuts_Anim_002B90, &object_hintnuts_Anim_002F7C, - &object_hintnuts_Anim_003128, &object_hintnuts_Anim_0029BC, &object_hintnuts_Anim_0024CC, +typedef enum EnHiddenNutsAnimation { + /* 0 */ ENHIDDENNUTS_ANIM_0, + /* 1 */ ENHIDDENNUTS_ANIM_1, + /* 2 */ ENHIDDENNUTS_ANIM_2, + /* 3 */ ENHIDDENNUTS_ANIM_3, + /* 4 */ ENHIDDENNUTS_ANIM_4, + /* 5 */ ENHIDDENNUTS_ANIM_5, + /* 6 */ ENHIDDENNUTS_ANIM_6, + /* 7 */ ENHIDDENNUTS_ANIM_7, + /* 8 */ ENHIDDENNUTS_ANIM_8, + /* 9 */ ENHIDDENNUTS_ANIM_MAX +} EnHiddenNutsAnimation; + +static AnimationHeader* sAnimations[ENHIDDENNUTS_ANIM_MAX] = { + &object_hintnuts_Anim_000168, // ENHIDDENNUTS_ANIM_0 + &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_1 + &object_hintnuts_Anim_0026C4, // ENHIDDENNUTS_ANIM_2 + &object_hintnuts_Anim_002894, // ENHIDDENNUTS_ANIM_3 + &object_hintnuts_Anim_002B90, // ENHIDDENNUTS_ANIM_4 + &object_hintnuts_Anim_002F7C, // ENHIDDENNUTS_ANIM_5 + &object_hintnuts_Anim_003128, // ENHIDDENNUTS_ANIM_6 + &object_hintnuts_Anim_0029BC, // ENHIDDENNUTS_ANIM_7 + &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_8 }; -u8 D_80BDC120[] = { - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, +static u8 sAnimationModes[ENHIDDENNUTS_ANIM_MAX] = { + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_0 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_1 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_2 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_3 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_4 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_5 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_6 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_7 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_8 }; void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { @@ -79,7 +104,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_Init(play, &this->skelAnime, &object_hintnuts_Skel_0023B8.sh, &object_hintnuts_Anim_0024CC, - this->jointTable, this->morphTable, 10); + this->jointTable, this->morphTable, OBJECT_HINTNUTS_LIMB_MAX); Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -116,27 +141,29 @@ void EnHiddenNuts_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80BDB1B4(EnHiddenNuts* this, s32 arg1) { - f32 sp34; - f32 sp30; +void EnHiddenNuts_ChangeAnim(EnHiddenNuts* this, s32 animIndex) { + f32 startFrame; + f32 morphFrames; - this->unk_220 = arg1; - sp34 = 0.0f; - sp30 = -4.0f; - this->unk_22C = Animation_GetLastFrame(D_80BDC0FC[arg1]); - if (this->unk_220 == 1) { - sp34 = this->unk_22C; - sp30 = 0.0f; + this->animIndex = animIndex; + startFrame = 0.0f; + morphFrames = -4.0f; + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + + if (this->animIndex == ENHIDDENNUTS_ANIM_1) { + startFrame = this->animEndFrame; + morphFrames = 0.0f; } - Animation_Change(&this->skelAnime, D_80BDC0FC[this->unk_220], 1.0f, sp34, this->unk_22C, D_80BDC120[this->unk_220], - sp30); + + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, startFrame, this->animEndFrame, + sAnimationModes[this->animIndex], morphFrames); } void func_80BDB268(EnHiddenNuts* this) { this->actor.textId = 0x234; this->unk_228 = 1600.0f; this->actor.shape.yOffset = 1600.0f; - func_80BDB1B4(this, 1); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_1); this->unk_21A = 0; this->actionFunc = func_80BDB2B8; } @@ -148,12 +175,12 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG); if (player->stateFlags2 & PLAYER_STATE2_8000000) { - if (this->unk_20A == 0) { + if (!this->unk_20A) { Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); - this->unk_20A = 1; + this->unk_20A = true; } } else { - this->unk_20A = 0; + this->unk_20A = false; } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -263,20 +290,20 @@ void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) { EffectSsHahen_SpawnBurst(play, &sp3C, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP); - func_80BDB1B4(this, 7); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_7); this->actionFunc = func_80BDB8F4; } void func_80BDB8F4(EnHiddenNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { func_80BDB930(this); } } void func_80BDB930(EnHiddenNuts* this) { - func_80BDB1B4(this, 3); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_3); this->unk_21A = 3; this->unk_228 = 500.0f; this->actionFunc = func_80BDB978; @@ -290,7 +317,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUT_FAINT); } - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_224++; if (this->unk_224 >= 2) { func_80BDBA28(this, play); @@ -301,7 +328,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) { void func_80BDBA28(EnHiddenNuts* this, PlayState* play) { Vec3f sp44; - func_80BDB1B4(this, 2); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_2); this->unk_228 = 0.0f; Math_Vec3f_Copy(&sp44, &this->actor.world.pos); @@ -326,10 +353,10 @@ void func_80BDBA28(EnHiddenNuts* this, PlayState* play) { void func_80BDBB48(EnHiddenNuts* this, PlayState* play) { s32 pad[3]; - f32 sp58 = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; WaterBox* sp54; f32 sp50; - s16 sp4E = 0; + s16 sp4E = false; Vec3f sp40; if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp50, &sp54) && @@ -346,23 +373,23 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || Animation_OnFrame(&this->skelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER); - sp4E = 1; + sp4E = true; } } - if ((sp4E != 0) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || - Animation_OnFrame(&this->skelAnime, 10.0f))) { + if (sp4E && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || + Animation_OnFrame(&this->skelAnime, 10.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_20C), 1, 0x1388, 0); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 1, 0x3E8, 0); - if (this->unk_220 == 2) { - if (this->unk_22C <= sp58) { + if (this->animIndex == ENHIDDENNUTS_ANIM_2) { + if (curFrame >= this->animEndFrame) { this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; - func_80BDB1B4(this, 6); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_6); } } else { Math_ApproachF(&this->actor.world.pos.x, this->unk_20C.x, 0.5f, @@ -387,7 +414,7 @@ void func_80BDBE70(EnHiddenNuts* this, PlayState* play) { if (this->switchFlag >= 0) { Flags_SetSwitch(play, this->switchFlag); } - func_80BDB1B4(this, 8); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_8); this->unk_21A = 5; this->actionFunc = func_80BDBED4; } @@ -396,7 +423,7 @@ void func_80BDBED4(EnHiddenNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; Vec3f sp38; - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { Math_Vec3f_Copy(&sp38, &this->actor.world.pos); sp38.y = this->actor.floorHeight; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index 03a0a52b7..df8275aa4 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -2,6 +2,7 @@ #define Z_EN_HIDDEN_NUTS_H #include "global.h" +#include "objects/object_hintnuts/object_hintnuts.h" struct EnHiddenNuts; @@ -16,8 +17,8 @@ typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); typedef struct EnHiddenNuts { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[10]; - /* 0x1C4 */ Vec3s morphTable[10]; + /* 0x188 */ Vec3s jointTable[OBJECT_HINTNUTS_LIMB_MAX]; + /* 0x1C4 */ Vec3s morphTable[OBJECT_HINTNUTS_LIMB_MAX]; /* 0x200 */ EnHiddenNutsActionFunc actionFunc; /* 0x204 */ Path* path; /* 0x208 */ s16 unk_208; @@ -27,11 +28,11 @@ typedef struct EnHiddenNuts { /* 0x21A */ s16 unk_21A; /* 0x21C */ s16 switchFlag; /* 0x21E */ s16 pathIndex; - /* 0x220 */ s32 unk_220; + /* 0x220 */ s32 animIndex; /* 0x224 */ s16 unk_224; /* 0x226 */ s16 csId; /* 0x228 */ f32 unk_228; - /* 0x22C */ f32 unk_22C; + /* 0x22C */ f32 animEndFrame; /* 0x230 */ UNK_TYPE1 unk230[4]; /* 0x234 */ ColliderCylinder collider; } EnHiddenNuts; // size = 0x280 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 5ad3e9dcf..f9e51b55c 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 @@ -6,7 +6,6 @@ #include "z_en_hint_skb.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_skb/object_skb.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -126,20 +125,37 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -static AnimationInfo sAnimationInfo[] = { - { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, +typedef enum EnHinkSkbAnimation { + /* 0 */ ENHINTSKB_ANIM_0, + /* 1 */ ENHINTSKB_ANIM_1, + /* 2 */ ENHINTSKB_ANIM_2, + /* 3 */ ENHINTSKB_ANIM_3, + /* 4 */ ENHINTSKB_ANIM_4, + /* 5 */ ENHINTSKB_ANIM_5, + /* 6 */ ENHINTSKB_ANIM_6, + /* 7 */ ENHINTSKB_ANIM_7, + /* 8 */ ENHINTSKB_ANIM_8, + /* 9 */ ENHINTSKB_ANIM_9, + /* 10 */ ENHINTSKB_ANIM_10, + /* 11 */ ENHINTSKB_ANIM_11, + /* 12 */ ENHINTSKB_ANIM_12, + /* 13 */ ENHINTSKB_ANIM_MAX +} EnHinkSkbAnimation; + +static AnimationInfo sAnimationInfo[ENHINTSKB_ANIM_MAX] = { + { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_0 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // ENHINTSKB_ANIM_1 + { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, // ENHINTSKB_ANIM_2 + { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_3 + { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_4 + { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_5 + { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_6 + { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_7 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_8 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, // ENHINTSKB_ANIM_9 + { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_10 + { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_11 + { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENHINTSKB_ANIM_12 }; static InitChainEntry sInitChain[] = { @@ -153,7 +169,7 @@ void EnHintSkb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable, - this->morphtable, 20); + this->morphTable, OBJECT_SKB_LIMB_MAX); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElement); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -181,7 +197,7 @@ void func_80C1FE20(EnHintSkb* this, PlayState* play) { } void func_80C1FE30(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); this->actor.speed = 1.6f; this->actionFunc = func_80C1FE80; } @@ -200,7 +216,7 @@ void func_80C1FE80(EnHintSkb* this, PlayState* play) { void func_80C1FF30(EnHintSkb* this) { this->collider.base.atFlags &= ~AT_BOUNCED; this->actor.speed = 0.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_2); this->actionFunc = func_80C1FF88; } @@ -274,12 +290,12 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) { void func_80C20274(EnHintSkb* this) { if (this->skelAnime.animation == &object_skb_Anim_00697C) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); this->actor.gravity = -1.0f; this->actor.speed = 1.0f; } else { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -4.0f; } @@ -317,7 +333,7 @@ void func_80C20334(EnHintSkb* this, PlayState* play) { } void func_80C20484(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_4); this->unk_3E8 |= 4; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -6.0f; @@ -349,7 +365,7 @@ void func_80C20590(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -376,7 +392,7 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -405,10 +421,10 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { this->actor.speed = 2.4f; this->actor.gravity = -1.0f; this->actor.velocity.y = 3.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); } } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; } @@ -449,6 +465,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) { case TEXT_STATE_NONE: case TEXT_STATE_1: case TEXT_STATE_CLOSING: + default: break; } @@ -467,7 +484,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) { Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); } } @@ -542,7 +559,7 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) { case 0x1147: Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); break; case 0x1148: @@ -578,6 +595,9 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) { func_80C2075C(this); } break; + + default: + break; } } @@ -591,7 +611,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if (this->actionFunc == func_80C1FE80) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_12); } func_80C2075C(this); } @@ -682,6 +702,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { this->unk_3E8 |= 1; func_80C20274(this); break; + case 3: if (this->actor.colChkInfo.health != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); @@ -695,6 +716,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); func_80C20540(this); break; + case 4: this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; @@ -702,14 +724,14 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { this->drawDmgEffScale = 0.5f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); func_80C2066C(this); break; case 12: case 14: this->unk_3E8 |= 1; - + // fallthrough case 15: if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) || @@ -717,11 +739,11 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) { this->unk_3E8 |= 1; } - + // fallthrough case 13: Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); func_80C20274(this); break; @@ -731,6 +753,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { case 8: case 9: case 10: + default: break; } } @@ -850,7 +873,7 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 EnHintSkb* this = THIS; f32 temp_f10; - if (limbIndex == 11) { + if (limbIndex == OBJECT_SKB_LIMB_0B) { OPEN_DISPS(play->state.gfxCtx); temp_f10 = fabsf(Math_SinS(play->state.frames * 6000) * 95.0f) + 160.0f; @@ -859,13 +882,13 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 gDPSetEnvColor(POLY_OPA_DISP++, (s16)temp_f10, (s16)temp_f10, (s16)temp_f10, 255); CLOSE_DISPS(play->state.gfxCtx); - } else if (limbIndex == 10) { + } else if (limbIndex == OBJECT_SKB_LIMB_0A) { Matrix_MultZero(&this->actor.focus.pos); - } else if ((limbIndex == 12) && (this->unk_3DE == 1)) { + } else if ((limbIndex == OBJECT_SKB_LIMB_0C) && (this->unk_3DE == 1)) { Matrix_RotateZS(0x71C, MTXMODE_APPLY); } - if (((limbIndex == 11) || (limbIndex == 12)) && (this->unk_3E8 & 2)) { + if (((limbIndex == OBJECT_SKB_LIMB_0B) || (limbIndex == OBJECT_SKB_LIMB_0C)) && (this->unk_3E8 & 2)) { *dList = NULL; } @@ -879,21 +902,25 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if (!(this->unk_3E8 & 8)) { Collider_UpdateSpheres(limbIndex, &this->collider); - if ((limbIndex == 11) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { + if ((limbIndex == OBJECT_SKB_LIMB_0B) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); this->unk_3E8 |= 2; - } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && ((limbIndex != 11) || !(this->unk_3E8 & 1)) && - (limbIndex != 12)) { + } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && + ((limbIndex != OBJECT_SKB_LIMB_0B) || !(this->unk_3E8 & 1)) && (limbIndex != OBJECT_SKB_LIMB_0C)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); } if (this->drawDmgEffTimer != 0) { - if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || - (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) || - (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) { + if ((limbIndex == OBJECT_SKB_LIMB_02) || (limbIndex == OBJECT_SKB_LIMB_04) || + (limbIndex == OBJECT_SKB_LIMB_05) || (limbIndex == OBJECT_SKB_LIMB_06) || + (limbIndex == OBJECT_SKB_LIMB_07) || (limbIndex == OBJECT_SKB_LIMB_08) || + (limbIndex == OBJECT_SKB_LIMB_09) || (limbIndex == OBJECT_SKB_LIMB_0D) || + (limbIndex == OBJECT_SKB_LIMB_0E) || (limbIndex == OBJECT_SKB_LIMB_0F) || + (limbIndex == OBJECT_SKB_LIMB_10) || (limbIndex == OBJECT_SKB_LIMB_11) || + (limbIndex == OBJECT_SKB_LIMB_12)) { Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; - } else if ((limbIndex == 11) && !(this->unk_3E8 & 2)) { + } else if ((limbIndex == OBJECT_SKB_LIMB_0B) && !(this->unk_3E8 & 2)) { Matrix_MultVec3f(&D_80C21E70, &this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; } diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h index e263b9de0..95576210d 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h @@ -2,6 +2,7 @@ #define Z_EN_HINT_SKB_H #include "global.h" +#include "objects/object_skb/object_skb.h" struct EnHintSkb; @@ -37,8 +38,8 @@ typedef struct EnHintSkb { /* 0x2D4 */ f32 drawDmgEffAlpha; /* 0x2D8 */ f32 drawDmgEffScale; /* 0x2DC */ s32 bodyPartsCount; - /* 0x2E0 */ Vec3s jointTable[20]; - /* 0x358 */ Vec3s morphtable[20]; + /* 0x2E0 */ Vec3s jointTable[OBJECT_SKB_LIMB_MAX]; + /* 0x358 */ Vec3s morphTable[OBJECT_SKB_LIMB_MAX]; /* 0x3D0 */ UNK_TYPE1 unk3D0[0xC]; /* 0x3DC */ s16 unk_3DC; /* 0x3DE */ s16 unk_3DE; 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 00a5fd3b1..fe386b2ff 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -40,10 +40,10 @@ void EnHorse_StartReversing(EnHorse* this); void EnHorse_StartLowJump(EnHorse* this, PlayState* play); void EnHorse_StartHighJump(EnHorse* this, PlayState* play); void EnHorse_InitInactive(EnHorse* this); -void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames); +void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames); void EnHorse_ResetIdleAnimation(EnHorse* this); void EnHorse_StartIdleRidable(EnHorse* this); -void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames); +void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames); void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play); void EnHorse_InitIngoHorse(EnHorse* this); void EnHorse_UpdateIngoHorseAnim(EnHorse* this); @@ -109,33 +109,56 @@ typedef struct { /* 0x4 */ RaceWaypoint* waypoints; } RaceInfo; // size = 0x8 -static AnimationHeader* sEponaAnimations[] = { - &gEponaIdleAnim, - &gEponaWhinnyAnim, - &object_horse_link_child_Anim_005F64, - &object_horse_link_child_Anim_004DE8, - &gEponaWalkAnim, - &gEponaTrotAnim, - &gEponaGallopAnim, - &object_horse_link_child_Anim_0035B0, - &object_horse_link_child_Anim_003D38, +static AnimationHeader* sEponaAnimations[ENHORSE_ANIM_MAX] = { + &gEponaIdleAnim, // ENHORSE_ANIM_IDLE + &gEponaWhinnyAnim, // ENHORSE_ANIM_WHINNY + &object_horse_link_child_Anim_005F64, // ENHORSE_ANIM_STOPPING + &object_horse_link_child_Anim_004DE8, // ENHORSE_ANIM_REARING + &gEponaWalkAnim, // ENHORSE_ANIM_WALK + &gEponaTrotAnim, // ENHORSE_ANIM_TROT + &gEponaGallopAnim, // ENHORSE_ANIM_GALLOP + &object_horse_link_child_Anim_0035B0, // ENHORSE_ANIM_LOW_JUMP + &object_horse_link_child_Anim_003D38, // ENHORSE_ANIM_HIGH_JUMP }; -static AnimationHeader* sHniAnimations[] = { - &gHorseIdleAnim, &gHorseShakeHeadAnim, &gHorseStopAnim, &gHorseWhinnyAnim, &gHorseWalkAnim, - &gHorseTrotAnim, &gHorseGallopAnim, &gHorseJumpLowAnim, &gHorseJumpHighAnim, +static AnimationHeader* sHniAnimations[ENHORSE_ANIM_MAX] = { + &gHorseIdleAnim, // ENHORSE_ANIM_IDLE + &gHorseShakeHeadAnim, // ENHORSE_ANIM_WHINNY + &gHorseStopAnim, // ENHORSE_ANIM_STOPPING + &gHorseWhinnyAnim, // ENHORSE_ANIM_REARING @TODO: Does not line up + &gHorseWalkAnim, // ENHORSE_ANIM_WALK + &gHorseTrotAnim, // ENHORSE_ANIM_TROT + &gHorseGallopAnim, // ENHORSE_ANIM_GALLOP + &gHorseJumpLowAnim, // ENHORSE_ANIM_LOW_JUMP + &gHorseJumpHighAnim, // ENHORSE_ANIM_HIGH_JUMP }; -static AnimationHeader** sAnimationHeaders[] = { - NULL, NULL, sEponaAnimations, sHniAnimations, sHniAnimations, +static AnimationHeader** sAnimationHeaders[HORSE_TYPE_MAX] = { + NULL, // HORSE_TYPE_EPONA + NULL, // HORSE_TYPE_HNI + sEponaAnimations, // HORSE_TYPE_2 + sHniAnimations, // HORSE_TYPE_BANDIT + sHniAnimations, // HORSE_TYPE_DONKEY }; -static f32 sPlaybackSpeeds[] = { - 2.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 2.0f / 3.0f, 2.0f / 3.0f, +static f32 sPlaybackSpeeds[ENHORSE_ANIM_MAX] = { + 2.0f / 3.0f, // ENHORSE_ANIM_IDLE + 2.0f / 3.0f, // ENHORSE_ANIM_WHINNY + 3.0f / 3.0f, // ENHORSE_ANIM_STOPPING + 3.0f / 3.0f, // ENHORSE_ANIM_REARING + 3.0f / 3.0f, // ENHORSE_ANIM_WALK + 3.0f / 3.0f, // ENHORSE_ANIM_TROT + 3.0f / 3.0f, // ENHORSE_ANIM_GALLOP + 2.0f / 3.0f, // ENHORSE_ANIM_LOW_JUMP + 2.0f / 3.0f, // ENHORSE_ANIM_HIGH_JUMP }; -static SkeletonHeader* sSkeletonHeaders[] = { - NULL, NULL, &gEponaSkel, NULL, NULL, +static SkeletonHeader* sSkeletonHeaders[HORSE_TYPE_MAX] = { + NULL, // HORSE_TYPE_EPONA + NULL, // HORSE_TYPE_HNI + &gEponaSkel, // HORSE_TYPE_2 + NULL, // HORSE_TYPE_BANDIT + NULL, // HORSE_TYPE_DONKEY }; ActorInit En_Horse_InitVars = { @@ -570,7 +593,8 @@ void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) { } else { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } - } else if ((this->animIndex == 3) && (this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) { + } else if ((this->animIndex == ENHORSE_ANIM_REARING) && (this->curFrame > 25.0f) && + !(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); @@ -836,7 +860,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); } - this->animIndex = 0; + this->animIndex = ENHORSE_ANIM_IDLE; this->numBoosts = 6; this->boostRegenTime = 0; this->postDrawFunc = NULL; @@ -1900,21 +1924,21 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play) { } } -void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) { +void EnHorse_PlayIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) { this->action = ENHORSE_ACTION_IDLE; this->actor.speed = 0.0f; - if ((anim != ENHORSE_ANIM_IDLE) && (anim != ENHORSE_ANIM_WHINNY) && (anim != ENHORSE_ANIM_REARING)) { - anim = ENHORSE_ANIM_IDLE; + if ((animIndex != ENHORSE_ANIM_IDLE) && (animIndex != ENHORSE_ANIM_WHINNY) && (animIndex != ENHORSE_ANIM_REARING)) { + animIndex = ENHORSE_ANIM_IDLE; } - if (sAnimationHeaders[this->type][anim] == NULL) { - anim = ENHORSE_ANIM_IDLE; + if (sAnimationHeaders[this->type][animIndex] == NULL) { + animIndex = ENHORSE_ANIM_IDLE; } - if (anim != this->animIndex) { - this->animIndex = anim; - if (anim == ENHORSE_ANIM_IDLE) { + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + if (animIndex == ENHORSE_ANIM_IDLE) { this->stateFlags &= ~ENHORSE_SANDDUST_SOUND; } else { if (this->animIndex == ENHORSE_ANIM_WHINNY) { @@ -1942,8 +1966,8 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta } } -void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames) { - EnHorse_PlayIdleAnimation(this, anim, morphFrames, this->curFrame); +void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames) { + EnHorse_PlayIdleAnimation(this, animIndex, morphFrames, this->curFrame); } void EnHorse_ResetIdleAnimation(EnHorse* this) { @@ -1999,16 +2023,16 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) { } } -void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) { +void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) { this->action = ENHORSE_ACTION_FOLLOW_PLAYER; this->stateFlags &= ~ENHORSE_TURNING_TO_PLAYER; - if ((anim != ENHORSE_ANIM_TROT) && (anim != ENHORSE_ANIM_GALLOP) && (anim != ENHORSE_ANIM_WALK)) { - anim = ENHORSE_ANIM_WALK; + if ((animIndex != ENHORSE_ANIM_TROT) && (animIndex != ENHORSE_ANIM_GALLOP) && (animIndex != ENHORSE_ANIM_WALK)) { + animIndex = ENHORSE_ANIM_WALK; } - if (anim != this->animIndex) { - this->animIndex = anim; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, startFrames, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, morphFrames); @@ -2019,38 +2043,38 @@ void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 } void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) { - s32 anim = ENHORSE_ANIM_WALK; + s32 animIndex = ENHORSE_ANIM_WALK; f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else if (!(distToPlayer <= 300.0f) && (distToPlayer <= 400.0f)) { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } if (this->animIndex == ENHORSE_ANIM_GALLOP) { if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } } else if (this->animIndex == ENHORSE_ANIM_TROT) { if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else if (distToPlayer < 300.0f) { - anim = ENHORSE_ANIM_WALK; + animIndex = ENHORSE_ANIM_WALK; } else { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } } else if (this->animIndex == ENHORSE_ANIM_WALK) { if (distToPlayer > 300.0f) { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } else { - anim = ENHORSE_ANIM_WALK; + animIndex = ENHORSE_ANIM_WALK; } } - EnHorse_StartMovingAnimation(this, anim, -3.0f, 0.0f); + EnHorse_StartMovingAnimation(this, animIndex, -3.0f, 0.0f); } void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { @@ -2155,7 +2179,7 @@ void EnHorse_InitIngoHorse(EnHorse* this) { void EnHorse_SetIngoAnimation(s32 animIndex, f32 curFrame, s32 arg2, s16* animIndexOut) { *animIndexOut = sIngoAnimIndices[animIndex]; - if (arg2 == ENIN_ANIM_1) { + if (arg2 == 1) { if (animIndex == ENHORSE_ANIM_TROT) { *animIndexOut = ENIN_ANIM_4; } else if (animIndex == ENHORSE_ANIM_GALLOP) { @@ -2286,7 +2310,7 @@ void func_80881290(EnHorse* this, PlayState* play) { void func_80881398(EnHorse* this, PlayState* play) { Vec3s* jointTable; f32 y; - s32 animeUpdated; + s32 isAnimFinished; f32 curFrame; this->stateFlags |= ENHORSE_JUMPING; @@ -2294,7 +2318,7 @@ void func_80881398(EnHorse* this, PlayState* play) { this->actor.speed = 14.0f; } - animeUpdated = SkelAnime_Update(&this->skin.skelAnime); + isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); curFrame = this->skin.skelAnime.curFrame; if (curFrame > 23.0f) { @@ -2313,8 +2337,8 @@ void func_80881398(EnHorse* this, PlayState* play) { this->actor.world.pos.y = this->jumpStartY + (y * 0.01f * this->unk_528 * 0.01f); } - if (animeUpdated || ((curFrame > 17.0f) && - (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { + if (isAnimFinished || ((curFrame > 17.0f) && + (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { if (this->type == HORSE_TYPE_2) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { @@ -2962,7 +2986,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { f32 playerDistToHome; f32 distToPlayer; s32 nextAnimIndex = this->animIndex; - s32 animFinished; + s32 isAnimFinished; s16 yaw; if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) { @@ -3041,7 +3065,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; } - animFinished = SkelAnime_Update(&this->skin.skelAnime); + isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); if (((this->animIndex == ENHORSE_ANIM_IDLE) || (this->animIndex == ENHORSE_ANIM_WHINNY)) && ((nextAnimIndex == ENHORSE_ANIM_GALLOP) || (nextAnimIndex == ENHORSE_ANIM_TROT) || @@ -3054,7 +3078,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { } else if (this->animIndex == ENHORSE_ANIM_TROT) { func_8087C178(this); } - } else if (animFinished) { + } else if (isAnimFinished) { if (nextAnimIndex == ENHORSE_ANIM_GALLOP) { func_8087C1C0(this); } else if (nextAnimIndex == ENHORSE_ANIM_TROT) { @@ -3499,7 +3523,7 @@ void EnHorse_ObstructMovement(EnHorse* this, PlayState* play, s32 obstacleType, this->actor.world.pos = this->lastPos; this->stateFlags |= ENHORSE_OBSTACLE; if (this->playerControlled == 0) { - if (this->animIndex != 3) {} + if (this->animIndex != ENHORSE_ANIM_REARING) {} } else if (this->action != ENHORSE_ACTION_MOUNTED_REARING) { if (this->stateFlags & ENHORSE_JUMPING) { this->stateFlags &= ~ENHORSE_JUMPING; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 75f0254fc..f3c868c85 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -93,7 +93,8 @@ typedef enum EnHorseAnimation { /* 5 */ ENHORSE_ANIM_TROT, /* 6 */ ENHORSE_ANIM_GALLOP, /* 7 */ ENHORSE_ANIM_LOW_JUMP, - /* 8 */ ENHORSE_ANIM_HIGH_JUMP + /* 8 */ ENHORSE_ANIM_HIGH_JUMP, + /* 9 */ ENHORSE_ANIM_MAX } EnHorseAnimation; typedef enum HorseType { @@ -101,7 +102,8 @@ typedef enum HorseType { /* 1 */ HORSE_TYPE_HNI, /* 2 */ HORSE_TYPE_2, /* 3 */ HORSE_TYPE_BANDIT, - /* 4 */ HORSE_TYPE_DONKEY // Cremia's donkey + /* 4 */ HORSE_TYPE_DONKEY, // Cremia's donkey + /* 5 */ HORSE_TYPE_MAX } HorseType; #define ENHORSE_PARAM_BANDIT 0x2000 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 bba55073b..78d6f8624 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 @@ -19,7 +19,7 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play); void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play); void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play); -void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex); +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex); void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play); void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this); void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play); @@ -51,7 +51,7 @@ typedef enum { /* 5 */ OOT_CHILD_EPONA_ANIM_MAX } OoTEponaAnimation; -AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = { +static AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = { &gEponaIdleAnim, // OOT_CHILD_EPONA_ANIM_IDLE &gEponaWhinnyAnim, // OOT_CHILD_EPONA_ANIM_WHINNY &gEponaWalkAnim, // OOT_CHILD_EPONA_ANIM_WALK @@ -221,7 +221,7 @@ void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play) { void EnHorseLinkChild_SetupActionFunc0(EnHorseLinkChild* this) { this->action = OOT_CHILD_EPONA_ACTION_0; this->animIndex++; - if (this->animIndex >= ARRAY_COUNT(sAnimPlaySpeeds)) { + if (this->animIndex >= OOT_CHILD_EPONA_ANIM_MAX) { this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animIndex]); @@ -238,16 +238,16 @@ void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play) { } } -void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex) { +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex) { this->action = OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER; this->actor.speed = 0.0f; - if ((nextAnimIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (nextAnimIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; + if ((animIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (animIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) { + animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } @@ -258,7 +258,7 @@ void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimInd */ void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) { f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); - s32 nextAnimIndex; + s32 animIndex; if (SkelAnime_Update(&this->skin.skelAnime)) { if ((distToPlayer < 1000.0f) && (distToPlayer > 70.0f)) { @@ -267,13 +267,13 @@ void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) { } if (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = OOT_CHILD_EPONA_ANIM_WHINNY; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -297,7 +297,7 @@ void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this) { void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { f32 distToPlayer; s16 yawTowardPlayerDiff; - s32 nextAnimIndex; + s32 animIndex; if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { @@ -321,13 +321,13 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { } if ((distToPlayer < 1000.0f) && (distToPlayer >= 300.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if ((distToPlayer < 300.0f) && (distToPlayer >= 150.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if ((distToPlayer < 150.0f) && (distToPlayer >= 70.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { @@ -335,8 +335,8 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { return; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -394,16 +394,16 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) { Player* player; f32 distToPlayer; s32 isAnimFinished; - s32 nextAnimIndex; + s32 animIndex; func_808DF088(this, play); player = GET_PLAYER(play); distToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); - nextAnimIndex = this->animIndex; + animIndex = this->animIndex; isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); - if ((isAnimFinished) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) || + if (isAnimFinished || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) || (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE)) { //! @bug: The carry-over of this flag from OoT was not done correctly if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) { @@ -412,55 +412,53 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) { if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) > 250.0f) { if (distToHome >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if ((distToHome < 300.0f) && (distToHome >= 150.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if ((distToHome < 150.0f) && (distToHome >= 70.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = - (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = - (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } else if (distToPlayer < 200.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToPlayer < 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if (distToPlayer < 400.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } - if ((nextAnimIndex != this->animIndex) || (isAnimFinished == true)) { - this->animIndex = nextAnimIndex; + if ((this->animIndex != animIndex) || (isAnimFinished == true)) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -526,7 +524,7 @@ void EnHorseLinkChild_SetupActionFunc4(EnHorseLinkChild* this) { void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 distToTargetPos; - s32 nextAnimIndex; + s32 animIndex; this->timer++; if (this->timer > 300) { @@ -551,24 +549,24 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { if (!this->isReturningHome) { if (distToTargetPos >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToTargetPos >= 150.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } } else if (distToTargetPos >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToTargetPos >= 150.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if (distToTargetPos >= 70.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { @@ -576,8 +574,8 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { return; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { 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 5146f4fcd..b665b5d02 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -110,7 +110,7 @@ void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) { Math_Vec3f_Diff(&src, dst, &diff); - distance = SQ(diff.x) + SQ(diff.z); // gets un-squared after we check if we are too close + distance = SQXZ(diff); // gets un-squared after we check if we are too close if (SQ(offset) > distance) { return; @@ -176,20 +176,20 @@ void func_80953098(EnHs* this, PlayState* play) { void func_80953180(EnHs* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { - case 0x33F4: // text: laughing that they are all roosters (!) - case 0x33F6: // text: Grog regrets not being able to see his chicks reach adult hood + case 0x33F4: // laughing that they are all roosters (!) + case 0x33F6: // Grog regrets not being able to see his chicks reach adult hood Message_CloseTextbox(play); this->actionFunc = func_8095345C; break; - case 0x33F7: // text: notice his chicks are grown up, happy, wants to give you bunny hood + case 0x33F7: // notice his chicks are grown up, happy, wants to give you bunny hood this->actor.flags &= ~ACTOR_FLAG_10000; Message_CloseTextbox(play); this->actionFunc = func_80953098; func_80953098(this, play); break; - case 0x33F9: // text: laughing that they are all roosters (.) + case 0x33F9: // laughing that they are all roosters (.) this->actor.flags &= ~ACTOR_FLAG_10000; Message_CloseTextbox(play); this->actionFunc = func_8095345C; @@ -341,6 +341,9 @@ s32 EnHs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po return false; } break; + + default: + break; } return false; } 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 7e30676e2..9fbd7ff85 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -417,11 +417,11 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { */ void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->animIndex == EN_JG_ANIM_SURPRISE_START) { - if (currentFrame == lastFrame) { + if (curFrame == lastFrame) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -472,11 +472,11 @@ void EnJg_Walk(EnJg* this, PlayState* play) { void EnJg_Talk(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); u16 temp; - if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (currentFrame == lastFrame)) { + if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == lastFrame)) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -542,7 +542,7 @@ void EnJg_SetupWalk(EnJg* this, PlayState* play) { } void EnJg_Freeze(EnJg* this, PlayState* play) { - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->action == EN_JG_ACTION_SPAWNING) { @@ -557,7 +557,7 @@ void EnJg_Freeze(EnJg* this, PlayState* play) { this->actionFunc = EnJg_FrozenIdle; } else if (this->animIndex == EN_JG_ANIM_FROZEN_START) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; - if (currentFrame == lastFrame) { + if (curFrame == lastFrame) { this->freezeTimer = 1000; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, @@ -898,7 +898,7 @@ void EnJg_SpawnBreath(EnJg* this, PlayState* play) { * handing it off to EnJg_Freeze. */ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play) { - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -924,7 +924,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play } this->freezeTimer--; - if ((this->freezeTimer <= 0) && (currentFrame == lastFrame)) { + if ((this->freezeTimer <= 0) && (curFrame == lastFrame)) { this->animIndex = EN_JG_ANIM_FROZEN_START; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S); 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 73f1111a5..5ebdcd43f 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -115,7 +115,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.damageTable = &sDamageTable; SkelAnime_InitFlex(play, &this->skelAnime, &object_pr_Skel_004188, &object_pr_Anim_004340, this->jointTable, - this->morphtable, 5); + this->morphTable, 5); this->unk_1E0 = ENPR2_GET_F(&this->actor); this->actor.colChkInfo.mass = 10; Math_Vec3f_Copy(&this->unk_228, &this->actor.home.pos); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h index 94fb7e033..7d462b639 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h @@ -17,7 +17,7 @@ typedef struct EnPr2 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[5]; - /* 0x1A6 */ Vec3s morphtable[5]; + /* 0x1A6 */ Vec3s morphTable[5]; /* 0x1C4 */ EnPr2ActionFunc actionFunc; /* 0x1C8 */ s16 pathIndex; /* 0x1CC */ Path* path; 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 605761711..c7006f087 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -636,7 +636,7 @@ void EnSsh_Init(Actor* thisx, PlayState* play) { EnSsh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); - SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphtable, 30); + SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphTable, 30); Animation_Change(&this->skelAnime, &object_ssh_Anim_001494, 1.0f, 0.0f, frameCount, ANIMMODE_LOOP_INTERP, 0.0f); this->blureIdx = EnSsh_CreateBlureEffect(play); EnSsh_InitColliders(this, play); diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h index 6f19a5e51..8c95ea628 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h @@ -31,7 +31,7 @@ typedef struct EnSsh { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[30]; - /* 0x23C */ Vec3s morphtable[30]; + /* 0x23C */ Vec3s morphTable[30]; /* 0x2F0 */ EnSshActionFunc actionFunc; /* 0x2F4 */ ColliderCylinder collider1[6]; /* 0x4BC */ ColliderJntSph collider2; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 7ecc8c4e3..9a4244bc2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -15951,7 +15951,7 @@ 0x80BDAF24:("ObjHsStump_Draw",), 0x80BDB040:("EnHiddenNuts_Init",), 0x80BDB188:("EnHiddenNuts_Destroy",), - 0x80BDB1B4:("func_80BDB1B4",), + 0x80BDB1B4:("EnHiddenNuts_ChangeAnim",), 0x80BDB268:("func_80BDB268",), 0x80BDB2B8:("func_80BDB2B8",), 0x80BDB580:("func_80BDB580",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 01a46d7d1..9320ca10e 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -15810,8 +15810,8 @@ 0x80BDAFA0:("D_80BDAFA0","f32","",0x4), 0x80BDC0B0:("En_Hidden_Nuts_InitVars","UNK_TYPE1","",0x1), 0x80BDC0D0:("D_80BDC0D0","UNK_TYPE1","",0x1), - 0x80BDC0FC:("D_80BDC0FC","UNK_TYPE1","",0x1), - 0x80BDC120:("D_80BDC120","UNK_TYPE1","",0x1), + 0x80BDC0FC:("sAnimations","UNK_TYPE1","",0x1), + 0x80BDC120:("sAnimationModes","UNK_TYPE1","",0x1), 0x80BDC12C:("D_80BDC12C","UNK_TYPE1","",0x1), 0x80BDC138:("D_80BDC138","UNK_TYPE1","",0x1), 0x80BDC144:("D_80BDC144","UNK_TYPE1","",0x1), From 9b1335aa7b5f33231e7bde444d77b38df3bfa87a Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 23:14:05 +1000 Subject: [PATCH 108/121] Animation Cleanup: En_I* (#1400) * cleanup I * oops --- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 8 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 168 ++++++++++------- src/overlays/actors/ovl_En_Ig/z_en_ig.h | 9 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 8 +- src/overlays/actors/ovl_En_In/z_en_in.c | 174 ++++++++++-------- src/overlays/actors/ovl_En_In/z_en_in.h | 29 ++- .../actors/ovl_En_Insect/z_en_insect.c | 5 +- .../actors/ovl_En_Insect/z_en_insect.h | 5 +- .../z_en_invisible_ruppe.c | 3 + tools/disasm/functions.txt | 4 +- 10 files changed, 242 insertions(+), 171 deletions(-) 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 fe386b2ff..088e3fae0 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -2491,10 +2491,10 @@ void func_808819D8(EnHorse* this, PlayState* play) { } if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) { - this->rider->unk488 = 7; + this->rider->animIndex2 = ENIN_ANIM2_7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, - &this->rider->unk488); + &this->rider->animIndex2); } } @@ -3447,10 +3447,10 @@ void func_80884E0C(EnHorse* this, PlayState* play) { this->unk_56C = Math3D_Distance(&this->actor.world.pos, &this->actor.prevPos); if (((this->unk_550 == 5) || (this->unk_550 == 7)) && (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER)) { - this->rider->unk488 = 7; + this->rider->animIndex2 = ENIN_ANIM2_7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, - &this->rider->unk488); + &this->rider->animIndex2); } pos = this->actor.world.pos; 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 bd90f48c1..3006c7bfe 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -6,7 +6,6 @@ #include "z_en_ig.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#include "objects/object_dai/object_dai.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -143,17 +142,32 @@ static ColliderSphereInit sSphereInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum EnIgAnimation { + /* -1 */ ENIG_ANIM_NONE = -1, + /* 0 */ ENIG_ANIM_0, + /* 1 */ ENIG_ANIM_1, + /* 2 */ ENIG_ANIM_2, + /* 3 */ ENIG_ANIM_3, + /* 4 */ ENIG_ANIM_4, + /* 5 */ ENIG_ANIM_5, + /* 6 */ ENIG_ANIM_6, + /* 7 */ ENIG_ANIM_7, + /* 8 */ ENIG_ANIM_8, + /* 9 */ ENIG_ANIM_9, + /* 10 */ ENIG_ANIM_MAX +} EnIgAnimation; + +static AnimationInfoS sAnimationInfo[ENIG_ANIM_MAX] = { + { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_0 + { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_1 + { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_2 + { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_3 + { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_4 + { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_5 + { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_6 + { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIG_ANIM_7 + { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_8 + { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_9 }; Actor* func_80BF1150(EnIg* this, PlayState* play, u8 actorCat, s16 actorId) { @@ -204,44 +218,44 @@ EnDoor* func_80BF1200(PlayState* play, s32 arg1) { return SubS_FindDoor(play, phi_a1); } -void func_80BF1258(EnIg* this) { - this->skelAnime.playSpeed = this->unk_3D4; +void EnIg_UpdateSkelAnime(EnIg* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BF1284(EnIg* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnIg_ChangeAnim(EnIg* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - switch (arg1) { - case 0: - case 1: - if ((this->unk_3FC != 0) && (this->unk_3FC != 1)) { - phi_v1 = true; + switch (animIndex) { + case ENIG_ANIM_0: + case ENIG_ANIM_1: + if ((this->animIndex != ENIG_ANIM_0) && (this->animIndex != ENIG_ANIM_1)) { + changeAnim = true; } break; - case 2: - case 3: - if ((this->unk_3FC != 2) && (this->unk_3FC != 3)) { - phi_v1 = true; + case ENIG_ANIM_2: + case ENIG_ANIM_3: + if ((this->animIndex != ENIG_ANIM_2) && (this->animIndex != ENIG_ANIM_3)) { + changeAnim = true; } break; default: - if (arg1 != this->unk_3FC) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } break; } - if (phi_v1) { - this->unk_3FC = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_3D4 = this->skelAnime.playSpeed; + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + return didAnimChange; } void func_80BF1354(EnIg* this, PlayState* play) { @@ -358,16 +372,18 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { switch (this->unk_3F6) { case 0: - if (func_80BF16C8(this, csId)) { - case 2: - case 4: - if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), - this->actor.child); - } - this->unk_3F6++; - ret = true; + if (!func_80BF16C8(this, csId)) { + break; } + // fallthrough + case 2: + case 4: + if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); + } + this->unk_3F6++; + ret = true; break; case 1: @@ -387,6 +403,9 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { this->unk_3F6++; ret = true; break; + + default: + break; } return ret; } @@ -438,10 +457,10 @@ s32 func_80BF19A0(EnIg* this, PlayState* play) { void func_80BF1A60(EnIg* this, PlayState* play) { if (this->unk_3F4 == 0) { - func_80BF1284(this, 4); + EnIg_ChangeAnim(this, ENIG_ANIM_4); this->unk_3F4++; } else if ((this->unk_3F4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80BF1284(this, 5); + EnIg_ChangeAnim(this, ENIG_ANIM_5); this->unk_3F4++; } } @@ -449,7 +468,7 @@ void func_80BF1A60(EnIg* this, PlayState* play) { s32 func_80BF1AE0(EnIg* this, PlayState* play) { switch (this->scheduleResult) { case 3: - func_80BF1284(this, 0); + EnIg_ChangeAnim(this, ENIG_ANIM_0); break; case 10: @@ -457,7 +476,10 @@ s32 func_80BF1AE0(EnIg* this, PlayState* play) { case 12: case 13: case 14: - func_80BF1284(this, 2); + EnIg_ChangeAnim(this, ENIG_ANIM_2); + break; + + default: break; } return true; @@ -471,8 +493,8 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { if (player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_400 | PLAYER_STATE1_800)) { this->unk_3D0 |= 0x400; if (this->unk_3D2 != temp) { - if ((this->unk_3FC == 2) || (this->unk_3FC == 3)) { - func_80BF1284(this, 0); + if ((this->animIndex == ENIG_ANIM_2) || (this->animIndex == ENIG_ANIM_3)) { + EnIg_ChangeAnim(this, ENIG_ANIM_0); } if ((temp == 0x28B0) || (temp == 0x28B7)) { @@ -484,7 +506,10 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { } else if (this->unk_3D0 & 0x400) { this->unk_3D2 = 0; this->unk_3D0 &= ~0x400; + + //! FAKE: if (1) {} + func_80BF1AE0(this, play); } @@ -529,7 +554,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 sp2C = 0; if (func_80BF1C44(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AN)) { - func_80BF1284(this, 0); + EnIg_ChangeAnim(this, ENIG_ANIM_0); SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x20; this->unk_3D0 |= 0x100; @@ -575,7 +600,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3E2 = sp56 - scheduleOutput->time0; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D0 |= 0x100; - func_80BF1284(this, 3); + EnIg_ChangeAnim(this, ENIG_ANIM_3); this->actor.gravity = 0.0f; ret = true; } @@ -626,7 +651,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3D0 &= ~0x10; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 2); + EnIg_ChangeAnim(this, ENIG_ANIM_2); this->actor.gravity = -1.0f; ret = true; } @@ -662,7 +687,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.home.rot.y += 0x8000; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 1); + EnIg_ChangeAnim(this, ENIG_ANIM_1); break; case 4: @@ -670,7 +695,10 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.shape.rot.y = this->actor.world.rot.y; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 8); + EnIg_ChangeAnim(this, ENIG_ANIM_8); + break; + + default: break; } ret = true; @@ -710,6 +738,9 @@ s32 func_80BF2368(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 3: ret = func_80BF1D78(this, play, scheduleOutput); break; + + default: + break; } return ret; } @@ -765,6 +796,7 @@ s32 func_80BF25E8(EnIg* this, PlayState* play) { s32 pad; SubS_TimePathing_FillKnots(knots, SUBS_TIME_PATHING_ORDER, this->timePath->count + SUBS_TIME_PATHING_ORDER); + if (!(this->unk_3D0 & 8)) { timePathTargetPos = gZeroVec3f; SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, @@ -830,11 +862,11 @@ s32 func_80BF293C(EnIg* this, PlayState* play) { Math_ApproachS(&this->actor.world.rot.y, this->actor.home.rot.y, 3, 0x2AA8); } else { this->actor.world.rot.y = this->actor.home.rot.y; - func_80BF1284(this, 7); + EnIg_ChangeAnim(this, ENIG_ANIM_7); } - } else if ((this->unk_3FC == 7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + } else if ((this->animIndex == ENIG_ANIM_7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_80BF1284(this, 9); + EnIg_ChangeAnim(this, ENIG_ANIM_9); } return true; } @@ -868,6 +900,9 @@ void func_80BF2A50(EnIg* this, PlayState* play) { case 4: func_80BF2890(this, play); break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); } @@ -916,9 +951,10 @@ void EnIg_Init(Actor* thisx, PlayState* play) { EnIg* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 28.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, 19); - this->unk_3FC = -1; - func_80BF1284(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, + OBJECT_DAI_LIMB_MAX); + this->animIndex = ENIG_ANIM_NONE; + EnIg_ChangeAnim(this, ENIG_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit); Collider_InitAndSetSphere(play, &this->collider2, &this->actor, &sSphereInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); @@ -946,7 +982,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) { func_80BF1B40(this, play); if (this->scheduleResult != 0) { - func_80BF1258(this); + EnIg_UpdateSkelAnime(this); func_80BF13E4(this); func_80BF15EC(this); SubS_Offer(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & SUBS_OFFER_MODE_MASK); @@ -960,7 +996,7 @@ s32 EnIg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Gfx** gfx) { EnIg* this = THIS; - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { *dList = NULL; } return false; @@ -973,7 +1009,7 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnIg* this = THIS; Vec3f sp2C; - if (limbIndex == 11) { + if (limbIndex == OBJECT_DAI_LIMB_0B) { Matrix_MultVec3f(&D_80BF3528, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); @@ -981,17 +1017,17 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList((*gfx)++, object_dai_DL_0087B8); } - if (limbIndex == 12) { + if (limbIndex == OBJECT_DAI_LIMB_0C) { gSPDisplayList((*gfx)++, object_dai_DL_0089D8); } - if (limbIndex == 9) { + if (limbIndex == OBJECT_DAI_LIMB_09) { gSPDisplayList((*gfx)++, object_dai_DL_008B00); Matrix_MultVec3f(&D_80BF351C, &sp2C); Math_Vec3f_ToVec3s(&this->collider2.dim.worldSphere.center, &sp2C); } - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { Matrix_Get(&this->unk_190); } } @@ -1013,7 +1049,7 @@ void EnIg_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx, Gfx** stepRot = false; } - if (limbIndex == 9) { + if (limbIndex == OBJECT_DAI_LIMB_09) { SubS_UpdateLimb(this->unk_3E8 + 0x4000, this->unk_3EA + this->actor.shape.rot.y + 0x4000, &this->unk_2D4, &this->unk_2E6, stepRot, overrideRot); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.h b/src/overlays/actors/ovl_En_Ig/z_en_ig.h index 274338a11..71c7c509d 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h @@ -2,6 +2,7 @@ #define Z_EN_IG_H #include "global.h" +#include "objects/object_dai/object_dai.h" struct EnIg; @@ -38,11 +39,11 @@ typedef struct EnIg { /* 0x2D4 */ Vec3f unk_2D4; /* 0x2E0 */ UNK_TYPE1 unk2E0[0x6]; /* 0x2E6 */ Vec3s unk_2E6; - /* 0x2EC */ Vec3s jointTable[19]; - /* 0x35E */ Vec3s morphTable[19]; + /* 0x2EC */ Vec3s jointTable[OBJECT_DAI_LIMB_MAX]; + /* 0x35E */ Vec3s morphTable[OBJECT_DAI_LIMB_MAX]; /* 0x3D0 */ u16 unk_3D0; /* 0x3D2 */ u16 unk_3D2; - /* 0x3D4 */ f32 unk_3D4; + /* 0x3D4 */ f32 animPlaySpeed; /* 0x3D8 */ UNK_TYPE1 unk3D8[0x8]; /* 0x3E0 */ s16 unk_3E0; /* 0x3E2 */ s16 unk_3E2; @@ -57,7 +58,7 @@ typedef struct EnIg { /* 0x3F4 */ s16 unk_3F4; /* 0x3F6 */ s16 unk_3F6; /* 0x3F8 */ EnIgUnkFunc unk_3F8; - /* 0x3FC */ s32 unk_3FC; + /* 0x3FC */ s32 animIndex; /* 0x400 */ UNK_TYPE1 unk400[0x8]; /* 0x408 */ s32 unk_408; } EnIg; // size = 0x40C 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 96ce3db8c..7f3ed6de4 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -365,15 +365,15 @@ void EnIk_CheckActions(EnIk* this, PlayState* play) { } void EnIk_SetupIdle(EnIk* this) { - f32 frameCount = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim); + f32 endFrame = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim); if (this->drawArmorFlags != 0) { this->timer = 10; } else { this->timer = 0; } - Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, frameCount, frameCount, - ANIMMODE_ONCE, this->timer); + Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, + this->timer); this->actionFunc = EnIk_Idle; this->actor.speed = 0.0f; } @@ -461,7 +461,7 @@ void EnIk_SetupVerticalAttack(EnIk* this) { playbackSpeed = 1.2f; } Animation_Change(&this->skelAnime, &gIronKnuckleVerticalAttackAnim, playbackSpeed, 0.0f, - Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), 3, -4.0f); + Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), ANIMMODE_ONCE_INTERP, -4.0f); this->timer = 0; this->blurEffectSpawnLock = -1; this->actionFunc = EnIk_VerticalAttack; 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 1c0fc091d..19fbd436e 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -118,25 +118,25 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, +static AnimationInfoS sAnimationInfo[ENIN_ANIM_MAX] = { + { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_0 + { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_1 + { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_2 + { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_3 + { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_4 + { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_5 + { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_6 + { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_7 + { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_8 + { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_9 + { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_10 + { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_11 + { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_12 + { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_13 + { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_14 + { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIN_ANIM_15 + { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_16 + { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIN_ANIM_17 }; static TrackOptionsSet sTrackOptions = { @@ -147,20 +147,20 @@ static TrackOptionsSet sTrackOptions = { }; s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { - s16 frameCount; - s32 ret = false; + s16 endFrame; + s32 didAnimChange = false; - if ((animIndex >= 0) && (animIndex < 18)) { - ret = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); + if ((animIndex > ENIN_ANIM_NONE) && (animIndex < ENIN_ANIM_MAX)) { + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); } Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, - sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); } - return ret; + return didAnimChange; } s32 func_808F3178(EnIn* this, PlayState* play) { @@ -298,12 +298,19 @@ void func_808F3690(EnIn* this, PlayState* play) { } void func_808F374C(EnIn* this, PlayState* play) { - AnimationHeader* sAnimations[] = { - &object_in_Anim_015E38, &object_in_Anim_016A60, &object_in_Anim_0177AC, &object_in_Anim_016484, - &object_in_Anim_0170DC, &object_in_Anim_018240, &object_in_Anim_0187C8, &object_in_Anim_0198A8, + AnimationHeader* sAnimations[ENIN_ANIM2_MAX] = { + &object_in_Anim_015E38, // ENIN_ANIM2_0 + &object_in_Anim_016A60, // ENIN_ANIM2_1 + &object_in_Anim_0177AC, // ENIN_ANIM2_2 + &object_in_Anim_016484, // ENIN_ANIM2_3 + &object_in_Anim_0170DC, // ENIN_ANIM2_4 + &object_in_Anim_018240, // ENIN_ANIM2_5 + &object_in_Anim_0187C8, // ENIN_ANIM2_6 + &object_in_Anim_0198A8, // ENIN_ANIM2_7 }; - if (this->skelAnime.animation == &object_in_Anim_016484 || this->skelAnime.animation == &object_in_Anim_0170DC) { + if ((this->skelAnime.animation == &object_in_Anim_016484) || + (this->skelAnime.animation == &object_in_Anim_0170DC)) { if (Animation_OnFrame(&this->skelAnime, 8.0f)) { Audio_PlaySfx_Randomized(&this->actor.projectedPos, NA_SE_VO_IN_LASH_0, 2); if (Rand_ZeroOne() < 0.3f) { @@ -312,14 +319,16 @@ void func_808F374C(EnIn* this, PlayState* play) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_LASH); } } - if (this->skelAnime.animation == &object_in_Anim_0198A8 && Animation_OnFrame(&this->skelAnime, 20.0f)) { + + if ((this->skelAnime.animation == &object_in_Anim_0198A8) && Animation_OnFrame(&this->skelAnime, 20.0f)) { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_CRY_0); } + if (SkelAnime_Update(&this->skelAnime)) { - this->unk488 %= ARRAY_COUNT(sAnimations); - this->unk486 = this->unk488; - Animation_Change(&this->skelAnime, sAnimations[this->unk488], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[this->unk488]), ANIMMODE_ONCE, -10.0f); + this->animIndex2 %= ENIN_ANIM2_MAX; + this->unk486 = this->animIndex2; + Animation_Change(&this->skelAnime, sAnimations[this->animIndex2], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex2]), ANIMMODE_ONCE, -10.0f); } } @@ -407,7 +416,7 @@ void func_808F3B40(EnIn* this, PlayState* play) { this->actor.parent = NULL; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = func_808F3AD4; - textId = gSaveContext.save.day != 3 ? 0x3481 : 0x34A4; + textId = (gSaveContext.save.day != 3) ? 0x3481 : 0x34A4; this->actor.textId = textId; } else { Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f); @@ -958,6 +967,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347E: func_808F35D8(this, play); if (Inventory_HasEmptyBottle()) { @@ -1430,7 +1440,7 @@ void func_808F5A94(EnIn* this, PlayState* play) { void func_808F5B58(EnIn* this, PlayState* play) { if (Horse_IsActive(play, &play->actorCtx)) { - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + if (((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 6, &this->unk48C); @@ -1438,8 +1448,8 @@ void func_808F5B58(EnIn* this, PlayState* play) { func_808F5728(play, this, 2, &this->unk48C); } } - } else if (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER || - (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) { + } else if ((Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER) || + ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 4, &this->unk48C); } else { @@ -1452,7 +1462,7 @@ void func_808F5C98(EnIn* this, PlayState* play) { if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_END) { this->actionFunc = func_808F5B58; } - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + if (((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day != 3) { func_808F5728(play, this, 2, &this->unk48C); @@ -1484,7 +1494,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable, 20); + SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable, + OBJECT_IN_LIMB_MAX); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0); Collider_InitCylinder(play, &this->colliderCylinder); Collider_SetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); @@ -1499,7 +1510,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { } if ((type == ENIN_HORSE_RIDER_YELLOW_SHIRT) || (type == ENIN_HORSE_RIDER_BLUE_SHIRT)) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - this->unk488 = 1; + this->animIndex2 = ENIN_ANIM2_1; Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f, Animation_GetLastFrame(&object_in_Anim_016A60), ANIMMODE_ONCE, 0.0f); Actor_SetScale(&this->actor, 0.01f); @@ -1623,41 +1634,41 @@ void func_808F6334(EnIn* this, PlayState* play) { s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnIn* this = THIS; s32 pad; - Gfx* sp50[] = { - NULL, - NULL, - object_in_DL_0149A8, - object_in_DL_014AE0, - object_in_DL_014C30, - object_in_DL_0145D8, - object_in_DL_014710, - object_in_DL_014860, - object_in_DL_014420, - object_in_DL_012A78, - object_in_DL_013DE0, - object_in_DL_013F10, - object_in_DL_014040, - object_in_DL_0137A0, - object_in_DL_0138D0, - object_in_DL_013A00, - object_in_DL_012DF8, - object_in_DL_013670, - object_in_DL_013540, - object_in_DL_013440, + Gfx* sp50[OBJECT_IN_LIMB_MAX] = { + NULL, // OBJECT_IN_LIMB_NONE + NULL, // OBJECT_IN_LIMB_01 + object_in_DL_0149A8, // OBJECT_IN_LIMB_02 + object_in_DL_014AE0, // OBJECT_IN_LIMB_03 + object_in_DL_014C30, // OBJECT_IN_LIMB_04 + object_in_DL_0145D8, // OBJECT_IN_LIMB_05 + object_in_DL_014710, // OBJECT_IN_LIMB_06 + object_in_DL_014860, // OBJECT_IN_LIMB_07 + object_in_DL_014420, // OBJECT_IN_LIMB_08 + object_in_DL_012A78, // OBJECT_IN_LIMB_09 + object_in_DL_013DE0, // OBJECT_IN_LIMB_0A + object_in_DL_013F10, // OBJECT_IN_LIMB_0B + object_in_DL_014040, // OBJECT_IN_LIMB_0C + object_in_DL_0137A0, // OBJECT_IN_LIMB_0D + object_in_DL_0138D0, // OBJECT_IN_LIMB_0E + object_in_DL_013A00, // OBJECT_IN_LIMB_0F + object_in_DL_012DF8, // OBJECT_IN_LIMB_10 + object_in_DL_013670, // OBJECT_IN_LIMB_11 + object_in_DL_013540, // OBJECT_IN_LIMB_12 + object_in_DL_013440, // OBJECT_IN_LIMB_13 }; - if ((this->unk23C != 0) && (limbIndex != 16)) { + if ((this->unk23C != 0) && (limbIndex != OBJECT_IN_LIMB_10)) { if (sp50[limbIndex] != NULL) { *dList = sp50[limbIndex]; } } - if ((this->unk4AC & 4) && (limbIndex == 16)) { + if ((this->unk4AC & 4) && (limbIndex == OBJECT_IN_LIMB_10)) { *dList = object_in_DL_01C528; } OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 }; gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp38[this->unk482])); @@ -1668,31 +1679,34 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po CLOSE_DISPS(play->state.gfxCtx); - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->headRot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->headRot.x, MTXMODE_APPLY); Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); func_808F6334(this, play); } - if (limbIndex == 9) { + + if (limbIndex == OBJECT_IN_LIMB_09) { Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY); } - if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) { + + if ((limbIndex == OBJECT_IN_LIMB_09) || (limbIndex == OBJECT_IN_LIMB_0A) || (limbIndex == OBJECT_IN_LIMB_0D)) { rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } + if (this->unk4AC & 0x40) { - if (limbIndex == 18) { + if (limbIndex == OBJECT_IN_LIMB_12) { rot->x = 0x1F40; rot->y = -0x3E8; rot->z = 0x1D4C; - } else if (limbIndex == 17) { + } else if (limbIndex == OBJECT_IN_LIMB_11) { rot->x = -0x1F40; rot->y = 0x3E8; rot->z = 0x1D4C; - } else if (limbIndex == 19) { + } else if (limbIndex == OBJECT_IN_LIMB_13) { rot->x = 0; rot->y = 0x7FFF; rot->z = -0x2328; @@ -1706,26 +1720,26 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp50 = { 1600.0f, 0.0f, 0.0f }; Vec3f sp44 = { 0.0f, 0.0f, 0.0f }; - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { Matrix_MultVec3f(&sp50, &this->unk4B4); Math_Vec3f_Copy(&this->actor.focus.pos, &this->unk4B4); } if (this->unk23D == 0) { Collider_UpdateSpheres(limbIndex, &this->colliderJntSph); - if (limbIndex == 4) { + if (limbIndex == OBJECT_IN_LIMB_04) { Matrix_MultVec3f(&sp44, &this->unk248); } - if (limbIndex == 7) { + if (limbIndex == OBJECT_IN_LIMB_07) { Matrix_MultVec3f(&sp44, &this->unk254); } if (this->unk23C == 0) { if (!(this->unk4AC & 8)) { OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 12) { + if (limbIndex == OBJECT_IN_LIMB_0C) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70); } - if (limbIndex == 15) { + if (limbIndex == OBJECT_IN_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } @@ -1736,7 +1750,7 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (this->unk4AC & 0x20) { OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 12) { + if (limbIndex == OBJECT_IN_LIMB_0C) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h index c4833568c..ab774606a 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -16,7 +16,13 @@ typedef enum { /* 4 */ ENIN_BLUE_SHIRT } EnInType; -typedef enum { +#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) +#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE + +#define ENIN_PATH_INDEX_NONE 0x3F + +typedef enum EnInAnimation { + /* -1 */ ENIN_ANIM_NONE = -1, /* 0 */ ENIN_ANIM_0, /* 1 */ ENIN_ANIM_1, /* 2 */ ENIN_ANIM_2, @@ -34,13 +40,22 @@ typedef enum { /* 14 */ ENIN_ANIM_14, /* 15 */ ENIN_ANIM_15, /* 16 */ ENIN_ANIM_16, - /* 17 */ ENIN_ANIM_17 + /* 17 */ ENIN_ANIM_17, + /* 18 */ ENIN_ANIM_MAX } EnInAnimation; -#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) -#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE - -#define ENIN_PATH_INDEX_NONE 0x3F +typedef enum EnInAnimation2 { + /* -1 */ ENIN_ANIM2_NONE = -1, + /* 0 */ ENIN_ANIM2_0, + /* 1 */ ENIN_ANIM2_1, + /* 2 */ ENIN_ANIM2_2, + /* 3 */ ENIN_ANIM2_3, + /* 4 */ ENIN_ANIM2_4, + /* 5 */ ENIN_ANIM2_5, + /* 6 */ ENIN_ANIM2_6, + /* 7 */ ENIN_ANIM2_7, + /* 8 */ ENIN_ANIM2_MAX +} EnInAnimation2; typedef struct EnIn { /* 0x000 */ Actor actor; @@ -70,7 +85,7 @@ typedef struct EnIn { /* 0x482 */ s16 unk482; /* 0x484 */ s16 unk484; /* 0x486 */ s16 unk486; - /* 0x488 */ s16 unk488; + /* 0x488 */ s16 animIndex2; /* 0x48A */ u16 unk48A; /* 0x48C */ s32 unk48C; /* 0x490 */ UNK_TYPE1 unk490[0x4]; 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 6a51e9486..9d8667f0a 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -5,7 +5,6 @@ */ #include "z_en_insect.h" -#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS 0x00000000 @@ -132,7 +131,7 @@ void EnInsect_Init(Actor* thisx, PlayState* play) { func_8091A8A0(this); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_0527A0, &gameplay_keep_Anim_05140C, this->jointTable, - this->morphTable, 24); + this->morphTable, BUG_LIMB_MAX); Animation_Change(&this->skelAnime, &gameplay_keep_Anim_05140C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, 0.0f); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); @@ -278,7 +277,9 @@ void func_8091B07C(EnInsect* this, PlayState* play) { yaw -= 0x2000; } + //! FAKE: if (play) {} + Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 0x7D0); } diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.h b/src/overlays/actors/ovl_En_Insect/z_en_insect.h index 4e1f5b762..4fd2985f1 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h @@ -2,6 +2,7 @@ #define Z_EN_INSECT_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnInsect; @@ -16,8 +17,8 @@ typedef struct EnInsect { /* 0x144 */ ColliderJntSph collider; /* 0x164 */ ColliderJntSphElement colliderElements[1]; /* 0x1A4 */ SkelAnime skelAnime; - /* 0x1E8 */ Vec3s jointTable[24]; - /* 0x278 */ Vec3s morphTable[24]; + /* 0x1E8 */ Vec3s jointTable[BUG_LIMB_MAX]; + /* 0x278 */ Vec3s morphTable[BUG_LIMB_MAX]; /* 0x308 */ EnInsectActionFunc actionFunc; /* 0x30C */ u16 unk_30C; /* 0x30E */ s16 unk_30E; 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 ef64e3954..3a6c54983 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 @@ -75,6 +75,9 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_GET_RUPY); Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_RED); break; + + default: + break; } if (this->unk_190 >= 0) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9a4244bc2..0ecbdb9b1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16283,8 +16283,8 @@ 0x80BF0F10:("EffStk_Draw",), 0x80BF1150:("func_80BF1150",), 0x80BF1200:("func_80BF1200",), - 0x80BF1258:("func_80BF1258",), - 0x80BF1284:("func_80BF1284",), + 0x80BF1258:("EnIg_UpdateSkelAnime",), + 0x80BF1284:("EnIg_ChangeAnim",), 0x80BF1354:("func_80BF1354",), 0x80BF13E4:("func_80BF13E4",), 0x80BF146C:("func_80BF146C",), From 33aaaea2c40228e4df2b3508b3f206eaf4186d92 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 30 Sep 2023 17:28:14 +1000 Subject: [PATCH 109/121] Start Player Item Docs (#1396) * Copy Fig Docs * small cleanup * ItemChangeType comment * bool * item change comments * PR Review * rm comments --- include/functions.h | 2 +- include/z64player.h | 12 +- src/code/z_player_lib.c | 26 +- .../actors/ovl_player_actor/z_player.c | 588 ++++++++++-------- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 18 +- tools/sizes/code_functions.csv | 2 +- 7 files changed, 387 insertions(+), 293 deletions(-) diff --git a/include/functions.h b/include/functions.h index 88d8468e9..849329d94 100644 --- a/include/functions.h +++ b/include/functions.h @@ -884,7 +884,7 @@ s32 func_80123448(PlayState* play); s32 Player_IsGoronOrDeku(Player* player); s32 func_801234D4(PlayState* play); s32 func_80123590(PlayState* play, Actor* actor); -ItemId func_8012364C(PlayState* play, Player* player, s32 arg2); +ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot); PlayerItemAction func_80123810(PlayState* play); PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction); void Player_SetModelsForHoldingShield(Player* player); diff --git a/include/z64player.h b/include/z64player.h index 11145480e..3f0af150a 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1040,7 +1040,7 @@ typedef enum PlayerCueId { // breman mask march? #define PLAYER_STATE3_20000000 (1 << 29) // -#define PLAYER_STATE3_40000000 (1 << 30) +#define PLAYER_STATE3_START_CHANGING_HELD_ITEM (1 << 30) // TARGETING_HOSTILE? #define PLAYER_STATE3_80000000 (1 << 31) @@ -1095,7 +1095,7 @@ typedef struct Player { /* 0x14B */ u8 transformation; // PlayerTransformation enum /* 0x14C */ u8 modelGroup; // PlayerModelGroup enum /* 0x14D */ u8 nextModelGroup; - /* 0x14E */ s8 unk_14E; + /* 0x14E */ s8 itemChangeType; // ItemChangeType enum /* 0x14F */ u8 modelAnimType; // PlayerAnimType enum /* 0x150 */ u8 leftHandType; /* 0x151 */ u8 rightHandType; @@ -1122,7 +1122,7 @@ typedef struct Player { /* 0x238 */ OSMesg maskObjectLoadMsg; /* 0x23C */ void* maskObjectSegment; /* 0x240 */ SkelAnime skelAnime; - /* 0x284 */ SkelAnime unk_284; + /* 0x284 */ SkelAnime skelAnimeUpper; /* 0x2C8 */ SkelAnime unk_2C8; /* 0x30C */ Vec3s jointTable[5]; /* 0x32A */ Vec3s morphTable[5]; @@ -1176,8 +1176,8 @@ typedef struct Player { /* 0x74C */ u8 jointTableBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0x7EB */ u8 morphTableBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0x88A */ u8 blendTableBuffer[PLAYER_LIMB_BUF_SIZE]; - /* 0x929 */ u8 unk_929[PLAYER_LIMB_BUF_SIZE]; - /* 0x9C8 */ u8 unk_9C8[PLAYER_LIMB_BUF_SIZE]; + /* 0x929 */ u8 jointTableUpperBuffer[PLAYER_LIMB_BUF_SIZE]; + /* 0x9C8 */ u8 morphTableUpperBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"? /* 0xA6C */ u32 stateFlags1; /* 0xA70 */ u32 stateFlags2; @@ -1206,7 +1206,7 @@ typedef struct Player { /* 0xABC */ f32 unk_ABC; /* 0xAC0 */ f32 unk_AC0; /* 0xAC4 */ PlayerUpperActionFunc upperActionFunc; // Upper body/item action functions - /* 0xAC8 */ f32 unk_AC8; + /* 0xAC8 */ f32 skelAnimeUpperBlendWeight; /* 0xACC */ s16 unk_ACC; /* 0xACE */ s8 unk_ACE; /* 0xACF */ u8 putAwayCountdown; // Frames to wait before showing "Put Away" on A diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index db9a8c974..24b55cfea 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -570,12 +570,12 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) { return false; } -ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { - if (arg2 >= 4) { +ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) { + if (slot >= EQUIP_SLOT_A) { return ITEM_NONE; } - if (arg2 == 0) { + if (slot == EQUIP_SLOT_B) { ItemId item = Inventory_GetBtnBItem(play); if (item >= ITEM_FD) { @@ -597,18 +597,24 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { return item; } - if (arg2 == 1) { + if (slot == EQUIP_SLOT_C_LEFT) { return C_BTN_ITEM(EQUIP_SLOT_C_LEFT); } - if (arg2 == 2) { + if (slot == EQUIP_SLOT_C_DOWN) { return C_BTN_ITEM(EQUIP_SLOT_C_DOWN); } + // EQUIP_SLOT_C_RIGHT + return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT); } -u16 sCItemButtons[] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT }; +u16 sCItemButtons[] = { + BTN_CLEFT, + BTN_CDOWN, + BTN_CRIGHT, +}; PlayerItemAction func_80123810(PlayState* play) { Player* player = GET_PLAYER(play); @@ -630,7 +636,7 @@ PlayerItemAction func_80123810(PlayState* play) { for (i = 0; i < ARRAY_COUNT(sCItemButtons); i++) { if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, sCItemButtons[i])) { i++; - itemId = func_8012364C(play, player, i); + itemId = Player_GetItemOnButton(play, player, i); play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; @@ -2092,7 +2098,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** EnArrow* bubble = NULL; if (((player->skelAnime.animation == &gPlayerAnim_pn_drinkend)) || - (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) || + (player->skelAnimeUpper.animation == &gPlayerAnim_pn_tamahaki) || ((player->stateFlags3 & PLAYER_STATE3_40) && ((bubble = (EnArrow*)player->heldActor) != NULL))) { Matrix_TranslateRotateZYX(pos, rot); func_80125340(); @@ -2108,7 +2114,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** } 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); + func_80124618(D_801C03C0, player->skelAnimeUpper.curFrame, player->unk_AF0); } Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); @@ -3784,7 +3790,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G 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->skelAnimeUpper.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 }; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 8c1de93e5..d01dbd3be 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -64,9 +64,9 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input); s32 Player_StartFishing(PlayState* play); void func_8085B170(PlayState* play, Player* this); s32 func_8083A658(PlayState* play, Player* this); -void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction); +void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction); -void func_80831990(PlayState* play, Player* this, ItemId item); +void Player_UseItem(PlayState* play, Player* this, ItemId item); void func_80836988(Player* this, PlayState* play); @@ -210,7 +210,7 @@ void Player_Action_97(Player* this, PlayState* play); s32 Player_UpperAction_0(Player* this, PlayState* play); s32 Player_UpperAction_1(Player* this, PlayState* play); -s32 Player_UpperAction_2(Player* this, PlayState* play); +s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play); s32 Player_UpperAction_3(Player* this, PlayState* play); s32 Player_UpperAction_4(Player* this, PlayState* play); s32 Player_UpperAction_5(Player* this, PlayState* play); @@ -468,10 +468,10 @@ typedef struct MeleeWeaponDamageInfo { /* 0x7 */ u8 dmgHumanStrong; } MeleeWeaponDamageInfo; // size = 0x8 -typedef struct struct_8085CC88 { +typedef struct ItemChangeInfo { /* 0x0 */ PlayerAnimationHeader* anim; - /* 0x4 */ u8 frame; -} struct_8085CC88; // size = 0x8 + /* 0x4 */ u8 changeFrame; +} ItemChangeInfo; // size = 0x8 typedef struct { /* 0x0 */ u8 itemId; @@ -504,7 +504,7 @@ typedef struct struct_8085D200 { f32 sPlayerControlStickMagnitude; s16 sPlayerControlStickAngle; s16 D_80862B02; // analog stick yaw + camera yaw -s32 D_80862B04; // boolean, set to the return value of func_8083216C +s32 D_80862B04; // boolean, set to the return value of Player_UpdateUpperBody FloorType sPlayerFloorType; u32 sPlayerTouchedWallFlags; ConveyorSpeed sPlayerConveyorSpeedIndex; @@ -520,10 +520,10 @@ Vec3f sPlayerInteractWallCheckResult; f32 D_80862B3C; FloorEffect sPlayerFloorEffect; Input* sPlayerControlInput; -s32 D_80862B48; -s32 D_80862B4C; -EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings -s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? +s32 sPlayerUseHeldItem; // When true, the current held item is used. Is reset to false every frame. +s32 sPlayerHeldItemButtonIsHeldDown; // Indicates if the button for the current held item is held down. +EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings +s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? s32 func_8082DA90(PlayState* play) { return (play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF); @@ -586,7 +586,7 @@ void func_8082DC64(PlayState* play, Player* this) { this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800); } -void func_8082DCA0(PlayState* play, Player* this) { +void Player_DetachHeldActor(PlayState* play, Player* this) { Actor* heldActor = this->heldActor; if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) { @@ -598,7 +598,7 @@ void func_8082DCA0(PlayState* play, Player* this) { } if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) { - func_8082F8BC(play, this, PLAYER_IA_NONE); + Player_InitItemAction(play, this, PLAYER_IA_NONE); this->heldItemId = ITEM_FE; } } @@ -632,7 +632,7 @@ void func_8082DD2C(PlayState* play, Player* this) { s32 func_8082DE14(PlayState* play, Player* this) { if (this->heldItemAction > PLAYER_IA_LAST_USED) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return true; } else { return false; @@ -641,7 +641,7 @@ s32 func_8082DE14(PlayState* play, Player* this) { void func_8082DE50(PlayState* play, Player* this) { func_8082DD2C(play, this); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { @@ -663,7 +663,7 @@ void func_8082DF2C(PlayState* play) { } } -u8 D_8085B9F0[PLAYER_LIMB_MAX] = { +u8 sPlayerUpperBodyLimbCopyMap[PLAYER_LIMB_MAX] = { false, // PLAYER_LIMB_NONE false, // PLAYER_LIMB_ROOT false, // PLAYER_LIMB_WAIST @@ -2863,30 +2863,30 @@ void func_8082F1AC(PlayState* play, Player* this) { void Player_SetUpperAction(PlayState* play, Player* this, PlayerUpperActionFunc upperActionFunc) { this->upperActionFunc = upperActionFunc; this->unk_ACE = 0; - this->unk_AC8 = 0.0f; + this->skelAnimeUpperBlendWeight = 0.0f; func_8082E00C(this); } #define GET_PLAYER_ANIM(group, type) ((PlayerAnimationHeader**)D_8085BE84)[group * PLAYER_ANIMTYPE_MAX + type] -void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) { +void Player_InitItemActionWithAnim(PlayState* play, Player* this, PlayerItemAction itemAction) { PlayerAnimationHeader* curAnim = this->skelAnime.animation; PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType]; - s32 i; + s32 animGroup; this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000); - for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) { + for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) { if (curAnim == **iter) { break; } iter++; } - func_8082F8BC(play, this, itemAction); + Player_InitItemAction(play, this, itemAction); - if (i < PLAYER_ANIMGROUP_MAX) { - this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType); + if (animGroup < PLAYER_ANIMGROUP_MAX) { + this->skelAnime.animation = GET_PLAYER_ANIM(animGroup, this->modelAnimType); } } @@ -2988,7 +2988,7 @@ PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) { } } -PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = { +PlayerUpperActionFunc sPlayerUpperActionUpdateFuncs[PLAYER_IA_MAX] = { Player_UpperAction_0, // PLAYER_IA_NONE Player_UpperAction_0, // PLAYER_IA_LAST_USED Player_UpperAction_0, // PLAYER_IA_FISHING_ROD @@ -3076,7 +3076,7 @@ PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = { typedef void (*PlayerInitItemActionFunc)(PlayState*, Player*); -PlayerInitItemActionFunc sPlayerInitItemActionFuncs[PLAYER_IA_MAX] = { +PlayerInitItemActionFunc sPlayerItemActionInitFuncs[PLAYER_IA_MAX] = { Player_InitItemAction_DoNothing, // PLAYER_IA_NONE Player_InitItemAction_DoNothing, // PLAYER_IA_LAST_USED Player_InitItemAction_DoNothing, // PLAYER_IA_FISHING_ROD @@ -3189,27 +3189,94 @@ void func_8082F5FC(Player* this, Actor* actor) { this->stateFlags1 |= PLAYER_STATE1_800; } -struct_8085CC88 D_8085CC88[] = { - { &gPlayerAnim_link_normal_free2free, 12 }, - { &gPlayerAnim_link_normal_normal2fighter, 6 }, - { &gPlayerAnim_link_hammer_normal2long, 8 }, - { &gPlayerAnim_link_normal_normal2free, 8 }, - { &gPlayerAnim_link_fighter_fighter2long, 8 }, - { &gPlayerAnim_link_normal_fighter2free, 10 }, - { &gPlayerAnim_link_hammer_long2free, 7 }, - { &gPlayerAnim_link_hammer_long2long, 11 }, - { &gPlayerAnim_link_normal_free2free, 12 }, - { &gPlayerAnim_link_normal_normal2bom, 4 }, - { &gPlayerAnim_link_normal_long2bom, 4 }, - { &gPlayerAnim_link_normal_free2bom, 4 }, - { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, - { &gPlayerAnim_link_normal_free2freeB, 13 }, - { &gPlayerAnim_pz_bladeon, 4 }, +typedef enum ItemChangeType { + /* 0 */ PLAYER_ITEM_CHG_0, + /* 1 */ PLAYER_ITEM_CHG_1, + /* 2 */ PLAYER_ITEM_CHG_2, + /* 3 */ PLAYER_ITEM_CHG_3, + /* 4 */ PLAYER_ITEM_CHG_4, + /* 5 */ PLAYER_ITEM_CHG_5, + /* 6 */ PLAYER_ITEM_CHG_6, + /* 7 */ PLAYER_ITEM_CHG_7, + /* 8 */ PLAYER_ITEM_CHG_8, + /* 9 */ PLAYER_ITEM_CHG_9, + /* 10 */ PLAYER_ITEM_CHG_10, + /* 11 */ PLAYER_ITEM_CHG_11, + /* 12 */ PLAYER_ITEM_CHG_12, + /* 13 */ PLAYER_ITEM_CHG_13, + /* 14 */ PLAYER_ITEM_CHG_14, + /* 15 */ PLAYER_ITEM_CHG_MAX +} ItemChangeType; + +ItemChangeInfo sPlayerItemChangeInfo[PLAYER_ITEM_CHG_MAX] = { + { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_0 + { &gPlayerAnim_link_normal_normal2fighter, 6 }, // PLAYER_ITEM_CHG_1 + { &gPlayerAnim_link_hammer_normal2long, 8 }, // PLAYER_ITEM_CHG_2 + { &gPlayerAnim_link_normal_normal2free, 8 }, // PLAYER_ITEM_CHG_3 + { &gPlayerAnim_link_fighter_fighter2long, 8 }, // PLAYER_ITEM_CHG_4 + { &gPlayerAnim_link_normal_fighter2free, 10 }, // PLAYER_ITEM_CHG_5 + { &gPlayerAnim_link_hammer_long2free, 7 }, // PLAYER_ITEM_CHG_6 + { &gPlayerAnim_link_hammer_long2long, 11 }, // PLAYER_ITEM_CHG_7 + { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_8 + { &gPlayerAnim_link_normal_normal2bom, 4 }, // PLAYER_ITEM_CHG_9 + { &gPlayerAnim_link_normal_long2bom, 4 }, // PLAYER_ITEM_CHG_10 + { &gPlayerAnim_link_normal_free2bom, 4 }, // PLAYER_ITEM_CHG_11 + { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, // PLAYER_ITEM_CHG_12 + { &gPlayerAnim_link_normal_free2freeB, 13 }, // PLAYER_ITEM_CHG_13 + { &gPlayerAnim_pz_bladeon, 4 }, // PLAYER_ITEM_CHG_14 }; -s8 D_8085CD00[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = { - { 8, -5, -3, -6, 8, 0xB }, { 5, 0, -1, 4, 5, 9 }, { 3, 1, 0, 2, 3, 9 }, - { 6, -4, -2, 7, 6, 0xA }, { 8, -5, -3, -6, 8, 0xB }, { 8, -5, -3, -6, 8, 0xB }, +// Maps the appropriate ItemChangeType based on current and next animtype. +// A negative type value means the corresponding animation should be played in reverse. +s8 sPlayerItemChangeTypes[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = { + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_DEFAULT + PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_DEFAULT + PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_1 + PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_7, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_10, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_5 + }, }; ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = { @@ -3271,7 +3338,7 @@ void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this) { this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0); if (this->heldActor == NULL) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return; } armsHook = (ArmsHook*)this->heldActor; @@ -3283,7 +3350,7 @@ void Player_InitItemAction_5(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_1000000; } -void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { +void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction) { this->itemAction = this->heldItemAction = itemAction; this->modelGroup = this->nextModelGroup; @@ -3293,7 +3360,7 @@ void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { this->unk_B0C = 0.0f; this->unk_B28 = 0; - sPlayerInitItemActionFuncs[itemAction](play, this); + sPlayerItemActionInitFuncs[itemAction](play, this); Player_SetModelGroup(this, this->modelGroup); } @@ -3528,7 +3595,7 @@ void func_8082FC60(Player* this) { this->unk_B40 = 0.0f; } -s32 func_8082FC78(Player* this, ItemId item) { +s32 Player_ItemIsInUse(Player* this, ItemId item) { if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) { return true; } else { @@ -3536,7 +3603,7 @@ s32 func_8082FC78(Player* this, ItemId item) { } } -s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) { +s32 Player_ItemIsItemAction(Player* this, ItemId item, PlayerItemAction itemAction) { if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) { return true; } else { @@ -3548,7 +3615,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) { s32 btn; for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { - if (func_8082FCC4(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) { + if (Player_ItemIsItemAction(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) { return btn; } } @@ -3556,7 +3623,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) { return EQUIP_SLOT_NONE; } -u16 D_8085CFA8[] = { +u16 sPlayerItemButtons[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, @@ -3567,8 +3634,8 @@ u16 D_8085CFA8[] = { EquipSlot func_8082FDC4(void) { EquipSlot i; - for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { - if (CHECK_BTN_ALL(sPlayerControlInput->press.button, D_8085CFA8[i])) { + for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, sPlayerItemButtons[i])) { break; } } @@ -3576,7 +3643,10 @@ EquipSlot func_8082FDC4(void) { return i; } -void func_8082FE0C(Player* this, PlayState* play) { +/** + * Handles the high level item usage and changing process based on the B and C buttons. + */ +void Player_ProcessItemButtons(Player* this, PlayState* play) { if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) { return; } @@ -3602,7 +3672,7 @@ void func_8082FE0C(Player* this, PlayState* play) { if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) { maskIdMinusOne = this->currentMask - 1; } - func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne)); + Player_UseItem(play, this, Player_MaskIdToItemId(maskIdMinusOne)); return; } @@ -3616,10 +3686,11 @@ void func_8082FE0C(Player* this, PlayState* play) { if (((this->actor.id == ACTOR_PLAYER) && (this->itemAction >= PLAYER_IA_FISHING_ROD)) && !(((Player_GetHeldBButtonSword(this) == PLAYER_B_SWORD_NONE) || (gSaveContext.jinxTimer == 0)) && - (func_8082FC78(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) || - func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) || - func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) { - func_80831990(play, this, ITEM_NONE); + (Player_ItemIsInUse(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) { + Player_UseItem(play, this, ITEM_NONE); } else { s32 pad; ItemId item; @@ -3630,17 +3701,18 @@ void func_8082FE0C(Player* this, PlayState* play) { ? EQUIP_SLOT_B : i; - item = func_8012364C(play, this, i); + item = Player_GetItemOnButton(play, this, i); + if (item >= ITEM_FD) { - for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { - if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, D_8085CFA8[i])) { + for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, sPlayerItemButtons[i])) { break; } } - item = func_8012364C(play, this, i); + item = Player_GetItemOnButton(play, this, i); if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) { - D_80862B4C = 1; + sPlayerHeldItemButtonIsHeldDown = true; } } else if (item == ITEM_F0) { if (this->blastMaskTimer == 0) { @@ -3664,44 +3736,45 @@ void func_8082FE0C(Player* this, PlayState* play) { } } else { this->heldItemButton = i; - func_80831990(play, this, item); + Player_UseItem(play, this, item); } } } -void func_808302CC(Player* this, PlayState* play) { +void Player_StartChangingHeldItem(Player* this, PlayState* play) { PlayerAnimationHeader* anim; s32 pad[3]; u8 nextModelAnimType; - s32 var_v1; - s8 itemAction = Player_ItemToItemAction(this, this->heldItemId); + s32 itemChangeType; + s8 heldItemAction = Player_ItemToItemAction(this, this->heldItemId); s32 pad3; f32 startFrame; f32 endFrame; f32 frameSpeed; - Player_SetUpperAction(play, this, Player_UpperAction_2); + Player_SetUpperAction(play, this, Player_UpperAction_ChangeHeldItem); nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; - var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; + itemChangeType = sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; - if ((itemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) { - var_v1 = (itemAction == PLAYER_IA_NONE) ? -14 : 14; - } else if ((itemAction == PLAYER_IA_BOTTLE_EMPTY) || (itemAction == PLAYER_IA_11) || - ((itemAction == PLAYER_IA_NONE) && + if ((heldItemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) { + itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_14 : PLAYER_ITEM_CHG_14; + } else if ((heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (heldItemAction == PLAYER_IA_11) || + ((heldItemAction == PLAYER_IA_NONE) && ((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) { - var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13; + itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_13 : PLAYER_ITEM_CHG_13; } - this->unk_14E = ABS_ALT(var_v1); - anim = D_8085CC88[this->unk_14E].anim; + this->itemChangeType = ABS_ALT(itemChangeType); + anim = sPlayerItemChangeInfo[this->itemChangeType].anim; + if ((anim == &gPlayerAnim_link_normal_fighter2free) && (this->currentShield == PLAYER_SHIELD_NONE)) { anim = &gPlayerAnim_link_normal_free2fighter_free; } endFrame = Animation_GetLastFrame(anim); - if (var_v1 >= 0) { + if (itemChangeType >= 0) { frameSpeed = 1.2f; startFrame = 0.0f; } else { @@ -3710,30 +3783,31 @@ void func_808302CC(Player* this, PlayState* play) { endFrame = 0.0f; } - if (itemAction != PLAYER_IA_NONE) { + if (heldItemAction != PLAYER_IA_NONE) { frameSpeed *= 2.0f; } - PlayerAnimation_Change(play, &this->unk_284, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); - this->stateFlags3 &= ~PLAYER_STATE3_40000000; + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); + + this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM; } -void func_808304BC(Player* this, PlayState* play) { - if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) { +void Player_UpdateItems(Player* this, PlayState* play) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM)) { if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) { if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) { if ((this->csMode == PLAYER_CSMODE_NONE) && (play->unk_1887C == 0) && (play->activeCamId == CAM_ID_MAIN)) { if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) { - func_8082FE0C(this, play); + Player_ProcessItemButtons(this, play); } } } } } - if (this->stateFlags3 & PLAYER_STATE3_40000000) { - func_808302CC(this, play); + if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) { + Player_StartChangingHeldItem(this, play); } } @@ -3836,8 +3910,7 @@ s32 func_808306F8(Player* this, PlayState* play) { return false; } -// Take out / put away sounds? -void func_808308DC(PlayState* play, Player* this) { +void Player_FinishItemChange(PlayState* play, Player* this) { s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU); if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) { @@ -3848,7 +3921,7 @@ void func_808308DC(PlayState* play, Player* this) { } } - func_80831990(play, this, this->heldItemId); + Player_UseItem(play, this, this->heldItemId); if (!isGoronOrDeku) { if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { @@ -3860,15 +3933,15 @@ void func_808308DC(PlayState* play, Player* this) { } void func_808309CC(PlayState* play, Player* this) { - if (Player_UpperAction_2 == this->upperActionFunc) { - func_808308DC(play, this); + if (Player_UpperAction_ChangeHeldItem == this->upperActionFunc) { + Player_FinishItemChange(play, this); } - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; - func_8082DCA0(play, this); - this->stateFlags3 &= ~PLAYER_STATE3_40000000; + Player_DetachHeldActor(play, this); + this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM; } PlayerAnimationHeader* D_8085CFBC[2] = { @@ -3894,7 +3967,7 @@ PlayerAnimationHeader* D_8085CFDC[2] = { PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) { Player_SetUpperAction(play, this, Player_UpperAction_3); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); if (this->unk_B40 < 0.5f) { return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)]; @@ -3933,9 +4006,9 @@ s32 func_80830B88(PlayState* play, Player* this) { (this->currentShield != PLAYER_SHIELD_NONE))) && func_8082FBE8(this))) { PlayerAnimationHeader* anim = func_80830A58(play, this); - f32 lastFrame = Animation_GetLastFrame(anim); + f32 endFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame, + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 3.0f / 3.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); func_80830AE8(this); return true; @@ -3955,26 +4028,28 @@ void func_80830CE8(PlayState* play, Player* this) { func_80123C58(this); } - Animation_Reverse(&this->unk_284); + Animation_Reverse(&this->skelAnimeUpper); func_80830B38(this); } -void func_80830D40(PlayState* play, Player* this) { - struct_8085CC88* entry = &D_8085CC88[this->unk_14E]; - f32 frame = entry->frame; +void Player_WaitToFinishItemChange(PlayState* play, Player* this) { + ItemChangeInfo* itemChangeEntry = &sPlayerItemChangeInfo[this->itemChangeType]; + f32 changeFrame = itemChangeEntry->changeFrame; - if (this->unk_284.playSpeed < 0.0f) { - frame -= 1.0f; + if (this->skelAnimeUpper.playSpeed < 0.0f) { + changeFrame -= 1.0f; } - if (PlayerAnimation_OnFrame(&this->unk_284, frame)) { - func_808308DC(play, this); + + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, changeFrame)) { + Player_FinishItemChange(play, this); } + func_8082FB68(this); } s32 func_80830DF0(Player* this, PlayState* play) { - if (this->stateFlags3 & PLAYER_STATE3_40000000) { - func_808302CC(this, play); + if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) { + Player_StartChangingHeldItem(this, play); } else { return false; } @@ -3985,7 +4060,7 @@ s32 func_80830E30(Player* this, PlayState* play) { if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) { Player_SetUpperAction(play, this, Player_UpperAction_12); - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT) ? &gPlayerAnim_pz_cutterwaitA : ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) @@ -3997,7 +4072,7 @@ s32 func_80830E30(Player* this, PlayState* play) { return false; } - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (Player_IsHoldingHookshot(this)) ? &gPlayerAnim_link_hook_shot_ready : ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf @@ -4036,7 +4111,7 @@ s32 func_80831010(Player* this, PlayState* play) { s32 func_80831094(Player* this, PlayState* play) { if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) { - if ((D_80862B48 != 0) || func_80830F9C(play)) { + if (sPlayerUseHeldItem || func_80830F9C(play)) { if (func_80830E30(this, play)) { return func_80831010(this, play); } @@ -4122,7 +4197,7 @@ s32 func_808313A8(PlayState* play, Player* this, Actor* actor) { void func_808313F0(Player* this, PlayState* play) { if (!func_808313A8(play, this, this->heldActor)) { Player_SetUpperAction(play, this, Player_UpperAction_10); - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait); } } @@ -4163,7 +4238,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, } } else if ((this->transformation == PLAYER_FORM_GORON) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); @@ -4175,7 +4250,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) { func_808309CC(play, this); - PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this)); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, func_8082ED20(this)); this->stateFlags1 &= ~PLAYER_STATE1_400000; } @@ -4237,7 +4312,7 @@ void Player_SetAction_PreserveItemAction(PlayState* play, Player* this, PlayerAc } } -void func_808317C4(Player* this) { +void Player_DestroyHookshot(Player* this) { if (Player_IsHoldingHookshot(this)) { if (this->heldActor != NULL) { Actor_Kill(this->heldActor); @@ -4277,13 +4352,12 @@ void func_808318C0(PlayState* play) { // Toggle Lens from a button press void func_80831944(PlayState* play, Player* this) { - if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) { + if (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) { func_808318C0(play); } } -// Proposed name: Player_UseItem -void func_80831990(PlayState* play, Player* this, ItemId item) { +void Player_UseItem(PlayState* play, Player* this, ItemId item) { PlayerItemAction itemAction = Player_ItemToItemAction(this, item); if ((((this->heldItemAction == this->itemAction) && @@ -4336,15 +4410,20 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) && ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { + // Prevent some items from being used if player is out of ammo. + // Also prevent explosives from being used if too many are active Audio_PlaySfx(NA_SE_SY_ERROR); } else if (itemAction == PLAYER_IA_LENS_OF_TRUTH) { + // Handle Lens of Truth func_808318C0(play); } else if (itemAction == PLAYER_IA_PICTOGRAPH_BOX) { + // Handle Pictograph Box if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { Audio_PlaySfx(NA_SE_SY_ERROR); } } else if ((itemAction == PLAYER_IA_DEKU_NUT) && ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { + // Handle Deku Nuts if (AMMO(ITEM_DEKU_NUT) != 0) { func_8083A658(play, this); } else { @@ -4354,6 +4433,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (itemAction < PLAYER_IA_MASK_GIANT)) { PlayerMask maskId = GET_MASK_FROM_IA(itemAction); + // Handle wearable masks this->prevMask = this->currentMask; if (maskId == this->currentMask) { this->currentMask = PLAYER_MASK_NONE; @@ -4367,26 +4447,30 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) { u8 nextAnimType; + // Handle using a new held item this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); nextAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; var_v1 = ((this->transformation != PLAYER_FORM_GORON) || (itemAction == PLAYER_IA_POWDER_KEG)); if (var_v1 && (this->heldItemAction >= 0) && (item != this->heldItemId) && - (D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != 0)) { + (sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != + PLAYER_ITEM_CHG_0)) { + // Start the held item change process this->heldItemId = item; - this->stateFlags3 |= PLAYER_STATE3_40000000; + this->stateFlags3 |= PLAYER_STATE3_START_CHANGING_HELD_ITEM; } else { - func_808317C4(this); - func_8082DCA0(play, this); - func_8082F470(play, this, itemAction); + // Init new held item for use + Player_DestroyHookshot(this); + Player_DetachHeldActor(play, this); + Player_InitItemActionWithAnim(play, this, itemAction); if (!var_v1) { - D_80862B48 = 1; - D_80862B4C = 1; + sPlayerUseHeldItem = true; + sPlayerHeldItemButtonIsHeldDown = true; } } } else { - D_80862B48 = 1; - D_80862B4C = 1; + sPlayerUseHeldItem = true; + sPlayerHeldItemButtonIsHeldDown = true; } } } @@ -4429,11 +4513,11 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { } } -s32 func_80832090(Player* this) { +s32 Player_CanUpdateItems(Player* this) { return (!(Player_Action_34 == this->actionFunc) || - (((this->stateFlags3 & PLAYER_STATE3_40000000)) && + ((this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) && ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) && - (!(Player_UpperAction_2 == this->upperActionFunc) || + (!(Player_UpperAction_ChangeHeldItem == this->upperActionFunc) || Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction); } @@ -4442,7 +4526,7 @@ s32 func_8083213C(Player* this) { return (Player_Action_11 == this->actionFunc) || (Player_Action_12 == this->actionFunc); } -s32 func_8083216C(Player* this, PlayState* play) { +s32 Player_UpdateUpperBody(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) { Player_SetAction(play, this, Player_Action_92, 1); this->stateFlags3 |= PLAYER_STATE3_80; @@ -4456,8 +4540,8 @@ s32 func_8083216C(Player* this, PlayState* play) { return true; } - if (func_80832090(this)) { - func_808304BC(this, play); + if (Player_CanUpdateItems(this)) { + Player_UpdateItems(this, play); if (Player_Action_64 == this->actionFunc) { return true; } @@ -4467,23 +4551,23 @@ s32 func_8083216C(Player* this, PlayState* play) { return false; } - if (this->unk_AC8 != 0.0f) { + if (this->skelAnimeUpperBlendWeight != 0.0f) { if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f)) { - AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->unk_284.jointTable, - this->skelAnime.jointTable, D_8085B9F0); + AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnimeUpper.jointTable, + this->skelAnime.jointTable, sPlayerUpperBodyLimbCopyMap); } if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { - Math_StepToF(&this->unk_AC8, 0.0f, 0.25f); + Math_StepToF(&this->skelAnimeUpperBlendWeight, 0.0f, 0.25f); AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, 1.0f - this->unk_AC8); + this->skelAnimeUpper.jointTable, 1.0f - this->skelAnimeUpperBlendWeight); } } else if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f) || (this->skelAnime.moveFlags & ANIM_FLAG_8)) { AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } else { AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable); + this->skelAnimeUpper.jointTable); } return true; @@ -5014,7 +5098,7 @@ s32 (*sPlayerActionChangeFuncs[PLAYER_ACTION_CHG_MAX])(Player*, PlayState*) = { s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeList, s32 updateUpperBody) { if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { if (updateUpperBody) { - D_80862B04 = func_8083216C(this, play); + D_80862B04 = Player_UpdateUpperBody(this, play); if (Player_Action_64 == this->actionFunc) { return true; } @@ -5025,7 +5109,8 @@ s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeLi return true; } - if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) { + if (!(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) && + (Player_UpperAction_ChangeHeldItem != this->upperActionFunc)) { // Process all entries in the Action Change List with a positive index while (*actionChangeList >= 0) { if (sPlayerActionChangeFuncs[*actionChangeList](this, play)) { @@ -5044,7 +5129,7 @@ s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeLi return true; } } else if (this->stateFlags1 & PLAYER_STATE1_800) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } return false; @@ -5692,7 +5777,7 @@ s32 func_80834600(Player* this, PlayState* play) { Player_SetUpperAction(play, this, Player_UpperAction_4); var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] : D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)]; - PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, var_a2); } else { Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]); } @@ -7678,7 +7763,7 @@ s32 func_808396B8(PlayState* play, Player* this) { ((Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && ((this->transformation != PLAYER_FORM_GORON) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && ((this->transformation != PLAYER_FORM_ZORA) || !(this->stateFlags1 & PLAYER_STATE1_2000000)) && - (D_80862B48 != 0)))) { + sPlayerUseHeldItem))) { return true; } @@ -7782,8 +7867,8 @@ s32 Player_ActionChange_10(Player* this, PlayState* play) { func_80836B3C(play, this, 0.0f); } } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) && - (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && func_80832090(this) && - (this->transformation != PLAYER_FORM_GORON)) { + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && + Player_CanUpdateItems(this) && (this->transformation != PLAYER_FORM_GORON)) { func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f); } else if (!func_80839A84(play, this)) { func_80836B3C(play, this, 0.0f); @@ -7909,7 +7994,7 @@ s32 Player_ActionChange_6(Player* this, PlayState* play) { if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } else { this->stateFlags2 ^= PLAYER_STATE2_100000; } @@ -7927,7 +8012,7 @@ s32 Player_ActionChange_11(Player* this, PlayState* play) { ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) && !func_80123434(this) && (this->lockOnActor == NULL))) { func_8082DC38(this); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); if (Player_SetAction(play, this, Player_Action_18, 0)) { this->stateFlags1 |= PLAYER_STATE1_400000; if (this->transformation != PLAYER_FORM_GORON) { @@ -8025,7 +8110,7 @@ struct_8085D200 D_8085D200[] = { }; s32 func_8083A6C0(PlayState* play, Player* this) { - if (D_80862B48 != 0) { + if (sPlayerUseHeldItem) { if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { Player_SetAction(play, this, Player_Action_68, 0); if (this->actor.depthInWater > 12.0f) { @@ -8977,7 +9062,7 @@ s32 Player_ActionChange_2(Player* this, PlayState* play) { interactRangeActor->parent = &this->actor; if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) || ((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); func_80838830(this, giEntry->objectId); if (!(this->stateFlags2 & PLAYER_STATE2_400) || @@ -9539,7 +9624,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { s32 animIndex; s32 rand; f32 morphFrames; - s16 lastFrame; + s16 endFrame; if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || ((this->actor.id == ACTOR_PLAYER) && @@ -9586,7 +9671,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { } } - lastFrame = Animation_GetLastFrame(anim); + endFrame = Animation_GetLastFrame(anim); if ((this->skelAnime.animation == anim) || (this->skelAnime.animation == &gPlayerAnim_pz_attackAend) || (this->skelAnime.animation == &gPlayerAnim_pz_attackBend) || (this->skelAnime.animation == &gPlayerAnim_pz_attackCend)) { @@ -9595,7 +9680,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { morphFrames = -6.0f; } - PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE, + PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, endFrame, ANIMMODE_ONCE, morphFrames); } @@ -9884,7 +9969,7 @@ s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) { // Crouch-stabbing s32 func_8083FD80(Player* this, PlayState* play) { if (!Player_IsGoronOrDeku(this) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && - (this->transformation != PLAYER_FORM_ZORA) && (D_80862B48 != 0)) { + (this->transformation != PLAYER_FORM_ZORA) && sPlayerUseHeldItem) { //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab". func_8083375C(this, PLAYER_MWA_STAB_1H); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); @@ -9909,7 +9994,7 @@ void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { void func_8083FEF4(PlayState* play, Player* this) { Inventory_ChangeAmmo(ITEM_DEKU_STICK, -1); - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } s32 func_8083FF30(PlayState* play, Player* this) { @@ -9934,7 +10019,7 @@ s32 func_8083FFEC(PlayState* play, Player* this) { gSaveContext.save.saveInfo.playerData.swordHealth--; if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) { Item_Give(play, ITEM_SWORD_KOKIRI); - func_80831990(play, this, ITEM_SWORD_KOKIRI); + Player_UseItem(play, this, ITEM_SWORD_KOKIRI); Player_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN); if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { Message_StartTextbox(play, 0xF9, NULL); @@ -10377,11 +10462,11 @@ void func_80841358(PlayState* play, Player* this, s32 arg2) { //! @bug OoB read if player is goron, deku or human item = D_8085D2B0[this->transformation]; itemAction = sItemItemActions[item]; - func_808317C4(this); - func_8082DCA0(play, this); + Player_DestroyHookshot(this); + Player_DetachHeldActor(play, this); this->heldItemId = item; this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); - func_8082F8BC(play, this, itemAction); + Player_InitItemAction(play, this, itemAction); func_808309CC(play, this); if (arg2) { Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT); @@ -10464,7 +10549,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; -Vec3s D_8085D2C4 = { -57, 3377, 0 }; +Vec3s sPlayerSkeletonBaseTransl = { -57, 3377, 0 }; void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { Actor_ProcessInitChain(&this->actor, sInitChain); @@ -10476,11 +10561,11 @@ void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHe func_808309CC(play, this); SkelAnime_InitPlayer(play, &this->skelAnime, skelHeader, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType], 1 | 8, this->jointTableBuffer, this->morphTableBuffer, PLAYER_LIMB_MAX); - this->skelAnime.baseTransl = D_8085D2C4; + this->skelAnime.baseTransl = sPlayerSkeletonBaseTransl; - SkelAnime_InitPlayer(play, &this->unk_284, skelHeader, func_8082ED20(this), 1 | 8, this->unk_929, this->unk_9C8, - PLAYER_LIMB_MAX); - this->unk_284.baseTransl = D_8085D2C4; + SkelAnime_InitPlayer(play, &this->skelAnimeUpper, skelHeader, func_8082ED20(this), 1 | 8, + this->jointTableUpperBuffer, this->morphTableUpperBuffer, PLAYER_LIMB_MAX); + this->skelAnimeUpper.baseTransl = sPlayerSkeletonBaseTransl; if (this->transformation == PLAYER_FORM_GORON) { SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim, @@ -10636,7 +10721,7 @@ void Player_Init(Actor* thisx, PlayState* play) { this->heldItemAction = PLAYER_IA_NONE; this->heldItemId = ITEM_NONE; - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); Player_SetEquipmentData(play, this); this->prevBoots = this->currentBoots; Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]); @@ -10781,7 +10866,7 @@ void Player_Init(Actor* thisx, PlayState* play) { if (gSaveContext.powderKegTimer != 0) { this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_POWDER_KEG); this->heldItemId = ITEM_POWDER_KEG; - func_8082F8BC(play, this, PLAYER_IA_POWDER_KEG); + Player_InitItemAction(play, this, PLAYER_IA_POWDER_KEG); func_808313F0(this, play); } else if (gSaveContext.unk_1014 != 0) { func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM, @@ -11497,7 +11582,7 @@ void func_808442D8(PlayState* play, Player* this) { f32 temp_fv1; if (this->unk_B0C == 0.0f) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return; } @@ -12112,7 +12197,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f; D_8085C3E8 = 1.0f / D_8085C3E4; - D_80862B48 = D_80862B4C = 0; + sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown = false; var_v1 = Play_InCsMode(play); D_80862B2C = this->currentMask; @@ -12318,7 +12403,7 @@ void Player_Update(Actor* thisx, PlayState* play) { } if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) { @@ -12812,7 +12897,7 @@ s32 func_80847880(PlayState* play, Player* this) { func_8082DE50(play, this); Player_SetAction(play, this, Player_Action_81, 0); if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) { - func_80831990(play, this, ITEM_BOW); + Player_UseItem(play, this, ITEM_BOW); } Player_AnimationPlayOnce(play, this, func_8082ED20(this)); this->csMode = PLAYER_CSMODE_NONE; @@ -13198,30 +13283,32 @@ s32 Player_UpperAction_1(Player* this, PlayState* play) { return false; } -s32 Player_UpperAction_2(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284) || +s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper) || ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && - (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && - (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0))))) { - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); + (sPlayerUseHeldItem = + (sPlayerUseHeldItem || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && + (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0)))))) { + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; - D_80862B4C = D_80862B48; + sPlayerHeldItemButtonIsHeldDown = sPlayerUseHeldItem; return this->upperActionFunc(this, play); } if (func_8082ED94(this) != 0) { - func_80830D40(play, this); + Player_WaitToFinishItemChange(play, this); Player_AnimationPlayOnce(play, this, func_8082ED20(this)); this->unk_AA4 = 0; } else { - func_80830D40(play, this); + Player_WaitToFinishItemChange(play, this); } + return true; } s32 Player_UpperAction_3(Player* this, PlayState* play) { - PlayerAnimation_Update(play, &this->unk_284); + PlayerAnimation_Update(play, &this->skelAnimeUpper); if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { func_80830CE8(play, this); } else { @@ -13235,13 +13322,13 @@ s32 Player_UpperAction_3(Player* this, PlayState* play) { } s32 Player_UpperAction_4(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { PlayerAnimationHeader* anim; - f32 lastFrame; + f32 endFrame; anim = func_80830A58(play, this); - lastFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); } this->stateFlags1 |= PLAYER_STATE1_400000; @@ -13250,11 +13337,10 @@ s32 Player_UpperAction_4(Player* this, PlayState* play) { } s32 Player_UpperAction_5(Player* this, PlayState* play) { - // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284)) - D_80862B48 = D_80862B4C; - if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) { - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); - PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); + sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown; + if (sPlayerUseHeldItem || PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); this->unk_AA4 = 0; this->upperActionFunc(this, play); return false; @@ -13312,10 +13398,10 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { if ((this->unk_ACE == 0) && (func_8082ED94(this) == 0) && (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) { - PlayerAnimation_PlayOnce(play, &this->unk_284, D_8085D5E4[index]); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, D_8085D5E4[index]); this->unk_ACE = -1; - } else if (PlayerAnimation_Update(play, &this->unk_284)) { - PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]); + } else if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085D5F0[index]); this->unk_ACE = 1; } else if (this->unk_ACE == 1) { this->unk_ACE = 2; @@ -13326,7 +13412,7 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } func_80831010(this, play); - if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) { + if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || (!sPlayerHeldItemButtonIsHeldDown && !func_80830FD4(play)))) { Player_SetUpperAction(play, this, Player_UpperAction_8); if (this->unk_B28 >= 0) { if (index != 0) { @@ -13335,7 +13421,8 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } if (this->transformation == PLAYER_FORM_DEKU) { - PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnimeUpper, &gPlayerAnim_pn_tamahaki, + 2.0f / 3.0f); } } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_80831194(play, this); @@ -13351,15 +13438,15 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } s32 Player_UpperAction_8(Player* this, PlayState* play) { - s32 animFinished = PlayerAnimation_Update(play, &this->unk_284); + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnimeUpper); if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) { return true; } if (!func_80830B88(play, this) && - ((((this->unk_B28 < 0) && (D_80862B4C != 0)) || - ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && (D_80862B48 != 0))) || + ((((this->unk_B28 < 0) && sPlayerHeldItemButtonIsHeldDown) || + ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && sPlayerUseHeldItem)) || func_80830F9C(play))) { this->unk_B28 = ABS_ALT(this->unk_B28); @@ -13367,7 +13454,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { if (Player_IsHoldingHookshot(this)) { this->unk_ACE = 1; } else { - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf : &gPlayerAnim_link_bow_bow_shoot_next); @@ -13389,7 +13476,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { Player_SetUpperAction(play, this, Player_UpperAction_6); } else { Player_SetUpperAction(play, this, Player_UpperAction_9); - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf : &gPlayerAnim_link_bow_bow_shoot_end); } @@ -13400,7 +13487,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { } s32 Player_UpperAction_9(Player* this, PlayState* play) { - if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_6); } return true; @@ -13418,8 +13505,8 @@ s32 Player_UpperAction_10(Player* this, PlayState* play) { } if (this->stateFlags1 & PLAYER_STATE1_800) { - if (PlayerAnimation_Update(play, &this->unk_284)) { - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait); } if ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) { @@ -13447,31 +13534,31 @@ s32 Player_UpperAction_11(Player* this, PlayState* play) { } s32 Player_UpperAction_12(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_13); - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterwaitanim); } - if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) { + if (this->skelAnimeUpper.animation == &gPlayerAnim_pz_cutterwaitanim) { func_80831010(this, play); } return true; } s32 Player_UpperAction_13(Player* this, PlayState* play) { - PlayerAnimation_Update(play, &this->unk_284); + PlayerAnimation_Update(play, &this->skelAnimeUpper); func_80831010(this, play); - if (D_80862B4C == 0) { + if (!sPlayerHeldItemButtonIsHeldDown) { Player_SetUpperAction(play, this, Player_UpperAction_14); - PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterattack); } return true; } s32 Player_UpperAction_14(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; - } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) { + } else if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 6.0f)) { Vec3f pos; s16 untargetedRotY; @@ -13535,7 +13622,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) { if (this->stateFlags3 & PLAYER_STATE3_800000) { Player_SetUpperAction(play, this, Player_UpperAction_16); - PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cuttercatch); this->stateFlags3 &= ~PLAYER_STATE3_800000; Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); @@ -13546,7 +13633,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) { } s32 Player_UpperAction_16(Player* this, PlayState* play) { - if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { + if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->skelAnimeUpper)) { if (this->stateFlags1 & PLAYER_STATE1_2000000) { Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; @@ -13579,7 +13666,7 @@ void Player_Action_0(Player* this, PlayState* play) { void Player_Action_1(Player* this, PlayState* play) { this->stateFlags3 |= PLAYER_STATE3_10000000; PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (R_PLAY_FILL_SCREEN_ON == 0) { R_PLAY_FILL_SCREEN_ON = 20; @@ -14047,7 +14134,7 @@ void Player_Action_10(Player* this, PlayState* play) { AnimationContext_SetLoadFrame(play, func_8082ED20(this), 0, this->skelAnime.limbCount, this->skelAnime.morphTable); AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->skelAnime.morphTable, D_8085B9F0); + this->skelAnime.morphTable, sPlayerUpperBodyLimbCopyMap); } Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_CURVED, play); @@ -14294,7 +14381,7 @@ void Player_Action_18(Player* this, PlayState* play) { if (!Player_IsGoronOrDeku(this)) { this->stateFlags1 |= PLAYER_STATE1_400000; - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); this->stateFlags1 &= ~PLAYER_STATE1_400000; if (this->transformation == PLAYER_FORM_ZORA) { func_8082F164(this, BTN_R | BTN_B); @@ -14368,8 +14455,9 @@ void Player_Action_18(Player* this, PlayState* play) { void Player_Action_19(Player* this, PlayState* play) { func_80832F24(this); if (this->actionVar1 == 0) { - D_80862B04 = func_8083216C(this, play); - if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { + D_80862B04 = Player_UpdateUpperBody(this, play); + if ((Player_UpperAction_3 == this->upperActionFunc) || + (func_808331FC(play, this, &this->skelAnimeUpper, 4.0f) > 0)) { Player_SetAction(play, this, Player_Action_2, 1); } } else { @@ -14379,13 +14467,13 @@ void Player_Action_19(Player* this, PlayState* play) { temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); if ((temp_v0 != 0) && ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime))) { PlayerAnimationHeader* anim; - f32 lastFrame; + f32 endFrame; Player_SetAction(play, this, Player_Action_18, 1); Player_SetModelsForHoldingShield(this); anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; - lastFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); } } } @@ -14575,7 +14663,7 @@ void Player_Action_25(Player* this, PlayState* play) { func_8083CBC4(this, speedTarget, yawTarget, 1.0f, 0.05f, 0.1f, 0xC8); } - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->actionVar1 == 2) || (this->actionVar1 >= 4))) || !func_80839770(this, play)) && (this->actor.velocity.y < 0.0f)) { @@ -14631,7 +14719,7 @@ void Player_Action_25(Player* this, PlayState* play) { } } else { func_80837134(play, this); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } Player_ActionChange_13(this, play); @@ -15013,9 +15101,9 @@ void Player_Action_34(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_8083249C(this); - temp_v0 = func_8083216C(this, play); + temp_v0 = Player_UpdateUpperBody(this, play); if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) || - (temp_v0 == 0)) { + !temp_v0) { this->unk_D58(play, this); } } @@ -15183,7 +15271,7 @@ void Player_Action_35(Player* this, PlayState* play) { } if (this->stateFlags1 & PLAYER_STATE1_800) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } @@ -15202,7 +15290,7 @@ void Player_Action_36(Player* this, PlayState* play) { } animFinished = PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (animFinished) { if (this->actionVar2 == 0) { @@ -15359,7 +15447,7 @@ void Player_Action_43(Player* this, PlayState* play) { if (this->unk_AA5 == PLAYER_UNKAA5_3) { if (func_800B7118(this) || func_8082ECCC(this)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } @@ -15394,7 +15482,7 @@ void Player_Action_44(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083249C(this); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { @@ -15447,24 +15535,24 @@ void Player_Action_44(Player* this, PlayState* play) { this->actor.shape.rot.y = this->currentYaw; if (this->actionVar1 != 0) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { this->actionVar1--; if (this->actionVar1 != 0) { - PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f, - Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), + PlayerAnimation_Change(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_talk_free, 1.0f, + 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), ANIMMODE_ONCE, -6.0f); } } } AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } else if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->skelAnime.animation == &gPlayerAnim_link_normal_talk_free_wait)) { s32 temp_v0 = this->actor.focus.rot.y - this->actor.shape.rot.y; if (ABS_ALT(temp_v0) > 0xFA0) { PlayerAnimation_Change( - play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, + play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); this->actionVar1 = 2; } @@ -16001,7 +16089,7 @@ void Player_Action_52(Player* this, PlayState* play) { this->unk_AA5 = PLAYER_UNKAA5_0; this->actionVar1 = 0; } else if ((this->actionVar2 < 2) || (this->actionVar2 >= 4)) { - D_80862B04 = func_8083216C(this, play); + D_80862B04 = Player_UpdateUpperBody(this, play); if (D_80862B04) { this->actionVar1 = 0; } @@ -16015,27 +16103,27 @@ void Player_Action_52(Player* this, PlayState* play) { if (!D_80862B04) { if (this->actionVar1 != 0) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { rideActor->stateFlags &= ~ENHORSE_FLAG_8; this->actionVar1 = 0; } - if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { - if (PlayerAnimation_OnFrame(&this->unk_284, 23.0f)) { + if (this->skelAnimeUpper.animation == &gPlayerAnim_link_uma_stop_muti) { + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 23.0f)) { Player_PlaySfx(this, NA_SE_IT_LASH); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); } AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable); + this->skelAnimeUpper.jointTable); } else { - if (PlayerAnimation_OnFrame(&this->unk_284, 10.0f)) { + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 10.0f)) { Player_PlaySfx(this, NA_SE_IT_LASH); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); } AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } } else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) { PlayerAnimationHeader* anim = NULL; @@ -16049,7 +16137,7 @@ void Player_Action_52(Player* this, PlayState* play) { } if (anim != NULL) { - PlayerAnimation_PlayOnce(play, &this->unk_284, anim); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, anim); this->actionVar1 = 1; } } @@ -16439,7 +16527,7 @@ void Player_Action_59(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; this->actor.gravity = 0.0f; - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); func_8082F164(this, BTN_R); if (Player_ActionChange_13(this, play)) { @@ -17149,7 +17237,7 @@ void Player_Action_68(Player* this, PlayState* play) { Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); } - if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) { + if (Player_GetItemOnButton(play, this, this->heldItemButton) == ITEM_BOTTLE) { Actor* interactRangeActor = this->interactRangeActor; if (interactRangeActor != NULL) { @@ -17531,7 +17619,7 @@ void Player_Action_80(Player* this, PlayState* play) { } else { this->stateFlags1 &= ~PLAYER_STATE1_100000; if ((play->sceneId == SCENE_20SICHITAI) && - (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) { + (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) { s32 requiredScopeTemp; play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; @@ -17554,7 +17642,7 @@ void Player_Action_81(Player* this, PlayState* play) { this->unk_AA5 = PLAYER_UNKAA5_3; func_8083868C(play, this); PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; this->unk_AA6 |= 0x80; @@ -17651,7 +17739,7 @@ void Player_Action_84(Player* this, PlayState* play) { ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) && func_808333CC(this))) { - D_80862B48 = this->actionVar2; + sPlayerUseHeldItem = this->actionVar2; if (!Player_ActionChange_7(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; @@ -17666,7 +17754,7 @@ void Player_Action_84(Player* this, PlayState* play) { if (this->transformation == PLAYER_FORM_ZORA) { if (Player_ActionChange_8(this, play)) { - anim = this->unk_284.animation; + anim = this->skelAnimeUpper.animation; } this->unk_ADC = 0; } else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) && @@ -19670,7 +19758,7 @@ void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { PlayerAnimation_Update(play, &this->skelAnime); if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) { Player_ActionChange_2(this, play); } @@ -19707,7 +19795,7 @@ void Player_CsAction_2(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { PlayerAnimation_Update(play, &this->skelAnime); if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } } @@ -20232,7 +20320,7 @@ void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, PlayerCsMo void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) { if ((csMode != PLAYER_CSMODE_1) && (csMode != PLAYER_CSMODE_WAIT) && (csMode != PLAYER_CSMODE_20) && (csMode != PLAYER_CSMODE_END)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } } @@ -20326,7 +20414,7 @@ s32 Player_StartFishing(PlayState* play) { Player* player = GET_PLAYER(play); func_8082DE50(play, player); - func_80831990(play, player, ITEM_FISHING_ROD); + Player_UseItem(play, player, ITEM_FISHING_ROD); return 1; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0ecbdb9b1..83c871191 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2199,7 +2199,7 @@ 0x801234D4:("func_801234D4",), 0x80123590:("func_80123590",), 0x801235DC:("func_801235DC",), - 0x8012364C:("func_8012364C",), + 0x8012364C:("Player_GetItemOnButton",), 0x80123810:("func_80123810",), 0x80123960:("Player_ActionToModelGroup",), 0x801239AC:("Player_SetModelsForHoldingShield",), @@ -4256,7 +4256,7 @@ 0x8082DC28:("func_8082DC28",), 0x8082DC38:("func_8082DC38",), 0x8082DC64:("func_8082DC64",), - 0x8082DCA0:("func_8082DCA0",), + 0x8082DCA0:("Player_DetachHeldActor",), 0x8082DD2C:("func_8082DD2C",), 0x8082DE14:("func_8082DE14",), 0x8082DE50:("func_8082DE50",), @@ -4314,7 +4314,7 @@ 0x8082F164:("func_8082F164",), 0x8082F1AC:("func_8082F1AC",), 0x8082F43C:("Player_SetUpperAction",), - 0x8082F470:("func_8082F470",), + 0x8082F470:("Player_InitItemActionWithAnim",), 0x8082F524:("Player_ItemToItemAction",), 0x8082F594:("Player_InitItemAction_DoNothing",), 0x8082F5A4:("Player_InitItemAction_DekuStick",), @@ -4323,30 +4323,30 @@ 0x8082F62C:("Player_InitItemAction_SpawnExplosive",), 0x8082F7F4:("Player_InitItemAction_SpawnHookshot",), 0x8082F8A0:("Player_InitItemAction_5",), - 0x8082F8BC:("func_8082F8BC",), + 0x8082F8BC:("Player_InitItemAction",), 0x8082F938:("Player_OverrideBlureColors",), 0x8082FA5C:("func_8082FA5C",), 0x8082FB68:("func_8082FB68",), 0x8082FBE8:("func_8082FBE8",), 0x8082FC24:("func_8082FC24",), 0x8082FC60:("func_8082FC60",), - 0x8082FC78:("func_8082FC78",), - 0x8082FCC4:("func_8082FCC4",), + 0x8082FC78:("Player_ItemIsInUse",), + 0x8082FCC4:("Player_ItemIsItemAction",), 0x8082FD0C:("func_8082FD0C",), 0x8082FDC4:("func_8082FDC4",), - 0x8082FE0C:("func_8082FE0C",), - 0x808302CC:("func_808302CC",), - 0x808304BC:("func_808304BC",), + 0x8082FE0C:("Player_ProcessItemButtons",), + 0x808302CC:("Player_StartChangingHeldItem",), + 0x808304BC:("Player_UpdateItems",), 0x808305BC:("func_808305BC",), 0x808306F8:("func_808306F8",), - 0x808308DC:("func_808308DC",), + 0x808308DC:("Player_FinishItemChange",), 0x808309CC:("func_808309CC",), 0x80830A58:("func_80830A58",), 0x80830AE8:("func_80830AE8",), 0x80830B38:("func_80830B38",), 0x80830B88:("func_80830B88",), 0x80830CE8:("func_80830CE8",), - 0x80830D40:("func_80830D40",), + 0x80830D40:("Player_WaitToFinishItemChange",), 0x80830DF0:("func_80830DF0",), 0x80830E30:("func_80830E30",), 0x80830F9C:("func_80830F9C",), @@ -4362,15 +4362,15 @@ 0x80831494:("Player_SetAction",), 0x8083172C:("Player_SetAction_PreserveMoveFlags",), 0x80831760:("Player_SetAction_PreserveItemAction",), - 0x808317C4:("func_808317C4",), + 0x808317C4:("Player_DestroyHookshot",), 0x80831814:("func_80831814",), 0x808318C0:("func_808318C0",), 0x80831944:("func_80831944",), - 0x80831990:("func_80831990",), + 0x80831990:("Player_UseItem",), 0x80831F34:("func_80831F34",), - 0x80832090:("func_80832090",), + 0x80832090:("Player_CanUpdateItems",), 0x8083213C:("func_8083213C",), - 0x8083216C:("func_8083216C",), + 0x8083216C:("Player_UpdateUpperBody",), 0x808323C0:("func_808323C0",), 0x80832444:("func_80832444",), 0x8083249C:("func_8083249C",), @@ -4646,7 +4646,7 @@ 0x80848640:("func_80848640",), 0x80848780:("Player_UpperAction_0",), 0x808487B8:("Player_UpperAction_1",), - 0x80848808:("Player_UpperAction_2",), + 0x80848808:("Player_UpperAction_ChangeHeldItem",), 0x8084894C:("Player_UpperAction_3",), 0x80848A0C:("Player_UpperAction_4",), 0x80848AB0:("Player_UpperAction_5",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 9320ca10e..aababcf0b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4914,7 +4914,7 @@ 0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), 0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), 0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), - 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), + 0x8085B9F0:("sPlayerUpperBodyLimbCopyMap","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), 0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1), @@ -4944,10 +4944,10 @@ 0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1), 0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1), 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), - 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), - 0x8085CB3C:("sPlayerInitItemActionFuncs","UNK_PTR","",0x4), - 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1), - 0x8085CD00:("D_8085CD00","s8","[36]",0x24), + 0x8085C9F0:("sPlayerUpperActionUpdateFuncs","UNK_PTR","",0x4), + 0x8085CB3C:("sPlayerItemActionInitFuncs","UNK_PTR","",0x4), + 0x8085CC88:("sPlayerItemChangeInfo","UNK_TYPE1","",0x1), + 0x8085CD00:("sPlayerItemChangeTypes","s8","[36]",0x24), 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1), 0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220), 0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1), @@ -4959,7 +4959,7 @@ 0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1), 0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1), 0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20), - 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8), + 0x8085CFA8:("sPlayerItemButtons","u16","[4]",0x8), 0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1), 0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4), 0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1), @@ -5017,7 +5017,7 @@ 0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1), 0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1), 0x8085D2C0:("sInitChain","ActorInitVar","",0x4), - 0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4), + 0x8085D2C4:("sPlayerSkeletonBaseTransl","UNK_TYPE4","",0x4), 0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4), 0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24), 0x8085D330:("D_8085D330","EffectTireMarkInit","",0x8), @@ -5377,8 +5377,8 @@ 0x80862B3C:("D_80862B3C","f32","",0x4), 0x80862B40:("sPlayerFloorEffect","UNK_TYPE1","",0x1), 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1), - 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1), - 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1), + 0x80862B48:("sPlayerUseHeldItem","UNK_TYPE1","",0x1), + 0x80862B4C:("sPlayerHeldItemButtonIsHeldDown","UNK_TYPE1","",0x1), 0x80862B50:("D_80862B50","UNK_TYPE1","",0x1), 0x80862B6C:("D_80862B6C","UNK_TYPE1","",0x1), 0x808637B0:("En_Test_InitVars","ActorInit","",0x20), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index caaa33d73..5194497c7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1713,7 +1713,7 @@ asm/non_matchings/code/z_player_lib/Player_IsGoronOrDeku.s,Player_IsGoronOrDeku, asm/non_matchings/code/z_player_lib/func_801234D4.s,func_801234D4,0x801234D4,0x2F asm/non_matchings/code/z_player_lib/func_80123590.s,func_80123590,0x80123590,0x13 asm/non_matchings/code/z_player_lib/func_801235DC.s,func_801235DC,0x801235DC,0x1C -asm/non_matchings/code/z_player_lib/func_8012364C.s,func_8012364C,0x8012364C,0x71 +asm/non_matchings/code/z_player_lib/Player_GetItemOnButton.s,Player_GetItemOnButton,0x8012364C,0x71 asm/non_matchings/code/z_player_lib/func_80123810.s,func_80123810,0x80123810,0x54 asm/non_matchings/code/z_player_lib/Player_ActionToModelGroup.s,Player_ActionToModelGroup,0x80123960,0x13 asm/non_matchings/code/z_player_lib/Player_SetModelsForHoldingShield.s,Player_SetModelsForHoldingShield,0x801239AC,0x3E From 1509349bd76a90e163a538fb159bffa74a54f8a9 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 1 Oct 2023 12:56:38 +1100 Subject: [PATCH 110/121] Animation Cleanup: En_K* (#1402) * cleanup k * one more name --- src/code/z_skelanime.c | 3 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 5 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 3 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 50 +++-- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 40 ++-- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 6 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 151 +++++++++----- src/overlays/actors/ovl_En_Kbt/z_en_kbt.h | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 53 +++-- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.h | 5 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 191 +++++++++++------- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 9 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 15 ++ src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 7 + .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 3 +- tools/disasm/functions.txt | 4 +- 17 files changed, 354 insertions(+), 195 deletions(-) diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 79af1b73f..675487072 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1680,7 +1680,8 @@ void SkelAnime_AnimateFrame(SkelAnime* skelAnime) { s32 frame = skelAnime->curFrame; f32 partialFrame = skelAnime->curFrame - frame; - if (++frame >= (s32)skelAnime->animLength) { + frame++; + if (frame >= (s32)skelAnime->animLength) { frame = 0; } SkelAnime_GetFrameData(skelAnime->animation, frame, skelAnime->limbCount, nextjointTable); 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 39269c2ac..08f97aa93 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3931,10 +3931,11 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { SkelAnime_Free(&this->skelAnime, play); if (this->unk_148 == 0) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, NULL, NULL, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, NULL, NULL, + 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); } } 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 7fcf32bf4..e00f3b523 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 @@ -329,7 +329,8 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { s32 pad; if (this->blinkTimer == 0) { - if (++(this->eyeState) >= 3) { + this->eyeState++; + if (this->eyeState >= 3) { this->eyeState = 0; this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 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 cee6b38fa..d629c57b9 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -442,8 +442,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) { void EnKaizoku_ChangeAnim(EnKaizoku* this, EnKaizokuAnimation animIndex) { this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], 0.0f); } @@ -553,7 +553,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { break; case 3: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { sp54 = this->unk_2CA * 4 + this->unk_2C8; if (Player_GetMask(play) == PLAYER_MASK_STONE) { if (D_80B8A8D0[sp54] == 0x11A5) { @@ -595,7 +595,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { case 6: Math_ApproachF(&this->unk_5E0, 5.0f, 0.3f, 1.0f); - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_598 = 7; this->unk_2F8.x = 1.0f; this->unk_59C++; @@ -700,7 +700,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { switch (this->unk_59C) { case 0: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_14); this->unk_2C8 = 3; this->unk_598 = 0; @@ -709,7 +709,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { break; case 1: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { s32 textId; EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_15); @@ -787,7 +787,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { break; case 1: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if (this->unk_2D9 == 0) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH); this->unk_2D9 = 1; @@ -843,7 +843,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { 255; } - if ((this->frameCount <= curFrame) && (this->unk_5A0 >= 0x28)) { + if ((curFrame >= this->animEndFrame) && (this->unk_5A0 >= 0x28)) { this->picto.actor.draw = NULL; this->unk_598 = 10; Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f); @@ -1127,7 +1127,7 @@ void func_80B87D3C(EnKaizoku* this, PlayState* play) { } this->unk_2D8 = 0; - if ((this->frameCount <= curFrame) && + if ((curFrame >= this->animEndFrame) && (this->picto.actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH))) { this->bodyCollider.info.elemType = ELEMTYPE_UNK1; this->bodyCollider.base.colType = COLTYPE_HIT3; @@ -1157,7 +1157,7 @@ void func_80B87E9C(EnKaizoku* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if ((this->picto.actor.xzDistToPlayer < 170.0f) && (this->picto.actor.xzDistToPlayer > 140.0f) && (Rand_ZeroOne() < 0.2f)) { func_80B88910(this); @@ -1207,7 +1207,7 @@ void func_80B87FDC(EnKaizoku* this, PlayState* play2) { } this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); @@ -1252,7 +1252,7 @@ void func_80B88278(EnKaizoku* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->picto.actor.speed = 0.0f; if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); @@ -1404,22 +1404,20 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { if (this->skelAnime.curFrame <= 8.0f) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; - } else { - if (Animation_OnFrame(&this->skelAnime, 13.0f)) { - Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); - Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); - this->swordState = 1; - this->picto.actor.speed = 10.0f; - Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); - } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) { - this->picto.actor.speed = 0.0f; - } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { - this->swordState = -1; - } + } else if (Animation_OnFrame(&this->skelAnime, 13.0f)) { + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + this->swordState = 1; + this->picto.actor.speed = 10.0f; + Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); + } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) { + this->picto.actor.speed = 0.0f; + } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { + this->swordState = -1; } this->unk_2D8 = 0; - if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) { + if ((curFrame >= this->animEndFrame) && (this->unk_2D0 < 2)) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; @@ -1755,7 +1753,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); SkelAnime_Update(&this->skelAnime); - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_2D8 = 0; func_80B86B58(this); } else if (Animation_OnFrame(&this->skelAnime, 10.0f)) { diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index e2c53d34b..a119777a9 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -80,7 +80,7 @@ typedef struct EnKaizoku { /* 0x2D6 */ s16 csId; /* 0x2D8 */ u8 unk_2D8; /* 0x2D9 */ u8 unk_2D9; - /* 0x2DC */ f32 frameCount; + /* 0x2DC */ f32 animEndFrame; /* 0x2E0 */ f32 unk_2E0; /* 0x2E4 */ EnKaizokuAnimation animIndex; /* 0x2E8 */ s32 bodyPartIndex; 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 be787e8d9..d2c877ad3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -121,18 +121,32 @@ typedef enum { /* 5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx /* 6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused? /* 7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over - /* 8 */ ENKAKASI_ANIM_IDLE // slow stretching wiggle, ends in regular position + /* 8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position + /* 9 */ ENKAKASI_ANIM_MAX } EnKakasiAnimation; -static AnimationHeader* sAnimations[] = { - &object_ka_Anim_007444, &object_ka_Anim_00686C, &object_ka_Anim_0081A4, - &object_ka_Anim_007B90, &object_ka_Anim_0071EC, &object_ka_Anim_007444, - &object_ka_Anim_00686C, &object_ka_Anim_0081A4, &object_ka_Anim_000214, +static AnimationHeader* sAnimations[ENKAKASI_ANIM_MAX] = { + &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING + &object_ka_Anim_00686C, // ENKAKASI_ANIM_SIDEWAYS_SHAKING + &object_ka_Anim_0081A4, // ENKAKASI_ANIM_HOPPING_REGULAR + &object_ka_Anim_007B90, // ENKAKASI_ANIM_SPIN_REACH_OFFER + &object_ka_Anim_0071EC, // ENKAKASI_ANIM_TWIRL + &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_STILL + &object_ka_Anim_00686C, // ENKAKASI_ANIM_WAVE + &object_ka_Anim_0081A4, // ENKAKASI_ANIM_SLOWROLL + &object_ka_Anim_000214, // ENKAKASI_ANIM_IDLE }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, +static u8 sAnimationModes[ENKAKASI_ANIM_MAX] = { + ANIMMODE_LOOP, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING + ANIMMODE_LOOP, // ENKAKASI_ANIM_SIDEWAYS_SHAKING + ANIMMODE_LOOP, // ENKAKASI_ANIM_HOPPING_REGULAR + ANIMMODE_ONCE, // ENKAKASI_ANIM_SPIN_REACH_OFFER + ANIMMODE_ONCE, // ENKAKASI_ANIM_TWIRL + ANIMMODE_ONCE, // ENKAKASI_ANIM_ARMS_CROSSED_STILL + ANIMMODE_ONCE, // ENKAKASI_ANIM_WAVE + ANIMMODE_ONCE, // ENKAKASI_ANIM_SLOWROLL + ANIMMODE_ONCE, // ENKAKASI_ANIM_IDLE }; void EnKakasi_Destroy(Actor* thisx, PlayState* play) { @@ -147,7 +161,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { s32 i; Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80); - SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, NULL, NULL, 0); this->songSummonDist = KAKASI_GET_SUMMON_DISTANCE(&this->picto.actor) * 20.0f; if (this->songSummonDist < 40.0f) { @@ -278,7 +292,6 @@ void func_8096FBB8(EnKakasi* this, PlayState* play) { (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_RIGHT) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_LEFT) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_UP)) { - // why not 0 < x < 4? fewer branches this->unk190++; } if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { @@ -364,7 +377,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { } else if ((day == 3) && gSaveContext.save.isNight) { this->skelAnime.playSpeed = 1.0f; if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { - EnKakasi_ChangeAnim(this, 1); + EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } } else if (this->animIndex != ENKAKASI_ANIM_IDLE) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_IDLE); @@ -403,7 +416,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { // if dialogue: oh sorry come back again if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) { if ((curFrame >= this->animEndFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { - if (++this->unkCounter1A4 >= 2) { + this->unkCounter1A4++; + if (this->unkCounter1A4 >= 2) { this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); } @@ -1154,7 +1168,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnKakasi* this = THIS; - if (limbIndex == 4) { + if (limbIndex == OBJECT_KA_LIMB_04) { Matrix_MultVec3f(&gZeroVec3f, &this->unk1BC); } } 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 c400b3428..8171e56b4 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -647,10 +647,10 @@ void EnKame_Stunned(EnKame* this, PlayState* play) { } void EnKame_SetupDamaged(EnKame* this) { - s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim); + s16 endFrame = Animation_GetLastFrame(&gSnapperDamageAnim); - Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); - Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame); + Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, endFrame, ANIMMODE_ONCE, -3.0f); + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, endFrame); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE); this->collider.base.acFlags &= ~AC_ON; this->actionFunc = EnKame_Damaged; 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 76d88fa94..01e781ecb 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -17,11 +17,28 @@ void EnKbt_Draw(Actor* thisx, PlayState* play); s32 func_80B33E64(PlayState* play); s32 func_80B33E8C(PlayState* play); -void func_80B33EF0(EnKbt* this, s16 arg1); +void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex); Actor* func_80B3403C(PlayState* play); void func_80B34314(EnKbt* this, PlayState* play); void func_80B34598(EnKbt* this, PlayState* play); +typedef enum EnKbtAnimation { + /* 0 */ ENKBT_ANIM_0, + /* 1 */ ENKBT_ANIM_1, + /* 2 */ ENKBT_ANIM_2, + /* 3 */ ENKBT_ANIM_3, + /* 4 */ ENKBT_ANIM_4, + /* 5 */ ENKBT_ANIM_5, + /* 6 */ ENKBT_ANIM_6, + /* 7 */ ENKBT_ANIM_7, + /* 8 */ ENKBT_ANIM_8, + /* 9 */ ENKBT_ANIM_9, + /* 10 */ ENKBT_ANIM_10, + /* 11 */ ENKBT_ANIM_11, + /* 12 */ ENKBT_ANIM_12, + /* 13 */ ENKBT_ANIM_MAX +} EnKbtAnimation; + ActorInit En_Kbt_InitVars = { ACTOR_EN_KBT, ACTORCAT_NPC, @@ -44,13 +61,13 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { this->actor.home.rot.z = 0; this->unk_27E = 4; this->unk_27F = 0; - this->unk_280 = 13; + this->animIndex = ENKBT_ANIM_MAX; this->unk_282 = 13; this->unk_278 = func_80B3403C(play); this->unk_284 = 0; this->actor.textId = 0; if (func_80B33E64(play)) { - func_80B33EF0(this, 6); + EnKbt_ChangeAnim(this, ENKBT_ANIM_6); this->unk_282 = 11; if (func_80B33E8C(play)) { this->actor.textId = 0xC50; @@ -60,7 +77,7 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { } this->actionFunc = func_80B34314; } else { - func_80B33EF0(this, 0); + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); this->unk_282 = 0; this->actionFunc = func_80B34598; } @@ -82,27 +99,48 @@ s32 func_80B33E8C(PlayState* play) { return false; } -void func_80B33EF0(EnKbt* this, s16 arg1) { - static AnimationHeader* sAnimations[] = { - &object_kbt_Anim_000670, &object_kbt_Anim_001674, &object_kbt_Anim_002084, &object_kbt_Anim_000FE8, - &object_kbt_Anim_001940, &object_kbt_Anim_00E7BC, &object_kbt_Anim_00F0C8, &object_kbt_Anim_002710, - &object_kbt_Anim_002DE0, &object_kbt_Anim_003414, &object_kbt_Anim_003D24, &object_kbt_Anim_001BF4, - &object_kbt_Anim_002084, +void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex) { + static AnimationHeader* sAnimations[ENKBT_ANIM_MAX] = { + &object_kbt_Anim_000670, // ENKBT_ANIM_0 + &object_kbt_Anim_001674, // ENKBT_ANIM_1 + &object_kbt_Anim_002084, // ENKBT_ANIM_2 + &object_kbt_Anim_000FE8, // ENKBT_ANIM_3 + &object_kbt_Anim_001940, // ENKBT_ANIM_4 + &object_kbt_Anim_00E7BC, // ENKBT_ANIM_5 + &object_kbt_Anim_00F0C8, // ENKBT_ANIM_6 + &object_kbt_Anim_002710, // ENKBT_ANIM_7 + &object_kbt_Anim_002DE0, // ENKBT_ANIM_8 + &object_kbt_Anim_003414, // ENKBT_ANIM_9 + &object_kbt_Anim_003D24, // ENKBT_ANIM_10 + &object_kbt_Anim_001BF4, // ENKBT_ANIM_11 + &object_kbt_Anim_002084, // ENKBT_ANIM_12 }; - u8 sp38[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, + u8 animationModes[ENKBT_ANIM_MAX] = { + ANIMMODE_LOOP, // ENKBT_ANIM_0 + ANIMMODE_LOOP, // ENKBT_ANIM_1 + ANIMMODE_ONCE, // ENKBT_ANIM_2 + ANIMMODE_LOOP, // ENKBT_ANIM_3 + ANIMMODE_ONCE, // ENKBT_ANIM_4 + ANIMMODE_LOOP, // ENKBT_ANIM_5 + ANIMMODE_LOOP, // ENKBT_ANIM_6 + ANIMMODE_LOOP, // ENKBT_ANIM_7 + ANIMMODE_LOOP, // ENKBT_ANIM_8 + ANIMMODE_LOOP, // ENKBT_ANIM_9 + ANIMMODE_LOOP, // ENKBT_ANIM_10 + ANIMMODE_ONCE, // ENKBT_ANIM_11 + ANIMMODE_ONCE, // ENKBT_ANIM_12 }; - if (arg1 != this->unk_280) { - if (arg1 >= 12) { - Animation_Change(&this->skelAnime, sAnimations[arg1], -1.0f, - Animation_GetLastFrame(sAnimations[arg1]) - 1.0f, 0.0f, sp38[arg1], -5.0f); + if (this->animIndex != animIndex) { + if (animIndex >= ENKBT_ANIM_12) { + Animation_Change(&this->skelAnime, sAnimations[animIndex], -1.0f, + Animation_GetLastFrame(sAnimations[animIndex]) - 1.0f, 0.0f, animationModes[animIndex], + -5.0f); } else { - Animation_Change(&this->skelAnime, sAnimations[arg1], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[arg1]), - sp38[arg1], -5.0f); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[animIndex]), animationModes[animIndex], -5.0f); } - this->unk_280 = arg1; + this->animIndex = animIndex; } } @@ -124,11 +162,11 @@ void func_80B34078(EnKbt* this) { if (this->unk_284 > 0) { this->unk_284--; } else { - switch (this->unk_280) { - case 2: + switch (this->animIndex) { + case ENKBT_ANIM_2: switch (this->unk_282) { case 0: - func_80B33EF0(this, 12); + EnKbt_ChangeAnim(this, ENKBT_ANIM_12); break; case 5: @@ -136,21 +174,24 @@ void func_80B34078(EnKbt* this) { break; default: - func_80B33EF0(this, 5); + EnKbt_ChangeAnim(this, ENKBT_ANIM_5); break; } break; - case 12: - func_80B33EF0(this, 0); + case ENKBT_ANIM_12: + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); this->actor.home.rot.z = 0; break; - case 4: - func_80B33EF0(this, 1); + case ENKBT_ANIM_4: + EnKbt_ChangeAnim(this, ENKBT_ANIM_1); this->unk_27E = 2; this->actor.home.rot.z = 0; break; + + default: + break; } } } @@ -169,67 +210,70 @@ void func_80B3415C(EnKbt* this) { switch (this->unk_282) { case 0: - if ((this->unk_280 != 2) && (this->unk_280 != 12)) { - func_80B33EF0(this, 0); + if ((this->animIndex != ENKBT_ANIM_2) && (this->animIndex != ENKBT_ANIM_12)) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); } break; case 1: - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 0; break; case 2: - if (this->unk_280 != 12) { - func_80B33EF0(this, 3); + if (this->animIndex != ENKBT_ANIM_12) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_3); } break; case 3: - if (this->unk_280 != 1) { - func_80B33EF0(this, 4); + if (this->animIndex != ENKBT_ANIM_1) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_4); } break; case 10: - func_80B33EF0(this, 11); + EnKbt_ChangeAnim(this, ENKBT_ANIM_11); break; case 4: - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 6; break; case 6: - if (this->unk_280 != 2) { - func_80B33EF0(this, 5); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_5); } break; case 11: - func_80B33EF0(this, 6); + EnKbt_ChangeAnim(this, ENKBT_ANIM_6); break; case 7: - if (this->unk_280 != 2) { - func_80B33EF0(this, 7); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); } break; case 8: - if (this->unk_280 != 2) { - func_80B33EF0(this, 8); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_8); } break; case 9: - if (this->unk_280 != 2) { - func_80B33EF0(this, 9); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_9); } break; case 12: - func_80B33EF0(this, 10); + EnKbt_ChangeAnim(this, ENKBT_ANIM_10); + break; + + default: break; } } @@ -327,7 +371,7 @@ void func_80B34598(EnKbt* this, PlayState* play) { this->unk_27E = 4; this->unk_27F = 0; this->unk_282 = 0; - func_80B33EF0(this, 12); + EnKbt_ChangeAnim(this, ENKBT_ANIM_12); break; case 0x6: @@ -411,26 +455,26 @@ void func_80B34598(EnKbt* this, PlayState* play) { case 0xC35: this->unk_27E = 4; this->unk_27F = 0; - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 5; break; case 0xC36: this->unk_27E = 1; this->unk_27F = 1; - func_80B33EF0(this, 7); + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); this->unk_282 = 7; break; case 0xC37: - func_80B33EF0(this, 10); + EnKbt_ChangeAnim(this, ENKBT_ANIM_10); this->unk_27E = 0; this->unk_27F = 1; break; case 0xC38: case 0xC39: - func_80B33EF0(this, 7); + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); this->unk_27E = 0; this->unk_27F = 1; break; @@ -517,6 +561,9 @@ void func_80B34598(EnKbt* this, PlayState* play) { this->unk_27F = 1; this->unk_282 = 12; break; + + default: + break; } this->actor.textId = 0; diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h index eb491bf28..9a7a5cdf0 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h @@ -17,7 +17,7 @@ typedef struct EnKbt { /* 0x27C */ u16 unk_27C; /* 0x27E */ u8 unk_27E; /* 0x27F */ u8 unk_27F; - /* 0x280 */ s16 unk_280; + /* 0x280 */ s16 animIndex; /* 0x282 */ s16 unk_282; /* 0x284 */ s16 unk_284; /* 0x288 */ EnKbtActionFunc actionFunc; 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 ce3011e6d..31d98abf0 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 @@ -6,7 +6,6 @@ #include "z_en_kendo_js.h" #include "overlays/actors/ovl_En_Maruta/z_en_maruta.h" -#include "objects/object_js/object_js.h" #define FLAGS \ (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) @@ -72,12 +71,21 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfo sAnimationInfo[] = { - { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, +typedef enum EnKendoJsAnimation { + /* 0 */ ENKENDOJS_ANIM_0, + /* 1 */ ENKENDOJS_ANIM_1, + /* 2 */ ENKENDOJS_ANIM_2, + /* 3 */ ENKENDOJS_ANIM_3, + /* 4 */ ENKENDOJS_ANIM_4, + /* 5 */ ENKENDOJS_ANIM_MAX +} EnKendoJsAnimation; + +static AnimationInfo sAnimationInfo[ENKENDOJS_ANIM_MAX] = { + { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_0 + { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_1 + { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_2 + { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENKENDOJS_ANIM_3 + { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_4 }; s16 D_80B27CE0[][3] = { @@ -110,7 +118,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); SkelAnime_InitFlex(play, &this->skelAnime, &object_js_Skel_006990, &object_js_Anim_000F4C, this->jointTable, - this->morphTable, 13); + this->morphTable, OBJECT_JS_LIMB_MAX); if ((CURRENT_DAY == 3) && !((gSaveContext.save.time <= CLOCK_TIME(23, 0)) && (gSaveContext.save.time >= CLOCK_TIME(6, 0)))) { @@ -120,7 +128,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { this->actor.home.rot.z, 0x10); Actor_Kill(&this->actor); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_4); } } else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) { Actor_Kill(&this->actor); @@ -224,7 +232,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); @@ -242,7 +250,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); @@ -259,6 +267,9 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x2717, &this->actor); this->unk_288 = 0x2717; + + default: + break; } } } @@ -310,6 +321,9 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) { func_80B276C4(this); func_80B276D8(this, play); break; + + default: + break; } } @@ -332,7 +346,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { if (this->unk_288 == 0x272C) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3); } if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) { @@ -347,6 +361,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) { case TEXT_STATE_1: case TEXT_STATE_CLOSING: case TEXT_STATE_3: + default: break; } } @@ -443,6 +458,9 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 1; } break; + + default: + break; } return 2; } @@ -477,6 +495,9 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) { return true; } break; + + default: + break; } return false; } @@ -523,7 +544,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { func_80B26F14(this, play); } else if (!func_80B26F6C(this, play)) { if (this->skelAnime.animation == &object_js_Anim_00016C) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3); } this->unk_286 = 2; Message_CloseTextbox(play); @@ -548,7 +569,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; Message_StartTextbox(play, 0x2729, &this->actor); this->unk_288 = 0x2729; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); break; default: @@ -564,7 +585,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { if ((this->skelAnime.animation == &object_js_Anim_0003DC) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_1); } if (this->unk_284 == 7) { @@ -764,7 +785,7 @@ void EnKendoJs_Update(Actor* thisx, PlayState* play) { s32 EnKendoJs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnKendoJs* this = THIS; - if (limbIndex == 12) { + if (limbIndex == OBJECT_JS_LIMB_0C) { rot->y -= this->unk_278.y; } return false; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h index 1992f7234..8602550e0 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h @@ -2,6 +2,7 @@ #define Z_EN_KENDO_JS_H #include "global.h" +#include "objects/object_js/object_js.h" struct EnKendoJs; @@ -17,8 +18,8 @@ typedef struct EnKendoJs { /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnKendoJsActionFunc actionFunc; - /* 0x1D8 */ Vec3s jointTable[13]; - /* 0x226 */ Vec3s morphTable[13]; + /* 0x1D8 */ Vec3s jointTable[OBJECT_JS_LIMB_MAX]; + /* 0x226 */ Vec3s morphTable[OBJECT_JS_LIMB_MAX]; /* 0x274 */ Vec3s* unk_274; /* 0x278 */ Vec3s unk_278; /* 0x27E */ Vec3s unk_27E; 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 b5819e333..62d4a1f62 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -5,7 +5,6 @@ */ #include "z_en_kgy.h" -#include "objects/object_kgy/object_kgy.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -31,6 +30,21 @@ void func_80B425A0(EnKgy* this, PlayState* play); void func_80B42714(EnKgy* this, PlayState* play); void func_80B42D28(EnKgy* this, PlayState* play); +typedef enum EnKgyAnimation { + /* -1 */ ENKGY_ANIM_NONE = -1, + /* 0 */ ENKGY_ANIM_0, + /* 1 */ ENKGY_ANIM_1, + /* 2 */ ENKGY_ANIM_2, + /* 3 */ ENKGY_ANIM_3, + /* 4 */ ENKGY_ANIM_4, + /* 5 */ ENKGY_ANIM_5, + /* 6 */ ENKGY_ANIM_6, + /* 7 */ ENKGY_ANIM_7, + /* 8 */ ENKGY_ANIM_8, + /* 9 */ ENKGY_ANIM_9, + /* 10 */ ENKGY_ANIM_MAX +} EnKgyAnimation; + ActorInit En_Kgy_InitVars = { ACTOR_EN_KGY, ACTORCAT_NPC, @@ -50,11 +64,11 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); SkelAnime_InitFlex(play, &this->skelAnime, &object_kgy_Skel_00F910, &object_kgy_Anim_004B98, this->jointTable, - this->morphTable, 23); - this->unk_2D2 = -1; + this->morphTable, OBJECT_KGY_LIMB_MAX); + this->animIndex = ENKGY_ANIM_NONE; this->unk_29C = 0; this->unk_2E4 = 0; - this->unk_2E2 = -1; + this->animIndex2 = ENKGY_ANIM_NONE; this->zubora = EnKgy_FindZubora(play); this->iceBlock = EnKgy_FindIceBlock(play); Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); @@ -64,25 +78,25 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { play->envCtx.lightSettingOverride = 1; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); if (!func_80B40D64(play)) { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B425A0; this->actor.textId = 0xC35; } else if (!func_80B40DB4(play)) { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0); this->actionFunc = func_80B419B0; this->actor.textId = 0xC4E; this->unk_29C |= 1; this->getItemId = GI_RUPEE_10; } else { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B42714; this->actor.textId = 0xC50; } } else { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_80)) { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); } else { - EnKgy_ChangeAnim(this, 0, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_0, ANIMMODE_LOOP, 0); } this->actionFunc = func_80B42D28; } @@ -109,21 +123,28 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); } -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { - static AnimationHeader* sAnimations[] = { - &object_kgy_Anim_004B98, &object_kgy_Anim_0008FC, &object_kgy_Anim_00292C, &object_kgy_Anim_0042E4, - &object_kgy_Anim_0101F0, &object_kgy_Anim_001764, &object_kgy_Anim_003334, &object_kgy_Anim_010B84, - &object_kgy_Anim_001EA4, &object_kgy_Anim_003D88, - }; +static AnimationHeader* sAnimations[ENKGY_ANIM_MAX] = { + &object_kgy_Anim_004B98, // ENKGY_ANIM_0 + &object_kgy_Anim_0008FC, // ENKGY_ANIM_1 + &object_kgy_Anim_00292C, // ENKGY_ANIM_2 + &object_kgy_Anim_0042E4, // ENKGY_ANIM_3 + &object_kgy_Anim_0101F0, // ENKGY_ANIM_4 + &object_kgy_Anim_001764, // ENKGY_ANIM_5 + &object_kgy_Anim_003334, // ENKGY_ANIM_6 + &object_kgy_Anim_010B84, // ENKGY_ANIM_7 + &object_kgy_Anim_001EA4, // ENKGY_ANIM_8 + &object_kgy_Anim_003D88, // ENKGY_ANIM_9 +}; +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); - this->unk_2D2 = animIndex; + this->animIndex = animIndex; } -void func_80B40BC0(EnKgy* this, s16 arg1) { - if (arg1 != this->unk_2D2) { - EnKgy_ChangeAnim(this, arg1, ANIMMODE_LOOP, -5.0f); +void EnKgy_ChangeAnimLoopMorph(EnKgy* this, s16 animIndex) { + if (this->animIndex != animIndex) { + EnKgy_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); } } @@ -218,13 +239,13 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { if (this->unk_2E4 > 0) { this->unk_2E4--; - if ((this->unk_2E4 == 0) && (this->unk_2E2 >= 0)) { - if (this->unk_2E2 == 3) { - EnKgy_ChangeAnim(this, 3, ANIMMODE_ONCE, -5.0f); + if ((this->unk_2E4 == 0) && (this->animIndex2 > ENKGY_ANIM_NONE)) { + if (this->animIndex2 == ENKGY_ANIM_3) { + EnKgy_ChangeAnim(this, ENKGY_ANIM_3, ANIMMODE_ONCE, -5.0f); } else { - func_80B40BC0(this, this->unk_2E2); + EnKgy_ChangeAnimLoopMorph(this, this->animIndex2); } - this->unk_2E2 = -1; + this->animIndex2 = ENKGY_ANIM_NONE; } } @@ -258,14 +279,14 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { switch (this->actor.textId) { case 0xC22: this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; break; case 0xC43: if (func_80B40D64(play)) { - func_80B40BC0(this, 7); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } else { - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } this->unk_2E4 = 30; this->actionFunc = func_80B41A48; @@ -273,7 +294,10 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { case 0xC52: case 0xC54: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); + break; + + default: break; } } @@ -288,7 +312,7 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { if (this->unk_2E8 == 0) { if ((this->actor.textId == 0xC1D) || (this->actor.textId == 0xC2D)) { this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; func_80B40EBC(this, play, this->actor.textId); } else { func_80B40EBC(this, play, this->actor.textId); @@ -339,6 +363,9 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { } this->csIdIndex = 4; break; + + default: + break; } } @@ -419,16 +446,16 @@ void func_80B4163C(EnKgy* this, PlayState* play) { this->actor.focus.pos = this->unk_2A8; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 6) { + if (this->animIndex == ENKGY_ANIM_6) { if (this->getItemId > GI_NONE) { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0.0f); this->getItemId--; } else { - EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_9, ANIMMODE_ONCE, -5.0f); this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE; } } else { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, -5.0f); } SkelAnime_Update(&this->skelAnime); } @@ -446,6 +473,9 @@ void func_80B4163C(EnKgy* this, PlayState* play) { this->unk_300 = 200; Actor_PlaySfx(&this->actor, NA_SE_EV_SWORD_FORGE); break; + + default: + break; } this->lightInfo.params.point.radius = this->unk_300; @@ -608,11 +638,11 @@ void func_80B41E18(EnKgy* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 3)) { - func_80B40BC0(this, 4); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_3)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } - if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && func_80B40E54(this) == 0) { + if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && (func_80B40E54(this) == 0)) { switch (Message_GetState(&play->msgCtx)) { case TEXT_STATE_CHOICE: if (Message_ShouldAdvance(play)) { @@ -636,6 +666,9 @@ void func_80B41E18(EnKgy* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); func_80B40EBC(this, play, textId); break; + + default: + break; } break; @@ -650,8 +683,14 @@ void func_80B41E18(EnKgy* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); func_80B40E74(this, play, 0xC3C); break; + + default: + break; } break; + + default: + break; } } break; @@ -683,13 +722,13 @@ void func_80B41E18(EnKgy* this, PlayState* play) { this->actionFunc = func_80B425A0; func_80B413C8(this); func_80B40E18(this, 5); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); this->actor.textId = 0xC35; break; case 0xC3A: func_80B40E74(this, play, func_80B41528(play)); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); break; case 0xC3C: @@ -758,7 +797,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { break; case 0xC47: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); if (this->unk_29C & 8) { player->exchangeItemAction = PLAYER_IA_NONE; this->unk_29C &= ~8; @@ -780,7 +819,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC4A: case 0xC4B: - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); Message_CloseTextbox(play); this->actionFunc = func_80B41C54; this->actor.textId = 0xC4B; @@ -817,9 +856,15 @@ void func_80B41E18(EnKgy* this, PlayState* play) { func_80B413C8(this); func_80B40E18(this, 8); break; + + default: + break; } } break; + + default: + break; } } @@ -844,7 +889,7 @@ void func_80B425A0(EnKgy* this, PlayState* play) { this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B41E18; - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); } else if (this->actor.xzDistToPlayer < 200.0f) { @@ -887,11 +932,11 @@ void func_80B427C8(EnKgy* this, PlayState* play) { u16 textId; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 5) { - func_80B40BC0(this, 7); + if (this->animIndex == ENKGY_ANIM_5) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } - if (this->unk_2D2 == 3) { - func_80B40BC0(this, 4); + if (this->animIndex == ENKGY_ANIM_3) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } } @@ -923,26 +968,29 @@ void func_80B427C8(EnKgy* this, PlayState* play) { this->actionFunc = func_80B41C54; func_80B413C8(this); func_80B40E18(this, 6); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); this->actor.textId = 0xC3A; break; + + default: + break; } } func_80B40EE8(this, play); } void func_80B4296C(EnKgy* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) { - func_80B40BC0(this, 2); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2); } this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B427C8; - if (this->unk_2D2 == 4) { - func_80B40BC0(this, 7); + if (this->animIndex == ENKGY_ANIM_4) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } else { - EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f); } func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); @@ -958,12 +1006,12 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { s32 pad; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 5) { - func_80B40BC0(this, 1); + if (this->animIndex == ENKGY_ANIM_5) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } - if (this->unk_2D2 == 3) { - func_80B40BC0(this, 4); + if (this->animIndex == ENKGY_ANIM_3) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } } @@ -995,7 +1043,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { case 0xC20: case 0xC28: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); play->msgCtx.msgLength = 0; this->unk_29C |= 4; this->unk_2E8 = 3; @@ -1027,7 +1075,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { case 0xC2A: this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; func_80B40EBC(this, play, this->actor.textId); break; @@ -1038,23 +1086,26 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { func_80B413C8(this); func_80B40E18(this, 1); break; + + default: + break; } } func_80B40EE8(this, play); } void func_80B42D28(EnKgy* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) { - func_80B40BC0(this, 2); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2); } this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B42A8C; if (this->actor.textId == 0xC2D) { - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } else { - EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f); SET_WEEKEVENTREG(WEEKEVENTREG_20_80); } func_80B411DC(this, play, 0); @@ -1065,7 +1116,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { this->actionFunc = func_80B4296C; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); } else if (this->actor.xzDistToPlayer < 200.0f) { - if (this->unk_2D2 == 4) { + if (this->animIndex == ENKGY_ANIM_4) { this->actor.textId = 0xC2D; } else { this->actor.textId = 0xC1D; @@ -1073,8 +1124,8 @@ void func_80B42D28(EnKgy* this, PlayState* play) { Actor_OfferTalk(&this->actor, play, 210.0f); } - if ((this->unk_2D2 == 0) && (this->actor.xzDistToPlayer < 200.0f)) { - EnKgy_ChangeAnim(this, 8, ANIMMODE_ONCE, 5.0f); + if ((this->animIndex == ENKGY_ANIM_0) && (this->actor.xzDistToPlayer < 200.0f)) { + EnKgy_ChangeAnim(this, ENKGY_ANIM_8, ANIMMODE_ONCE, 5.0f); } } } @@ -1085,7 +1136,7 @@ void EnKgy_Update(Actor* thisx, PlayState* play) { Vec3s sp30; this->actionFunc(this, play); - if (this->unk_2D2 == 2) { + if (this->animIndex == ENKGY_ANIM_2) { sp30.z = 0; sp30.y = 0; sp30.x = 0; @@ -1100,14 +1151,14 @@ s32 EnKgy_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p EnKgy* this = THIS; if (!(this->unk_29C & 1)) { - if (limbIndex == 17) { + if (limbIndex == OBJECT_KGY_LIMB_11) { *dList = NULL; } - } else if (limbIndex == 16) { + } else if (limbIndex == OBJECT_KGY_LIMB_10) { *dList = NULL; } - if (limbIndex == 11) { + if (limbIndex == OBJECT_KGY_LIMB_0B) { rot->x += this->unk_2CC.y; } @@ -1119,11 +1170,11 @@ void EnKgy_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, static Vec3f D_80B432E4 = { 3000.0f, 4000.0f, 300.0f }; EnKgy* this = THIS; - if (limbIndex == 11) { + if (limbIndex == OBJECT_KGY_LIMB_0B) { Matrix_MultVec3f(&D_80B432D8, &this->unk_2A8); } - if (limbIndex == 16) { + if (limbIndex == OBJECT_KGY_LIMB_10) { Matrix_MultVec3f(&D_80B432E4, &this->unk_2C0); } } diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h index 94f2aabd5..9a037ba9e 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -2,6 +2,7 @@ #define Z_EN_KGY_H #include "global.h" +#include "objects/object_kgy/object_kgy.h" #include "overlays/actors/ovl_En_Kbt/z_en_kbt.h" #include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h" @@ -15,8 +16,8 @@ typedef void (*EnKgyActionFunc)(struct EnKgy*, PlayState*); typedef struct EnKgy { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[23]; - /* 0x212 */ Vec3s morphTable[23]; + /* 0x188 */ Vec3s jointTable[OBJECT_KGY_LIMB_MAX]; + /* 0x212 */ Vec3s morphTable[OBJECT_KGY_LIMB_MAX]; /* 0x29C */ u16 unk_29C; /* 0x2A0 */ EnKbt* zubora; /* 0x2A4 */ ObjIcePoly* iceBlock; @@ -24,10 +25,10 @@ typedef struct EnKgy { /* 0x2B4 */ Vec3f unk_2B4; /* 0x2C0 */ Vec3f unk_2C0; /* 0x2CC */ Vec3s unk_2CC; - /* 0x2D2 */ s16 unk_2D2; + /* 0x2D2 */ s16 animIndex; /* 0x2D4 */ s16 csIdList[6]; /* 0x2E0 */ s16 csIdIndex; - /* 0x2E2 */ s16 unk_2E2; + /* 0x2E2 */ s16 animIndex2; /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ s16 unk_2E6; /* 0x2E8 */ s16 unk_2E8; 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 beb994374..24fa855c5 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -173,6 +173,9 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) { EnKujiya_SetupGivePrize(this); EnKujiya_GivePrize(this, play); break; + + default: + break; } } } @@ -207,6 +210,9 @@ void EnKujiya_Talk(EnKujiya* this, PlayState* play) { this->textId = 0x2B60; // Will announce winning numbers after 6 } break; + + default: + break; } } @@ -251,6 +257,9 @@ s32 EnKujiya_CheckBoughtTicket(void) { return true; } break; + + default: + break; } return false; } @@ -268,6 +277,9 @@ void EnKujiya_SetBoughtTicket(void) { case 3: SET_WEEKEVENTREG(WEEKEVENTREG_33_40); break; + + default: + break; } } @@ -287,6 +299,9 @@ void EnKujiya_UnsetBoughtTicket(void) { case 3: CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_40); break; + + default: + break; } } 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 8bbbaca14..890fafd37 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -571,6 +571,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) { EnKusa_SetupUprootedWaitRegrow(this); this->actor.shape.shadowDraw = NULL; break; + + default: + break; } } else { @@ -621,9 +624,13 @@ void EnKusa_SetupCut(EnKusa* this) { case ENKUSA_TYPE_GRASS_2: this->actionFunc = EnKusa_DoNothing; break; + case ENKUSA_TYPE_REGROWING_GRASS: this->actionFunc = EnKusa_CutWaitRegrow; break; + + default: + break; } this->timer = 0; } diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index 5dc86c745..cbd94d808 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -248,7 +248,8 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; } } else { - if (++sNumLitTorchesInGroup >= groupSize) { + sNumLitTorchesInGroup++; + if (sNumLitTorchesInGroup >= groupSize) { this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH; } else { this->snuffTimer = diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 83c871191..fbdcd2791 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -13493,7 +13493,7 @@ 0x80B33E54:("EnKbt_Destroy",), 0x80B33E64:("func_80B33E64",), 0x80B33E8C:("func_80B33E8C",), - 0x80B33EF0:("func_80B33EF0",), + 0x80B33EF0:("EnKbt_ChangeAnim",), 0x80B3403C:("func_80B3403C",), 0x80B34078:("func_80B34078",), 0x80B3415C:("func_80B3415C",), @@ -13678,7 +13678,7 @@ 0x80B40800:("EnKgy_Init",), 0x80B40B04:("EnKgy_Destroy",), 0x80B40B38:("func_80B40B38",), - 0x80B40BC0:("func_80B40BC0",), + 0x80B40BC0:("EnKgy_ChangeAnimLoopMorph",), 0x80B40BFC:("func_80B40BFC",), 0x80B40C38:("func_80B40C38",), 0x80B40C74:("func_80B40C74",), From 2a485ad774d10ce5225dc8e119c0879108c78740 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 1 Oct 2023 17:12:09 +1100 Subject: [PATCH 111/121] Animation Cleanup: En_J* (#1401) * cleanup J * small fix --- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 107 +++++++++++------- src/overlays/actors/ovl_En_Ja/z_en_ja.h | 9 +- .../actors/ovl_En_Jc_Mato/z_en_jc_mato.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 107 +++++++++--------- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 48 +++++--- src/overlays/actors/ovl_En_Js/z_en_js.c | 76 +++++++++++-- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 97 +++++++++------- tools/disasm/functions.txt | 4 +- 8 files changed, 281 insertions(+), 169 deletions(-) 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 8cf9ce0e9..6bf6b4434 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -5,7 +5,6 @@ */ #include "z_en_ja.h" -#include "objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -89,27 +88,41 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_boj_Anim_002734, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, 0 }, - { &object_boj_Anim_002734, 1.0f, 0, -1, 0, -4 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, -4 }, - { &object_boj_Anim_004078, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_005CE4, 1.0f, 0, -1, 0, 0 }, +typedef enum EnJaAnimation { + /* -1 */ ENJA_ANIM_NONE = -1, + /* 0 */ ENJA_ANIM_0, + /* 1 */ ENJA_ANIM_1, + /* 2 */ ENJA_ANIM_2, + /* 3 */ ENJA_ANIM_3, + /* 4 */ ENJA_ANIM_4, + /* 5 */ ENJA_ANIM_5, + /* 6 */ ENJA_ANIM_MAX +} EnJaAnimation; + +static AnimationInfoS sAnimationInfo[ENJA_ANIM_MAX] = { + { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_0 + { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_1 + { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_2 + { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_3 + { &object_boj_Anim_004078, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_4 + { &object_boj_Anim_005CE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_5 }; -void func_80BC1900(EnJa* this) { - this->skelAnime.playSpeed = this->unk_344; +void EnJa_UpdateSkelAnime(EnJa* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BC192C(EnJa* this, s32 arg1) { - s32 ret = false; +s32 EnJa_ChangeAnim(EnJa* this, s32 animIndex) { + s32 didAnimChange = false; - if (arg1 != this->unk_36C) { - this->unk_36C = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_344 = this->skelAnime.playSpeed; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + return didAnimChange; } void func_80BC1984(EnJa* this, PlayState* play) { @@ -246,7 +259,7 @@ s32 func_80BC1FC8(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_80BC1AE0(this, play)) { SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_340 |= 0x10; - func_80BC192C(this, 5); + EnJa_ChangeAnim(this, ENJA_ANIM_5); func_80BC2EA4(this); ret = true; } @@ -258,9 +271,9 @@ s32 func_80BC203C(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_80BC1AE0(this, play)) { if (ENJA_GET_3(&this->actor) == 0) { - func_80BC192C(this, 1); + EnJa_ChangeAnim(this, ENJA_ANIM_1); } else { - func_80BC192C(this, 4); + EnJa_ChangeAnim(this, ENJA_ANIM_4); } SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actor.shape.shadowDraw = NULL; @@ -284,6 +297,9 @@ s32 func_80BC20D0(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 2: ret = func_80BC203C(this, play, scheduleOutput); break; + + default: + break; } return ret; } @@ -329,8 +345,10 @@ s32* func_80BC2274(EnJa* this, PlayState* play) { return D_80BC362C; } return D_80BC366C; + + default: + return D_80BC360C; } - return D_80BC360C; } void func_80BC22F4(EnJa* this, PlayState* play) { @@ -348,9 +366,10 @@ void EnJa_Init(Actor* thisx, PlayState* play) { EnJa* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable, 16); - this->unk_36C = -1; - func_80BC192C(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable, + OBJECT_BOJ_LIMB_MAX); + this->animIndex = ENJA_ANIM_NONE; + EnJa_ChangeAnim(this, ENJA_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); @@ -380,7 +399,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_1D8.unk_00 != 0) { - func_80BC1900(this); + EnJa_UpdateSkelAnime(this); func_80BC1A68(this); func_80BC1D70(this, play); @@ -403,7 +422,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { s32 EnJa_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnJa* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { func_80BC1E40(this, play); } return false; @@ -419,10 +438,10 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnJa* this = THIS; s32 pad2; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { Matrix_MultVec3f(&D_80BC3780, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); - } else if ((this->unk_340 & 0x40) && (limbIndex == 11)) { + } else if ((this->unk_340 & 0x40) && (limbIndex == OBJECT_BOJ_LIMB_0B)) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -437,8 +456,9 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, } if (this->unk_1D8.unk_00 == 1) { - if ((limbIndex == 11) && (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) || - ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) { + if ((limbIndex == OBJECT_BOJ_LIMB_0B) && + (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) || + ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -475,7 +495,7 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_Pop(); CLOSE_DISPS(play->state.gfxCtx); - } else if (limbIndex == 14) { + } else if (limbIndex == OBJECT_BOJ_LIMB_0E) { if ((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 18.0f)) { OPEN_DISPS(play->state.gfxCtx); @@ -541,8 +561,8 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex != 8) { - if (limbIndex == 15) { + switch (limbIndex) { + case OBJECT_BOJ_LIMB_0F: SubS_UpdateLimb(this->unk_354 + this->unk_358 + 0x4000, this->unk_356 + this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1EC, &this->unk_274, stepRot, overrideRot); @@ -553,17 +573,22 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_274.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_274.z, MTXMODE_APPLY); Matrix_Push(); - } - } else { - SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8, - &this->unk_27A, stepRot, overrideRot); - Matrix_Pop(); - Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY); - Matrix_Push(); + break; + + case OBJECT_BOJ_LIMB_08: + SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8, + &this->unk_27A, stepRot, overrideRot); + Matrix_Pop(); + Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY); + Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY); + Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY); + Matrix_Push(); + break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.h b/src/overlays/actors/ovl_En_Ja/z_en_ja.h index 00746ec63..fcbbf485f 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.h +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.h @@ -2,6 +2,7 @@ #define Z_EN_JA_H #include "global.h" +#include "objects/object_boj/object_boj.h" struct EnJa; @@ -37,10 +38,10 @@ typedef struct EnJa { /* 0x234 */ EnJaStruct unk_234[4]; /* 0x274 */ Vec3s unk_274; /* 0x27A */ Vec3s unk_27A; - /* 0x280 */ Vec3s jointTable[16]; - /* 0x2E0 */ Vec3s morphTable[16]; + /* 0x280 */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX]; + /* 0x2E0 */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX]; /* 0x340 */ u16 unk_340; - /* 0x344 */ f32 unk_344; + /* 0x344 */ f32 animPlaySpeed; /* 0x348 */ f32 unk_348; /* 0x34C */ f32 unk_34C; /* 0x350 */ UNK_TYPE1 unk350[0x4]; @@ -55,7 +56,7 @@ typedef struct EnJa { /* 0x364 */ s16 unk_364; /* 0x366 */ s16 unk_366; /* 0x368 */ void* unk_368; - /* 0x36C */ s32 unk_36C; + /* 0x36C */ s32 animIndex; /* 0x370 */ UNK_TYPE1 unk_370[4]; /* 0x374 */ s32 prevTalkState; } EnJa; // size = 0x378 diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c index 314e94d1b..c66c9a355 100644 --- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c +++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c @@ -122,7 +122,7 @@ void EnJcMato_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); Collider_InitSphere(play, &this->collider); Collider_SetSphere(play, &this->collider, &this->actor, &sSphereInit); - this->collider.dim.worldSphere.radius = 0xF; + this->collider.dim.worldSphere.radius = 15; this->actor.colChkInfo.damageTable = &sDamageTable; Actor_SetScale(&this->actor, 0.008f); this->hitFlag = false; 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 9fbd7ff85..137799af3 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -34,29 +34,6 @@ s32 EnJg_GetNextTextId(EnJg* this); s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play); void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play); -typedef enum { - /* 0 */ EN_JG_ANIM_IDLE, - /* 1 */ EN_JG_ANIM_WALK, - /* 2 */ EN_JG_ANIM_WAVING, - /* 3 */ EN_JG_ANIM_SHAKING_HEAD, - /* 4 */ EN_JG_ANIM_SURPRISE_START, - /* 5 */ EN_JG_ANIM_SURPRISE_LOOP, - /* 6 */ EN_JG_ANIM_ANGRY, - /* 7 */ EN_JG_ANIM_FROZEN_START, - /* 8 */ EN_JG_ANIM_FROZEN_LOOP, - /* 9 */ EN_JG_ANIM_WALK_2, - /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM, - /* 11 */ EN_JG_ANIM_DRUM_IDLE, - /* 12 */ EN_JG_ANIM_PLAYING_DRUM, - /* 13 */ EN_JG_ANIM_THINKING, - /* 14 */ EN_JG_ANIM_REMEMBERING, - /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING, - /* 16 */ EN_JG_ANIM_DEPRESSED, - /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, - /* 18 */ EN_JG_ANIM_CRADLE, - /* 19 */ EN_JG_ANIM_MAX -} EnJgAnimation; - typedef enum { /* 0 */ EN_JG_ACTION_FIRST_THAW, /* 1 */ EN_JG_ACTION_SPAWNING, @@ -133,26 +110,49 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 }, - { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 }, - { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum EnJgAnimation { + /* 0 */ EN_JG_ANIM_IDLE, + /* 1 */ EN_JG_ANIM_WALK, + /* 2 */ EN_JG_ANIM_WAVING, + /* 3 */ EN_JG_ANIM_SHAKING_HEAD, + /* 4 */ EN_JG_ANIM_SURPRISE_START, + /* 5 */ EN_JG_ANIM_SURPRISE_LOOP, + /* 6 */ EN_JG_ANIM_ANGRY, + /* 7 */ EN_JG_ANIM_FROZEN_START, + /* 8 */ EN_JG_ANIM_FROZEN_LOOP, + /* 9 */ EN_JG_ANIM_WALK_2, + /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM, + /* 11 */ EN_JG_ANIM_DRUM_IDLE, + /* 12 */ EN_JG_ANIM_PLAYING_DRUM, + /* 13 */ EN_JG_ANIM_THINKING, + /* 14 */ EN_JG_ANIM_REMEMBERING, + /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING, + /* 16 */ EN_JG_ANIM_DEPRESSED, + /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, + /* 18 */ EN_JG_ANIM_CRADLE, + /* 19 */ EN_JG_ANIM_MAX +} EnJgAnimation; + +static AnimationInfoS sAnimationInfo[EN_JG_ANIM_MAX] = { + { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_IDLE + { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK + { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WAVING + { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SHAKING_HEAD + { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 }, // EN_JG_ANIM_SURPRISE_START + { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SURPRISE_LOOP + { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_ANGRY + { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_START + { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_LOOP + { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK_2 + { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_TAKING_OUT_DRUM + { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DRUM_IDLE + { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_PLAYING_DRUM + { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_THINKING + { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_REMEMBERING + { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_STRONG_REMEMBERING + { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DEPRESSED + { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CUTSCENE_IDLE + { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CRADLE }; static Vec3f sSfxPos = { 0.0f, 0.0f, 0.0f }; @@ -340,6 +340,9 @@ void EnJg_SetupTalk(EnJg* this, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnJg_Talk; break; + + default: + break; } } @@ -418,10 +421,10 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->animIndex == EN_JG_ANIM_SURPRISE_START) { - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -473,10 +476,10 @@ void EnJg_Walk(EnJg* this, PlayState* play) { void EnJg_Talk(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); u16 temp; - if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == lastFrame)) { + if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == endFrame)) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -543,12 +546,12 @@ void EnJg_SetupWalk(EnJg* this, PlayState* play) { void EnJg_Freeze(EnJg* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->action == EN_JG_ACTION_SPAWNING) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; this->freezeTimer = 1000; - this->skelAnime.curFrame = lastFrame; + this->skelAnime.curFrame = endFrame; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, 0xFF50); @@ -557,7 +560,7 @@ void EnJg_Freeze(EnJg* this, PlayState* play) { this->actionFunc = EnJg_FrozenIdle; } else if (this->animIndex == EN_JG_ANIM_FROZEN_START) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->freezeTimer = 1000; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, @@ -899,7 +902,7 @@ void EnJg_SpawnBreath(EnJg* this, PlayState* play) { */ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->flags |= FLAG_LOOKING_AT_PLAYER; @@ -924,7 +927,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play } this->freezeTimer--; - if ((this->freezeTimer <= 0) && (curFrame == lastFrame)) { + if ((this->freezeTimer <= 0) && (curFrame == endFrame)) { this->animIndex = EN_JG_ANIM_FROZEN_START; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S); 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 013fb5050..aba7cdeeb 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 @@ -48,10 +48,18 @@ ActorInit En_Jgame_Tsn_InitVars = { (ActorFunc)EnJgameTsn_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, - { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, - { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, +typedef enum EnJgameTsnAnimation { + /* -1 */ ENJGAMETSN_ANIM_NONE = -1, + /* 0 */ ENJGAMETSN_ANIM_0, + /* 1 */ ENJGAMETSN_ANIM_1, + /* 2 */ ENJGAMETSN_ANIM_2, + /* 3 */ ENJGAMETSN_ANIM_MAX +} EnJgameTsnAnimation; + +static AnimationInfo sAnimationInfo[ENJGAMETSN_ANIM_MAX] = { + { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_0 + { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_1 + { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_2 }; static ColliderCylinderInit sCylinderInit = { @@ -145,7 +153,7 @@ void EnJgameTsn_Destroy(Actor* thisx, PlayState* play) { } void func_80C13B74(EnJgameTsn* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0); this->actionFunc = func_80C13BB8; } @@ -156,15 +164,15 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { if (this->actor.flags & ACTOR_FLAG_10000) { this->actor.flags &= ~ACTOR_FLAG_10000; if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x10A2, &this->actor); this->unk_300 = 0x10A2; } else if (gSaveContext.minigameScore < 20) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x10A2, &this->actor); this->unk_300 = 0x10A2; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x10A3, &this->actor); this->unk_300 = 0x10A3; } @@ -174,11 +182,11 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { this->unk_300 = 0x1094; } else if (this->unk_2F8 == 0) { this->unk_2F8 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1095, &this->actor); this->unk_300 = 0x1095; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1096, &this->actor); this->unk_300 = 0x1096; } @@ -211,11 +219,11 @@ void func_80C13E90(EnJgameTsn* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; if (((gSaveContext.save.time > CLOCK_TIME(4, 0)) && (gSaveContext.save.time < CLOCK_TIME(7, 0))) || ((gSaveContext.save.time > CLOCK_TIME(16, 0)) && (gSaveContext.save.time < CLOCK_TIME(19, 0)))) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x1094, &this->actor); this->unk_300 = 0x1094; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1098, &this->actor); this->unk_300 = 0x1098; } @@ -273,6 +281,9 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) { func_80C13B74(this); } break; + + default: + break; } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x71C, 0xB6); @@ -335,7 +346,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) { this->unk_2FC++; if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && func_80C149B0(play, &this->unk_200)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109F, &this->actor); this->unk_300 = 0x109F; player->stateFlags1 |= PLAYER_STATE1_20; @@ -344,7 +355,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) { func_80C14030(this); } else if ((player->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) || (player->actor.bgCheckFlags & BGCHECKFLAG_WATER)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x10A0, &this->actor); this->unk_300 = 0x10A0; player->stateFlags1 |= PLAYER_STATE1_20; @@ -413,12 +424,12 @@ void func_80C14684(EnJgameTsn* this, PlayState* play) { this->unk_300 = 0x109E; Rupees_ChangeBy(-20); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109D, &this->actor); this->unk_300 = 0x109D; } } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109C, &this->actor); this->unk_300 = 0x109C; } @@ -461,7 +472,7 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { break; case 0x109A: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0); Message_StartTextbox(play, 0x109B, &this->actor); this->unk_300 = 0x109B; break; @@ -490,6 +501,9 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { func_80C14540(this); func_80C14554(this, play); break; + + default: + break; } } } 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 c0f5bc3fd..7d5185935 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -117,6 +117,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20); } break; + case 1: case 2: case 3: @@ -130,6 +131,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { return; } break; + case 5: case 6: case 7: @@ -137,6 +139,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { this->maskType = ENJS_GET_TYPE(&this->actor) - 4; this->actionFunc = func_8096A104; break; + default: break; } @@ -153,6 +156,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) { case 0: Play_DisableMotionBlur(); break; + case 5: case 6: case 7: @@ -161,6 +165,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) { func_80969400(ENJS_GET_TYPE(&this->actor)); } break; + default: break; } @@ -414,6 +419,7 @@ s32 func_809692A8(s32 arg0) { return false; } return true; + case 5: case 6: case 7: @@ -422,6 +428,7 @@ s32 func_809692A8(s32 arg0) { return false; } return true; + default: return false; } @@ -441,6 +448,7 @@ s32 func_8096933C(s32 arg0) { } else { return true; } + case 5: case 6: case 7: @@ -451,6 +459,7 @@ s32 func_8096933C(s32 arg0) { } else { return true; } + default: return false; } @@ -579,13 +588,18 @@ void func_80969898(EnJs* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x2217); break; + case 1: Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x2216); break; + + default: + break; } } break; + case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { @@ -593,18 +607,21 @@ void func_80969898(EnJs* this, PlayState* play) { this->unk_2B8 |= 1; if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) { Message_ContinueTextbox(play, 0x220F); - break; + } else { + Message_ContinueTextbox(play, 0x220D); } - Message_ContinueTextbox(play, 0x220D); break; + case 0x220D: case 0x2213: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x220E: Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969748; break; + case 0x2210: case 0x2211: case 0x2212: @@ -612,19 +629,23 @@ void func_80969898(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969748; break; + case 0x2214: case 0x2217: if (!func_809695FC(this, play)) { func_80969494(this, play); - break; } break; + default: func_80969494(this, play); break; } } break; + + default: + break; } } @@ -729,13 +750,16 @@ void func_80969DA4(EnJs* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); if (!func_809695FC(this, play)) { func_809694E8(this, play); - break; } break; + case 1: Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + + default: + break; } } break; @@ -745,49 +769,60 @@ void func_80969DA4(EnJs* this, PlayState* play) { case 0x221B: if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) { Message_ContinueTextbox(play, 0x2219); - break; + } else { + Message_ContinueTextbox(play, 0x221C); } - Message_ContinueTextbox(play, 0x221C); break; + case 0x2224: case 0x2226: case 0x2228: case 0x222A: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x2225: case 0x2227: case 0x2229: case 0x222B: if (!func_809695FC(this, play)) { func_809694E8(this, play); - break; } break; + case 0x2222: player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x2223: switch (ENJS_GET_TYPE(&this->actor)) { case 5: Message_ContinueTextbox(play, 0x2224); break; + case 6: Message_ContinueTextbox(play, 0x2226); break; + case 7: Message_ContinueTextbox(play, 0x2228); break; + case 8: Message_ContinueTextbox(play, 0x222A); break; + + default: + break; } break; + case 0x221C: Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969C54; break; + case 0x221D: case 0x2220: case 0x2221: @@ -795,12 +830,16 @@ void func_80969DA4(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969C54; break; + default: func_809694E8(this, play); break; } } break; + + default: + break; } } @@ -892,6 +931,9 @@ void func_8096A38C(EnJs* this, PlayState* play) { case 1: Audio_PlaySfx_MessageCancel(); break; + + default: + break; } switch (play->msgCtx.currentTextId) { @@ -902,9 +944,13 @@ void func_8096A38C(EnJs* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f); this->unk_2B8 |= 0x10; break; + case 1: Message_ContinueTextbox(play, 0x21FD); break; + + default: + break; } break; @@ -914,9 +960,13 @@ void func_8096A38C(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0x2200); func_809696EC(this, 0); break; + case 1: Message_ContinueTextbox(play, 0x21FF); break; + + default: + break; } break; @@ -927,13 +977,21 @@ void func_8096A38C(EnJs* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f); this->unk_2B8 |= 0x10; break; + case 1: Message_ContinueTextbox(play, 0x2204); break; + + default: + break; } + + default: + break; } } break; + case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { @@ -962,7 +1020,6 @@ void func_8096A38C(EnJs* this, PlayState* play) { break; case 0x2201: - case 0x220A: if (!func_809695FC(this, play)) { func_80969530(this, play); @@ -975,6 +1032,9 @@ void func_8096A38C(EnJs* this, PlayState* play) { } } break; + + default: + break; } } 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 6b2e06f0b..3e3ecc621 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 @@ -1381,53 +1381,62 @@ void EnSGoro_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { s32 overrideRot; EnSGoro* this = THIS; - if (limbIndex != GORON_LIMB_BODY) { - if ((limbIndex == GORON_LIMB_HEAD) && (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY)) { - if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { - overrideRot = true; - } else { - overrideRot = false; + switch (limbIndex) { + case GORON_LIMB_HEAD: + if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { + if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { + overrideRot = true; + } else { + overrideRot = false; + } + if (this->loseAttentionTimer != 0) { + stepRot = true; + } else { + stepRot = false; + } + + EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, + this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, + &this->headTranslate, &this->headRotate, stepRot, overrideRot); + + Matrix_Pop(); + Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY); + Matrix_Push(); } - if (this->loseAttentionTimer != 0) { - stepRot = true; - } else { - stepRot = false; + break; + + case GORON_LIMB_BODY: + if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { + if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { + overrideRot = true; + } else { + overrideRot = false; + } + if (this->loseAttentionTimer != 0) { + stepRot = true; + } else { + stepRot = false; + } + + EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, + &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot); + + Matrix_Pop(); + Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY); + Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY); + Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY); + Matrix_Push(); } + break; - EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, - this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headTranslate, - &this->headRotate, stepRot, overrideRot); - - Matrix_Pop(); - Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY); - Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY); - Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY); - Matrix_Push(); - } - } else if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { - if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { - overrideRot = true; - } else { - overrideRot = false; - } - if (this->loseAttentionTimer != 0) { - stepRot = true; - } else { - stepRot = false; - } - - EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, - &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot); - - Matrix_Pop(); - Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY); - Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY); - Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY); - Matrix_Push(); + default: + break; } } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index fbdcd2791..4a8419dc5 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -15482,8 +15482,8 @@ 0x80BC11B4:("EnNb_PostLimbDraw",), 0x80BC1278:("EnNb_TransformLimbDraw",), 0x80BC1374:("EnNb_Draw",), - 0x80BC1900:("func_80BC1900",), - 0x80BC192C:("func_80BC192C",), + 0x80BC1900:("EnJa_UpdateSkelAnime",), + 0x80BC192C:("EnJa_ChangeAnim",), 0x80BC1984:("func_80BC1984",), 0x80BC19FC:("func_80BC19FC",), 0x80BC1A68:("func_80BC1A68",), From 4ca54d704eb84b6d9f4142d4445ac1e400e14fd4 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 2 Oct 2023 21:52:41 -0700 Subject: [PATCH 112/121] Speedmeter OK (#1393) * Match * data + bss * x * Small cleanup * maxVal * gUnkTimeAcc * SET_FULLSCREEN_VIEWPORT_HIRES * Update permuter settings * SET_FULLSCREEN_VIEWPORT_DYNAMIC --- include/functions.h | 4 +- include/variables.h | 16 +- include/z64game.h | 2 +- include/z64speed_meter.h | 16 +- include/z64view.h | 11 + spec | 2 - src/boot/irqmgr.c | 6 +- src/code/game.c | 18 +- src/code/graph.c | 17 +- src/code/sched.c | 7 +- src/code/speed_meter.c | 262 +++++++++++++++++- src/code/sys_matrix.c | 2 +- src/code/z_bgcheck.c | 14 +- src/code/z_effect_soft_sprite.c | 2 +- src/code/z_kaleido_manager.c | 2 +- src/code/z_malloc.c | 6 +- src/code/z_map_exp.c | 2 +- src/code/z_message.c | 2 +- src/code/z_parameter.c | 6 +- src/code/z_play.c | 8 +- src/code/z_room.c | 2 +- src/code/z_scene.c | 4 +- src/code/z_sram_NES.c | 2 +- src/code/z_vr_box.c | 6 +- .../gamestates/ovl_daytelop/z_daytelop.c | 4 +- .../ovl_file_choose/z_file_choose_NES.c | 6 +- src/overlays/gamestates/ovl_title/z_title.c | 2 +- tools/disasm/functions.txt | 6 +- tools/disasm/variables.txt | 32 +-- tools/permuter_settings.toml | 2 + tools/sizes/code_functions.csv | 6 +- 31 files changed, 367 insertions(+), 110 deletions(-) diff --git a/include/functions.h b/include/functions.h index 849329d94..47bc7fe3d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -667,10 +667,10 @@ void* ZeldaArena_Realloc(void* ptr, size_t newSize); void ZeldaArena_Free(void* ptr); void* ZeldaArena_Calloc(u32 num, size_t size); void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc); -s32 ZeldaArena_Check(); +s32 ZeldaArena_Check(void); void ZeldaArena_Init(void* start, size_t size); void ZeldaArena_Cleanup(void); -u8 ZeldaArena_IsInitialized(); +u8 ZeldaArena_IsInitialized(void); // void func_80102E40(void); // void func_80102E90(void); // void func_80102EA4(void); diff --git a/include/variables.h b/include/variables.h index 83427f55f..2d64bd2b0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -14,7 +14,7 @@ extern OSPiHandle* gCartHandle; extern size_t gDmaMgrDmaBuffSize; extern vs32 gIrqMgrResetStatus; extern volatile OSTime sIrqMgrResetTime; -extern volatile OSTime sIrqMgrRetraceTime; +extern volatile OSTime gIrqMgrRetraceTime; extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE1 sGfxPrintFontTLUT; @@ -366,7 +366,6 @@ extern Input* D_801D0D60; extern u32 retryCount; extern u32 cfbIdx[3]; -extern UNK_PTR D_801D1540; extern Vec3f gZeroVec3f; extern Vec3s gZeroVec3s; @@ -1903,19 +1902,6 @@ extern GfxMasterList* gGfxMasterDL; extern u64* gAudioSPDataPtr; extern u32 gAudioSPDataSize; -extern volatile OSTime D_801FBAE0; -extern volatile OSTime D_801FBAE8; -extern volatile OSTime gRDPTimeTotal; -extern volatile OSTime lastRenderFrameDuration; -extern volatile OSTime gRSPAudioTotalTime; -extern volatile OSTime sRSPGFXTotalTime; -extern volatile OSTime sRSPOtherTotalTime; -// extern UNK_TYPE1 D_801FBB18; - -// Accumulator for `gRDPTimeTotal` -extern volatile OSTime gRDPTimeAcc; -// extern UNK_TYPE1 D_801FBB28; - extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64game.h b/include/z64game.h index 8b63b701f..50dd68473 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -61,7 +61,7 @@ typedef struct GameState { /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load. /* 0x10 */ size_t size; /* 0x14 */ Input input[MAXCONTROLLERS]; - /* 0x74 */ TwoHeadArena heap; + /* 0x74 */ TwoHeadArena tha; /* 0x84 */ GameAlloc alloc; /* 0x98 */ UNK_TYPE1 pad98[0x3]; /* 0x9B */ u8 running; // If 0, switch to next game state diff --git a/include/z64speed_meter.h b/include/z64speed_meter.h index fbd815248..44b47ed1e 100644 --- a/include/z64speed_meter.h +++ b/include/z64speed_meter.h @@ -7,12 +7,24 @@ struct GameState; struct GraphicsContext; typedef struct SpeedMeter { - /* 0x00 */ char unk_00[0x20]; + /* 0x00 */ char unk_00[0x18]; + /* 0x18 */ s32 x; // Unused + /* 0x1C */ s32 y; } SpeedMeter; // size = 0x20 void SpeedMeter_Init(SpeedMeter* this); void SpeedMeter_Destroy(SpeedMeter* this); void SpeedMeter_DrawTimeEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx); -void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* gameState); +void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* state); + +extern volatile OSTime gRSPAudioTimeTotal; +extern volatile OSTime gRSPGfxTimeTotal; +extern volatile OSTime gRDPTimeTotal; +extern volatile OSTime gGraphUpdatePeriod; +extern volatile OSTime gRSPAudioTimeAcc; +extern volatile OSTime gRSPGfxTimeAcc; +extern volatile OSTime gRSPOtherTimeAcc; +extern volatile OSTime gUnkTimeAcc; +extern volatile OSTime gRDPTimeAcc; #endif diff --git a/include/z64view.h b/include/z64view.h index f0661d947..19bb4492c 100644 --- a/include/z64view.h +++ b/include/z64view.h @@ -65,6 +65,17 @@ typedef struct View { } \ (void)0 +#define SET_FULLSCREEN_VIEWPORT_DYNAMIC(view) \ +{ \ + Viewport viewport; \ + viewport.bottomY = gScreenHeight; \ + viewport.rightX = gScreenWidth; \ + viewport.topY = 0; \ + viewport.leftX = 0; \ + View_SetViewport(view, &viewport); \ +} \ +(void)0 + void View_Init(View* view, struct GraphicsContext* gfxCtx); void View_LookAt(View* view, Vec3f* eye, Vec3f* at, Vec3f* up); void View_SetScale(View* view, f32 scale); diff --git a/spec b/spec index 2e2878c69..00e0fee37 100644 --- a/spec +++ b/spec @@ -560,8 +560,6 @@ beginseg include "build/src/code/padmgr.o" include "build/src/code/sched.o" include "build/src/code/speed_meter.o" - include "build/data/code/speed_meter.data.o" - include "build/data/code/speed_meter.bss.o" include "build/src/code/su_mtx.o" include "build/src/code/sys_cfb.o" include "build/src/code/sys_cmpdma.o" diff --git a/src/boot/irqmgr.c b/src/boot/irqmgr.c index 9a773f279..172eabec8 100644 --- a/src/boot/irqmgr.c +++ b/src/boot/irqmgr.c @@ -4,7 +4,7 @@ vs32 gIrqMgrResetStatus = 0; volatile OSTime sIrqMgrResetTime = 0; -volatile OSTime sIrqMgrRetraceTime = 0; +volatile OSTime gIrqMgrRetraceTime = 0; s32 sIrqMgrRetraceCount = 0; void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue) { @@ -109,11 +109,11 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr) { IrqMgr_CheckStack(); } void IrqMgr_HandleRetrace(IrqMgr* irqmgr) { - if (sIrqMgrRetraceTime == 0) { + if (gIrqMgrRetraceTime == 0) { if (irqmgr->lastFrameTime == 0) { irqmgr->lastFrameTime = osGetTime(); } else { - sIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime; + gIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime; } } diff --git a/src/code/game.c b/src/code/game.c index 4f2df63cd..237783319 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -164,11 +164,11 @@ void GameState_InitArena(GameState* gameState, size_t size) { void* buf = GameAlloc_Malloc(alloc, size); if (buf) { - THA_Init(&gameState->heap, buf, size); + THA_Init(&gameState->tha, buf, size); return; } - THA_Init(&gameState->heap, NULL, 0); + THA_Init(&gameState->tha, NULL, 0); _dbg_hungup("../game.c", 1035); } @@ -178,9 +178,9 @@ void GameState_Realloc(GameState* gameState, size_t size) { size_t systemMaxFree; size_t bytesFree; size_t bytesAllocated; - void* heapStart = gameState->heap.start; + void* heapStart = gameState->tha.start; - THA_Destroy(&gameState->heap); + THA_Destroy(&gameState->tha); GameAlloc_Free(alloc, heapStart); SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated); size = ((systemMaxFree - sizeof(ArenaNode)) < size) ? 0 : size; @@ -190,9 +190,9 @@ void GameState_Realloc(GameState* gameState, size_t size) { gameArena = GameAlloc_Malloc(alloc, size); if (gameArena != NULL) { - THA_Init(&gameState->heap, gameArena, size); + THA_Init(&gameState->tha, gameArena, size); } else { - THA_Init(&gameState->heap, NULL, 0); + THA_Init(&gameState->tha, NULL, 0); _dbg_hungup("../game.c", 1074); } } @@ -246,7 +246,7 @@ void GameState_Destroy(GameState* gameState) { VisZbuf_Destroy(&sGameVisZbuf); VisMono_Destroy(&sGameVisMono); ViMode_Destroy(&sGameViMode); - THA_Destroy(&gameState->heap); + THA_Destroy(&gameState->tha); GameAlloc_Cleanup(&gameState->alloc); } @@ -263,11 +263,11 @@ u32 GameState_IsRunning(GameState* gameState) { } s32 GameState_GetArenaSize(GameState* gameState) { - return THA_GetRemaining(&gameState->heap); + return THA_GetRemaining(&gameState->tha); } s32 func_80173B48(GameState* gameState) { - s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal); + s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * gIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal); return result; } diff --git a/src/code/graph.c b/src/code/graph.c index bce162406..ad4ad0286 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -8,7 +8,7 @@ FaultAddrConvClient sGraphFaultAddrConvClient; FaultClient sGraphFaultClient; GfxMasterList* gGfxMasterDL; CfbInfo sGraphCfbInfos[3]; -OSTime sGraphTaskStartTime; +OSTime sGraphPrevUpdateEndTime; #include "variables.h" #include "macros.h" @@ -16,6 +16,7 @@ OSTime sGraphTaskStartTime; #include "idle.h" #include "sys_cfb.h" #include "system_malloc.h" +#include "z64speed_meter.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" @@ -310,17 +311,17 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { { OSTime time = osGetTime(); - D_801FBAE8 = sRSPGFXTotalTime; - D_801FBAE0 = gRSPAudioTotalTime; + gRSPGfxTimeTotal = gRSPGfxTimeAcc; + gRSPAudioTimeTotal = gRSPAudioTimeAcc; gRDPTimeTotal = gRDPTimeAcc; - sRSPGFXTotalTime = 0; - gRSPAudioTotalTime = 0; + gRSPGfxTimeAcc = 0; + gRSPAudioTimeAcc = 0; gRDPTimeAcc = 0; - if (sGraphTaskStartTime != 0) { - lastRenderFrameDuration = time - sGraphTaskStartTime; + if (sGraphPrevUpdateEndTime != 0) { + gGraphUpdatePeriod = time - sGraphPrevUpdateEndTime; } - sGraphTaskStartTime = time; + sGraphPrevUpdateEndTime = time; } } diff --git a/src/code/sched.c b/src/code/sched.c index f8dc2a35d..289b4a696 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -16,6 +16,7 @@ u32 gAudioSPDataSize; #include "functions.h" #include "variables.h" #include "stackcheck.h" +#include "z64speed_meter.h" #include "z64thread.h" #define RSP_DONE_MSG 667 @@ -426,16 +427,16 @@ void Sched_HandleRSPDone(SchedContext* sched) { time = osGetTime(); switch (sched->curRSPTask->list.t.type) { case M_AUDTASK: - gRSPAudioTotalTime += time - sRSPAudioStartTime; + gRSPAudioTimeAcc += time - sRSPAudioStartTime; break; case M_GFXTASK: - sRSPGFXTotalTime += time - sRSPGFXStartTime; + gRSPGfxTimeAcc += time - sRSPGFXStartTime; break; default: if (1) {} - sRSPOtherTotalTime += time - sRSPOtherStartTime; + gRSPOtherTimeAcc += time - sRSPOtherStartTime; break; } diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c index 1e6f1f886..3550d62ce 100644 --- a/src/code/speed_meter.c +++ b/src/code/speed_meter.c @@ -1,18 +1,266 @@ #include "global.h" +#include "sys_cfb.h" #include "z64speed_meter.h" #include "z64view.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177390.s") +/** + * How much time the RSP ran audio tasks for over the course of `gGraphUpdatePeriod`. + */ +volatile OSTime gRSPAudioTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Init.s") +/** + * How much time the RSP ran graphics tasks for over the course of `gGraphUpdatePeriod`. + * Typically the RSP runs 1 graphics task per `Graph_Update` cycle, but may run 0 (see `Graph_Update`). + */ +volatile OSTime gRSPGfxTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s") +/** + * How much time the RDP ran for over the course of `gGraphUpdatePeriod`. + */ +volatile OSTime gRDPTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s") +/** + * How much time elapsed between the last two `Graph_Update` ending. + * This is expected to be at least the duration of a single frame, since it includes the time spent waiting on the + * graphics task to be done. + */ +volatile OSTime gGraphUpdatePeriod; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177A84.s") +// Accumulator for `gRSPAudioTimeTotal` +volatile OSTime gRSPAudioTimeAcc; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177AC8.s") +// Accumulator for `gRSPGfxTimeTotal`. +volatile OSTime gRSPGfxTimeAcc; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s") +volatile OSTime gRSPOtherTimeAcc; +volatile OSTime gUnkTimeAcc; + +// Accumulator for `gRDPTimeTotal` +volatile OSTime gRDPTimeAcc; + +typedef struct { + /* 0x0 */ volatile OSTime* time; + /* 0x4 */ u16 x; + /* 0x5 */ u16 y; + /* 0x6 */ u16 color; +} SpeedMeterTimeEntry; // size = 0x8 + +SpeedMeterTimeEntry* sSpeedMeterTimeEntryPtr; + +SpeedMeterTimeEntry sSpeedMeterTimeEntryArray[] = { + { &gRSPAudioTimeTotal, 0, 6, GPACK_RGBA5551(0, 0, 255, 1) }, + { &gRSPGfxTimeTotal, 0, 8, GPACK_RGBA5551(255, 128, 128, 1) }, + { &gRDPTimeTotal, 0, 10, GPACK_RGBA5551(0, 255, 0, 1) }, + { &gGraphUpdatePeriod, 0, 12, GPACK_RGBA5551(255, 0, 255, 1) }, +}; + +typedef struct { + /* 0x00 */ s32 maxVal; + /* 0x04 */ s32 val; + /* 0x08 */ u16 backColor; + /* 0x0A */ u16 foreColor; + /* 0x0C */ s32 ulx; + /* 0x10 */ s32 lrx; + /* 0x14 */ s32 uly; + /* 0x18 */ s32 lry; +} SpeedMeterAllocEntry; // size = 0x1C + +//! FAKE: if(1) in macro + +#define gDrawRect(gfx, color, ulx, uly, lrx, lry) \ + do { \ + if (gSysCfbHiResEnabled == true) { \ + u32 tmp = color; \ + gDPPipeSync(gfx); \ + gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \ + gDPFillRectangle(gfx, (ulx)*2, (uly)*2, (lrx)*2, (lry)*2); \ + if (1) {} \ + } else { \ + u32 tmp = color; \ + gDPPipeSync(gfx); \ + gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \ + gDPFillRectangle(gfx, (ulx), (uly), (lrx), (lry)); \ + } \ + } while (0) + +void SpeedMeter_InitImpl(SpeedMeter* this, s32 x, s32 y) { + this->x = x; + this->y = y; +} + +void SpeedMeter_Init(SpeedMeter* this) { + SpeedMeter_InitImpl(this, 32, 22); +} + +void SpeedMeter_Destroy(SpeedMeter* this) { +} + +void SpeedMeter_DrawTimeEntries(SpeedMeter* this, GraphicsContext* gfxCtx) { + s32 pad[3]; + u32 baseX = 32; + s32 width; + s32 uly; + s32 lry; + s32 pad3; + View view; + s32 pad2[2]; + s32 i; + Gfx* gfx; + + uly = this->y; + lry = this->y + 2; + + OPEN_DISPS(gfxCtx); + + /*! @bug if gIrqMgrRetraceTime is 0, CLOSE_DISPS will never be reached */ + if (gIrqMgrRetraceTime == 0) { + return; + } + + sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0]; + for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) { + width = ((f64)*sSpeedMeterTimeEntryPtr->time / gIrqMgrRetraceTime) * 64.0; + sSpeedMeterTimeEntryPtr->x = baseX + width; + sSpeedMeterTimeEntryPtr++; + } + + View_Init(&view, gfxCtx); + view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO; + + SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view); + + gfx = OVERLAY_DISP; + View_ApplyTo(&view, &gfx); + + gDPPipeSync(gfx++); + gDPSetOtherMode(gfx++, + G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + + gDrawRect(gfx++, GPACK_RGBA5551(0, 0, 255, 1), baseX + 64 * 0, uly, baseX + 64 * 1, lry); + gDrawRect(gfx++, GPACK_RGBA5551(0, 255, 0, 1), baseX + 64 * 1, uly, baseX + 64 * 2, lry); + gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 0, 1), baseX + 64 * 2, uly, baseX + 64 * 3, lry); + gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 255, 1), baseX + 64 * 3, uly, baseX + 64 * 4, lry); + + sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0]; + for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) { + gDrawRect(gfx++, sSpeedMeterTimeEntryPtr->color, baseX, lry + sSpeedMeterTimeEntryPtr->y, + sSpeedMeterTimeEntryPtr->x, lry + sSpeedMeterTimeEntryPtr->y + 1); + sSpeedMeterTimeEntryPtr++; + } + gDPPipeSync(gfx++); + + OVERLAY_DISP = gfx; + + CLOSE_DISPS(gfxCtx); +} + +void SpeedMeter_InitAllocEntry(SpeedMeterAllocEntry* this, u32 maxVal, u32 val, u16 backColor, u16 foreColor, u32 ulx, + u32 lrx, u32 uly, u32 lry) { + this->maxVal = maxVal; + this->val = val; + this->backColor = backColor; + this->foreColor = foreColor; + this->ulx = ulx; + this->lrx = lrx; + this->uly = uly; + this->lry = lry; +} + +void SpeedMeter_DrawAllocEntry(SpeedMeterAllocEntry* this, GraphicsContext* gfxCtx) { + s32 usedOff; + View view; + Gfx* gfx; + + if (this->maxVal != 0) { + OPEN_DISPS(gfxCtx); + + View_Init(&view, gfxCtx); + view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO; + + SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view); + + gfx = OVERLAY_DISP; + View_ApplyTo(&view, &gfx); + + gDPPipeSync(gfx++); + gDPSetOtherMode(gfx++, + G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + + usedOff = ((this->lrx - this->ulx) * this->val) / this->maxVal + this->ulx; + gDrawRect(gfx++, this->backColor, usedOff, this->uly, this->lrx, this->lry); + gDrawRect(gfx++, this->foreColor, this->ulx, this->uly, usedOff, this->lry); + + gDPPipeSync(gfx++); + + //! FAKE: + if (this && this && this) {} + + OVERLAY_DISP = gfx; + CLOSE_DISPS(gfxCtx); + } +} + +void SpeedMeter_DrawAllocEntries(SpeedMeter* meter, GraphicsContext* gfxCtx, GameState* state) { + s32 pad[2]; + u32 ulx = 30; + u32 lrx = 290; + SpeedMeterAllocEntry entry; + TwoHeadArena* tha; + s32 y; + TwoHeadGfxArena* thga; + u32 zeldaFreeMax; + u32 zeldaFree; + u32 zeldaAlloc; + s32 sysFreeMax; + s32 sysFree; + s32 sysAlloc; + + y = 212; + if (R_ENABLE_ARENA_DBG > 2) { + if (ZeldaArena_IsInitialized()) { + ZeldaArena_GetSizes(&zeldaFreeMax, &zeldaFree, &zeldaAlloc); + SpeedMeter_InitAllocEntry(&entry, zeldaFree + zeldaAlloc, zeldaAlloc, GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 255, 255, 1), ulx, lrx, y, y + 1); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + y++; + } + } + + if (R_ENABLE_ARENA_DBG > 1) { + SystemArena_GetSizes((u32*)&sysFreeMax, (u32*)&sysFree, (u32*)&sysAlloc); + SpeedMeter_InitAllocEntry(&entry, sysFree + sysAlloc - state->tha.size, sysAlloc - state->tha.size, + GPACK_RGBA5551(0, 0, 255, 1), GPACK_RGBA5551(255, 128, 128, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + } + + tha = &state->tha; + SpeedMeter_InitAllocEntry(&entry, tha->size, tha->size - THA_GetRemaining(tha), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(0, 255, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->polyOpa; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 0, 255, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->polyXlu; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 255, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->overlay; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 0, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; +} diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index 6269add5f..f84dae383 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -75,7 +75,7 @@ MtxF* sCurrentMatrix; //!< original name: "Matrix_now" * @remark original name: "new_Matrix" */ void Matrix_Init(GameState* gameState) { - sMatrixStack = THA_AllocTailAlign16(&gameState->heap, MATRIX_STACK_SIZE * sizeof(MtxF)); + sMatrixStack = THA_AllocTailAlign16(&gameState->tha, MATRIX_STACK_SIZE * sizeof(MtxF)); sCurrentMatrix = sMatrixStack; } diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index ae871c8a6..2bef40dce 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -140,7 +140,7 @@ void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list) { } void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes) { - list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.heap, numNodes * sizeof(SSNode), -2); + list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.tha, numNodes * sizeof(SSNode), -2); list->maxNodes = numNodes; list->count = 0; } @@ -1580,7 +1580,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader } } colCtx->lookupTbl = THA_AllocTailAlign( - &play->state.heap, + &play->state.tha, colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z, ~1); if (colCtx->lookupTbl == NULL) { Fault_AddHungupAndCrash("../z_bgcheck.c", 3955); @@ -2456,8 +2456,8 @@ void SSNodeList_Init(SSNodeList* this) { void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys) { this->max = tblMax; this->count = 0; - this->tbl = THA_AllocTailAlign(&play->state.heap, tblMax * sizeof(SSNode), -2); - this->polyCheckTbl = THA_AllocTailAlign16(&play->state.heap, numPolys * sizeof(u8)); + this->tbl = THA_AllocTailAlign(&play->state.tha, tblMax * sizeof(SSNode), -2); + this->polyCheckTbl = THA_AllocTailAlign16(&play->state.tha, numPolys * sizeof(u8)); if (this->polyCheckTbl == NULL) { sprintf(D_801ED950, "this->polygon_check == NULL(game_alloc() MemoryAllocationError.)\n"); @@ -2599,7 +2599,7 @@ void DynaPoly_NullPolyList(CollisionPoly** polyList) { * Allocate dyna.polyList */ void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys) { - *polyList = THA_AllocTailAlign(&play->state.heap, numPolys * sizeof(CollisionPoly), -2); + *polyList = THA_AllocTailAlign(&play->state.tha, numPolys * sizeof(CollisionPoly), -2); } /** @@ -2613,7 +2613,7 @@ void DynaPoly_NullVtxList(Vec3s** vtxList) { * Allocate dyna.vtxList */ void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx) { - *vtxList = THA_AllocTailAlign(&play->state.heap, numVtx * sizeof(Vec3s), -2); + *vtxList = THA_AllocTailAlign(&play->state.tha, numVtx * sizeof(Vec3s), -2); } /** @@ -2628,7 +2628,7 @@ void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList) { * Allocate dyna.waterBoxList */ void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes) { - waterBoxList->boxes = THA_AllocTailAlign(&play->state.heap, numWaterBoxes * sizeof(WaterBox), -2); + waterBoxList->boxes = THA_AllocTailAlign(&play->state.tha, numWaterBoxes * sizeof(WaterBox), -2); } /** diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 870132a07..08aa845ab 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -8,7 +8,7 @@ void EffectSS_Init(PlayState* play, s32 numEntries) { EffectSs* effectsSs; EffectSsOverlay* overlay; - sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.heap, numEntries * sizeof(EffectSs)); + sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.tha, numEntries * sizeof(EffectSs)); sEffectSsInfo.searchIndex = 0; sEffectSsInfo.size = numEntries; diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c index e09492d4e..d0bacdd22 100644 --- a/src/code/z_kaleido_manager.c +++ b/src/code/z_kaleido_manager.c @@ -66,7 +66,7 @@ void KaleidoManager_Init(PlayState* play) { } } - sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.heap, largestSize); + sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.tha, largestSize); gKaleidoMgrCurOvl = NULL; Fault_AddAddrConvClient(&sKaleidoMgrFaultAddrConvClient, KaleidoManager_FaultAddrConv, NULL); } diff --git a/src/code/z_malloc.c b/src/code/z_malloc.c index 781f4310e..ac56231cf 100644 --- a/src/code/z_malloc.c +++ b/src/code/z_malloc.c @@ -40,7 +40,7 @@ void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc) __osGetSizes(&sZeldaArena, outMaxFree, outFree, outAlloc); } -s32 ZeldaArena_Check() { +s32 ZeldaArena_Check(void) { return __osCheckArena(&sZeldaArena); } @@ -48,10 +48,10 @@ void ZeldaArena_Init(void* start, size_t size) { __osMallocInit(&sZeldaArena, start, size); } -void ZeldaArena_Cleanup() { +void ZeldaArena_Cleanup(void) { __osMallocCleanup(&sZeldaArena); } -u8 ZeldaArena_IsInitialized() { +u8 ZeldaArena_IsInitialized(void) { return __osMallocIsInitalized(&sZeldaArena); } diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index c087fe059..f04562e03 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -181,7 +181,7 @@ void Map_Init(PlayState* play) { func_80105C40(play->roomCtx.curRoom.num); interfaceCtx->unk_278 = -1; interfaceCtx->dungeonOrBossAreaMapIndex = -1; - interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.heap, 0x1000); + interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.tha, 0x1000); if (func_8010A2AC(play)) { gSaveContext.mapIndex = func_8010A238(play); return; diff --git a/src/code/z_message.c b/src/code/z_message.c index a922f237b..42a0e301f 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -597,7 +597,7 @@ void Message_Init(PlayState* play) { msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; msgCtx->textColorAlpha = 0xFF; View_Init(&msgCtx->view, play->state.gfxCtx); - msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.heap, 0x13C00); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.tha, 0x13C00); font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 2c4106e05..4fcd31c8b 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -7115,16 +7115,16 @@ void Interface_Init(PlayState* play) { interfaceCtx->healthTimer = 200; parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static); - interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.heap, parameterStaticSize); + interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.tha, parameterStaticSize); DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize); - interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.heap, 0xC90); + interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.tha, 0xC90); DmaMgr_SendRequest0(interfaceCtx->doActionSegment, SEGMENT_ROM_START(do_action_static), 0x300); DmaMgr_SendRequest0(interfaceCtx->doActionSegment + 0x300, SEGMENT_ROM_START(do_action_static) + 0x480, 0x180); Interface_NewDay(play, CURRENT_DAY); - interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.heap, 0x4000); + interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.tha, 0x4000); if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); diff --git a/src/code/z_play.c b/src/code/z_play.c index 44efbfbfb..41b921125 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1562,7 +1562,7 @@ void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos) { void* Play_LoadFile(PlayState* this, RomFile* entry) { size_t size = entry->vromEnd - entry->vromStart; - void* allocp = THA_AllocTailAlign16(&this->state.heap, size); + void* allocp = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(allocp, entry->vromStart, size); @@ -2324,9 +2324,9 @@ void Play_Init(GameState* thisx) { D_801F6D4C->envColor.b = 0; D_801F6D4C->envColor.a = 0; CutsceneFlags_UnsetAll(this); - THA_GetRemaining(&this->state.heap); - zAllocSize = THA_GetRemaining(&this->state.heap); - zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.heap, zAllocSize); + THA_GetRemaining(&this->state.tha); + zAllocSize = THA_GetRemaining(&this->state.tha); + zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.tha, zAllocSize); ZeldaArena_Init(((zAlloc + 8) & ~0xF), (zAllocSize - ((zAlloc + 8) & ~0xF)) + zAlloc); //! @bug: Incorrect ALIGN16s Actor_InitContext(this, &this->actorCtx, this->linkActorEntry); diff --git a/src/code/z_room.c b/src/code/z_room.c index b8de6caec..d06739d87 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -516,7 +516,7 @@ size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) { } } - roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize); + roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.tha, maxRoomSize); if (roomCtx->roomMemPages[0] == NULL) { _dbg_hungup("../z_room.c", 1078); } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 529458f83..811853f07 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -48,7 +48,7 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; } // clang-format on - objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->heap, spaceSize); + objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize); objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP); @@ -357,7 +357,7 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) { size_t size = sceneTextureFiles[fileIndex].vromEnd - vromStart; if (size != 0) { - play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.heap, size); + play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.tha, size); DmaMgr_SendRequest0(play->roomCtx.unk74, vromStart, size); } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 198dac4e9..8d382e5db 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1866,7 +1866,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) { void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { if (gSaveContext.flashSaveAvailable) { - sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE); + sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->tha, SAVE_BUFFER_SIZE); sramCtx->status = 0; } } diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index dd0785d94..605dff84c 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -294,15 +294,15 @@ void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) { Skybox_Setup(gameState, skyboxCtx, skyboxId); if (skyboxId != SKYBOX_NONE) { - skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->heap, 0x3840); + skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->tha, 0x3840); if (skyboxId == SKYBOX_CUTSCENE_MAP) { // Allocate enough space for the vertices for a 6 sided skybox (cube) - skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6); + skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 6); func_80143148(skyboxCtx, 6); } else { // Allocate enough space for the vertices for a 5 sided skybox (bottom is missing) - skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 5); + skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 5); func_80143148(skyboxCtx, 5); } } diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 1b68e0b14..637a20906 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -215,11 +215,11 @@ void DayTelop_Noop(DayTelopState* this) { void DayTelop_LoadGraphics(DayTelopState* this) { size_t segmentSize = SEGMENT_ROM_SIZE(daytelop_static); - this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->daytelopStaticFile, SEGMENT_ROM_START(daytelop_static), segmentSize); segmentSize = SEGMENT_ROM_SIZE(icon_item_gameover_static); - this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->gameoverStaticFile, SEGMENT_ROM_START(icon_item_gameover_static), segmentSize); } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index 4d3e172d9..a47b5ed9e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2531,15 +2531,15 @@ void FileSelect_Init(GameState* thisx) { Font_LoadOrderedFont(&this->font); size = SEGMENT_ROM_SIZE(title_static); - this->staticSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->staticSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(title_static), size); size = SEGMENT_ROM_SIZE(parameter_static); - this->parameterSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->parameterSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->parameterSegment, SEGMENT_ROM_START(parameter_static), size); size = gObjectTable[OBJECT_MAG].vromEnd - gObjectTable[OBJECT_MAG].vromStart; - this->titleSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->titleSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size); Audio_SetSpec(0xA); diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index c829e79a9..5cebc2fca 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -154,7 +154,7 @@ void ConsoleLogo_Init(GameState* thisx) { ConsoleLogoState* this = (ConsoleLogoState*)thisx; uintptr_t segmentSize = SEGMENT_ROM_SIZE(nintendo_rogo_static); - this->staticSegment = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->staticSegment = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(nintendo_rogo_static), segmentSize); GameState_SetFramerateDivisor(&this->state, 1); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4a8419dc5..c1137d3b2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3215,12 +3215,12 @@ 0x80177084:("Sched_FaultClient",), 0x8017715C:("Sched_ThreadEntry",), 0x801772A0:("Sched_Init",), - 0x80177390:("func_80177390",), + 0x80177390:("SpeedMeter_InitImpl",), 0x801773A0:("SpeedMeter_Init",), 0x801773C4:("SpeedMeter_Destroy",), 0x801773D0:("SpeedMeter_DrawTimeEntries",), - 0x80177A84:("func_80177A84",), - 0x80177AC8:("func_80177AC8",), + 0x80177A84:("SpeedMeter_InitAllocEntry",), + 0x80177AC8:("SpeedMeter_DrawAllocEntry",), 0x80177E58:("SpeedMeter_DrawAllocEntries",), 0x801780F0:("Mtx_SetTranslateScaleMtx",), 0x801781EC:("Mtx_SetRotationMtx",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index aababcf0b..417e27b77 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -21,7 +21,7 @@ 0x80096B50:("gDmaMgrDmaBuffSize","u32","",0x4), 0x80096B60:("gIrqMgrResetStatus","vs32","",0x4), 0x80096B68:("sIrqMgrResetTime","volatile OSTime","",0x8), - 0x80096B70:("sIrqMgrRetraceTime","volatile OSTime","",0x8), + 0x80096B70:("gIrqMgrRetraceTime","volatile OSTime","",0x8), 0x80096B78:("sIrqMgrRetraceCount","s32","",0x4), 0x80096B80:("sCpuExceptions","char*","[18]",0x48), 0x80096BC8:("sFpuExceptions","char*","[6]",0x18), @@ -2159,7 +2159,7 @@ 0x801D1530:("sPadMgrInstance","PadMgr*","",0x4), 0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4), 0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4), - 0x801D1540:("D_801D1540","UNK_PTR","",0x4), + 0x801D1540:("sSpeedMeterTimeEntryArray","UNK_PTR","",0x4), 0x801D1570:("D_801D1570","f32","[13]",0x34), 0x801D15B0:("gZeroVec3f","Vec3f","",0xC), 0x801D15BC:("gZeroVec3s","Vec3s","",0x6), @@ -4032,7 +4032,7 @@ 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), 0x801F80F8:("sGraphCfbInfos","UNK_TYPE1","",0x1), - 0x801F8150:("sGraphTaskStartTime","u64","",0x8), + 0x801F8150:("sGraphPrevUpdateEndTime","u64","",0x8), 0x801F8160:("sSerialEventQueue","OSMesgQueue","",0x18), 0x801F8178:("sSerialMsgBuf","OSMesg","[1]",0x4), 0x801F8180:("gSegments","u32","[16]",0x40), @@ -4052,24 +4052,22 @@ 0x801FB338:("sAudioMgr","AudioMgr","",0x2e0), 0x801FB620:("gPadMgr","PadMgr","",0x480), 0x801FBAA0:("sSchedFaultClient","UNK_TYPE1","",0x1), - 0x801FBAB0:("sRSPGFXStartTime","OSTime","",0x8), - 0x801FBAB8:("sRSPAudioStartTime","OSTime","",0x8), - 0x801FBAC0:("sRSPOtherStartTime","OSTime","",0x8), + 0x801FBAB0:("sRSPGfxTimeStart","OSTime","",0x8), + 0x801FBAB8:("sRSPAudioTimeStart","OSTime","",0x8), + 0x801FBAC0:("sRSPOtherTimeStart","OSTime","",0x8), 0x801FBAC8:("sRDPStartTime","OSTime","",0x8), 0x801FBAD0:("gAudioSPDataPtr","u64*","",0x4), 0x801FBAD4:("gAudioSPDataSize","u32","",0x4), - 0x801FBAE0:("D_801FBAE0","UNK_TYPE1","",0x1), - 0x801FBAE8:("D_801FBAE8","UNK_TYPE1","",0x1), + 0x801FBAE0:("gRSPAudioTimeTotal","volatile OSTime","",0x8), + 0x801FBAE8:("gRSPGfxTimeTotal","volatile OSTime","",0x8), 0x801FBAF0:("gRDPTimeTotal","volatile OSTime","",0x8), - 0x801FBAF8:("lastRenderFrameDuration","volatile OSTime","",0x8), - 0x801FBB00:("gRSPAudioTotalTime","UNK_TYPE1","",0x1), - 0x801FBB04:("D_801FBB04","UNK_TYPE1","",0x1), - 0x801FBB08:("sRSPGFXTotalTime","UNK_TYPE1","",0x1), - 0x801FBB0C:("D_801FBB0C","UNK_TYPE1","",0x1), - 0x801FBB10:("sRSPOtherTotalTime","UNK_TYPE1","",0x1), - 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), - 0x801FBB20:("gRDPTimeAcc","UNK_TYPE1","",0x1), - 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), + 0x801FBAF8:("gGraphUpdatePeriod","volatile OSTime","",0x8), + 0x801FBB00:("gRSPAudioTimeAcc","volatile OSTime","",0x8), + 0x801FBB08:("gRSPGfxTimeAcc","volatile OSTime","",0x8), + 0x801FBB10:("gRSPOtherTimeAcc","volatile OSTime","",0x8), + 0x801FBB18:("gUnkTimeAcc","volatile OSTime","",0x8), + 0x801FBB20:("gRDPTimeAcc","volatile OSTime","",0x8), + 0x801FBB28:("sSpeedMeterTimeEntryPtr","UNK_TYPE1","",0x1), 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), 0x801FBB88:("gActiveViMode","OSViMode*","",0x4), diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index efa3bc2fe..0aa806f2a 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -34,6 +34,8 @@ CLEAR_EVENTINF = "int" CLEAR_EVENTINF_ALT = "int" "EVENTINF_.*" = "int" ".+REG" = "int" +SET_FULLSCREEN_VIEWPORT_DYNAMIC = "void" +gDrawRect = "void" [decompme.compilers] "tools/ido_recomp/linux/7.1/cc" = "ido7.1" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 5194497c7..3e6042f03 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2729,12 +2729,12 @@ asm/non_matchings/code/sched/Sched_SendGfxCancelMsg.s,Sched_SendGfxCancelMsg,0x8 asm/non_matchings/code/sched/Sched_FaultClient.s,Sched_FaultClient,0x80177084,0x36 asm/non_matchings/code/sched/Sched_ThreadEntry.s,Sched_ThreadEntry,0x8017715C,0x51 asm/non_matchings/code/sched/Sched_Init.s,Sched_Init,0x801772A0,0x3C -asm/non_matchings/code/speed_meter/func_80177390.s,func_80177390,0x80177390,0x4 +asm/non_matchings/code/speed_meter/SpeedMeter_InitImpl.s,SpeedMeter_InitImpl,0x80177390,0x4 asm/non_matchings/code/speed_meter/SpeedMeter_Init.s,SpeedMeter_Init,0x801773A0,0x9 asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s,SpeedMeter_Destroy,0x801773C4,0x3 asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s,SpeedMeter_DrawTimeEntries,0x801773D0,0x1AD -asm/non_matchings/code/speed_meter/func_80177A84.s,func_80177A84,0x80177A84,0x11 -asm/non_matchings/code/speed_meter/func_80177AC8.s,func_80177AC8,0x80177AC8,0xE4 +asm/non_matchings/code/speed_meter/SpeedMeter_InitAllocEntry.s,SpeedMeter_InitAllocEntry,0x80177A84,0x11 +asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntry.s,SpeedMeter_DrawAllocEntry,0x80177AC8,0xE4 asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_DrawAllocEntries,0x80177E58,0xA6 asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90 From 9d043f0197d57021cb704f94e5ba459d8b03cd30 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Mon, 2 Oct 2023 23:26:50 -0700 Subject: [PATCH 113/121] Add original asset names to all `object_l*` and `object_m*` files (#1403) --- assets/xml/objects/gameplay_keep.xml | 2 +- assets/xml/objects/object_ladder.xml | 16 ++--- assets/xml/objects/object_last_obj.xml | 12 ++-- assets/xml/objects/object_lastday.xml | 8 +-- assets/xml/objects/object_lbfshot.xml | 6 +- assets/xml/objects/object_lightblock.xml | 6 +- assets/xml/objects/object_lightswitch.xml | 6 +- assets/xml/objects/object_link_goron.xml | 8 +-- assets/xml/objects/object_link_zora.xml | 2 +- assets/xml/objects/object_lotus.xml | 2 +- assets/xml/objects/object_mamenoki.xml | 8 +-- assets/xml/objects/object_maruta.xml | 18 +++--- assets/xml/objects/object_mastergolon.xml | 2 +- assets/xml/objects/object_masterzoora.xml | 2 +- assets/xml/objects/object_milkbar.xml | 20 +++--- assets/xml/objects/object_mir_ray.xml | 2 +- assets/xml/objects/object_mk.xml | 10 +-- assets/xml/objects/object_mm.xml | 34 +++++----- assets/xml/objects/object_mnk.xml | 76 +++++++++++------------ assets/xml/objects/object_moonend.xml | 2 +- assets/xml/objects/object_moonston.xml | 4 +- assets/xml/objects/object_ms.xml | 2 +- assets/xml/objects/object_mu.xml | 12 ++-- assets/xml/overlays/ovl_En_Mm2.xml | 2 +- 24 files changed, 131 insertions(+), 131 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 8b1c482c2..5dababaab 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -1159,7 +1159,7 @@ - + diff --git a/assets/xml/objects/object_ladder.xml b/assets/xml/objects/object_ladder.xml index 6e42412ec..29ee69b9b 100644 --- a/assets/xml/objects/object_ladder.xml +++ b/assets/xml/objects/object_ladder.xml @@ -1,13 +1,13 @@  - - - - - - - - + + + + + + + + diff --git a/assets/xml/objects/object_last_obj.xml b/assets/xml/objects/object_last_obj.xml index 03dbddcf2..bd452a408 100644 --- a/assets/xml/objects/object_last_obj.xml +++ b/assets/xml/objects/object_last_obj.xml @@ -1,21 +1,21 @@  - + - - + + - - + + - + diff --git a/assets/xml/objects/object_lastday.xml b/assets/xml/objects/object_lastday.xml index e447edfbf..4c6b5fdb4 100644 --- a/assets/xml/objects/object_lastday.xml +++ b/assets/xml/objects/object_lastday.xml @@ -3,13 +3,13 @@ - + - + - + - + diff --git a/assets/xml/objects/object_lbfshot.xml b/assets/xml/objects/object_lbfshot.xml index 325ddf49e..881f877b6 100644 --- a/assets/xml/objects/object_lbfshot.xml +++ b/assets/xml/objects/object_lbfshot.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_lightblock.xml b/assets/xml/objects/object_lightblock.xml index 207b03020..d58ec0004 100644 --- a/assets/xml/objects/object_lightblock.xml +++ b/assets/xml/objects/object_lightblock.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_lightswitch.xml b/assets/xml/objects/object_lightswitch.xml index 4318488be..a8b26bc51 100644 --- a/assets/xml/objects/object_lightswitch.xml +++ b/assets/xml/objects/object_lightswitch.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml index 76017884e..b6dd7fe6f 100644 --- a/assets/xml/objects/object_link_goron.xml +++ b/assets/xml/objects/object_link_goron.xml @@ -42,7 +42,7 @@ - + @@ -72,10 +72,10 @@ - + - + @@ -90,7 +90,7 @@ - + diff --git a/assets/xml/objects/object_link_zora.xml b/assets/xml/objects/object_link_zora.xml index 5833293b8..be4c54274 100644 --- a/assets/xml/objects/object_link_zora.xml +++ b/assets/xml/objects/object_link_zora.xml @@ -80,7 +80,7 @@ - + diff --git a/assets/xml/objects/object_lotus.xml b/assets/xml/objects/object_lotus.xml index b9f40033c..923218811 100644 --- a/assets/xml/objects/object_lotus.xml +++ b/assets/xml/objects/object_lotus.xml @@ -4,6 +4,6 @@ - + diff --git a/assets/xml/objects/object_mamenoki.xml b/assets/xml/objects/object_mamenoki.xml index 9ce4644c3..9fa5b6832 100644 --- a/assets/xml/objects/object_mamenoki.xml +++ b/assets/xml/objects/object_mamenoki.xml @@ -1,9 +1,9 @@  - - - - + + + + diff --git a/assets/xml/objects/object_maruta.xml b/assets/xml/objects/object_maruta.xml index e61e1162b..c44907b1d 100644 --- a/assets/xml/objects/object_maruta.xml +++ b/assets/xml/objects/object_maruta.xml @@ -3,14 +3,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_mastergolon.xml b/assets/xml/objects/object_mastergolon.xml index 35eb9d285..481fb7cde 100644 --- a/assets/xml/objects/object_mastergolon.xml +++ b/assets/xml/objects/object_mastergolon.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_masterzoora.xml b/assets/xml/objects/object_masterzoora.xml index f21b99b50..5a72744da 100644 --- a/assets/xml/objects/object_masterzoora.xml +++ b/assets/xml/objects/object_masterzoora.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_milkbar.xml b/assets/xml/objects/object_milkbar.xml index 38bec140b..f3e732514 100644 --- a/assets/xml/objects/object_milkbar.xml +++ b/assets/xml/objects/object_milkbar.xml @@ -1,27 +1,27 @@  - + - + - + - + - + - - + + @@ -33,12 +33,12 @@ - + - - + + diff --git a/assets/xml/objects/object_mir_ray.xml b/assets/xml/objects/object_mir_ray.xml index 962982322..c0b1cf6f2 100644 --- a/assets/xml/objects/object_mir_ray.xml +++ b/assets/xml/objects/object_mir_ray.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_mk.xml b/assets/xml/objects/object_mk.xml index 457eadf28..0db6c703d 100644 --- a/assets/xml/objects/object_mk.xml +++ b/assets/xml/objects/object_mk.xml @@ -1,11 +1,11 @@  - - - - - + + + + + diff --git a/assets/xml/objects/object_mm.xml b/assets/xml/objects/object_mm.xml index 43e8e930b..b7b727d4e 100644 --- a/assets/xml/objects/object_mm.xml +++ b/assets/xml/objects/object_mm.xml @@ -1,10 +1,10 @@  - - - - - + + + + + @@ -32,9 +32,9 @@ - - - + + + @@ -55,14 +55,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml index ee2d1a55e..e80bcfba2 100644 --- a/assets/xml/objects/object_mnk.xml +++ b/assets/xml/objects/object_mnk.xml @@ -1,7 +1,7 @@  - + @@ -9,11 +9,11 @@ - - - - - + + + + + @@ -24,31 +24,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -110,13 +110,13 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml index 666e9e07c..4e4b5a6f2 100644 --- a/assets/xml/objects/object_moonend.xml +++ b/assets/xml/objects/object_moonend.xml @@ -34,7 +34,7 @@ - + diff --git a/assets/xml/objects/object_moonston.xml b/assets/xml/objects/object_moonston.xml index 58a920522..2945469f2 100644 --- a/assets/xml/objects/object_moonston.xml +++ b/assets/xml/objects/object_moonston.xml @@ -4,8 +4,8 @@ along with its associated fire trail. --> - - + + diff --git a/assets/xml/objects/object_ms.xml b/assets/xml/objects/object_ms.xml index f861e6a37..1b3f86145 100644 --- a/assets/xml/objects/object_ms.xml +++ b/assets/xml/objects/object_ms.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_mu.xml b/assets/xml/objects/object_mu.xml index 37886e8f5..a72b184c1 100644 --- a/assets/xml/objects/object_mu.xml +++ b/assets/xml/objects/object_mu.xml @@ -1,11 +1,11 @@  - - - - - + + + + + @@ -58,6 +58,6 @@ - + diff --git a/assets/xml/overlays/ovl_En_Mm2.xml b/assets/xml/overlays/ovl_En_Mm2.xml index 5d0be627f..81457d849 100644 --- a/assets/xml/overlays/ovl_En_Mm2.xml +++ b/assets/xml/overlays/ovl_En_Mm2.xml @@ -8,7 +8,7 @@ - + From f6a2f4492a5db3f3bd19601336a299d7b84cda6f Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Tue, 3 Oct 2023 09:58:46 +0200 Subject: [PATCH 114/121] En_Encount3 decompiled (#1405) * data * some matches * draw func * Update func * improvements * forgot extern * improvements * improvements * improvements * improvements --- spec | 3 +- .../actors/ovl_En_Encount3/z_en_encount3.c | 178 ++++++++++++++++-- .../actors/ovl_En_Encount3/z_en_encount3.h | 28 ++- 3 files changed, 194 insertions(+), 15 deletions(-) diff --git a/spec b/spec index 00e0fee37..eb09f058f 100644 --- a/spec +++ b/spec @@ -2163,8 +2163,7 @@ beginseg name "ovl_En_Encount3" compress include "build/src/overlays/actors/ovl_En_Encount3/z_en_encount3.o" - include "build/data/ovl_En_Encount3/ovl_En_Encount3.data.o" - include "build/data/ovl_En_Encount3/ovl_En_Encount3.reloc.o" + include "build/src/overlays/actors/ovl_En_Encount3/ovl_En_Encount3_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index b2d172cfc..15d495e49 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -5,6 +5,7 @@ */ #include "z_en_encount3.h" +#include "objects/object_big_fwall/object_big_fwall.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON) @@ -12,14 +13,15 @@ void EnEncount3_Init(Actor* thisx, PlayState* play); void EnEncount3_Destroy(Actor* thisx, PlayState* play); -void EnEncount3_Update(Actor* thisx, PlayState* play); +void EnEncount3_Update(Actor* thisx, PlayState* play2); void EnEncount3_Draw(Actor* thisx, PlayState* play); +void func_809AD058(EnEncount3* this); + void func_809AD084(EnEncount3* this, PlayState* play); void func_809AD194(EnEncount3* this, PlayState* play); void func_809AD1EC(EnEncount3* this, PlayState* play); -#if 0 ActorInit En_Encount3_InitVars = { ACTOR_EN_ENCOUNT3, ACTORCAT_ENEMY, @@ -32,22 +34,174 @@ ActorInit En_Encount3_InitVars = { (ActorFunc)EnEncount3_Draw, }; -#endif +s32 D_809AD810 = false; -extern UNK_TYPE D_060009A0; +void EnEncount3_Init(Actor* thisx, PlayState* play) { + EnEncount3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Init.s") + this->unk14A = ENCOUNT3_GET_SPAWN_INDEX(thisx); + this->childParams = ENCOUNT3_GET_PARAM_F80(thisx); + this->switchFlag = ENCOUNT3_GET_SWITCH_FLAG(thisx); + this->csId = this->actor.csId; + this->unk16C = ENCOUNT3_GET_ROTZ(thisx) * 10.0f; + if (this->unk16C < 10.0f) { + this->unk16C = 10.0f; + } else if (this->unk16C > 1000.0f) { + this->unk16C = 1000.0f; + } + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; + } + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->actor); + } + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + func_809AD058(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Destroy.s") +void EnEncount3_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD058.s") +void func_809AD058(EnEncount3* this) { + this->childActorId = ACTOR_EN_JSO; + this->unk150 = 1; + this->timer = 30; + this->actionFunc = func_809AD084; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD084.s") +void func_809AD084(EnEncount3* this, PlayState* play) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->actor); + return; + } + if (!(this->unk16C < this->actor.xzDistToPlayer) && (Player_GetMask(play) == PLAYER_MASK_GARO) && !D_809AD810) { + if (this->timer > 0) { + this->timer--; + } else { + this->child = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, this->childActorId, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, this->childParams); + if (this->child != NULL) { + this->unk14E++; + D_809AD810 = true; + this->actionFunc = func_809AD194; + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD194.s") +void func_809AD194(EnEncount3* this, PlayState* play) { + if (this->unk14E == 0) { + this->unk178 = 0.0f; + if (this->switchFlag >= 0) { + Flags_SetSwitch(play, this->switchFlag); + } + this->actionFunc = func_809AD1EC; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD1EC.s") +void func_809AD1EC(EnEncount3* this, PlayState* play) { + if (this->unk174 < 0.002f) { + D_809AD810 = false; + Actor_Kill(&this->actor); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Update.s") +void EnEncount3_Update(Actor* thisx, PlayState* play2) { + EnEncount3* this = THIS; + f32 new_var; + PlayState* play = play2; + Player* player = GET_PLAYER(play); + f32 sp3C; + f32 sp38; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Draw.s") + this->actionFunc(this, play); + if (this->actionFunc == func_809AD194) { + new_var = this->unk16C * 0.52f; + if (new_var < this->actor.xzDistToPlayer) { + this->unk178 = ((this->unk16C * 0.03125f) * 0.001f) + 0.1f; + } else { + this->unk178 = 0.06f; + } + + if (((this->unk16C + 50.0f) + BREG(0)) < this->actor.xzDistToPlayer) { + if (this->actionFunc == func_809AD194) { + this->unk148 = 0; + this->unk178 = 0.0f; + D_809AD810 = false; + if (((this->child != NULL) && (this->child->update != NULL)) && (this->child->colChkInfo.health > 0)) { + Actor_Kill(this->child); + this->child = NULL; + } + func_809AD058(this); + } + } else if (this->unk16C < this->actor.xzDistToPlayer) { + s16 i; + + for (i = 0; i < PLAYER_BODYPART_MAX; i++) { + player->flameTimers[i] = Rand_S16Offset(0, 200); + } + player->isBurning = true; + + sp3C = this->actor.world.pos.x - player->actor.world.pos.x; + sp38 = this->actor.world.pos.z - player->actor.world.pos.z; + if (!Play_InCsMode(play)) { + func_800B8D50(play, &this->actor, 10.0f, Math_Atan2S_XY(sp38, sp3C), 0.0f, 1); + } + } + this->child->colChkInfo = this->child->colChkInfo; + } + + this->unk168 = this->unk16C; + this->unk168 /= 7666.0f; + if (this->actionFunc != func_809AD194) { + Math_ApproachZeroF(&this->unk170, 0.3f, 10.0f); + Math_ApproachZeroF(&this->unk160, 0.3f, 5.0f); + if (this->unk160 < 1.0f) { + play->unk_18880 = 0; + } + } else if (this->unk148 != 0) { + Math_ApproachF(&this->unk170, 255.0f, 0.4f, 10.0f); + Math_ApproachF(&this->unk160, 60.0f, 0.3f, 5.0f); + } + Math_ApproachF(&this->unk174, this->unk178, 0.3f, 0.03f); + + this->unk164 = this->unk160 / 60.0f; + if (this->unk164 != 0.0f) { + play->envCtx.lightSettings.fogNear = (960 - play->envCtx.unk_C4.fogNear) * this->unk164; + play->envCtx.lightSettings.fogColor[0] = (40.0f - play->envCtx.unk_C4.fogColor[0]) * this->unk164; + play->envCtx.lightSettings.fogColor[1] = (10.0f - play->envCtx.unk_C4.fogColor[1]) * this->unk164; + play->envCtx.lightSettings.fogColor[2] = (0.0f - play->envCtx.unk_C4.fogColor[2]) * this->unk164; + } +} + +void EnEncount3_Draw(Actor* thisx, PlayState* play) { + EnEncount3* this = THIS; + s32 pad; + + if (this->unk170 > 0.0f) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Push(); + + gDPPipeSync(POLY_XLU_DISP++); + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, (s32)play->gameplayFrames, 0, 0x20, 0x40, 1, + (s32)play->gameplayFrames * -2, (s32)play->gameplayFrames * -8, 0x20, 0x20)); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 200, 0, (s8)this->unk170); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128); + + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y - 40.0f, this->actor.world.pos.z, + MTXMODE_NEW); + Matrix_Scale(this->unk168, this->unk174, this->unk168, 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_big_fwall_DL_0009A0); + + Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); + } +} diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h index 9ebc87303..9e8bd01ad 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h @@ -7,10 +7,36 @@ struct EnEncount3; typedef void (*EnEncount3ActionFunc)(struct EnEncount3*, PlayState*); +#define ENCOUNT3_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF) +#define ENCOUNT3_GET_PARAM_F80(thisx) (((thisx)->params >> 7) & 0x1F) +#define ENCOUNT3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + +#define ENCOUNT3_GET_ROTZ(thisx) ((thisx)->world.rot.z) + typedef struct EnEncount3 { /* 0x000 */ Actor actor; /* 0x144 */ EnEncount3ActionFunc actionFunc; - /* 0x148 */ char unk_148[0x84]; + /* 0x148 */ u8 unk148; + /* 0x14A */ s16 unk14A; + /* 0x14C */ UNK_TYPE1 pad14C[0x2]; + /* 0x14E */ s16 unk14E; + /* 0x150 */ s16 unk150; + /* 0x152 */ s16 unk152; + /* 0x154 */ s16 childActorId; + /* 0x156 */ s16 unk156; + /* 0x158 */ s16 childParams; + /* 0x15A */ s16 csId; + /* 0x15C */ s16 switchFlag; + /* 0x15E */ s16 timer; + /* 0x160 */ f32 unk160; + /* 0x164 */ f32 unk164; + /* 0x168 */ f32 unk168; + /* 0x16C */ f32 unk16C; + /* 0x170 */ f32 unk170; + /* 0x174 */ f32 unk174; + /* 0x178 */ f32 unk178; + /* 0x17C */ Actor* child; + /* 0x180 */ UNK_TYPE1 unk180[0x4C]; } EnEncount3; // size = 0x1CC #endif // Z_EN_ENCOUNT3_H From f08a69a2cbded60798101e87797cc7a691ff5749 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 3 Oct 2023 18:13:22 -0300 Subject: [PATCH 115/121] `ovl_Bg_Dy_Yoseizo` and related docs (#1390) * Add ido setting to permuter * OK * Data imported & named, change spec * Some easy naming * Cleanup * More object stuff and enums * Document EnDyExtra * Document DemoGetitem * Document DemoEffect * Some work on Elforg * Elforg params macro, some more on Elfgrp * Defines for number of fairies * Tweak some flags wording * Label beam * Elfgrp: Name most of the stray fairy handling stuff * cleanup * fix typo * GreatFairyAnimation * name animations * BgDyYoseizo_TrainPlayer * Choose behaviour? * fix merge * format * self review * WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK * jenkins * review * Update src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c Co-authored-by: Derek Hensley * review * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c * review --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_dy_obj.xml | 165 ++-- assets/xml/objects/object_efc_tw.xml | 17 +- include/z64save.h | 8 +- spec | 3 +- src/code/z_actor.c | 30 +- src/code/z_en_item00.c | 13 +- src/code/z_sram_NES.c | 3 +- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c | 747 +++++++++++++++++- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h | 52 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 146 ++-- .../actors/ovl_Demo_Effect/z_demo_effect.h | 19 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 38 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.h | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 3 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 62 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.h | 11 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 10 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 479 ++++++----- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 31 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 33 +- .../actors/ovl_En_Elforg/z_en_elforg.h | 39 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 8 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 59 +- .../actors/ovl_player_actor/z_player.c | 2 +- .../ovl_kaleido_scope/z_kaleido_map.c | 2 +- tools/disasm/functions.txt | 80 +- tools/disasm/variables.txt | 26 +- tools/weekeventregconvert.py | 2 +- undefined_syms.txt | 8 - 31 files changed, 1467 insertions(+), 635 deletions(-) diff --git a/assets/xml/objects/object_dy_obj.xml b/assets/xml/objects/object_dy_obj.xml index 91b9a55fb..37fef4ab1 100644 --- a/assets/xml/objects/object_dy_obj.xml +++ b/assets/xml/objects/object_dy_obj.xml @@ -1,51 +1,62 @@  + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -55,42 +66,46 @@ + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_efc_tw.xml b/assets/xml/objects/object_efc_tw.xml index a7ca81b55..c28ae3c81 100644 --- a/assets/xml/objects/object_efc_tw.xml +++ b/assets/xml/objects/object_efc_tw.xml @@ -1,13 +1,16 @@  - - + + + - - - - - + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 1db5a566d..7d1bc781d 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -650,11 +650,14 @@ typedef enum { #define WEEKEVENTREG_CLOCK_TOWER_OPENED PACK_WEEKEVENTREG_FLAG(8, 0x40) #define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80) + +// This 5 flags are managed in a special way by EnElfgrp #define WEEKEVENTREG_09_01 PACK_WEEKEVENTREG_FLAG(9, 0x01) #define WEEKEVENTREG_09_02 PACK_WEEKEVENTREG_FLAG(9, 0x02) #define WEEKEVENTREG_09_04 PACK_WEEKEVENTREG_FLAG(9, 0x04) #define WEEKEVENTREG_09_08 PACK_WEEKEVENTREG_FLAG(9, 0x08) #define WEEKEVENTREG_09_10 PACK_WEEKEVENTREG_FLAG(9, 0x10) + #define WEEKEVENTREG_09_20 PACK_WEEKEVENTREG_FLAG(9, 0x20) #define WEEKEVENTREG_09_40 PACK_WEEKEVENTREG_FLAG(9, 0x40) #define WEEKEVENTREG_09_80 PACK_WEEKEVENTREG_FLAG(9, 0x80) @@ -795,7 +798,7 @@ typedef enum { #define WEEKEVENTREG_22_40 PACK_WEEKEVENTREG_FLAG(22, 0x40) #define WEEKEVENTREG_22_80 PACK_WEEKEVENTREG_FLAG(22, 0x80) #define WEEKEVENTREG_23_01 PACK_WEEKEVENTREG_FLAG(23, 0x01) -#define WEEKEVENTREG_23_02 PACK_WEEKEVENTREG_FLAG(23, 0x02) +#define WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK PACK_WEEKEVENTREG_FLAG(23, 0x02) #define WEEKEVENTREG_23_04 PACK_WEEKEVENTREG_FLAG(23, 0x04) #define WEEKEVENTREG_23_08 PACK_WEEKEVENTREG_FLAG(23, 0x08) #define WEEKEVENTREG_23_10 PACK_WEEKEVENTREG_FLAG(23, 0x10) @@ -1631,6 +1634,9 @@ typedef enum { /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple } DungeonIndex; +#define STRAY_FAIRY_TOTAL 25 // total number of stray fairies, including those already in the Great Fairy Fountain +#define STRAY_FAIRY_SCATTERED_TOTAL 15 // original number of stray fairies in one dungeon area + void Sram_ActivateOwl(u8 owlId); void Sram_ClearFlagsAtDawnOfTheFirstDay(void); void Sram_SaveEndOfCycle(struct PlayState* play); diff --git a/spec b/spec index eb09f058f..d7d51ec20 100644 --- a/spec +++ b/spec @@ -2365,8 +2365,7 @@ beginseg name "ovl_Bg_Dy_Yoseizo" compress include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.o" - include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.data.o" - include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo_reloc.o" endseg beginseg diff --git a/src/code/z_actor.c b/src/code/z_actor.c index a69dada41..10f782e25 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -725,7 +725,7 @@ void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor, /* Start of Flags section */ /** - * Tests if current scene switch flag is set. + * Tests if a current scene switch flag is set. */ s32 Flags_GetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -735,7 +735,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { } /** - * Sets current scene switch flag. + * Sets a current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -744,7 +744,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) { } /** - * Unsets current scene switch flag. + * Unsets a current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -753,77 +753,77 @@ void Flags_UnsetSwitch(PlayState* play, s32 flag) { } /** - * Tests if current scene chest flag is set. + * Tests if a current scene chest flag is set. */ s32 Flags_GetTreasure(PlayState* play, s32 flag) { return play->actorCtx.sceneFlags.chest & (1 << flag); } /** - * Sets current scene chest flag. + * Sets a current scene chest flag. */ void Flags_SetTreasure(PlayState* play, s32 flag) { play->actorCtx.sceneFlags.chest |= (1 << flag); } /** - * Overrides the all the chest flags. + * Overrides all the current scene chest flags. */ void Flags_SetAllTreasure(PlayState* play, s32 flag) { play->actorCtx.sceneFlags.chest = flag; } /** - * Returns all the chest flags. + * Returns all the current scene chest flags. */ s32 Flags_GetAllTreasure(PlayState* play) { return play->actorCtx.sceneFlags.chest; } /** - * Tests if current scene clear flag is set. + * Tests if a current scene clear flag is set. */ s32 Flags_GetClear(PlayState* play, s32 roomNumber) { return play->actorCtx.sceneFlags.clearedRoom & (1 << roomNumber); } /** - * Sets current scene clear flag. + * Sets a current scene clear flag. */ void Flags_SetClear(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoom |= (1 << roomNumber); } /** - * Unsets current scene clear flag. + * Unsets a current scene clear flag. */ void Flags_UnsetClear(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoom &= ~(1 << roomNumber); } /** - * Tests if current scene temp clear flag is set. + * Tests if a current scene temp clear flag is set. */ s32 Flags_GetClearTemp(PlayState* play, s32 roomNumber) { return play->actorCtx.sceneFlags.clearedRoomTemp & (1 << roomNumber); } /** - * Sets current scene temp clear flag. + * Sets a current scene temp clear flag. */ void Flags_SetClearTemp(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoomTemp |= (1 << roomNumber); } /** - * Unsets current scene temp clear flag. + * Unsets a current scene temp clear flag. */ void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoomTemp &= ~(1 << roomNumber); } /** - * Tests if current scene collectible flag is set. + * Tests if a current scene collectible flag is set. */ s32 Flags_GetCollectible(PlayState* play, s32 flag) { if ((flag > 0) && (flag < 0x80)) { @@ -833,7 +833,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) { } /** - * Sets current scene collectible flag. + * Sets a current scene collectible flag. */ void Flags_SetCollectible(PlayState* play, s32 flag) { if ((flag > 0) && (flag < 0x80)) { diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 55ab1a708..f9f5df5a8 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -1,4 +1,5 @@ #include "global.h" +#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_gi_hearts/object_gi_hearts.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" @@ -935,9 +936,9 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); } } else { - spawnedActor = - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, - 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE)); + spawnedActor = Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, + STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE)); if (param20000 == 0) { if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); @@ -993,9 +994,9 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); } else { - spawnedActor = - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, - 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE)); + spawnedActor = Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, + STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE)); } if (Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F) == 0) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 8d382e5db..c5fe03475 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -97,7 +97,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 20 */ 0, /* 21 */ 0, /* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80), - /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80), + /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80), /* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80), /* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01), /* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40), diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c index 332e4e543..404530342 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c @@ -5,6 +5,7 @@ */ #include "z_bg_dy_yoseizo.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) @@ -13,19 +14,17 @@ void BgDyYoseizo_Init(Actor* thisx, PlayState* play); void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play); void BgDyYoseizo_Update(Actor* thisx, PlayState* play); +void BgDyYoseizo_Draw(Actor* thisx, PlayState* play); -void func_80A0AE1C(BgDyYoseizo* this, PlayState* play); -void func_80A0B078(BgDyYoseizo* this, PlayState* play); void func_80A0B184(BgDyYoseizo* this, PlayState* play); -void func_80A0B290(BgDyYoseizo* this, PlayState* play); -void func_80A0B35C(BgDyYoseizo* this, PlayState* play); -void func_80A0B500(BgDyYoseizo* this, PlayState* play); -void func_80A0B5F0(BgDyYoseizo* this, PlayState* play); -void func_80A0B75C(BgDyYoseizo* this, PlayState* play); -void func_80A0B8CC(BgDyYoseizo* this, PlayState* play); void func_80A0BB08(BgDyYoseizo* this, PlayState* play); -#if 0 +/* Effects functions */ +void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel, + Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type); +void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play); +void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play); + ActorInit Bg_Dy_Yoseizo_InitVars = { ACTOR_BG_DY_YOSEIZO, ACTORCAT_PROP, @@ -38,56 +37,730 @@ ActorInit Bg_Dy_Yoseizo_InitVars = { (ActorFunc)NULL, }; -#endif +typedef enum GreatFairyAnimation { + /* 0 */ GREATFAIRY_ANIM_START_GIVING_UPGRADE, + /* 1 */ GREATFAIRY_ANIM_GIVING_UPGRADE, + /* 2 */ GREATFAIRY_ANIM_SPIN_LAY_DOWN, + /* 3 */ GREATFAIRY_ANIM_LAY_DOWN_TRANSITION, + /* 4 */ GREATFAIRY_ANIM_LAYING_DOWN, + /* 5 */ GREATFAIRY_ANIM_SHOWING_ITEM, + /* 6 */ GREATFAIRY_ANIM_ARMS_FOLDED, + /* 7 */ GREATFAIRY_ANIM_CLAPPING, + /* 8 */ GREATFAIRY_ANIM_TEACH_SPIN_ATTACK, + /* 9 */ GREATFAIRY_ANIM_MAX +} GreatFairyAnimation; -extern UNK_TYPE D_06008090; -extern UNK_TYPE D_0600D228; -extern UNK_TYPE D_0601C6F4; +static AnimationHeader* sAnimations[GREATFAIRY_ANIM_MAX] = { + &gGreatFairyStartGivingUpgradeAnim, // GREATFAIRY_ANIM_START_GIVING_UPGRADE + &gGreatFairyGivingUpgradeAnim, // GREATFAIRY_ANIM_GIVING_UPGRADE + &gGreatFairySpinLayDownAnim, // GREATFAIRY_ANIM_SPIN_LAY_DOWN + &gGreatFairyLayDownTransitionAnim, // GREATFAIRY_ANIM_LAY_DOWN_TRANSITION + &gGreatFairyLayingDownAnim, // GREATFAIRY_ANIM_LAYING_DOWN + &gGreatFairyShowingItemAnim, // GREATFAIRY_ANIM_SHOWING_ITEM + &gGreatFairyArmsFoldedAnim, // GREATFAIRY_ANIM_ARMS_FOLDED + &gGreatFairyClappingAnim, // GREATFAIRY_ANIM_CLAPPING + &gGreatFairyTeachSpinAttackAnim, // GREATFAIRY_ANIM_TEACH_SPIN_ATTACK +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Init.s") +void BgDyYoseizo_Init(Actor* thisx, PlayState* play) { + BgDyYoseizo* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Destroy.s") + this->unk2EC = this->actor.world.pos.y + 40.0f; + this->actor.focus.pos = this->actor.world.pos; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A96C.s") + SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairyShowingItemAnim, this->jointTable, + this->morphTable, GREAT_FAIRY_LIMB_MAX); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A9E4.s") + this->actionFunc = func_80A0BB08; + Actor_SetScale(&this->actor, 0.0f); + this->eyeIndex = 0; + this->mouthIndex = 0; + this->blinkTimer = 0; + this->unk2F8 = 0; + GREAT_FAIRY_ROTZ(&this->actor) = 1; + this->unk302 = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AA40.s") +void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AD50.s") +// Has no visible effect since no segment is set for manually-controllable eye textures +void BgDyYoseizo_UpdateEyes(BgDyYoseizo* this) { + if (this->blinkTimer != 0) { + this->blinkTimer--; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AE1C.s") + if (this->blinkTimer == 0) { + this->eyeIndex++; + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; + this->blinkTimer = (s32)Rand_ZeroFloat(60.0f) + 20; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AFDC.s") +void BgDyYoseizo_Bob(BgDyYoseizo* this, PlayState* play) { + this->actor.shape.yOffset = Math_SinS(play->gameplayFrames * 1000) * 15.0f; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B078.s") +typedef enum GreatFairyEffectTrajectory { + /* 0 */ GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, // Dispersing particles, in the Great Fairy's signature colour. + /* 2 */ GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT = 2, // As above, but initially move 10 times faster. + /* 5 */ GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER = 5 // Similar to OoT's healing effect, fixed colour. +} GreatFairyEffectTrajectory; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B184.s") +/** + * Spawn particle effects; see `GreatFairyEffectTrajectory` enum for details + * + * @param trajectoryType use the `GreatFairyEffectTrajectory` enum. + * @param count number to spawn. + */ +void BgDyYoseizo_SpawnEffects(BgDyYoseizo* this, s16 trajectoryType, s32 count) { + static Color_RGB8 sEffectPrimColors[] = { + { 255, 235, 220 }, // Magic + { 255, 220, 220 }, // Power + { 220, 255, 220 }, // Wisdom + { 220, 220, 255 }, // Courage + { 255, 255, 200 }, // Kindness + { 255, 255, 170 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER + }; + static Color_RGB8 sEffectEnvColors[] = { + { 255, 150, 0 }, // Magic + { 255, 0, 0 }, // Power + { 0, 255, 0 }, // Wisdom + { 0, 0, 255 }, // Courage + { 255, 255, 0 }, // Kindness + { 255, 100, 255 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER + }; + Vec3f velocity; + Vec3f accel; + Vec3f pos; + Color_RGB8 primColor; + Color_RGB8 envColor; + f32 spawnHeightVariation; + f32 scale; + s32 effectType; + s32 life; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B290.s") + if (this->actor.scale.y < 0.01f) { + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B35C.s") + spawnHeightVariation = this->actor.scale.y * 3500.0f; + accel.x = Rand_ZeroOne() - 0.5f; + accel.y = Rand_ZeroOne() - 0.5f; + accel.z = Rand_ZeroOne() - 0.5f; + velocity.x = accel.x * 10.0f; + velocity.y = accel.y * 10.0f; + velocity.z = accel.z * 10.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B500.s") + for (i = 0; i < count; i++) { + switch (trajectoryType) { + case GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT: + scale = 1.0f; + life = 90; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B5F0.s") + velocity.x = accel.x * 100.0f; + velocity.y = accel.y * 100.0f; + velocity.z = accel.z * 100.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B75C.s") + effectType = GREAT_FAIRY_GET_TYPE(&this->actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B834.s") + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f); + pos.z = this->actor.world.pos.z + 30.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B8CC.s") + case GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT: + scale = 1.0f; + life = 90; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BB08.s") + effectType = GREAT_FAIRY_GET_TYPE(&this->actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Update.s") + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f); + pos.z = this->actor.world.pos.z + 30.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BCD8.s") + default: // all become convergent type + scale = 0.2f; + life = 50; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BD40.s") + effectType = GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BE60.s") + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + 50.0f + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.1f); + pos.z = this->actor.world.pos.z + 30.0f; + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BF70.s") + primColor.r = sEffectPrimColors[effectType].r; + primColor.g = sEffectPrimColors[effectType].g; + primColor.b = sEffectPrimColors[effectType].b; + envColor.r = sEffectEnvColors[effectType].r; + envColor.g = sEffectEnvColors[effectType].g; + envColor.b = sEffectEnvColors[effectType].b; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0C270.s") + BgDyYoseizo_SpawnEffect(this, &pos, &velocity, &accel, &primColor, &envColor, scale, life, effectType); + } +} + +void func_80A0AD50(BgDyYoseizo* this) { + f32 scale = this->actor.scale.x; + f32 heightTarget = this->actor.home.pos.y + 40.0f; + + Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f); + Math_ApproachF(&scale, 0.035f, this->unk2F4, 0.005f); + Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f); + Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f); + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2); + Actor_SetScale(&this->actor, scale); +} + +void func_80A0AE1C(BgDyYoseizo* this, PlayState* play) { + f32 scale = this->actor.scale.x; + f32 heightTarget = this->actor.home.pos.y; + + if (scale < 0.003f) { + this->actionFunc = func_80A0BB08; + Actor_SetScale(&this->actor, 0.0f); + this->unk2F0 = 0.0f; + this->unk2F4 = 0.0f; + this->unk2F8 = 0; + + if (GREAT_FAIRY_GET_TYPE(&this->actor) <= GREAT_FAIRY_TYPE_COURAGE) { + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, + this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0, + GREAT_FAIRY_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE); + } else { + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, + this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0, + DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW); + } + Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); + } else { + Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f); + Math_ApproachZeroF(&scale, this->unk2F4, 0.005f); + Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f); + Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f); + + this->actor.shape.rot.y += this->unk2F8; + if (this->unk2F8 < 0x1770) { + this->unk2F8 += 0x12C; + } + + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2); + Actor_SetScale(&this->actor, scale); + } +} + +void func_80A0AFDC(BgDyYoseizo* this) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 0.0f, 46.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f); + this->actionFunc = func_80A0AE1C; + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0); + Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_VANISH); + this->unk2F8 = 0; + this->actor.velocity.y = 0.0f; + this->unk2F0 = 0.0f; + this->unk2F4 = 0.0f; + this->actor.shape.yOffset = 0.0f; +} + +void func_80A0B078(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B184; + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } +} + +void func_80A0B184(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 8)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B078; + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } +} + +void func_80A0B290(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, -10.0f); + this->actionFunc = func_80A0B184; + this->mouthIndex = 0; + } +} + +void func_80A0B35C(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (this->timer == 60) { + if (!Flags_GetSwitch(play, GREAT_FAIRY_GET_SWITCHFLAG(&this->actor))) { + switch (GREAT_FAIRY_GET_TYPE(&this->actor)) { + case GREAT_FAIRY_TYPE_MAGIC: + if (gSaveContext.save.saveInfo.playerData.isMagicAcquired != true) { + gSaveContext.save.saveInfo.playerData.isMagicAcquired = true; + gSaveContext.magicFillTarget = MAGIC_NORMAL_METER; + } + break; + + case GREAT_FAIRY_TYPE_WISDOM: + if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired != true) { + gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = true; + gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; + } + break; + + case GREAT_FAIRY_TYPE_COURAGE: + if (gSaveContext.save.saveInfo.playerData.doubleDefense != true) { + gSaveContext.save.saveInfo.playerData.doubleDefense = true; + } + break; + + default: + break; + } + } + Interface_SetHudVisibility(9); + } + + if ((this->timer < 50) && (GREAT_FAIRY_GET_TYPE(&this->actor) == GREAT_FAIRY_TYPE_COURAGE)) { + if (gSaveContext.save.saveInfo.inventory.defenseHearts < 20) { + gSaveContext.save.saveInfo.inventory.defenseHearts++; + } + } + + if (this->timer == 50) { + gSaveContext.healthAccumulator = 0x140; + Magic_Add(play, MAGIC_FILL_TO_CAPACITY); + } + + if (this->timer == 0) { + this->beam->trigger = true; + this->actionFunc = func_80A0B290; + } +} + +void func_80A0B500(BgDyYoseizo* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + BgDyYoseizo_Bob(this, play); + + if (SkelAnime_Update(&this->skelAnime)) { + Vec3f pos; + + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B35C; + pos.x = player->actor.world.pos.x; + pos.y = player->actor.world.pos.y + 200.0f; + pos.z = player->actor.world.pos.z; + this->beam = (EnDyExtra*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_DY_EXTRA, pos.x, + pos.y, pos.z, 0, 0, 0, GREAT_FAIRY_GET_TYPE(&this->actor)); + this->timer = 120; + } +} + +void func_80A0B5F0(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + + if (SkelAnime_Update(&this->skelAnime)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 5)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE]), ANIMMODE_ONCE, + -5.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0); + this->mouthIndex = 1; + this->eyeIndex = 0; + this->actionFunc = func_80A0B500; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } + + BgDyYoseizo_UpdateEyes(this); +} + +void func_80A0B75C(BgDyYoseizo* this, PlayState* play) { + func_80A0AD50(this); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 4)) { + this->actor.shape.rot.y = 0; + this->actionFunc = func_80A0B5F0; + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION], 1.0f, 2.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION]), ANIMMODE_ONCE, 0.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0); + this->unk2F8 = 0; + } +} + +void func_80A0B834(BgDyYoseizo* this) { + this->actor.draw = BgDyYoseizo_Draw; + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0); + Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_APPEAR); + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT, 30); +} + +void BgDyYoseizo_TrainPlayer(BgDyYoseizo* this, PlayState* play) { + s16 csId; + s32 pad; + Player* player = GET_PLAYER(play); + + SkelAnime_Update(&this->skelAnime); + + csId = 0; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) { + csId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id; + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)); + } else { + if (GREAT_FAIRY_ROTZ(&this->actor) != 0) { + this->actor.home.pos.x = player->actor.world.pos.x; + this->actor.home.pos.z = player->actor.world.pos.z; + GREAT_FAIRY_ROTZ(&this->actor) = 0; + } else { + player->actor.world.pos.x = this->actor.home.pos.x; + player->actor.world.pos.z = this->actor.home.pos.z; + } + + if (this->unk302 & 1) { + if (this->timer == 0) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + this->unk302 &= ~1; + } else { + CutsceneManager_Queue(this->actor.csId); + } + } + } else if (!(this->unk302 & 2) && (player->meleeWeaponState != 0)) { + if (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) { + if (player->unk_B08 >= 0.85f) { + this->unk302 |= 1; + this->unk302 |= 2; + if (play->msgCtx.currentTextId == 0x59A) { + Message_CloseTextbox(play); + } + this->timer = 20; + return; + } + } + + if (play->msgCtx.currentTextId != 0x59A) { + // "Hold B and then release" + Message_StartTextbox(play, 0x59A, &this->actor); + } + } + } + + if (csId != this->csId) { + switch (csId) { + case 9: + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]); + break; + + case 10: + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_CLAPPING]); + break; + + case 11: + Animation_PlayOnce(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_TEACH_SPIN_ATTACK]); + break; + + default: + break; + } + + this->csId = csId; + } +} + +// Choose behaviour? +void func_80A0BB08(BgDyYoseizo* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 2)) { + func_80A0B834(this); + this->actionFunc = func_80A0B75C; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + this->actor.draw = BgDyYoseizo_Draw; + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]); + this->actionFunc = func_80A0B184; + this->mouthIndex = 0; + this->actor.world.pos.y = this->actor.home.pos.y + 40.0f; + Actor_SetScale(&this->actor, 0.035f); + this->unk2F8 = 0; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 9)) { + Actor_SetScale(&this->actor, 0.01f); + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]); + this->csId = 9; + this->actionFunc = BgDyYoseizo_TrainPlayer; + this->actor.draw = BgDyYoseizo_Draw; + } +} + +void BgDyYoseizo_Update(Actor* thisx, PlayState* play) { + BgDyYoseizo* this = THIS; + + this->actionFunc(this, play); + Actor_MoveWithGravity(&this->actor); + + DECR(this->timer); + + BgDyYoseizo_UpdateEffects(this, play); +} + +s32 BgDyYoseizo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + BgDyYoseizo* this = THIS; + + if (limbIndex == GREAT_FAIRY_LIMB_TORSO) { + rot->x += this->torsoRot.y; + } + + if (limbIndex == GREAT_FAIRY_LIMB_HEAD) { + rot->x += this->headRot.y; + rot->z += this->headRot.z; + } + + return false; +} + +/* Colour and shape of eyebrows, hair colour. */ +typedef enum GreatFairyAppearance { + /* 0 */ GREAT_FAIRY_APPEARANCE_MAGIC, // Orange + /* 1 */ GREAT_FAIRY_APPEARANCE_WISDOM, // Green + /* 2 */ GREAT_FAIRY_APPEARANCE_POWER, // Pink + /* 3 */ GREAT_FAIRY_APPEARANCE_COURAGE, // Purple + /* 4 */ GREAT_FAIRY_APPEARANCE_KINDNESS // Yellow +} GreatFairyAppearance; + +void BgDyYoseizo_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sMouthTextures[] = { + gGreatFairyMouthClosedTex, + gGreatFairyMouthOpenTex, + }; + BgDyYoseizo* this = THIS; + GreatFairyAppearance appearance = GREAT_FAIRY_APPEARANCE_MAGIC; + + // The differing eyes and hair colours + switch (GREAT_FAIRY_GET_TYPE(&this->actor)) { + case GREAT_FAIRY_TYPE_POWER: + appearance = GREAT_FAIRY_APPEARANCE_POWER; + break; + + case GREAT_FAIRY_TYPE_WISDOM: + appearance = GREAT_FAIRY_APPEARANCE_WISDOM; + break; + + case GREAT_FAIRY_TYPE_COURAGE: + case GREAT_FAIRY_TYPE_KINDNESS: + appearance = GREAT_FAIRY_GET_TYPE(&this->actor); + break; + + default: // GREAT_FAIRY_APPEARANCE_MAGIC + break; + } + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + // Set eyes and hair colour, not actually animated. + AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(gGreatFairyAppearenceTexAnim), appearance); + + // Draw mouth + { + Gfx* gfx = POLY_OPA_DISP; + s16 index = this->mouthIndex; + TexturePtr mouthTex = Lib_SegmentedToVirtual(sMouthTextures[index]); + + gSPSegment(&gfx[0], 0x09, mouthTex); + POLY_OPA_DISP = &gfx[1]; + } + + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + BgDyYoseizo_OverrideLimbDraw, NULL, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); + + BgDyYoseizo_DrawEffects(this, play); +} + +/* Effects functions */ + +void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel, + Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type) { + BgDyYoseizoEffect* effect = this->effects; + s16 i; + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (!effect->alive) { + effect->alive = true; + effect->pos = *initPos; + effect->velocity = *initVelocity; + effect->accel = *accel; + effect->primColor = *primColor; + effect->alpha = 0; + effect->envColor = *envColor; + effect->scale = scale; + effect->timer = life; + effect->type = type; + effect->pitch = 0; + effect->yaw = TRUNCF_BINANG(Rand_CenteredFloat(30000.0f)); + effect->roll = 0; + return; + } + } +} + +void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizoEffect* effect = this->effects; + Player* player = GET_PLAYER(play); + Vec3f sp94; + Vec3f sp88; + s32 pad[2]; + f32 targetPitch; + f32 targetYaw; + f32 floatAngle; + s16 i = 0; + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (effect->alive) { + effect->roll += 3000; + + if (effect->type < GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER) { + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; + } else { + Actor_PlaySfx(&this->actor, NA_SE_EV_HEALING - SFX_FLAG); + + sp94 = player->actor.world.pos; + sp94.y = player->actor.world.pos.y - 150.0f; + sp94.z = player->actor.world.pos.z - 50.0f; + + targetPitch = Math_Vec3f_Pitch(&effect->pos, &sp94); + targetYaw = Math_Vec3f_Yaw(&effect->pos, &sp94); + + floatAngle = effect->pitch; + Math_ApproachF(&floatAngle, targetPitch, 0.9f, 5000.0f); + effect->pitch = floatAngle; + + floatAngle = effect->yaw; + Math_ApproachF(&floatAngle, targetYaw, 0.9f, 5000.0f); + effect->yaw = floatAngle; + + Matrix_Push(); + Matrix_RotateYS(effect->yaw, MTXMODE_NEW); + Matrix_RotateXS(effect->pitch, MTXMODE_APPLY); + + sp94.x = sp94.y = sp94.z = 3.0f; + + Matrix_MultVec3f(&sp94, &sp88); + Matrix_Pop(); + effect->pos.x += sp88.x; + effect->pos.y += sp88.y; + effect->pos.z += sp88.z; + } + } + + // fade up, fade down, vanish and reset + if (effect->timer != 0) { + effect->timer--; + effect->alpha += 30; + + if (effect->alpha > 255) { + effect->alpha = 255; + } + } else { + effect->alpha -= 30; + + if (effect->alpha <= 0) { + effect->alpha = 0; + effect->alive = false; + } + } + } +} + +void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play) { + static f32 sStretchFactors[] = { + 1.0f, 1.1f, 1.15f, 1.1f, 1.0f, 0.9f, 0.85f, 0.9f, + }; + GraphicsContext* gfxCtx = play->state.gfxCtx; + u8 setup = 0; + BgDyYoseizoEffect* effect = this->effects; + f32 stretchFactor = sStretchFactors[play->gameplayFrames % ARRAY_COUNT(sStretchFactors)]; + s16 i; + + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (effect->alive == true) { + if (setup == 0) { + gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleSetupDL); + gDPPipeSync(POLY_XLU_DISP++); + setup++; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, effect->primColor.r, effect->primColor.g, effect->primColor.b, + effect->alpha); + gDPSetEnvColor(POLY_XLU_DISP++, effect->envColor.r, effect->envColor.g, effect->envColor.b, 0); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + + Matrix_Scale(effect->scale, effect->scale * stretchFactor, 1.0f, MTXMODE_APPLY); + Matrix_RotateZS(effect->roll, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleDL); + } + } + + CLOSE_DISPS(gfxCtx); +} diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h index bd06cdb38..4aaf67e77 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h @@ -2,15 +2,65 @@ #define Z_BG_DY_YOSEIZO_H #include "global.h" +#include "overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h" +#include "objects/object_dy_obj/object_dy_obj.h" struct BgDyYoseizo; typedef void (*BgDyYoseizoActionFunc)(struct BgDyYoseizo*, PlayState*); +#define GREAT_FAIRY_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define GREAT_FAIRY_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define GREAT_FAIRY_ROTZ(thisx) ((thisx)->home.rot.z) + +typedef enum GreatFairyType { + /* 0 */ GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ GREAT_FAIRY_TYPE_POWER, + /* 2 */ GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ GREAT_FAIRY_TYPE_KINDNESS +} GreatFairyType; + +#define BG_DY_YOSEIZO_EFFECT_COUNT 200 + +typedef struct BgDyYoseizoEffect { + /* 0x00 */ u8 alive; // drawn if 1, respawn if 0 + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Color_RGB8 primColor; + /* 0x2B */ Color_RGB8 envColor; + /* 0x2E */ s16 alpha; + /* 0x30 */ f32 scale; + /* 0x34 */ s16 timer; // lifetime + /* 0x36 */ s16 type; // 0 is general radiance, else is directed towards Player + /* 0x38 */ s16 pitch; + /* 0x3A */ s16 yaw; + /* 0x3C */ s16 roll; // all three are f32 in OoT +} BgDyYoseizoEffect; // size = 0x40 + typedef struct BgDyYoseizo { /* 0x0000 */ Actor actor; /* 0x0144 */ BgDyYoseizoActionFunc actionFunc; - /* 0x0148 */ char unk_148[0x33BC]; + /* 0x0148 */ SkelAnime skelAnime; + /* 0x018C */ Vec3s jointTable[GREAT_FAIRY_LIMB_MAX]; + /* 0x0234 */ Vec3s morphTable[GREAT_FAIRY_LIMB_MAX]; + /* 0x02DC */ Vec3s headRot; + /* 0x02DC */ Vec3s torsoRot; + /* 0x02E8 */ EnDyExtra* beam; + /* 0x02EC */ f32 unk2EC; // unused + /* 0x02F0 */ f32 unk2F0; + /* 0x02F4 */ f32 unk2F4; + /* 0x02F8 */ union { + s16 unk2F8; + s16 csId; // used on BgDyYoseizo_TrainPlayer + }; + /* 0x02FA */ s16 eyeIndex; + /* 0x02FC */ s16 mouthIndex; + /* 0x02FE */ s16 blinkTimer; + /* 0x0300 */ s16 timer; + /* 0x0302 */ u16 unk302; + /* 0x0304 */ BgDyYoseizoEffect effects[BG_DY_YOSEIZO_EFFECT_COUNT]; } BgDyYoseizo; // size = 0x3504 #endif // Z_BG_DY_YOSEIZO_H diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index ca472ccc3..ff88a61db 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -16,14 +16,13 @@ void DemoEffect_Init(Actor* thisx, PlayState* play); void DemoEffect_Destroy(Actor* thisx, PlayState* play); void DemoEffect_Update(Actor* thisx, PlayState* play); -void func_808CD940(DemoEffect* this, PlayState* play); -void func_808CD998(DemoEffect* this, PlayState* play); -void func_808CDBDC(DemoEffect* this, PlayState* play); -void func_808CDCEC(DemoEffect* this, PlayState* play); -void func_808CDD70(DemoEffect* this, PlayState* play); -void func_808CDDE0(DemoEffect* this, PlayState* play); -void func_808CDFF8(Actor* thisx, PlayState* play); -void func_808CE078(Actor* thisx, PlayState* play2); +void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play); +void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play); +void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play); +void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play); +void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play); +void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play); +void DemoEffect_DrawLight(Actor* thisx, PlayState* play2); ActorInit Demo_Effect_InitVars = { ACTOR_DEMO_EFFECT, @@ -47,8 +46,12 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); s32 objectIndex; s32 pad2; - Color_RGB8 colors[] = { - { 200, 200, 0 }, { 255, 40, 100 }, { 50, 255, 0 }, { 0, 0, 255 }, { 255, 255, 80 }, + Color_RGB8 lightColors[] = { + { 200, 200, 0 }, // Yellow + { 255, 40, 100 }, // Pink + { 50, 255, 0 }, // Light green + { 0, 0, 255 }, // Blue + { 255, 255, 80 }, // Light Yellow }; if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) { @@ -66,14 +69,14 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.2f); switch (type) { - case DEMO_EFFECT_TYPE_0: - case DEMO_EFFECT_TYPE_1: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: this->actor.flags |= ACTOR_FLAG_2000000; - - case DEMO_EFFECT_TYPE_2: - case DEMO_EFFECT_TYPE_3: - this->initDrawFunc = func_808CDFF8; - this->initActionFunc = func_808CD998; + // FALLTHROUGH + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: + this->initDrawFunc = DemoEffect_DrawTimewarp; + this->initActionFunc = DemoEffect_SetupTimewarp; this->envXluColor[0] = 0; this->envXluColor[1] = 100; this->envXluColor[2] = 255; @@ -81,17 +84,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { this->timer = 0; break; - case DEMO_EFFECT_TYPE_4: - case DEMO_EFFECT_TYPE_5: - case DEMO_EFFECT_TYPE_6: - case DEMO_EFFECT_TYPE_7: - case DEMO_EFFECT_TYPE_8: - this->envXluColor[0] = colors[type - 4].r; - this->envXluColor[1] = colors[type - 4].g; - this->envXluColor[2] = colors[type - 4].b; + case DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW: + case DEMO_EFFECT_TYPE_LIGHT_PINK: + case DEMO_EFFECT_TYPE_LIGHT_GREEN: + case DEMO_EFFECT_TYPE_LIGHT_BLUE: + case DEMO_EFFECT_TYPE_LIGHT_YELLOW: + this->envXluColor[0] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].r; + this->envXluColor[1] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].g; + this->envXluColor[2] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].b; Actor_SetScale(&this->actor, 0.0f); - this->initDrawFunc = func_808CE078; - this->initActionFunc = func_808CDDE0; + this->initDrawFunc = DemoEffect_DrawLight; + this->initActionFunc = DemoEffect_ExpandLight; this->timer = 0; break; @@ -100,17 +103,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - this->actionFunc = func_808CD940; + this->actionFunc = DemoEffect_WaitForObject; } void DemoEffect_Destroy(Actor* thisx, PlayState* play) { DemoEffect* this = THIS; switch (DEMO_EFFECT_GET_TYPE(&this->actor)) { - case DEMO_EFFECT_TYPE_0: - case DEMO_EFFECT_TYPE_1: - case DEMO_EFFECT_TYPE_2: - case DEMO_EFFECT_TYPE_3: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: SkelCurve_Destroy(play, &this->skelCurve); break; @@ -119,7 +122,7 @@ void DemoEffect_Destroy(Actor* thisx, PlayState* play) { } } -void func_808CD940(DemoEffect* this, PlayState* play) { +void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->initObjectIndex)) { this->actor.objBankIndex = this->initObjectIndex; this->actor.draw = this->initDrawFunc; @@ -127,41 +130,41 @@ void func_808CD940(DemoEffect* this, PlayState* play) { } } -void func_808CD998(DemoEffect* this, PlayState* play) { +void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); - if (SkelCurve_Init(play, &this->skelCurve, &object_efc_tw_Skel_0012E8, &object_efc_tw_CurveAnim_000050)) {} + if (SkelCurve_Init(play, &this->skelCurve, &gTimewarpSkel, &gTimewarpAnim)) {} - SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 59.0f, 1.0f, 1.7f); + SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 59.0f, 1.0f, 1.7f); SkelCurve_Update(play, &this->skelCurve); - this->actionFunc = func_808CDCEC; + this->actionFunc = DemoEffect_StartTimewarp; switch (type) { - case DEMO_EFFECT_TYPE_0: - Actor_SetScale(&this->actor, 0.16800001f); + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + Actor_SetScale(&this->actor, 168.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_1: - Actor_SetScale(&this->actor, 0.08400001f); + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: + Actor_SetScale(&this->actor, 84.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_2: - Actor_SetScale(&this->actor, 0.16800001f); + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + Actor_SetScale(&this->actor, 168.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_3: - Actor_SetScale(&this->actor, 0.28f); + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: + Actor_SetScale(&this->actor, 280.0f * 0.001f); break; default: - Actor_SetScale(&this->actor, 0.014f); + Actor_SetScale(&this->actor, 14.0f * 0.001f); break; } } -void func_808CDAD0(f32 alphaScale) { +void DemoEffect_SetPerVertexAlpha(f32 alphaScale) { static u8 sAlphaTypes[] = { 1, 1, 2, 0, 1, 1, 2, 0, 1, 2, 0, 2, 1, 0, 1, 0, 2, 0, 2, 2, 0 }; - Vtx* vtx = Lib_SegmentedToVirtual(object_efc_tw_Vtx_000060); + Vtx* vtx = Lib_SegmentedToVirtual(gTimewarpVtx); s32 i; u8 alphas[3]; @@ -176,7 +179,10 @@ void func_808CDAD0(f32 alphaScale) { } } -void func_808CDBDC(DemoEffect* this, PlayState* play) { +/** + * Shrink and fade linearly for 100 frames then remove. + */ +void DemoEffect_FinishTimewarp(DemoEffect* this, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); f32 scale; f32 alphaScale; @@ -187,19 +193,19 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { scale = alphaScale * 0.14f; switch (type) { - case DEMO_EFFECT_TYPE_0: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: scale *= 1.2f; break; - case DEMO_EFFECT_TYPE_1: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: scale *= 0.6f; break; - case DEMO_EFFECT_TYPE_2: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: scale *= 1.2f; break; - case DEMO_EFFECT_TYPE_3: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: scale *= 2.0f; break; @@ -209,25 +215,31 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { this->actor.scale.x = scale; this->actor.scale.z = scale; - func_808CDAD0(alphaScale); + DemoEffect_SetPerVertexAlpha(alphaScale); Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); } else { - func_808CDAD0(1.0f); + DemoEffect_SetPerVertexAlpha(1.0f); Actor_Kill(&this->actor); } } -void func_808CDCEC(DemoEffect* this, PlayState* play) { +/** + * Runs until animation plays to frame 59 and pauses it on frame 59. + */ +void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play) { Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); if (SkelCurve_Update(play, &this->skelCurve)) { - SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 60.0f, 59.0f, 0.0f); - this->actionFunc = func_808CDBDC; + SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 60.0f, 59.0f, 0.0f); + this->actionFunc = DemoEffect_FinishTimewarp; this->timer = 0; } } -void func_808CDD70(DemoEffect* this, PlayState* play) { +/** + * Take scale to 0 linearly, when scale is small enough, remove. + */ +void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play) { Actor_SetScale(&this->actor, this->actor.scale.x - 0.02f); this->timer++; @@ -236,12 +248,16 @@ void func_808CDD70(DemoEffect* this, PlayState* play) { } } -void func_808CDDE0(DemoEffect* this, PlayState* play) { +/** + * Changes scale for 3 frames, scale is successively 0.0f, 0.2f, 0.3f, 0.35f (would converge to 0.4 exponentially if run + * for a long time). + */ +void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play) { Actor_SetScale(&this->actor, (this->actor.scale.x * 0.5f) + 0.2f); this->timer++; if (this->timer >= 3) { - this->actionFunc = func_808CDD70; + this->actionFunc = DemoEffect_ShrinkLight; } } @@ -251,7 +267,7 @@ void DemoEffect_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); } -s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) { +s32 DemoEffect_OverrideLimbDrawTimewarp(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) { s32 pad; DemoEffect* this = THIS; u32 frames = play->gameplayFrames; @@ -278,7 +294,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t return true; } -void func_808CDFF8(Actor* thisx, PlayState* play) { +void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; DemoEffect* this = THIS; @@ -287,12 +303,12 @@ void func_808CDFF8(Actor* thisx, PlayState* play) { POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); - SkelCurve_Draw(&this->actor, play, &this->skelCurve, func_808CDE78, NULL, 1, &this->actor); + SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoEffect_OverrideLimbDrawTimewarp, NULL, 1, &this->actor); CLOSE_DISPS(gfxCtx); } -void func_808CE078(Actor* thisx, PlayState* play2) { +void DemoEffect_DrawLight(Actor* thisx, PlayState* play2) { PlayState* play = play2; DemoEffect* this = THIS; s16 zRot = (this->timer * 0x400) & 0xFFFF; diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h index 9901a3189..a69316308 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h @@ -11,15 +11,16 @@ typedef void (*DemoEffectActionFunc)(struct DemoEffect*, PlayState*); #define DEMO_EFFECT_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { - /* 0 */ DEMO_EFFECT_TYPE_0, - /* 1 */ DEMO_EFFECT_TYPE_1, - /* 2 */ DEMO_EFFECT_TYPE_2, - /* 3 */ DEMO_EFFECT_TYPE_3, - /* 4 */ DEMO_EFFECT_TYPE_4, - /* 5 */ DEMO_EFFECT_TYPE_5, - /* 6 */ DEMO_EFFECT_TYPE_6, - /* 7 */ DEMO_EFFECT_TYPE_7, - /* 8 */ DEMO_EFFECT_TYPE_8 + /* 0 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE, + /* 1 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL, + /* 2 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE, + /* 3 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE, + /* 4 */ DEMO_EFFECT_TYPE_LIGHT_BASE, + /* 4 */ DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW = DEMO_EFFECT_TYPE_LIGHT_BASE, + /* 5 */ DEMO_EFFECT_TYPE_LIGHT_PINK, + /* 6 */ DEMO_EFFECT_TYPE_LIGHT_GREEN, + /* 7 */ DEMO_EFFECT_TYPE_LIGHT_BLUE, + /* 8 */ DEMO_EFFECT_TYPE_LIGHT_YELLOW // Unused } DemoEffectType; typedef struct DemoEffect { diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c index 6882c189a..63228436f 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -1,7 +1,7 @@ /* * File: z_demo_getitem.c * Overlay: ovl_Demo_Getitem - * Description: Cutscene objectIndex for Great Fairy's Mask and Great Fairy's Sword + * Description: Cutscene objects for Great Fairy's Mask and Great Fairy's Sword */ #include "z_demo_getitem.h" @@ -14,8 +14,8 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play); void DemoGetitem_Destroy(Actor* thisx, PlayState* play); void DemoGetitem_Update(Actor* thisx, PlayState* play); -void func_80A4FB10(DemoGetitem* this, PlayState* play); -void func_80A4FB68(DemoGetitem* this, PlayState* play2); +void DemoGetitem_Wait(DemoGetitem* this, PlayState* play); +void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play); void DemoGetitem_Draw(Actor* thisx, PlayState* play); ActorInit Demo_Getitem_InitVars = { @@ -36,20 +36,27 @@ static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY }; static u16 sCueTypes[] = { CS_CMD_ACTOR_CUE_110, CS_CMD_ACTOR_CUE_566 }; +typedef enum GreatFairyRewardItem { + /* 0 */ DEMOGETITEM_ITEM_MASK_GREAT_FAIRY, + /* 1 */ DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY +} GreatFairyRewardItem; + void DemoGetitem_Init(Actor* thisx, PlayState* play) { s32 pad; s32 objectIndex; s32 itemIndex; DemoGetitem* this = THIS; - itemIndex = 0; - if (DEMOGETITEM_GET_F(thisx) == 1) { - itemIndex = 1; + itemIndex = DEMOGETITEM_ITEM_MASK_GREAT_FAIRY; + if (DEMOGETITEM_GET_F(&this->actor) == 1) { + itemIndex = DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY; } + Actor_SetScale(&this->actor, 0.25f); - this->actionFunc = func_80A4FB10; - this->item = sGetItemDraws[itemIndex]; + this->actionFunc = DemoGetitem_Wait; + this->getItemDrawId = sGetItemDraws[itemIndex]; this->cueType = sCueTypes[itemIndex]; + objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]); if (objectIndex < 0) { Actor_Kill(&this->actor); @@ -62,22 +69,23 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { void DemoGetitem_Destroy(Actor* thisx, PlayState* play) { } -void func_80A4FB10(DemoGetitem* this, PlayState* play) { +void DemoGetitem_Wait(DemoGetitem* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { this->actor.draw = NULL; this->actor.objBankIndex = this->objectIndex; - this->actionFunc = func_80A4FB68; + this->actionFunc = DemoGetitem_PerformCutsceneActions; } } -void func_80A4FB68(DemoGetitem* this, PlayState* play2) { - PlayState* play = play2; - u16 sp22 = (play->gameplayFrames * 1000) & 0xFFFF; +void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play) { + s32 pad; + u16 bobPhase = (play->gameplayFrames * 1000) % 0x10000; if (Cutscene_IsCueInChannel(play, this->cueType)) { if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id != 4) { this->actor.shape.yOffset = 0.0f; } + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { case 2: this->actor.draw = DemoGetitem_Draw; @@ -92,7 +100,7 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) { case 4: this->actor.draw = DemoGetitem_Draw; Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); - this->actor.shape.yOffset = Math_SinS(sp22) * 15.0f; + this->actor.shape.yOffset = Math_SinS(bobPhase) * 15.0f; break; default: @@ -115,5 +123,5 @@ void DemoGetitem_Draw(Actor* thisx, PlayState* play) { func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); - GetItem_Draw(play, this->item); + GetItem_Draw(play, this->getItemDrawId); } diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h index ca00f6048..130b2cfa6 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h @@ -11,7 +11,7 @@ typedef void (*DemoGetitemActionFunc)(struct DemoGetitem*, PlayState*); typedef struct DemoGetitem { /* 0x000 */ Actor actor; - /* 0x144 */ s16 item; + /* 0x144 */ s16 getItemDrawId; /* 0x146 */ u16 cueType; /* 0x148 */ s8 objectIndex; /* 0x14C */ DemoGetitemActionFunc actionFunc; 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 959a986a4..8157d09c6 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -539,7 +539,8 @@ void EnBox_Open(EnBox* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_ELFORG, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, this->dyna.actor.world.rot.x, this->dyna.actor.world.rot.y, this->dyna.actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), 0, STRAY_FAIRY_TYPE_CHEST)); + STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), STRAY_FAIRY_AREA_CLOCK_TOWN, + STRAY_FAIRY_TYPE_CHEST)); } else if (this->movementFlags & ENBOX_MOVE_0x40) { this->movementFlags &= ~ENBOX_MOVE_0x40; } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 14f08c531..b8dea95a0 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -16,8 +16,8 @@ void EnDyExtra_Destroy(Actor* thisx, PlayState* play); void EnDyExtra_Update(Actor* thisx, PlayState* play); void EnDyExtra_Draw(Actor* thisx, PlayState* play); -void func_80A61334(EnDyExtra* this, PlayState* play); -void func_80A613C8(EnDyExtra* this, PlayState* play); +void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play); +void EnDyExtra_Fall(EnDyExtra* this, PlayState* play); ActorInit En_Dy_Extra_InitVars = { ACTOR_EN_DY_EXTRA, @@ -41,35 +41,35 @@ void EnDyExtra_Init(Actor* thisx, PlayState* play) { this->actor.scale.x = 0.025f; this->actor.scale.y = 0.039f; this->actor.scale.z = 0.025f; - this->unk160 = this->actor.world.pos; + this->initPos = this->actor.world.pos; this->actor.gravity = -0.2f; - this->unk150 = 1.0f; - this->unk14C = 0x3C; - this->actionFunc = func_80A61334; + this->alphaScale = 1.0f; + this->timer = 60; + this->actionFunc = EnDyExtra_WaitForTrigger; } -void func_80A61334(EnDyExtra* this, PlayState* play) { +void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f); if (this->actor.world.pos.y < -85.0f) { this->actor.velocity.y = 0.0f; } - if ((this->unk14C == 0) && (this->unk14A != 0)) { - this->unk14C = 0x32; - this->actionFunc = func_80A613C8; + if ((this->timer == 0) && this->trigger) { + this->timer = 50; + this->actionFunc = EnDyExtra_Fall; } } -void func_80A613C8(EnDyExtra* this, PlayState* play) { +void EnDyExtra_Fall(EnDyExtra* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f); - if ((this->unk14C == 0) || (this->unk150 < 0.02f)) { + if ((this->timer == 0) || (this->alphaScale < 0.02f)) { Actor_Kill(&this->actor); return; } - this->unk150 -= 0.02f; + this->alphaScale -= 0.02f; if (this->actor.world.pos.y < -85.0f) { this->actor.velocity.y = 0.0f; @@ -79,40 +79,40 @@ void func_80A613C8(EnDyExtra* this, PlayState* play) { void EnDyExtra_Update(Actor* thisx, PlayState* play) { EnDyExtra* this = THIS; - DECR(this->unk14C); + DECR(this->timer); Actor_PlaySfx(&this->actor, NA_SE_PL_SPIRAL_HEAL_BEAM - SFX_FLAG); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); } -static Color_RGBA8 D_80A61740[] = { +static Color_RGBA8 sPrimColors[] = { { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, }; -static Color_RGBA8 D_80A61754[] = { +static Color_RGBA8 sEnvColors[] = { { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } }; -static u8 D_80A61768[] = { - 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 0, +static u8 sAlphaTypeIndices[] = { + 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, }; void EnDyExtra_Draw(Actor* thisx, PlayState* play) { - EnDyExtra* this = THIS; s32 pad; + EnDyExtra* this = THIS; GraphicsContext* gfxCtx = play->state.gfxCtx; - Vtx* vertices = Lib_SegmentedToVirtual(object_dy_obj_Vtx_00DD40); + Vtx* vertices = Lib_SegmentedToVirtual(gGreatFairySpiralBeamVtx); s32 i; - u8 unk[3]; + u8 alphas[3]; - unk[0] = 0.0f; - unk[1] = (s8)(this->unk150 * 240.0f); - unk[2] = (s8)(this->unk150 * 255.0f); + alphas[0] = 0.0f; + alphas[1] = (s32)(this->alphaScale * 240.0f); + alphas[2] = (s32)(this->alphaScale * 255.0f); - for (i = 0; i < 27; i++) { - if (D_80A61768[i]) { - vertices[i].v.cn[3] = unk[D_80A61768[i]]; + for (i = 0; i < ARRAY_COUNT(sAlphaTypeIndices); i++) { + if (sAlphaTypeIndices[i]) { + vertices[i].v.cn[3] = alphas[sAlphaTypeIndices[i]]; } } @@ -124,10 +124,10 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) { play->state.frames * -8, 0x10, 0x10)); gDPPipeSync(POLY_XLU_DISP++); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, D_80A61740[this->type].r, D_80A61740[this->type].g, - D_80A61740[this->type].b, 255); - gDPSetEnvColor(POLY_XLU_DISP++, D_80A61754[this->type].r, D_80A61754[this->type].g, D_80A61754[this->type].b, 128); - gSPDisplayList(POLY_XLU_DISP++, object_dy_obj_DL_00DEF0); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sPrimColors[this->type].r, sPrimColors[this->type].g, + sPrimColors[this->type].b, 255); + gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[this->type].r, sEnvColors[this->type].g, sEnvColors[this->type].b, 128); + gSPDisplayList(POLY_XLU_DISP++, gGreatFairySpiralBeamDL); CLOSE_DISPS(gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h index 0e5d8614b..f36b12051 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h @@ -11,12 +11,11 @@ typedef struct EnDyExtra { /* 0x000 */ Actor actor; /* 0x144 */ EnDyExtraActionFunc actionFunc; /* 0x148 */ s16 type; - /* 0x14A */ s16 unk14A; - /* 0x14C */ s16 unk14C; - /* 0x14E */ s16 unk14E; - /* 0x150 */ f32 unk150; - /* 0x154 */ UNK_TYPE1 unk154[0xC]; - /* 0x160 */ Vec3f unk160; + /* 0x14A */ s16 trigger; + /* 0x14C */ s16 timer; + /* 0x150 */ f32 alphaScale; + /* 0x154 */ Vec3f scale; // not used, leftover from OoT + /* 0x160 */ Vec3f initPos; // set and not used } EnDyExtra; // size = 0x16C #endif // Z_EN_DY_EXTRA_H 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 61cf693d7..f1526d66b 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -744,7 +744,7 @@ void func_8088E0F0(EnElf* this, PlayState* play) { if (this->unk_250 < 2.0f) { this->unk_250 += 0.1f; } else { - gSaveContext.healthAccumulator = 160; + gSaveContext.healthAccumulator = 0xA0; this->unk_246++; } break; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index ef53999de..9b34bf410 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -73,10 +73,11 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - childActor = Actor_SpawnAsChild( - &play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, this->actor.world.pos.y + 12.0f, - this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), 0, STRAY_FAIRY_TYPE_BUBBLE)); + childActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, + this->actor.world.pos.y + 12.0f, this->actor.world.pos.z, this->actor.world.rot.x, + this->actor.world.rot.y, this->actor.world.rot.z, + STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), + STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_BUBBLE)); if (childActor != NULL) { childActor->parent = &this->actor; } @@ -140,6 +141,7 @@ void EnElfbub_Idle(EnElfbub* this, PlayState* play) { void EnElfbub_Update(Actor* thisx, PlayState* play) { EnElfbub* this = THIS; + Collider_UpdateCylinder(&this->actor, &this->collider); this->actionFunc(this, play); Actor_SetFocus(&this->actor, this->actor.shape.yOffset); 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 42ac47f69..937c6bc8c 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -1,11 +1,38 @@ -/* - * File: z_en_elfgrp.c +/** + * @file z_en_elfgrp.c * Overlay: ovl_En_Elfgrp - * Description: Group of Stray Fairies in Fairy Fountain + * Description: Manager for group of Stray Fairies and Great Fairy in Fairy's Fountains + * + * There are many different quantities associated to the Stray Fairies in each of the 3 places (missing, in the + * Fountain, held by Player) + * - Total number of fairies (always 25 in the original game) + * - Original number in the Fountain (24 for Clock Town Fairy Fountain, 10 for the other 4) + * - Current number in the Fountain (bitpacked in Fountain scene flags, see below) + * - Total number found (stored in save context) + * - Current number held (i.e. found but not returned) + * + * The permanentSceneFlags for Fairy Fountains used in this actor are of the form + * ```c + * struct { + * u32 clockTown : 1; + * u32 fountains[4] : 5; + * } FairyFountains; + * ``` + * where arg1 is: + * - 0: Clock Town + * - 1: Woodfall, + * - 2: Snowhead, + * - 3: Great Bay, + * - 4: Ikana + * + * Clock Town is handled separately, and then the fountains are looked up with manual array indexing + * + * @note Clock Town is handled separately in a number of places */ #include "z_en_elfgrp.h" #include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #define FLAGS (ACTOR_FLAG_10) @@ -17,24 +44,28 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play); void EnElfgrp_Destroy(Actor* thisx, PlayState* play); void EnElfgrp_Update(Actor* thisx, PlayState* play); -s32 func_80A39BD0(PlayState* play, s32 arg2); -s32 func_80A39C1C(PlayState* play, s32 arg1); -void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3); -void func_80A3A0AC(EnElfgrp* this, PlayState* play); -void func_80A3A0F4(EnElfgrp* this, PlayState* play); -void func_80A3A210(EnElfgrp* this, PlayState* play); -void func_80A3A274(EnElfgrp* this, PlayState* play); +s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type); +s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type); +void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType); void func_80A3A398(EnElfgrp* this, PlayState* play); -void func_80A3A484(EnElfgrp* this, PlayState* play); -void func_80A3A4AC(EnElfgrp* this, PlayState* play); void func_80A3A520(EnElfgrp* this, PlayState* play); -void func_80A3A600(EnElfgrp* this, PlayState* play); -void func_80A3A610(EnElfgrp* this, PlayState* play); -void func_80A3A6F4(EnElfgrp* this, PlayState* play); -void func_80A3A77C(EnElfgrp* this, PlayState* play); +void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play); void func_80A3A7FC(EnElfgrp* this, PlayState* play); void func_80A3A8F8(EnElfgrp* this, PlayState* play); +// State flags +#define ELFGRP_STATE_0 (1 << 0) +#define ELFGRP_STATE_1 (1 << 1) +#define ELFGRP_STATE_2 (1 << 2) +#define ELFGRP_STATE_3 (1 << 3) +#define ELFGRP_STATE_4 (1 << 4) + +// Used for the type in EnElfgrp_SpawnStrayFairies +typedef enum ElfgrpSpawnedFairyTypes { + /* 0 */ SPAWNED_STRAY_FAIRY_TYPE_PRESENT, // STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN + /* 1 */ SPAWNED_STRAY_FAIRY_TYPE_RETURNING // STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN +} ElfgrpSpawnedFairyTypes; + ActorInit En_Elfgrp_InitVars = { ACTOR_EN_ELFGRP, ACTORCAT_PROP, @@ -47,7 +78,15 @@ ActorInit En_Elfgrp_InitVars = { (ActorFunc)NULL, }; -void func_80A396B0(EnElfgrp* this, s32 numCutscenes) { +/** + * Set the actor's cutscene id to a later one, or -1 if run out. + * + * @note This is only expected to be called in Init when this actor has the first cutscene set, but can also work for + * later cutscenes if \p numCutscenes is set correcly. + * + * @param numCutscenes Number of cutscenes in the list to skip forward to set this one. + */ +void EnElfgrp_SetCutscene(EnElfgrp* this, s32 numCutscenes) { while (numCutscenes > 0) { if (this->actor.csId == CS_ID_NONE) { break; @@ -61,113 +100,118 @@ void func_80A396B0(EnElfgrp* this, s32 numCutscenes) { void EnElfgrp_Init(Actor* thisx, PlayState* play) { s32 pad; EnElfgrp* this = THIS; - s32 sp24; + s32 numberInFountain; - this->unk_147 = ENELFGRP_GET(&this->actor); + this->type = ENELFGRP_GET_TYPE(&this->actor); this->unk_148 = 0; - this->unk_14A = 0; + this->stateFlags = 0; this->actor.focus.pos.y += 40.0f; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; - switch (this->unk_147) { - case ENELFGRP_1: - case ENELFGRP_2: - case ENELFGRP_3: - case ENELFGRP_4: - this->unk_148 = this->unk_147 - 1; - sp24 = func_80A39C1C(play, this->unk_147); - this->unk_146 = 1 << this->unk_147; + switch (this->type) { + case ENELFGRP_TYPE_POWER: + case ENELFGRP_TYPE_WISDOM: + case ENELFGRP_TYPE_COURAGE: + case ENELFGRP_TYPE_KINDNESS: + this->unk_148 = this->type - 1; + numberInFountain = EnElfgrp_GetFountainFairiesCount(play, this->type); + this->talkedOnceFlag = 1 << this->type; - if (sp24 < 25) { - func_80A39DC8(this, play, sp24, 0); + if (numberInFountain < STRAY_FAIRY_TOTAL) { + EnElfgrp_SpawnStrayFairies(this, play, numberInFountain, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); } - if (sp24 >= 25) { + if (numberInFountain >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A520; - func_80A396B0(this, 2); - return; + EnElfgrp_SetCutscene(this, 2); + break; } - if ((func_80A39BD0(play, this->unk_147) + sp24) >= 25) { + if ((EnElfgrp_GetHeldFairiesCount(play, this->type) + numberInFountain) >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A398; - switch (this->unk_147) { - case ENELFGRP_1: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { - func_80A396B0(this, 1); + switch (this->type) { + case ENELFGRP_TYPE_POWER: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) { + EnElfgrp_SetCutscene(this, 1); } else { - this->unk_14A |= 4; + this->stateFlags |= ELFGRP_STATE_2; } break; - case ENELFGRP_2: + case ENELFGRP_TYPE_WISDOM: if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired == true) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } break; - case ENELFGRP_3: + case ENELFGRP_TYPE_COURAGE: if (gSaveContext.save.saveInfo.playerData.doubleDefense) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } break; - case ENELFGRP_4: + case ENELFGRP_TYPE_KINDNESS: if (INV_CONTENT(ITEM_SWORD_GREAT_FAIRY) == ITEM_SWORD_GREAT_FAIRY) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } else { - this->unk_14A |= 0x10; + this->stateFlags |= ELFGRP_STATE_4; } break; default: break; } - } else if (func_80A39BD0(play, this->unk_147)) { + } else if (EnElfgrp_GetHeldFairiesCount(play, this->type)) { this->actionFunc = func_80A3A7FC; - this->actor.textId = (this->unk_147 * 3) + 0x581; + this->actor.textId = (this->type * 3) + 0x581; } else { this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { - this->actor.textId = (this->unk_147 * 3) + 0x580; + + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) { // talked for first time + this->actor.textId = (this->type * 3) + 0x580; } else { - this->actor.textId = (this->unk_147 * 3) + 0x57F; + this->actor.textId = (this->type * 3) + 0x57F; } } break; - default: - sp24 = func_80A39C1C(play, 0); - this->unk_146 = ENELFGRP_1; - if (sp24 >= 25) { + default: // ENELFGRP_TYPE_MAGIC + numberInFountain = EnElfgrp_GetFountainFairiesCount(play, ENELFGRP_TYPE_MAGIC); + this->talkedOnceFlag = 1 << ENELFGRP_TYPE_MAGIC; + + if (numberInFountain >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A520; - if ((this->actor.home.rot.z != 0) && Flags_GetSwitch(play, this->actor.home.rot.z)) { - this->actionFunc = func_80A3A600; + + if ((ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) && + Flags_GetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor))) { + this->actionFunc = EnElfgrp_DoNothing; } else if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) { - func_80A396B0(this, 4); + EnElfgrp_SetCutscene(this, 4); } else if (INV_CONTENT(ITEM_MASK_DEKU) != ITEM_MASK_DEKU) { - func_80A396B0(this, 5); + EnElfgrp_SetCutscene(this, 5); } else { - this->unk_14A |= 2; - func_80A396B0(this, 6); + this->stateFlags |= ELFGRP_STATE_1; + EnElfgrp_SetCutscene(this, 6); } } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) { - func_80A39DC8(this, play, 24, 0); + EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); this->actionFunc = func_80A3A398; + if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) { - func_80A396B0(this, 2); + EnElfgrp_SetCutscene(this, 2); } else { - func_80A396B0(this, 3); - this->unk_14A |= 2; + EnElfgrp_SetCutscene(this, 3); + this->stateFlags |= ELFGRP_STATE_1; } } else if (gSaveContext.save.saveInfo.playerData.isMagicAcquired == true) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } } else { - func_80A39DC8(this, play, 24, 0); + EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) { this->actor.textId = 0x580; } else { this->actor.textId = 0x578; @@ -181,116 +225,119 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { void EnElfgrp_Destroy(Actor* thisx, PlayState* play) { } -s32 func_80A39BD0(PlayState* play, s32 arg2) { - if ((arg2 < 1) || (arg2 >= 5)) { +// Number of Stray Fairies currently held by Player +s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type) { + if ((type <= ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) { return 0; } - return (((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10; + // Number in fountain originally + total number collected - number currently in fountain + return (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) + + ((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[type - 1]) - + EnElfgrp_GetFountainFairiesCount(play, type); } -s32 func_80A39C1C(PlayState* play, s32 arg1) { - // the permanentSceneFlags access here is in the form - // struct { - // u32 clockTown : 1; - // u32 fountains[4] : 5; - // } FairyFountains; - // where arg1 is: - // 0: clocktown - // 1: woodfall, - // 2: snowhead, - // 3: great bay, - // 4: stone tower - // clocktown is handled separately, and then the fountains are looked up as array indexing +// Number of Stray Fairies in currently in Fountain +s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type) { + s32 numberInFountain; - s32 temp_v1; - - if ((arg1 < 0) || (arg1 >= 5)) { + if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) { return 0; } - if (arg1 == 0) { + if (type == ENELFGRP_TYPE_MAGIC) { if (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1) { - return 25; + return STRAY_FAIRY_TOTAL; + } else { + return STRAY_FAIRY_TOTAL - 1; } - return 24; } - 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) { - temp_v1 = 25; + numberInFountain = + (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((type - 1) * 5) + 1)) & 0x1F; + if (numberInFountain < STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) { + numberInFountain = STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL; + } else if (numberInFountain > STRAY_FAIRY_TOTAL) { + numberInFountain = STRAY_FAIRY_TOTAL; } - return temp_v1; + return numberInFountain; } -void func_80A39CD4(PlayState* play, s32 arg1, s32 arg2) { - if ((arg1 < 0) || (arg1 > 4) || (arg2 < 10) || (arg2 > 25)) { +// Update number of Stray Fairies in Fountain +void EnElfgrp_SetFountainFairiesCount(PlayState* play, s32 type, s32 newCount) { + if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS) || + (newCount < (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL)) || (newCount > STRAY_FAIRY_TOTAL)) { return; } - if (arg1 == 0) { - if (arg2 == 25) { + if (type == ENELFGRP_TYPE_MAGIC) { + if (newCount == STRAY_FAIRY_TOTAL) { gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1; } else { gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~1; } } else { - gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4)); - gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((type * 5) - 4)); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= newCount << ((type * 5) - 4); } } -void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) { +void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType) { s32 pad; s32 i; - Actor* elforg; - s32 params; - Vec3f sp6C; + Actor* strayFairy; + s32 strayFairyParams; + Vec3f spawnCenterPos; Player* player = GET_PLAYER(play); - if (arg3 == 0) { - this->unk_14A |= 8; + if (fairyType == 0) { + this->stateFlags |= ELFGRP_STATE_3; } - if (arg3 == 0) { - sp6C = this->actor.world.pos; - sp6C.y += 20.0f; - params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN); + if (fairyType == 0) { + spawnCenterPos = this->actor.world.pos; + spawnCenterPos.y += 20.0f; + strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN); } else { - sp6C = player->actor.world.pos; - sp6C.y += 20.0f; - params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN); + spawnCenterPos = player->actor.world.pos; + spawnCenterPos.y += 20.0f; + strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN); } - for (i = 0; i < arg2; i++) { - elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + sp6C.x, sp6C.y, - Rand_CenteredFloat(20.0f) + sp6C.z, 0, 0, 0, params); - if (elforg == NULL) { + for (i = 0; i < count; i++) { + strayFairy = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + spawnCenterPos.x, + spawnCenterPos.y, Rand_CenteredFloat(20.0f) + spawnCenterPos.z, 0, 0, 0, strayFairyParams); + + if (strayFairy == NULL) { continue; } - elforg->home.pos.x = this->actor.home.pos.x; - elforg->home.pos.y = this->actor.home.pos.y + 20.0f; - elforg->home.pos.z = this->actor.home.pos.z; + strayFairy->home.pos.x = this->actor.home.pos.x; + strayFairy->home.pos.y = this->actor.home.pos.y + 20.0f; + strayFairy->home.pos.z = this->actor.home.pos.z; } } -s32 func_80A39F50(PlayState* play) { +/** + * Tell any spawned Stray Fairies to come to the Fountain center. + * + * @return s32 always 0 + */ +s32 EnElfgrp_SummonStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; + EnElforg* strayFairy; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) { - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME; + strayFairy = (EnElforg*)itemAction; + if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) { + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME; } itemAction = itemAction->next; } @@ -298,50 +345,58 @@ s32 func_80A39F50(PlayState* play) { return 0; } -s32 func_80A39FBC(PlayState* play) { +/** + * Make the Stray Fairies in the fountain spin quickly when healing Player. + * + * @return s32 time to spend in healing action. + */ +s32 EnElfgrp_SpinStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; - s32 phi_v1 = 30; + EnElforg* strayFairy; + s32 timer = 30; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) { - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN; - if (phi_v1 >= 100) { - return phi_v1; + strayFairy = (EnElforg*)itemAction; + if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) { + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN; + if (timer >= 100) { + return timer; } - elfOrg->secondaryTimer = phi_v1; - phi_v1 += 5; + strayFairy->secondaryTimer = timer; + timer += 5; } itemAction = itemAction->next; } - return phi_v1; + return timer; } -void func_80A3A044(PlayState* play) { +/** + * Tell the Stray Fairies to disappear, before reviving the Great Fairy + */ +void EnElfgrp_VanishStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; + EnElforg* strayFairy; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - elfOrg->actor.home.rot.x = 0x14; - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS; + strayFairy = (EnElforg*)itemAction; + STRAY_FAIRY_SPARKLE_COUNT(&strayFairy->actor) = 20; + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS; itemAction = itemAction->next; } @@ -349,68 +404,70 @@ void func_80A3A044(PlayState* play) { void func_80A3A0AC(EnElfgrp* this, PlayState* play) { if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { - this->actionFunc = func_80A3A600; + this->actionFunc = EnElfgrp_DoNothing; CutsceneManager_Stop(this->actor.csId); } } void func_80A3A0F4(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 10) { + if (this->timer == 10) { Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); - if (ENELFGRP_GET(&this->actor) < ENELFGRP_4) { + if (ENELFGRP_GET_TYPE(&this->actor) < ENELFGRP_TYPE_KINDNESS) { Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, - ENELFGRP_GET(&this->actor) + ENELFGRP_4); - } else { + ENELFGRP_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE); + } else { // ENELFGRP_TYPE_KINDNESS Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, - this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 4); + this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, + DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW); } } - if ((this->unk_144 > 10) && (this->unk_14A & 1)) { + if ((this->timer > 10) && (this->stateFlags & ELFGRP_STATE_0)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0AC; } } void func_80A3A210(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0F4; - func_80A3A044(play); - this->unk_144 = 30; + EnElfgrp_VanishStrayFairies(play); + this->timer = 30; } - if (this->unk_14A & 1) { + if (this->stateFlags & ELFGRP_STATE_0) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } } void func_80A3A274(EnElfgrp* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { - if (this->unk_14A & 1) { + if (this->stateFlags & ELFGRP_STATE_0) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); } switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id) { case 2: - if (!(this->unk_14A & 1)) { - if (this->unk_147 == ENELFGRP_0) { - func_80A39DC8(this, play, 1, 1); + if (!(this->stateFlags & ELFGRP_STATE_0)) { + if (this->type == ENELFGRP_TYPE_MAGIC) { // Clock Town + EnElfgrp_SpawnStrayFairies(this, play, 1, SPAWNED_STRAY_FAIRY_TYPE_RETURNING); } else { - func_80A39DC8(this, play, func_80A39BD0(play, this->unk_147), 1); + EnElfgrp_SpawnStrayFairies(this, play, EnElfgrp_GetHeldFairiesCount(play, this->type), + SPAWNED_STRAY_FAIRY_TYPE_RETURNING); } - this->unk_14A |= 1; - func_80A39CD4(play, this->unk_147, 25); + this->stateFlags |= ELFGRP_STATE_0; + EnElfgrp_SetFountainFairiesCount(play, this->type, STRAY_FAIRY_TOTAL); } break; case 3: - func_80A39F50(play); + EnElfgrp_SummonStrayFairies(play); this->actionFunc = func_80A3A210; - this->unk_144 = 90; + this->timer = 90; break; default: @@ -423,28 +480,30 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A274; - Flags_UnsetSwitch(play, ENELFGRP_GET_FE00(&this->actor)); - if (this->unk_14A & 2) { + Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + + if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); } - if ((this->unk_14A & 4) != 0) { - SET_WEEKEVENTREG(WEEKEVENTREG_23_02); + if (this->stateFlags & ELFGRP_STATE_2) { + SET_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK); } - if (this->unk_14A & 0x10) { + if (this->stateFlags & ELFGRP_STATE_4) { Item_Give(play, ITEM_SWORD_GREAT_FAIRY); } - this->unk_14A &= ~8; + + this->stateFlags &= ~ELFGRP_STATE_3; } else if (this->actor.xzDistToPlayer < 350.0f) { CutsceneManager_Queue(this->actor.csId); } } void func_80A3A484(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0F4; - this->unk_144 = 30; + this->timer = 30; } } @@ -454,51 +513,51 @@ void func_80A3A4AC(EnElfgrp* this, PlayState* play) { if (cueId == 3) { this->actionFunc = func_80A3A484; - this->unk_144 = 90; + this->timer = 90; } } } void func_80A3A520(EnElfgrp* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) { - this->actionFunc = func_80A3A600; + this->actionFunc = EnElfgrp_DoNothing; } else if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A4AC; - Flags_SetSwitch(play, ENELFGRP_GET_FE00(&this->actor)); + Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); - if (this->unk_14A & 2) { + if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); } - if (this->actor.home.rot.z != 0) { - Flags_SetSwitch(play, this->actor.home.rot.z); + if (ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) { + Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor)); } } else if (this->actor.xzDistToPlayer < 350.0f) { CutsceneManager_Queue(this->actor.csId); } } -void func_80A3A600(EnElfgrp* this, PlayState* play) { +void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play) { } -void func_80A3A610(EnElfgrp* this, PlayState* play) { +void EnElfgrp_HealPlayer(EnElfgrp* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (this->unk_144 == 60) { + if (this->timer == 60) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); - gSaveContext.healthAccumulator = 320; + gSaveContext.healthAccumulator = 0x140; } - if (this->unk_144 > 0) { + if (this->timer > 0) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_HEAL - SFX_FLAG); } else { player->actor.freezeTimer = 0; player->stateFlags1 &= ~PLAYER_STATE1_20000000; - this->actionFunc = func_80A3A600; - this->unk_14A |= 8; + this->actionFunc = EnElfgrp_DoNothing; + this->stateFlags |= ELFGRP_STATE_3; } } @@ -509,9 +568,9 @@ void func_80A3A6F4(EnElfgrp* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_144 = func_80A39FBC(play); - this->actionFunc = func_80A3A610; - this->unk_14A &= ~8; + this->timer = EnElfgrp_SpinStrayFairies(play); + this->actionFunc = EnElfgrp_HealPlayer; + this->stateFlags &= ~ELFGRP_STATE_3; } } @@ -521,25 +580,27 @@ void func_80A3A77C(EnElfgrp* this, PlayState* play) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; if (Actor_TextboxIsClosing(&this->actor, play)) { - this->unk_144 = func_80A39FBC(play); - this->actionFunc = func_80A3A610; - this->unk_14A &= ~8; + this->timer = EnElfgrp_SpinStrayFairies(play); + this->actionFunc = EnElfgrp_HealPlayer; + this->stateFlags &= ~ELFGRP_STATE_3; } } void func_80A3A7FC(EnElfgrp* this, PlayState* play) { - s32 temp_s0; + s32 curTotalFairies; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; this->actionFunc = func_80A3A6F4; - temp_s0 = func_80A39BD0(play, this->unk_147); - func_80A39DC8(this, play, temp_s0, 1); - temp_s0 += func_80A39C1C(play, this->unk_147); - if (temp_s0 > 25) { - temp_s0 = 25; + + curTotalFairies = EnElfgrp_GetHeldFairiesCount(play, this->type); + EnElfgrp_SpawnStrayFairies(this, play, curTotalFairies, SPAWNED_STRAY_FAIRY_TYPE_RETURNING); + curTotalFairies += EnElfgrp_GetFountainFairiesCount(play, this->type); + if (curTotalFairies > STRAY_FAIRY_TOTAL) { + curTotalFairies = STRAY_FAIRY_TOTAL; } - func_80A39CD4(play, this->unk_147, temp_s0); + + EnElfgrp_SetFountainFairiesCount(play, this->type, curTotalFairies); } else if (this->actor.xzDistToPlayer < 280.0f) { this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 300.0f); @@ -551,13 +612,13 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; this->actionFunc = func_80A3A6F4; return; } - if (this->unk_147 != ENELFGRP_0) { - if (func_80A39BD0(play, this->unk_147) > 0) { + if (this->type != ENELFGRP_TYPE_MAGIC) { + if (EnElfgrp_GetHeldFairiesCount(play, this->type) > 0) { this->actionFunc = func_80A3A7FC; return; } @@ -570,7 +631,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.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; } else { this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 100.0f); @@ -585,11 +646,11 @@ void EnElfgrp_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->unk_14A & 8) { + if (this->stateFlags & ELFGRP_STATE_3) { Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } - if (this->unk_144 != 0) { - this->unk_144--; + if (this->timer != 0) { + this->timer--; } } diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h index 692a76d82..d9767fb2f 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -2,29 +2,32 @@ #define Z_EN_ELFGRP_H #include "global.h" +#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h" struct EnElfgrp; typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); -#define ENELFGRP_GET(thisx) ((thisx)->params & 0xF) -#define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_TYPE(thisx) ((thisx)->params & 0xF) //!< Same type as Great Fairies +#define ENELFGRP_GET_SWITCHFLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_SWITCHFLAG_ROT(thisx) ((thisx)->home.rot.z) -typedef enum { - /* 0 */ ENELFGRP_0, - /* 2 */ ENELFGRP_1, - /* 2 */ ENELFGRP_2, - /* 3 */ ENELFGRP_3, - /* 4 */ ENELFGRP_4 -} EnElfgrpParam; +typedef enum ElfgrpType { + /* 0 */ ENELFGRP_TYPE_MAGIC = GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ ENELFGRP_TYPE_POWER = GREAT_FAIRY_TYPE_POWER, + /* 2 */ ENELFGRP_TYPE_WISDOM = GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ ENELFGRP_TYPE_COURAGE = GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ ENELFGRP_TYPE_KINDNESS = GREAT_FAIRY_TYPE_KINDNESS, + /* 5 */ ENELFGRP_TYPE_MAX +} ElfgrpType; typedef struct EnElfgrp { /* 0x000 */ Actor actor; - /* 0x144 */ s16 unk_144; - /* 0x146 */ u8 unk_146; - /* 0x147 */ u8 unk_147; - /* 0x148 */ s8 unk_148; - /* 0x14A */ u16 unk_14A; + /* 0x144 */ s16 timer; + /* 0x146 */ u8 talkedOnceFlag; + /* 0x147 */ u8 type; + /* 0x148 */ s8 unk_148; // set and not used + /* 0x14A */ u16 stateFlags; /* 0x14C */ EnElfgrpActionFunc actionFunc; } EnElfgrp; // size = 0x150 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 f57f8e066..27dc844e7 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -96,7 +96,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN: case STRAY_FAIRY_TYPE_BUBBLE: case STRAY_FAIRY_TYPE_CHEST: - case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: + case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN: break; default: @@ -121,7 +121,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { this->targetDistanceFromHome = Rand_ZeroFloat(100.0f) + 50.0f; break; - case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: + case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN: EnElforg_InitializeParams(this); this->actionFunc = EnElforg_TurnInFairy; this->secondaryTimer = 60; @@ -324,6 +324,7 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) { void EnElforg_QuicklyCircleFairyFountain(EnElforg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); EnElforg_MoveToTargetFairyFountain(this, &this->actor.home.pos); + if (this->secondaryTimer <= 30) { this->actionFunc = EnElforg_TurnInFairy; } @@ -367,9 +368,9 @@ void EnElforg_FreeFloatingFairyFountain(EnElforg* this, PlayState* play) { if (this->strayFairyFlags & STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS) { // This happens right before the Great Fairy appears once all // Stray Fairies are saved. - if (this->actor.home.rot.x > 0) { + if (STRAY_FAIRY_SPARKLE_COUNT(&this->actor) > 0) { EnElforg_SpawnSparkles(this, play, 10); - this->actor.home.rot.x--; + STRAY_FAIRY_SPARKLE_COUNT(&this->actor)--; } Actor_SetScale(&this->actor, this->actor.scale.x * 0.9f); @@ -383,22 +384,24 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) { s32 pad; Actor* playerActor = &GET_PLAYER(play)->actor; Player* player = GET_PLAYER(play); - f32 distanceFromPlayer; + f32 orbitRadius; if (GET_PLAYER_FORM == PLAYER_FORM_GORON) { - distanceFromPlayer = 40.0f; + orbitRadius = 40.0f; } else { - distanceFromPlayer = 20.0f; + orbitRadius = 20.0f; } - this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.x; - this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.z; + this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.x; + this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.z; this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; + EnElforg_SpawnSparkles(this, play, 16); } void EnElforg_FairyCollected(EnElforg* this, PlayState* play) { EnElforg_CirclePlayer(this, play); + if (this->timer > 80) { Actor_Kill(&this->actor); return; @@ -424,8 +427,10 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); EnElforg_CirclePlayer(this, play); + player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; + if (Actor_TextboxIsClosing(&this->actor, play)) { player->actor.freezeTimer = 0; player->stateFlags1 &= ~PLAYER_STATE1_20000000; @@ -451,6 +456,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); + if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST]; this->targetSpeedXZ = 5.0f; @@ -461,10 +467,12 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { } scaledYDistance = this->actor.playerHeightRel - (this->actor.shape.yOffset * this->actor.scale.y); + if (!Player_InCsMode(play)) { if ((this->actor.xzDistToPlayer < 30.0f) && (scaledYDistance < 12.0f) && (scaledYDistance > -68.0f)) { EnElforg_SetupFairyCollected(this, play); Health_ChangeBy(play, 0x30); + switch (STRAY_FAIRY_TYPE(&this->actor)) { case STRAY_FAIRY_TYPE_COLLECTIBLE: Flags_SetCollectible(play, STRAY_FAIRY_FLAG(&this->actor)); @@ -493,7 +501,8 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { gSaveContext.save.saveInfo.inventory.strayFairies[gSaveContext.dungeonIndex]++; // You found a Stray Fairy! Message_StartTextbox(play, 0x11, NULL); - if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) { + if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= + STRAY_FAIRY_SCATTERED_TOTAL) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } } @@ -502,6 +511,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { 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)) { Audio_PlaySfx(NA_SE_SY_FAIRY_MASK_SUCCESS); @@ -627,6 +637,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); + switch (this->area) { case STRAY_FAIRY_AREA_WOODFALL: AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim)); @@ -644,7 +655,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyStoneTowerTexAnim)); break; - default: + default: // STRAY_FAIRY_AREA_CLOCK_TOWN AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyClockTownTexAnim)); break; } diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h index 798982b09..7bb8672b1 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h @@ -2,36 +2,41 @@ #define Z_EN_ELFORG_H #include "global.h" +#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h" #include "objects/gameplay_keep/gameplay_keep.h" #define STRAY_FAIRY_TYPE(thisx) ((thisx)->params & 0xF) #define STRAY_FAIRY_GET_NON_DUNGEON_AREA(thisx) (((thisx)->params & 0x1C0) >> 6) #define STRAY_FAIRY_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) -#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) (((flag & 0x7F) << 9) | ((nonDungeonArea & 7) << 6) | (type & 0xF)) +#define STRAY_FAIRY_SPARKLE_COUNT(thisx) ((thisx)->home.rot.x) + +//! @note `nonDungeonArea` does not always use the enum +#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) ((((flag) & 0x7F) << 9) | (((nonDungeonArea) & 7) << 6) | ((type) & 0xF)) #define STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME (1 << 0) #define STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS (1 << 1) #define STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN (1 << 2) #define STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED (1 << 3) -typedef enum { - /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around - /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain - /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles - /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town - /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies - /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit - /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests - /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc. - /* 8 */ STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain +typedef enum StrayFairyType { + /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around + /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain + /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles + /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town + /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies + /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit + /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests + /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc. + /* 8 */ STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain } StrayFairyType; -typedef enum { - /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN, - /* 1 */ STRAY_FAIRY_AREA_WOODFALL, - /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD, - /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY, - /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER, +// Corresponds to the Great Fairy types +typedef enum StrayFairyArea { + /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN = GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ STRAY_FAIRY_AREA_WOODFALL = GREAT_FAIRY_TYPE_POWER, + /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD = GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY = GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER = GREAT_FAIRY_TYPE_KINDNESS, /* 5 */ STRAY_FAIRY_AREA_MAX } StrayFairyArea; 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 d6f34a256..b09f8f54d 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 @@ -143,7 +143,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_20000; this->isCharging = false; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) { player->unk_B08 = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; 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 aca30fe92..cd8632659 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -255,7 +255,7 @@ void func_80A1BA44(ObjFlowerpot* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spC4, &spB8, &spC4, -600, phi_s0, 30, 0, 0, (Rand_ZeroOne() * 12.0f) + 16.6f, - phi_s1, 0, 35, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0); + phi_s1, 0, 35, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0); } spD0.y += 20.0f; @@ -298,7 +298,7 @@ void func_80A1BD80(ObjFlowerpot* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spBC, &spB0, &spBC, -240, phi_s0, 40, 0, 0, (Rand_ZeroOne() * 20.0f) + 10.6f, 0, 0, - 42, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0); + 42, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0); } spBC.y = this->actor.world.pos.y + this->actor.depthInWater; @@ -338,7 +338,7 @@ void func_80A1C0FC(ObjFlowerpot* this, PlayState* play) { Math_Vec3f_Sum(&spB8, &spC4, &spB8); EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -100, 64, 40, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80, - -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0); + -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0); } } @@ -365,7 +365,7 @@ void func_80A1C328(ObjFlowerpot* this, PlayState* play) { Math_Vec3f_Sum(&spB8, &spC4, &spB8); EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -80, 64, 44, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80, - -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0); + -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0); } } 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 6a6937e7e..f8ee482df 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -5,6 +5,7 @@ */ #include "z_obj_lightblock.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #include "objects/object_lightblock/object_lightblock.h" #define FLAGS 0x00000000 @@ -15,12 +16,12 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play); void ObjLightblock_Destroy(Actor* thisx, PlayState* play); void ObjLightblock_Update(Actor* thisx, PlayState* play); void ObjLightblock_Draw(Actor* thisx, PlayState* play); -void func_80AF3AC8(ObjLightblock* this); -void func_80AF3ADC(ObjLightblock* this, PlayState* play); -void func_80AF3B8C(ObjLightblock* this); -void func_80AF3BA0(ObjLightblock* this, PlayState* play); -void func_80AF3C18(ObjLightblock* this); -void func_80AF3C34(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupWait(ObjLightblock* this); +void ObjLightblock_Wait(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupPlayCutscene(ObjLightblock* this); +void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupFadeAway(ObjLightblock* this); +void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play); ActorInit Obj_Lightblock_InitVars = { ACTOR_OBJ_LIGHTBLOCK, @@ -54,17 +55,17 @@ static ColliderCylinderInit sCylinderInit = { { 84, 120, 0, { 0, 0, 0 } }, }; -typedef struct { +typedef struct LightblockTypeVars { /* 0x0 */ f32 scale; /* 0x4 */ s16 radius; /* 0x6 */ s16 height; /* 0x8 */ s16 yShift; - /* 0xC */ s32 params; + /* 0xC */ s32 effectParams; } LightblockTypeVars; // size = 0x10 static LightblockTypeVars sLightblockTypeVars[] = { - { 0.1f, 76, 80, 19, 2 }, - { (1.0f / 6), 126, 144, 19, 3 }, + { 0.1f, 76, 80, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE }, + { (1.0f / 6.0f), 126, 144, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE }, }; static InitChainEntry sInitChain[] = { @@ -76,11 +77,11 @@ static InitChainEntry sInitChain[] = { extern Gfx D_801AEF88[]; extern Gfx D_801AEFA0[]; -void func_80AF3910(ObjLightblock* this, PlayState* play) { +void ObjLightblock_SpawnEffect(ObjLightblock* this, PlayState* play) { LightblockTypeVars* typeVars = &sLightblockTypeVars[LIGHTBLOCK_TYPE(&this->dyna.actor)]; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, - this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->params); + this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->effectParams); } void ObjLightblock_Init(Actor* thisx, PlayState* play) { @@ -104,7 +105,7 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) { this->collider.dim.height = typeVars->height; this->collider.dim.yShift = typeVars->yShift; this->alpha = 255; - func_80AF3AC8(this); + ObjLightblock_SetupWait(this); } void ObjLightblock_Destroy(Actor* thisx, PlayState* play) { @@ -114,11 +115,14 @@ void ObjLightblock_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AF3AC8(ObjLightblock* this) { - this->actionFunc = func_80AF3ADC; +void ObjLightblock_SetupWait(ObjLightblock* this) { + this->actionFunc = ObjLightblock_Wait; } -void func_80AF3ADC(ObjLightblock* this, PlayState* play) { +/** + * Wait for a single collision from a Light Arrow or 8 frames of Mirror Shield ray collision. + */ +void ObjLightblock_Wait(ObjLightblock* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; // light arrows @@ -135,39 +139,36 @@ void func_80AF3ADC(ObjLightblock* this, PlayState* play) { if (this->collisionCounter >= 8) { CutsceneManager_Queue(this->dyna.actor.csId); - func_80AF3B8C(this); + ObjLightblock_SetupPlayCutscene(this); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } } -void func_80AF3B8C(ObjLightblock* this) { - this->actionFunc = func_80AF3BA0; +void ObjLightblock_SetupPlayCutscene(ObjLightblock* this) { + this->actionFunc = ObjLightblock_PlayCutscene; } -void func_80AF3BA0(ObjLightblock* this, PlayState* play) { +void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor)); - func_80AF3910(this, play); - func_80AF3C18(this); + ObjLightblock_SpawnEffect(this, play); + ObjLightblock_SetupFadeAway(this); } else { CutsceneManager_Queue(this->dyna.actor.csId); } } -void func_80AF3C18(ObjLightblock* this) { +void ObjLightblock_SetupFadeAway(ObjLightblock* this) { this->timer = 80; - this->actionFunc = func_80AF3C34; + this->actionFunc = ObjLightblock_FadeAway; } -void func_80AF3C34(ObjLightblock* this, PlayState* play) { - s8 csId; - +void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play) { this->timer--; if (this->timer <= 0) { - csId = this->dyna.actor.csId; - CutsceneManager_Stop(csId); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index d01dbd3be..07e691591 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10374,7 +10374,7 @@ void func_80840EC0(Player* this, PlayState* play) { // Spin attack size void func_80840F34(Player* this) { - Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f); + Math_StepToF(&this->unk_B08, CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) ? 1.0f : 0.5f, 0.02f); } s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* cue, f32 arg3, s16 arg4, s32 arg5) { 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 b4ed531f8..ec1ca83ec 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 @@ -19,7 +19,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); // Get digits for max number of stray fairies - counterDigits[1] = 15; + counterDigits[1] = STRAY_FAIRY_SCATTERED_TOTAL; counterDigits[0] = counterDigits[1] / 10; counterDigits[1] -= (s16)(counterDigits[0] * 10); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c1137d3b2..8a60d1f66 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6263,17 +6263,17 @@ 0x808CD238:("EnVm_Draw",), 0x808CD740:("DemoEffect_Init",), 0x808CD8E8:("DemoEffect_Destroy",), - 0x808CD940:("func_808CD940",), - 0x808CD998:("func_808CD998",), - 0x808CDAD0:("func_808CDAD0",), - 0x808CDBDC:("func_808CDBDC",), - 0x808CDCEC:("func_808CDCEC",), - 0x808CDD70:("func_808CDD70",), - 0x808CDDE0:("func_808CDDE0",), + 0x808CD940:("DemoEffect_WaitForObject",), + 0x808CD998:("DemoEffect_SetupTimewarp",), + 0x808CDAD0:("DemoEffect_SetPerVertexAlpha",), + 0x808CDBDC:("DemoEffect_FinishTimewarp",), + 0x808CDCEC:("DemoEffect_StartTimewarp",), + 0x808CDD70:("DemoEffect_ShrinkLight",), + 0x808CDDE0:("DemoEffect_ExpandLight",), 0x808CDE54:("DemoEffect_Update",), - 0x808CDE78:("func_808CDE78",), - 0x808CDFF8:("func_808CDFF8",), - 0x808CE078:("func_808CE078",), + 0x808CDE78:("DemoEffect_OverrideLimbDrawTimewarp",), + 0x808CDFF8:("DemoEffect_DrawTimewarp",), + 0x808CE078:("DemoEffect_DrawLight",), 0x808CE450:("DemoKankyo_SetupAction",), 0x808CE45C:("func_808CE45C",), 0x808CF06C:("func_808CF06C",), @@ -9573,9 +9573,9 @@ 0x80A07740:("func_80A07740",), 0x80A0A8A0:("BgDyYoseizo_Init",), 0x80A0A95C:("BgDyYoseizo_Destroy",), - 0x80A0A96C:("func_80A0A96C",), - 0x80A0A9E4:("func_80A0A9E4",), - 0x80A0AA40:("func_80A0AA40",), + 0x80A0A96C:("BgDyYoseizo_UpdateEyes",), + 0x80A0A9E4:("BgDyYoseizo_Bob",), + 0x80A0AA40:("BgDyYoseizo_SpawnEffects",), 0x80A0AD50:("func_80A0AD50",), 0x80A0AE1C:("func_80A0AE1C",), 0x80A0AFDC:("func_80A0AFDC",), @@ -9587,14 +9587,14 @@ 0x80A0B5F0:("func_80A0B5F0",), 0x80A0B75C:("func_80A0B75C",), 0x80A0B834:("func_80A0B834",), - 0x80A0B8CC:("func_80A0B8CC",), + 0x80A0B8CC:("BgDyYoseizo_TrainPlayer",), 0x80A0BB08:("func_80A0BB08",), 0x80A0BC84:("BgDyYoseizo_Update",), - 0x80A0BCD8:("func_80A0BCD8",), - 0x80A0BD40:("func_80A0BD40",), - 0x80A0BE60:("func_80A0BE60",), - 0x80A0BF70:("func_80A0BF70",), - 0x80A0C270:("func_80A0C270",), + 0x80A0BCD8:("BgDyYoseizo_OverrideLimbDraw",), + 0x80A0BD40:("BgDyYoseizo_Draw",), + 0x80A0BE60:("BgDyYoseizo_SpawnEffect",), + 0x80A0BF70:("BgDyYoseizo_UpdateEffects",), + 0x80A0C270:("BgDyYoseizo_DrawEffects",), 0x80A0C780:("EnBoj05_Init",), 0x80A0C790:("EnBoj05_Destroy",), 0x80A0C7A0:("EnBoj05_Update",), @@ -10266,16 +10266,16 @@ 0x80A38FB4:("EnRu_OverrideLimbdraw",), 0x80A390F8:("EnRu_PostLimbdraw",), 0x80A39204:("EnRu_Draw",), - 0x80A396B0:("func_80A396B0",), + 0x80A396B0:("EnElfgrp_SetCutscene",), 0x80A3970C:("EnElfgrp_Init",), 0x80A39BC0:("EnElfgrp_Destroy",), - 0x80A39BD0:("func_80A39BD0",), - 0x80A39C1C:("func_80A39C1C",), - 0x80A39CD4:("func_80A39CD4",), - 0x80A39DC8:("func_80A39DC8",), - 0x80A39F50:("func_80A39F50",), - 0x80A39FBC:("func_80A39FBC",), - 0x80A3A044:("func_80A3A044",), + 0x80A39BD0:("EnElfgrp_GetHeldFairiesCount",), + 0x80A39C1C:("EnElfgrp_GetFountainFairiesCount",), + 0x80A39CD4:("EnElfgrp_SetFountainFairiesCount",), + 0x80A39DC8:("EnElfgrp_SpawnStrayFairies",), + 0x80A39F50:("EnElfgrp_SummonStrayFairies",), + 0x80A39FBC:("EnElfgrp_SpinStrayFairies",), + 0x80A3A044:("EnElfgrp_VanishStrayFairies",), 0x80A3A0AC:("func_80A3A0AC",), 0x80A3A0F4:("func_80A3A0F4",), 0x80A3A210:("func_80A3A210",), @@ -10284,8 +10284,8 @@ 0x80A3A484:("func_80A3A484",), 0x80A3A4AC:("func_80A3A4AC",), 0x80A3A520:("func_80A3A520",), - 0x80A3A600:("func_80A3A600",), - 0x80A3A610:("func_80A3A610",), + 0x80A3A600:("EnElfgrp_DoNothing",), + 0x80A3A610:("EnElfgrp_HealPlayer",), 0x80A3A6F4:("func_80A3A6F4",), 0x80A3A77C:("func_80A3A77C",), 0x80A3A7FC:("func_80A3A7FC",), @@ -10546,8 +10546,8 @@ 0x80A4F4C8:("func_80A4F4C8",), 0x80A4FA40:("DemoGetitem_Init",), 0x80A4FB00:("DemoGetitem_Destroy",), - 0x80A4FB10:("func_80A4FB10",), - 0x80A4FB68:("func_80A4FB68",), + 0x80A4FB10:("DemoGetitem_Wait",), + 0x80A4FB68:("DemoGetitem_PerformCutsceneActions",), 0x80A4FCCC:("DemoGetitem_Update",), 0x80A4FCF0:("DemoGetitem_Draw",), 0x80A4FDD0:("func_80A4FDD0",), @@ -10752,8 +10752,8 @@ 0x80A61040:("BgSpoutFire_Draw",), 0x80A612B0:("EnDyExtra_Destroy",), 0x80A612C0:("EnDyExtra_Init",), - 0x80A61334:("func_80A61334",), - 0x80A613C8:("func_80A613C8",), + 0x80A61334:("EnDyExtra_WaitForTrigger",), + 0x80A613C8:("EnDyExtra_Fall",), 0x80A61470:("EnDyExtra_Update",), 0x80A614C4:("EnDyExtra_Draw",), 0x80A61810:("EnBal_Init",), @@ -12656,15 +12656,15 @@ 0x80AF3144:("EnTest7_Update",), 0x80AF31D0:("func_80AF31D0",), 0x80AF3248:("EnTest7_Draw",), - 0x80AF3910:("func_80AF3910",), + 0x80AF3910:("ObjLightblock_SpawnEffect",), 0x80AF397C:("ObjLightblock_Init",), 0x80AF3A80:("ObjLightblock_Destroy",), - 0x80AF3AC8:("func_80AF3AC8",), - 0x80AF3ADC:("func_80AF3ADC",), - 0x80AF3B8C:("func_80AF3B8C",), - 0x80AF3BA0:("func_80AF3BA0",), - 0x80AF3C18:("func_80AF3C18",), - 0x80AF3C34:("func_80AF3C34",), + 0x80AF3AC8:("ObjLightblock_SetupWait",), + 0x80AF3ADC:("ObjLightblock_Wait",), + 0x80AF3B8C:("ObjLightblock_SetupPlayCutscene",), + 0x80AF3BA0:("ObjLightblock_PlayCutscene",), + 0x80AF3C18:("ObjLightblock_SetupFadeAway",), + 0x80AF3C34:("ObjLightblock_FadeAway",), 0x80AF3CC0:("ObjLightblock_Update",), 0x80AF3CE4:("ObjLightblock_Draw",), 0x80AF3F70:("func_80AF3F70",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 417e27b77..5aaa2f1d0 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -10574,27 +10574,11 @@ 0x80A0A88C:("D_80A0A88C","UNK_TYPE4","",0x4), 0x80A0A890:("D_80A0A890","UNK_TYPE4","",0x4), 0x80A0C4A0:("Bg_Dy_Yoseizo_InitVars","UNK_TYPE1","",0x1), - 0x80A0C4C0:("D_80A0C4C0","UNK_TYPE4","",0x4), - 0x80A0C4C4:("D_80A0C4C4","UNK_TYPE4","",0x4), - 0x80A0C4C8:("D_80A0C4C8","UNK_TYPE4","",0x4), - 0x80A0C4CC:("D_80A0C4CC","UNK_TYPE4","",0x4), - 0x80A0C4D0:("D_80A0C4D0","UNK_TYPE4","",0x4), - 0x80A0C4D8:("D_80A0C4D8","UNK_TYPE4","",0x4), - 0x80A0C4DC:("D_80A0C4DC","UNK_TYPE4","",0x4), - 0x80A0C4E0:("D_80A0C4E0","UNK_TYPE4","",0x4), - 0x80A0C4E4:("D_80A0C4E4","UNK_TYPE1","",0x1), - 0x80A0C4F8:("D_80A0C4F8","UNK_TYPE1","",0x1), - 0x80A0C50C:("D_80A0C50C","UNK_TYPE1","",0x1), - 0x80A0C514:("D_80A0C514","UNK_TYPE1","",0x1), - 0x80A0C540:("D_80A0C540","f32","",0x4), - 0x80A0C544:("D_80A0C544","f32","",0x4), - 0x80A0C548:("D_80A0C548","f32","",0x4), - 0x80A0C54C:("D_80A0C54C","f32","",0x4), - 0x80A0C550:("D_80A0C550","f32","",0x4), - 0x80A0C554:("D_80A0C554","f32","",0x4), - 0x80A0C558:("D_80A0C558","f32","",0x4), - 0x80A0C55C:("D_80A0C55C","f32","",0x4), - 0x80A0C560:("D_80A0C560","f32","",0x4), + 0x80A0C4C0:("sAnimations","AnimationHeader*","9",0x24), + 0x80A0C4E4:("sEffectPrimColors","Color_RGB8","6",0x12), + 0x80A0C4F8:("sEffectEnvColors","Color_RGB8","6",0x12), + 0x80A0C50C:("sMouthTextures","UNK_TYPE1","2",0x8), + 0x80A0C514:("sStretchFactors","f32","8",0x20), 0x80A0C7C0:("En_Boj_05_InitVars","UNK_TYPE1","",0x1), 0x80A10860:("sAnimationsBombShopkeeper","UNK_PTR","",0x4), 0x80A10890:("En_Sob1_InitVars","UNK_TYPE1","",0x1), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 0bde4a5ce..35757a022 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -189,7 +189,7 @@ weekEventReg = { (22 << 8) | 0x40: "WEEKEVENTREG_22_40", (22 << 8) | 0x80: "WEEKEVENTREG_22_80", (23 << 8) | 0x01: "WEEKEVENTREG_23_01", - (23 << 8) | 0x02: "WEEKEVENTREG_23_02", + (23 << 8) | 0x02: "WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK", (23 << 8) | 0x04: "WEEKEVENTREG_23_04", (23 << 8) | 0x08: "WEEKEVENTREG_23_08", (23 << 8) | 0x10: "WEEKEVENTREG_23_10", diff --git a/undefined_syms.txt b/undefined_syms.txt index 45307fc87..010f94c05 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -191,14 +191,6 @@ D_050089D0 = 0x050089D0; D_060002C8 = 0x060002C8; D_060005C4 = 0x060005C4; -// ovl_Bg_Dy_Yoseizo - -D_06008090 = 0x06008090; -D_0600D1B0 = 0x0600D1B0; -D_0600D228 = 0x0600D228; -D_0601C6F4 = 0x0601C6F4; -D_0601C8B4 = 0x0601C8B4; - // ovl_Bg_Lotus D_06000A20 = 0x06000A20; From 9e72c240d9d1190244a0b0a1fd9de1cec4a82bcb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 3 Oct 2023 14:51:45 -0700 Subject: [PATCH 116/121] Z_message (2 NON_MATCHINGS) (#1398) * matched func_8014D62C * matched func_8014D304 * matched func_80149048 * matched func_80159438 & func_8014CDF0 * matched Message_GetState * matched func_80152CAC * matched func_80149454 * matched func_801491DC * matched func_80150A84 * matched func_801496C8 * matched func_80149C18 * func_8014995C progress * matched 8014995C * matched func_80153EF0 * fix MessageContext lottery guess array size to match func_801496C8 * matched 80148D64 * matched func_8014AAD0 * progress func_8014CFDC * matched func_8014CFDC * progress func_801514B0 * progress#2 func_801514B0 * matched func_801514B0 * progress func_8014C70C * Progress on few functions * fix some variables & func name * change unk11F00 type and usages * func_8014C70C matched * match func_8015268c * fix building * format * engi message WIP * enums, cleanup * missed one * oops * even more enums * another oops * func_8015E7EC NON_MATCHING * cleanup Message_DrawTextCredits * MSGMODE cleanup * import sFontWidths * Import z_message_nes data * Message_DrawTextNES draft * fix types in message_nes * Message_DrawTextNES NON_EQUIVALENT * Message_DrawTextNES improvement Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Import bss * fixes * Data clean up * Delete Message_Decode m2c output * Readd Message_Update data * import data * func declaration * cleanup * Language enum * fix naming, some flags * Update functions and variables related to the bombers notebook event queue. * Update renamed variables.txt * format * attempt Message_DecodeCredits * begin Message_DecodeNES * decode cleanup * incremental improvements on Message_DecodeNES * oops * more progress * first attempt at Message_Decode * cleanup Message_Decode * Message_Decode progress * good progress on decode loops * more progress * good Message_Decode progress, thank anon * decode creep * big improvements, thanks anon/hatal * small nes improvement * cleanup * match Message_DrawTextDefault, big progress on Message_DrawTextNES * namefixer for save structs * Some cleanup/fix non-equivalencies in decodes * cleanup * Small cleanup * func_80150A84 * TextBoxType enum usage * Format * match Message_DecodeCredit by Maide, small improvement in Message_DrawTextNES * comments * some docs * cleanup, improve matches * Some improvement Co-Authored-By: Santiago * Fixes * Missed * Match Message_DrawTextNES * Move functions to z64message.h * string macros * Small cleanups * 1 more small thing * decompme scratches * Cleanup * Item enum * PR * SEGMENT_ROM_START * PR * format * ocarina cleanup --------- Co-authored-by: andzura Co-authored-by: Angie Co-authored-by: engineer124 Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: Zoey Zolotova Co-authored-by: Santiago --- include/functions.h | 64 +- include/variables.h | 131 - include/z64item.h | 21 + include/z64message.h | 37 +- include/z64ocarina.h | 143 +- include/z64save.h | 10 +- spec | 2 - src/code/z_common_data.c | 2 +- src/code/z_demo.c | 8 +- src/code/z_kaleido_setup.c | 2 +- src/code/z_message.c | 5764 ++++++++++++++++- src/code/z_message_nes.c | 1 - src/code/z_message_tables.inc.c | 1172 ++++ src/code/z_parameter.c | 57 +- src/code/z_play.c | 2 +- src/code/z_sram_NES.c | 13 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 2 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 2 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 24 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 8 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 10 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 2 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 2 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 6 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 2 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 16 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 16 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 14 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 4 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 12 +- 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 | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 12 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 12 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 5 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 6 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 21 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 8 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 2 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 6 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 8 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 10 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 6 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 8 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 14 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 8 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 6 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 14 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 8 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 11 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 10 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 10 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 14 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 2 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 16 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 4 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 4 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 4 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 8 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 3 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 5 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 6 +- .../actors/ovl_player_actor/z_player.c | 39 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 22 +- tools/disasm/functions.txt | 50 +- tools/disasm/variables.txt | 172 +- tools/namefixer.py | 2 +- tools/sizes/code_functions.csv | 66 +- 88 files changed, 7398 insertions(+), 815 deletions(-) create mode 100644 src/code/z_message_tables.inc.c diff --git a/include/functions.h b/include/functions.h index 47bc7fe3d..9f4aea656 100644 --- a/include/functions.h +++ b/include/functions.h @@ -991,68 +991,6 @@ void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height // void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx); -// void func_80147520(void); -void func_80147564(PlayState* play); -s32 Message_ShouldAdvance(PlayState* play); -s32 Message_ShouldAdvanceSilent(PlayState* play); -void Message_CloseTextbox(PlayState* play); -void func_80147818(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -// void func_80147F18(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -// void func_80148558(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -void func_80148B98(PlayState* play, u8 arg1); -// void func_80148CBC(void); -// void func_80148D64(void); -// void func_80149048(void); -// void func_801491DC(void); -// void func_80149454(void); -// void func_801496C8(void); -void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); -void func_80149C18(PlayState* play); -// void Message_FindMessage(void); -void Message_DrawItemIcon(PlayState* play, Gfx** gfxP); -void Message_HandleOcarina(PlayState* play); -void func_8014ADBC(PlayState* play, UNK_PTR puParm2); -void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); -void Message_SetupLoadItemIcon(PlayState* play); -// void func_8014CCB4(void); -// void func_8014CDF0(void); -// void Message_SetupLoadItemIcon(void); -void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_8014D62C(void); -// void func_8014D7B4(void); -void func_80150A84(PlayState* play); -void func_80150D08(PlayState* play, u32 uParm2); -void func_801514B0(PlayState* play, u16 arg1, u8 arg2); -void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor); -void Message_ContinueTextbox(PlayState* play, u16 textId); -void func_80151A68(PlayState* play, u16 textId); -void Message_BombersNotebookQueueEvent(PlayState* play, u8 event); -// void func_80151C9C(void); -void func_80151DA4(PlayState* play, u16 arg2); -void func_80152434(PlayState* play, u16 arg2); -// void func_80152464(void); -u8 Message_GetState(MessageContext* msgCtx); -// void func_8015268C(void); -// void func_80152C64(void); -// void func_80152CAC(void); -// void func_80152EC0(void); -// void func_80152FB8(void); -// void func_80153750(void); -// void func_80153E7C(void); -// void func_80153EF0(void); -void func_801541D4(PlayState* play, Gfx** gfxp); -void Message_Draw(PlayState* play); -void Message_Update(PlayState* play); -void func_801586A4(PlayState* play); -void Message_Init(PlayState* play); -void Message_FindMessageNES(PlayState* play, u16 textId); -void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos); -void Message_DecodeNES(PlayState* play); -void Message_FindCreditsMessage(PlayState* play, u16 textId); -void Message_FindCreditsMessage(PlayState* play, u16 textId); -void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); -void Message_DecodeCredits(PlayState* play); - uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); @@ -1463,7 +1401,7 @@ void Audio_StopSequenceInCutscene(u16 seqId); s32 Audio_IsSequencePlaying(u8 seqId); void Audio_PlayBgm_StorePrevBgm(u16 seqId); void Audio_RestorePrevBgm(void); -// void func_801A3000(void); +void func_801A3000(u16 seqId, u8 ioData); // void func_801A3038(void); void Audio_PlayFanfare(u16 seqId); // void func_801A312C(void); diff --git a/include/variables.h b/include/variables.h index 2d64bd2b0..8a2e66960 100644 --- a/include/variables.h +++ b/include/variables.h @@ -219,137 +219,6 @@ extern UNK_PTR D_801C5C50; // extern UNK_TYPE1 D_801C5C9C; extern UNK_PTR D_801C5CB0; -// extern UNK_TYPE1 D_801C6A70; -// extern UNK_TYPE2 D_801C6A74; -// extern UNK_TYPE2 D_801C6A78; -// extern UNK_TYPE2 D_801C6A7C; -// extern UNK_TYPE2 D_801C6A80; -// extern UNK_TYPE2 D_801C6A84; -// extern UNK_TYPE2 D_801C6A88; -// extern UNK_TYPE2 D_801C6A8C; -// extern UNK_TYPE2 D_801C6A90; -// extern UNK_TYPE2 D_801C6A94; -extern u8 gPageSwitchNextButtonStatus[6][5]; -// extern UNK_TYPE1 D_801CED40; -// extern UNK_TYPE2 D_801CFC78; -// extern UNK_TYPE1 D_801CFC7A; -// extern UNK_TYPE1 D_801CFC7C; -// extern UNK_TYPE1 D_801CFC7E; -// extern UNK_TYPE1 D_801CFC84; -// extern UNK_TYPE1 D_801CFC88; -// extern UNK_TYPE1 D_801CFC8C; -// extern UNK_TYPE1 D_801CFC8E; -// extern UNK_TYPE1 D_801CFC92; -extern u8 D_801CFC98; -extern s16 D_801CFCA4[9]; -// extern UNK_TYPE2 D_801CFCAC; -extern s16 gOcarinaSongItemMap[]; -// extern UNK_TYPE2 D_801CFCD8; -// extern UNK_TYPE2 D_801CFCE4; -// extern UNK_TYPE2 D_801CFCF0; -// extern UNK_TYPE2 D_801CFCF4; -// extern UNK_TYPE2 D_801CFCF8; -// extern UNK_TYPE2 D_801CFCFC; -// extern UNK_TYPE2 D_801CFD00; -// extern UNK_TYPE2 D_801CFD04; -// extern UNK_TYPE2 D_801CFD08; -// extern UNK_TYPE2 D_801CFD0C; -// extern UNK_TYPE2 D_801CFD10; -// extern UNK_TYPE2 D_801CFD1C; -// extern UNK_TYPE2 D_801CFD28; -// extern UNK_TYPE2 D_801CFD2C; -// extern UNK_TYPE2 D_801CFD30; -// extern UNK_TYPE2 D_801CFD34; -// extern UNK_TYPE2 D_801CFD38; -// extern UNK_TYPE2 D_801CFD3C; -// extern UNK_TYPE2 D_801CFD40; -// extern UNK_TYPE2 D_801CFD44; -// extern UNK_TYPE2 D_801CFD48; -// extern UNK_TYPE2 D_801CFD54; -// extern UNK_TYPE2 D_801CFD60; -// extern UNK_TYPE2 D_801CFD64; -// extern UNK_TYPE2 D_801CFD68; -// extern UNK_TYPE2 D_801CFD6C; -// extern UNK_TYPE2 D_801CFD70; -// extern UNK_TYPE2 D_801CFD74; -// extern UNK_TYPE2 D_801CFD78; -// extern UNK_TYPE2 D_801CFD7C; -// extern UNK_TYPE2 D_801CFD80; -// extern UNK_TYPE2 D_801CFD84; -// extern UNK_TYPE2 D_801CFD88; -// extern UNK_TYPE2 D_801CFD8C; -// extern UNK_TYPE2 D_801CFD90; -extern UNK_PTR D_801CFD94; -// extern UNK_TYPE2 D_801CFD98; -// extern UNK_TYPE2 D_801CFD9C; -// extern UNK_TYPE2 D_801CFDA0; -// extern UNK_TYPE1 D_801CFDA4; -// extern UNK_TYPE1 D_801CFDC8; -// extern UNK_TYPE1 D_801CFDEC; -// extern UNK_TYPE1 D_801CFE04; -// extern UNK_TYPE1 D_801CFE1C; -// extern UNK_TYPE1 D_801CFE34; -// extern UNK_TYPE1 D_801CFE4C; -// extern UNK_TYPE1 D_801CFE5C; -// extern UNK_TYPE1 D_801CFE68; -// extern UNK_TYPE1 D_801CFE74; -// extern UNK_TYPE1 D_801CFEA4; -// extern UNK_TYPE1 D_801CFED4; -// extern UNK_TYPE1 D_801CFF04; -// extern UNK_TYPE1 D_801CFF34; -// extern UNK_TYPE1 D_801CFF64; -// extern UNK_TYPE1 D_801CFF70; -// extern UNK_TYPE1 D_801CFF7C; -// extern UNK_TYPE1 D_801CFF88; -// extern UNK_TYPE1 D_801CFF94; -// extern UNK_TYPE1 D_801D0000; -// extern UNK_TYPE1 D_801D0001; -// extern UNK_TYPE1 D_801D001F; -// extern UNK_TYPE1 D_801D0188; -// extern UNK_TYPE1 D_801D023A; -// extern UNK_TYPE1 D_801D0250; -// extern UNK_TYPE2 D_801D0268; -// extern UNK_TYPE1 D_801D027C; -// extern UNK_TYPE1 D_801D0284; -// extern UNK_TYPE1 D_801D028C; -// extern UNK_TYPE1 D_801D02C0; -// extern UNK_TYPE1 D_801D02D8; -// extern UNK_TYPE1 D_801D02F8; -// extern UNK_TYPE1 D_801D0330; -// extern UNK_TYPE1 D_801D0334; -// extern UNK_TYPE1 D_801D0340; -// extern UNK_TYPE1 D_801D034C; -// extern UNK_TYPE1 D_801D0358; -// extern UNK_TYPE1 D_801D0364; -// extern UNK_TYPE1 D_801D0378; -extern char D_801D039C[]; -// extern UNK_TYPE1 D_801D03A4; -// extern UNK_TYPE1 D_801D03A8; -// extern UNK_TYPE1 D_801D03C8; -// extern UNK_TYPE1 D_801D03E8; -// extern UNK_TYPE1 D_801D03F0; -// extern UNK_TYPE1 D_801D0401; -// extern UNK_TYPE1 D_801D0408; -// extern UNK_TYPE1 D_801D0428; -// extern UNK_TYPE1 D_801D045A; -// extern UNK_TYPE1 D_801D0462; -//extern UNK_TYPE1 D_801D0468; -// extern UNK_TYPE1 sNESFontWidths; -// extern char sRupeesTextLocalization[]; -// extern UNK_TYPE1 sRupeesTextLength; -// extern char D_801D0714[]; -// extern UNK_TYPE1 D_801D07C4; -// extern UNK_TYPE1 D_801D07DC; -// extern UNK_TYPE1 D_801D080C; -// extern UNK_TYPE1 D_801D083C; -// extern UNK_TYPE1 D_801D086C; -// extern UNK_TYPE1 D_801D0890; -// extern UNK_TYPE1 D_801D089C; -// extern UNK_TYPE1 D_801D08CC; -// extern UNK_TYPE1 D_801D08D8; -// extern UNK_TYPE1 D_801D08E4; -// extern UNK_TYPE1 sMaskCodeTextENG; -// extern UNK_TYPE1 sMaskCodeTextLengthENG; extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; // extern UNK_TYPE1 D_801D0B8C; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; diff --git a/include/z64item.h b/include/z64item.h index 7cc31eeca..1a43b00af 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -326,6 +326,27 @@ typedef enum ItemId { /* 0xB1 */ ITEM_MAP_POINT_MOUNTAIN_VILLAGE, /* 0xB2 */ ITEM_MAP_POINT_MILK_ROAD, /* 0xB3 */ ITEM_MAP_POINT_ZORA_CAPE, + /* 0xB8 */ ITEM_B8 = 0xB8, + /* 0xB9 */ ITEM_B9, + /* 0xBA */ ITEM_BA, + /* 0xBB */ ITEM_BB, + /* 0xBC */ ITEM_BC, + /* 0xBD */ ITEM_BD, + /* 0xBE */ ITEM_BE, + /* 0xBF */ ITEM_BF, + /* 0xC0 */ ITEM_C0, + /* 0xC1 */ ITEM_C1, + /* 0xC2 */ ITEM_C2, + /* 0xC3 */ ITEM_C3, + /* 0xC4 */ ITEM_C4, + /* 0xC5 */ ITEM_C5, + /* 0xC6 */ ITEM_C6, + /* 0xC7 */ ITEM_C7, + /* 0xC8 */ ITEM_C8, + /* 0xC9 */ ITEM_C9, + /* 0xCA */ ITEM_CA, + /* 0xCB */ ITEM_CB, + /* 0xCC */ ITEM_CC, /* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST /* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN /* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO diff --git a/include/z64message.h b/include/z64message.h index fc41055d4..1b84f90db 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -139,9 +139,6 @@ typedef enum MessageMode { /* 0x4F */ MSGMODE_OWL_SAVE_2 } MessageMode; -extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; -extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; - typedef enum FaceReactionSet { /* 0x11 */ FACE_REACTION_SET_JIM = 0x11, /* 0x12 */ FACE_REACTION_SET_BOMBERS, @@ -177,7 +174,6 @@ typedef enum TextState { /* 18 */ TEXT_STATE_18 } TextState; - #define FONT_CHAR_TEX_WIDTH 16 #define FONT_CHAR_TEX_HEIGHT 16 //! TODO: Make this use `sizeof(AnyFontTextureSymbol)` @@ -203,8 +199,8 @@ typedef struct { u16 wchar[640]; // msgBufWide u64 force_structure_alignment_msg; } msgBuf; - /* 0x11D80 */ u8* messageStart; - /* 0x11D84 */ u8* messageEnd; + /* 0x11D80 */ u32 messageStart; + /* 0x11D84 */ u32 messageEnd; /* 0x11D88 */ u8 unk_11D88; // current Char Buffer ? } Font; // size = 0x11D90 @@ -324,4 +320,33 @@ typedef struct MessageContext { /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6]; } MessageContext; // size = 0x120E0 +s32 Message_ShouldAdvance(struct PlayState* play); +void Message_CloseTextbox(struct PlayState* play); +void Message_DrawTextChar(struct PlayState* play, TexturePtr texture, Gfx** gfxP); +void Message_DrawItemIcon(struct PlayState* play, Gfx** gfxP); +void Message_HandleOcarina(struct PlayState* play); +void Message_LoadItemIcon(struct PlayState* play, u16 itemId, s16 arg2); +void Message_SetupLoadItemIcon(struct PlayState* play); +void func_801514B0(struct PlayState* play, u16 arg1, u8 arg2); +void Message_StartTextbox(struct PlayState* play, u16 textId, Actor* actor); +void Message_ContinueTextbox(struct PlayState* play, u16 textId); +void Message_DisplaySceneTitleCard(struct PlayState* play, u16 textId); +void Message_BombersNotebookQueueEvent(struct PlayState* play, u8 event); +void Message_DisplayOcarinaStaff(struct PlayState* play, u16 ocarinaAction); +void Message_DisplayOcarinaStaffBlockSunsSong(struct PlayState* play, u16 ocarinaAction); +u8 Message_GetState(MessageContext* msgCtx); +void Message_Draw(struct PlayState* play); +void Message_Update(struct PlayState* play); +void Message_Init(struct PlayState* play); +void Message_FindMessageNES(struct PlayState* play, u16 textId); +void Message_DrawTextNES(struct PlayState* play, Gfx** gfxP, u16 textDrawPos); +void Message_DecodeNES(struct PlayState* play); +void Message_FindCreditsMessage(struct PlayState* play, u16 textId); +void Message_DrawTextCredits(struct PlayState* play, Gfx** gfxP); +void Message_DecodeCredits(struct PlayState* play); + +extern u8 gPageSwitchNextButtonStatus[6][5]; +extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; +extern s16 gOcarinaSongItemMap[]; + #endif diff --git a/include/z64ocarina.h b/include/z64ocarina.h index 7cfafde4f..2419a98df 100644 --- a/include/z64ocarina.h +++ b/include/z64ocarina.h @@ -32,10 +32,135 @@ typedef enum { /* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song } OcarinaSongId; -typedef enum OcarinaMode { - /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST = 24, +typedef enum { + /* 0x00 */ OCARINA_ACTION_0, // acts like free play but never set + /* 0x01 */ OCARINA_ACTION_FREE_PLAY, + /* 0x02 */ OCARINA_ACTION_DEMONSTRATE_SONATA, // Song demonstrated/previewed by another actor/teacher + /* 0x03 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY, + /* 0x04 */ OCARINA_ACTION_DEMONSTRATE_NEW_WAVE, + /* 0x05 */ OCARINA_ACTION_DEMONSTRATE_ELEGY, + /* 0x06 */ OCARINA_ACTION_DEMONSTRATE_OATH, + /* 0x07 */ OCARINA_ACTION_DEMONSTRATE_SARIAS, + /* 0x08 */ OCARINA_ACTION_DEMONSTRATE_TIME, + /* 0x09 */ OCARINA_ACTION_DEMONSTRATE_HEALING, + /* 0x0A */ OCARINA_ACTION_DEMONSTRATE_EPONAS, + /* 0x0B */ OCARINA_ACTION_DEMONSTRATE_SOARING, + /* 0x0C */ OCARINA_ACTION_DEMONSTRATE_STORMS, + /* 0x0D */ OCARINA_ACTION_DEMONSTRATE_SUNS, + /* 0x0E */ OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME, + /* 0x0F */ OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME, + /* 0x10 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO, + /* 0x11 */ OCARINA_ACTION_11, + /* 0x12 */ OCARINA_ACTION_PROMPT_SONATA, // User plays back song through inputing 1 note at a time, as a tutorial. Each note is verified. + /* 0x13 */ OCARINA_ACTION_PROMPT_GORON_LULLABY, + /* 0x14 */ OCARINA_ACTION_PROMPT_NEW_WAVE, + /* 0x15 */ OCARINA_ACTION_PROMPT_ELEGY, + /* 0x16 */ OCARINA_ACTION_PROMPT_OATH, + /* 0x17 */ OCARINA_ACTION_PROMPT_SARIAS, + /* 0x18 */ OCARINA_ACTION_PROMPT_TIME, + /* 0x19 */ OCARINA_ACTION_PROMPT_HEALING, + /* 0x1A */ OCARINA_ACTION_PROMPT_EPONAS, + /* 0x1B */ OCARINA_ACTION_PROMPT_SOARING, + /* 0x1C */ OCARINA_ACTION_PROMPT_STORMS, + /* 0x1D */ OCARINA_ACTION_PROMPT_SUNS, + /* 0x1E */ OCARINA_ACTION_PROMPT_INVERTED_TIME, + /* 0x1F */ OCARINA_ACTION_PROMPT_DOUBLE_TIME, + /* 0x20 */ OCARINA_ACTION_PROMPT_GORON_LULLABY_INTRO, + /* 0x21 */ OCARINA_ACTION_21, + /* 0x22 */ OCARINA_ACTION_CHECK_SONATA, // Once the entire song is played, checks for a specific song. Broken as playing any dungeon song will softlock. + /* 0x23 */ OCARINA_ACTION_CHECK_GORON_LULLABY, + /* 0x24 */ OCARINA_ACTION_CHECK_NEW_WAVE, + /* 0x25 */ OCARINA_ACTION_CHECK_ELEGY, + /* 0x26 */ OCARINA_ACTION_CHECK_OATH, + /* 0x27 */ OCARINA_ACTION_CHECK_SARIAS, + /* 0x28 */ OCARINA_ACTION_CHECK_TIME, + /* 0x29 */ OCARINA_ACTION_CHECK_HEALING, + /* 0x2A */ OCARINA_ACTION_CHECK_EPONAS, + /* 0x2B */ OCARINA_ACTION_CHECK_SOARING, + /* 0x2C */ OCARINA_ACTION_CHECK_STORMS, + /* 0x2D */ OCARINA_ACTION_CHECK_SUNS, + /* 0x2E */ OCARINA_ACTION_CHECK_INVERTED_TIME, + /* 0x2F */ OCARINA_ACTION_CHECK_DOUBLE_TIME, + /* 0x30 */ OCARINA_ACTION_CHECK_GORON_LULLABY_INTRO, + /* 0x31 */ OCARINA_ACTION_CHECK_SCARECROW_SPAWN, // TODO: Verify (may include more) + /* 0x32 */ OCARINA_ACTION_FREE_PLAY_DONE, + /* 0x33 */ OCARINA_ACTION_SCARECROW_LONG_RECORDING, + /* 0x34 */ OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION, + /* 0x35 */ OCARINA_ACTION_SCARECROW_SPAWN_RECORDING, + /* 0x36 */ OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION, + /* 0x37 */ OCARINA_ACTION_37, + /* 0x38 */ OCARINA_ACTION_CHECK_NOTIME, + /* 0x39 */ OCARINA_ACTION_CHECK_NOTIME_DONE, + /* 0x3A */ OCARINA_ACTION_3A, // Monkey Instrument Prompt + /* 0x3B */ OCARINA_ACTION_3B, + /* 0x3C */ OCARINA_ACTION_3C, + /* 0x3D */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF, // Evan Part 1 demonstrate first half (Japa) + /* 0x3E */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF, // Evan Part 2 demonstrate first half (Japa) + /* 0x3F */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF, // Evan Part 1 demonstrate second half (Diary) + /* 0x40 */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF, // Evan Part 2 demonstrate second half (Diary) + /* 0x41 */ OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF, // Evan Part 1 prompt second half (Japa) + /* 0x42 */ OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF, // Evan Part 2 prompt second half (Japa) + /* 0x43 */ OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN, + /* 0x44 */ OCARINA_ACTION_PROMPT_WIND_FISH_GORON, + /* 0x45 */ OCARINA_ACTION_PROMPT_WIND_FISH_ZORA, + /* 0x46 */ OCARINA_ACTION_PROMPT_WIND_FISH_DEKU, + /* 0x47 */ OCARINA_ACTION_TIMED_PROMPT_SONATA, // Playing back a particular song, but must also time the notes properly. Not fully implemented + /* 0x48 */ OCARINA_ACTION_TIMED_PROMPT_GORON_LULLABY, + /* 0x49 */ OCARINA_ACTION_TIMED_PROMPT_NEW_WAVE, + /* 0x4A */ OCARINA_ACTION_TIMED_PROMPT_ELEGY, + /* 0x4B */ OCARINA_ACTION_TIMED_PROMPT_OATH, + /* 0x4C */ OCARINA_ACTION_TIMED_PROMPT_SARIAS, + /* 0x4D */ OCARINA_ACTION_TIMED_PROMPT_TIME, + /* 0x4E */ OCARINA_ACTION_TIMED_PROMPT_HEALING, + /* 0x4F */ OCARINA_ACTION_TIMED_PROMPT_EPONAS, + /* 0x50 */ OCARINA_ACTION_TIMED_PROMPT_SOARING, + /* 0x51 */ OCARINA_ACTION_TIMED_PROMPT_STORMS +} OcarinaSongActionId; + +typedef enum { + /* 0x00 */ OCARINA_MODE_NONE, + /* 0x01 */ OCARINA_MODE_ACTIVE, + /* 0x02 */ OCARINA_MODE_WARP, + /* 0x03 */ OCARINA_MODE_EVENT, + /* 0x04 */ OCARINA_MODE_END, + /* 0x05 */ OCARINA_MODE_PLAYED_TIME, // Played Time + /* 0x06 */ OCARINA_MODE_PLAYED_HEALING, + /* 0x07 */ OCARINA_MODE_PLAYED_EPONAS, + /* 0x08 */ OCARINA_MODE_PLAYED_SOARING, + /* 0x09 */ OCARINA_MODE_PLAYED_STORMS, + /* 0x0A */ OCARINA_MODE_PLAYED_SUNS, + /* 0x0B */ OCARINA_MODE_PLAYED_INVERTED_TIME, + /* 0x0C */ OCARINA_MODE_PLAYED_DOUBLE_TIME, + /* 0x0D */ OCARINA_MODE_PLAYED_SCARECROW_SPAWN, + /* 0x0E */ OCARINA_MODE_E, + /* 0x0F */ OCARINA_MODE_F, + /* 0x10 */ OCARINA_MODE_10, + /* 0x11 */ OCARINA_MODE_11, // End memory/scarecrow from OoT + /* 0x12 */ OCARINA_MODE_PROCESS_SOT, // Song of Time related + /* 0x13 */ OCARINA_MODE_PROCESS_INVERTED_TIME, // Inverted Song of Time related + /* 0x14 */ OCARINA_MODE_14, + /* 0x15 */ OCARINA_MODE_PROCESS_DOUBLE_TIME, // Song of Double Time related + /* 0x16 */ OCARINA_MODE_APPLY_SOT, // Apply + /* 0x17 */ OCARINA_MODE_17, + /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST, /* 0x19 */ OCARINA_MODE_APPLY_INV_SOT_SLOW, - /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT + /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT, + /* 0x1B */ OCARINA_MODE_1B, + /* 0x1C */ OCARINA_MODE_WARP_TO_GREAT_BAY_COAST, + /* 0x1D */ OCARINA_MODE_WARP_TO_ZORA_CAPE, + /* 0x1E */ OCARINA_MODE_WARP_TO_SNOWHEAD, + /* 0x1F */ OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE, + /* 0x20 */ OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN, + /* 0x21 */ OCARINA_MODE_WARP_TO_MILK_ROAD, + /* 0x22 */ OCARINA_MODE_WARP_TO_WOODFALL, + /* 0x23 */ OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP, + /* 0x24 */ OCARINA_MODE_WARP_TO_IKANA_CANYON, + /* 0x25 */ OCARINA_MODE_WARP_TO_STONE_TOWER, + /* 0x26 */ OCARINA_MODE_WARP_TO_ENTRANCE, + /* 0x27 */ OCARINA_MODE_PROCESS_RESTRICTED_SONG, // Variants of Song of Time, Soaring, or Elegy restricted + /* 0x28 */ OCARINA_MODE_28, + /* 0x29 */ OCARINA_MODE_29, + /* 0x2A */ OCARINA_MODE_PLAYED_FULL_EVAN_SONG } OcarinaMode; typedef enum { @@ -78,7 +203,7 @@ typedef enum { /* 3 */ OCARINA_INSTRUMENT_WHISTLING_FLUTE, /* 4 */ OCARINA_INSTRUMENT_HARP, /* 5 */ OCARINA_INSTRUMENT_IKANA_KING, - /* 6 */ OCARINA_INSTRUMENT_TATL, + /* 6 */ OCARINA_INSTRUMENT_TATL, // Sounds like bells /* 7 */ OCARINA_INSTRUMENT_GORON_DRUMS, /* 8 */ OCARINA_INSTRUMENT_ZORA_GUITAR, /* 9 */ OCARINA_INSTRUMENT_DEKU_PIPES, @@ -98,6 +223,16 @@ typedef enum { /* -1 */ OCARINA_RECORD_REJECTED = 0xFF } OcarinaRecordingState; +typedef enum { + /* 0 */ OCARINA_ERROR_NONE, + /* 1 */ OCARINA_ERROR_1, + /* 2 */ OCARINA_ERROR_2, + /* 3 */ OCARINA_ERROR_3, + /* 4 */ OCARINA_ERROR_BEND, + /* 5 */ OCARINA_ERROR_5, + /* 0xFF */ OCARINA_ERROR_INACTIVE = 0xFF // Song not available +} OcarinaError; + /** * bFlat4Flag Note: * Flag for resolving whether (pitch = OCARINA_PITCH_BFLAT4) diff --git a/include/z64save.h b/include/z64save.h index 7d1bc781d..e22b2c58f 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -115,7 +115,7 @@ typedef enum { /* 16 */ TIMER_STATE_POSTMAN_END } TimerState; -typedef enum { +typedef enum BottleTimerState { /* 0 */ BOTTLE_TIMER_STATE_OFF, /* 1 */ BOTTLE_TIMER_STATE_COUNTING } BottleTimerState; @@ -126,7 +126,7 @@ typedef enum { /* 3 */ MINIGAME_STATUS_END = 3 } MinigameStatus; -typedef enum { +typedef enum HudVisibility { /* 0 */ HUD_VISIBILITY_IDLE, /* 1 */ HUD_VISIBILITY_NONE, /* 2 */ HUD_VISIBILITY_NONE_ALT, // Identical to HUD_VISIBILITY_NONE @@ -304,7 +304,7 @@ typedef struct SaveInfo { /* 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? + /* 0xF41 */ u8 scarecrowSpawnSongSet; // "oca_rec_flag8" /* 0xF42 */ u8 scarecrowSpawnSong[128]; /* 0xFC2 */ s8 bombersCaughtNum; // "aikotoba_index" /* 0xFC3 */ s8 bombersCaughtOrder[5]; // "aikotoba_table" @@ -453,8 +453,8 @@ typedef enum { // The day begins at CLOCK_TIME(6, 0) so it must be offset. #define TIME_UNTIL_MOON_CRASH \ - ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); -#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); + ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))) +#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))) #define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm) diff --git a/spec b/spec index d7d51ec20..dcd055a6f 100644 --- a/spec +++ b/spec @@ -528,8 +528,6 @@ beginseg include "build/src/code/z_vr_box_draw.o" include "build/src/code/z_sram_NES.o" include "build/src/code/z_message.o" - include "build/data/code/z_message.data.o" - include "build/data/code/z_message.bss.o" include "build/src/code/z_message_nes.o" include "build/src/code/z_message_staff.o" include "build/src/code/z_player_call.o" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 46dfe189e..976b0fd4d 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -18,7 +18,7 @@ void SaveContext_Init(void) { gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.zTargetSetting = 0; } diff --git a/src/code/z_demo.c b/src/code/z_demo.c index ba9199dbb..11d614fc1 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -197,7 +197,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { if (isFirstFrame) { loadedScene = play->loadedScene; if (loadedScene->titleTextId != 0) { - func_80151A68(play, loadedScene->titleTextId); + Message_DisplaySceneTitleCard(play, loadedScene->titleTextId); } } break; @@ -1043,7 +1043,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { if (sCurOcarinaAction != cmd->textId) { sCutsceneTextboxType = CS_TEXT_OCARINA_ACTION; sCurOcarinaAction = cmd->textId; - func_80152434(play, cmd->textId); + Message_DisplayOcarinaStaff(play, cmd->textId); return; } } @@ -1098,7 +1098,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - func_80152434(play, cmd->textId); + Message_DisplayOcarinaStaff(play, cmd->textId); } } @@ -1565,7 +1565,7 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) { if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)) & 0x4000) != 0) { - func_80151A68(play, scene->titleTextId); + Message_DisplaySceneTitleCard(play, scene->titleTextId); } } diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index a08f2b56b..1b3aa49d7 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -93,7 +93,7 @@ void KaleidoSetup_Update(PlayState* play) { (play->gameOverCtx.state == GAMEOVER_INACTIVE)) { if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if ((gSaveContext.save.cutsceneIndex < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) { - if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) { + if (!Play_InCsMode(play) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF))) { if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { if (!CHECK_EVENTINF(EVENTINF_17) && !(player->stateFlags1 & PLAYER_STATE1_20)) { diff --git a/src/code/z_message.c b/src/code/z_message.c index 42a0e301f..3fb8f5bac 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -1,10 +1,31 @@ #include "global.h" +#include "z64horse.h" #include "z64shrink_window.h" #include "z64view.h" #include "message_data_static.h" +#include "interface/parameter_static/parameter_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#if 0 +u8 D_801C6A70 = 0; +s16 sOcarinaButtonIndexBufPos = 0; +s16 sOcarinaButtonIndexBufLen = 0; +s16 sLastPlayedSong = 0xFF; +s16 sOcarinaButtonStepR = 0; +s16 sOcarinaButtonStepG = 0; +s16 sOcarinaButtonStepB = 0; +s16 sOcarinaButtonFlashTimer = 12; +s16 sOcarinaButtonFlashColorIndex = 1; +s16 D_801C6A94 = 0; + +u8 gPageSwitchNextButtonStatus[][5] = { + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, +}; + #define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage, #define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage, @@ -27,44 +48,65 @@ u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = { #undef DEFINE_PERSON #undef DEFINE_EVENT -s16 D_801D02D8[15] = { - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE7, // Song of Time Effect, Song of Healing Effect - ACTOR_OCEFF_WIPE2, ACTOR_OCEFF_WIPE6, // Epona's Song Effect, Song of Soaring Effect - ACTOR_OCEFF_STORM, ACTOR_OCEFF_SPOT, // Song of Storms Effect II [?], Sun's Song Effect - ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE, // Song of Time Effect, Song of Time Effect - ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect +// TODO: Scripts +// Include message tables D_801C6B98 and D_801CFB08 +#include "src/code/z_message_tables.inc.c" + +s16 D_801CFC78[TEXTBOX_TYPE_MAX] = { + 0, // TEXTBOX_TYPE_0 + 1, // TEXTBOX_TYPE_1 + 3, // TEXTBOX_TYPE_2 + 2, // TEXTBOX_TYPE_3 + 14, // TEXTBOX_TYPE_4 + 14, // TEXTBOX_TYPE_5 + 0, // TEXTBOX_TYPE_6 + 14, // TEXTBOX_TYPE_7 + 0, // TEXTBOX_TYPE_8 + 0, // TEXTBOX_TYPE_9 + 0, // TEXTBOX_TYPE_A + 14, // TEXTBOX_TYPE_B + 14, // TEXTBOX_TYPE_C + 4, // TEXTBOX_TYPE_D + 14, // TEXTBOX_TYPE_E + 0, // TEXTBOX_TYPE_F +}; +u8 sOcarinaButtonIndexBuf[12] = { 0 }; +s16 sOcarinaButtonAlphaValues[9] = { 0 }; +s16 gOcarinaSongItemMap[] = { + OCARINA_SONG_SONATA, OCARINA_SONG_GORON_LULLABY, OCARINA_SONG_NEW_WAVE, + OCARINA_SONG_ELEGY, OCARINA_SONG_OATH, OCARINA_SONG_SARIAS, + OCARINA_SONG_TIME, OCARINA_SONG_HEALING, OCARINA_SONG_EPONAS, + OCARINA_SONG_SOARING, OCARINA_SONG_STORMS, OCARINA_SONG_SUNS, + OCARINA_SONG_INVERTED_TIME, OCARINA_SONG_DOUBLE_TIME, OCARINA_SONG_GORON_LULLABY_INTRO, }; -s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 }; -#endif +// bss -extern s16 D_801D02D8[]; -extern s32 D_801D02F8[]; -extern s16 D_801F6B0C; -extern s16 D_801F6B0E; -extern s16 D_801F6B10; -extern s16 D_801F6B12; -extern s16 D_801F6B14; -extern s16 D_801F6B16; -extern s16 D_801F6B18; -extern s16 D_801F6B1A; -extern s16 D_801F6B1C; -extern s16 D_801F6B1E; -extern s16 D_801F6B20; -extern s16 D_801F6B22; -extern MessageTableEntry D_801C6B98[]; -extern MessageTableEntry D_801CFB08[]; +s32 sCharTexSize; +s32 sCharTexScale; +s32 D_801F6B08; -void func_80147520(void) { - D_801CFC98 = 0xFF; - D_801CFCA4[0] = D_801CFCA4[1] = D_801CFCA4[2] = D_801CFCA4[3] = D_801CFCA4[4] = D_801CFCA4[5] = D_801CFCA4[6] = - D_801CFCA4[7] = D_801CFCA4[8] = 0; +s16 sOcarinaButtonAPrimR; +s16 sOcarinaButtonAPrimB; +s16 sOcarinaButtonAPrimG; +s16 sOcarinaButtonAEnvR; +s16 sOcarinaButtonAEnvB; +s16 sOcarinaButtonAEnvG; +s16 sOcarinaButtonCPrimR; +s16 sOcarinaButtonCPrimB; +s16 sOcarinaButtonCPrimG; +s16 sOcarinaButtonCEnvR; +s16 sOcarinaButtonCEnvB; +s16 sOcarinaButtonCEnvG; + +void Message_ResetOcarinaButtonAlphas(void) { + sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID; + sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] = + sOcarinaButtonAlphaValues[3] = sOcarinaButtonAlphaValues[4] = sOcarinaButtonAlphaValues[5] = + sOcarinaButtonAlphaValues[6] = sOcarinaButtonAlphaValues[7] = sOcarinaButtonAlphaValues[8] = 0; } -void func_80147564(PlayState* play) { +void Message_ResetOcarinaButtonState(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_A] = 189; @@ -72,19 +114,21 @@ void func_80147564(PlayState* play) { msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_RIGHT] = 179; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_LEFT] = 174; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_UP] = 169; - func_80147520(); - D_801F6B0C = 0x50; - D_801F6B10 = 0x96; - D_801F6B0E = 0xFF; - D_801F6B12 = 0xA; - D_801F6B16 = 0xA; - D_801F6B14 = 0xA; - D_801F6B18 = 0xFF; - D_801F6B1C = 0xFF; - D_801F6B1A = 0x32; - D_801F6B1E = 0xA; - D_801F6B22 = 0xA; - D_801F6B20 = 0xA; + + Message_ResetOcarinaButtonAlphas(); + + sOcarinaButtonAPrimR = 80; + sOcarinaButtonAPrimG = 150; + sOcarinaButtonAPrimB = 255; + sOcarinaButtonAEnvR = 10; + sOcarinaButtonAEnvG = 10; + sOcarinaButtonAEnvB = 10; + sOcarinaButtonCPrimR = 255; + sOcarinaButtonCPrimG = 255; + sOcarinaButtonCPrimB = 50; + sOcarinaButtonCEnvR = 10; + sOcarinaButtonCEnvG = 10; + sOcarinaButtonCEnvB = 10; } s32 Message_ShouldAdvance(PlayState* play) { @@ -123,77 +167,617 @@ void Message_CloseTextbox(PlayState* play) { if (play->msgCtx.msgLength != 0) { msgCtx->stateTimer = 2; - msgCtx->msgMode = 0x43; + msgCtx->msgMode = MSGMODE_TEXT_CLOSING; msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; Audio_PlaySfx(NA_SE_NONE); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147818.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147F18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148558.s") - -#ifdef NON_MATCHING -void func_80148B98(PlayState* play, u8 arg1) { - static s16 held = 0; +void Message_DrawTextboxIcon(PlayState* play, Gfx** gfxP, s16 x, s16 y) { + static Color_RGB16 sIconPrimColors[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 sIconEnvColors[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 sIconPrimR = 0; + static s16 sIconPrimG = 80; + static s16 sIconPrimB = 200; + static s16 sIconFlashTimer = 12; + static s16 sIconFlashColorIndex = 0; + static s16 sIconEnvR = 0; + static s16 sIconEnvG = 0; + static s16 sIconEnvB = 0; + Gfx* gfx; MessageContext* msgCtx = &play->msgCtx; - Input* curInput = CONTROLLER1(&play->state); + Font* font = &msgCtx->font; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + u8* iconTexture = msgCtx->font.iconBuf; - if ((curInput->rel.stick_y > 29) && held == 0) { - held = 1; + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(sIconPrimR - sIconPrimColors[sIconFlashColorIndex].r) / sIconFlashTimer; + primG = ABS_ALT(sIconPrimG - sIconPrimColors[sIconFlashColorIndex].g) / sIconFlashTimer; + primB = ABS_ALT(sIconPrimB - sIconPrimColors[sIconFlashColorIndex].b) / sIconFlashTimer; + + if (sIconPrimR >= sIconPrimColors[sIconFlashColorIndex].r) { + sIconPrimR -= primR; + } else { + sIconPrimR += primR; + } + + if (sIconPrimG >= sIconPrimColors[sIconFlashColorIndex].g) { + sIconPrimG -= primG; + } else { + sIconPrimG += primG; + } + + if (sIconPrimB >= sIconPrimColors[sIconFlashColorIndex].b) { + sIconPrimB -= primB; + } else { + sIconPrimB += primB; + } + + envR = ABS_ALT(sIconEnvR - sIconEnvColors[sIconFlashColorIndex].r) / sIconFlashTimer; + envG = ABS_ALT(sIconEnvG - sIconEnvColors[sIconFlashColorIndex].g) / sIconFlashTimer; + envB = ABS_ALT(sIconEnvB - sIconEnvColors[sIconFlashColorIndex].b) / sIconFlashTimer; + + if (sIconEnvR >= sIconEnvColors[sIconFlashColorIndex].r) { + sIconEnvR -= envR; + } else { + sIconEnvR += envR; + } + + if (sIconEnvG >= sIconEnvColors[sIconFlashColorIndex].g) { + sIconEnvG -= envG; + } else { + sIconEnvG += envG; + } + + if (sIconEnvB >= sIconEnvColors[sIconFlashColorIndex].b) { + sIconEnvB -= envB; + } else { + sIconEnvB += envB; + } + + sIconFlashTimer--; + if (sIconFlashTimer == 0) { + sIconPrimR = sIconPrimColors[sIconFlashColorIndex].r; + sIconPrimG = sIconPrimColors[sIconFlashColorIndex].g; + sIconPrimB = sIconPrimColors[sIconFlashColorIndex].b; + sIconEnvR = sIconEnvColors[sIconFlashColorIndex].r; + sIconEnvG = sIconEnvColors[sIconFlashColorIndex].g; + sIconEnvB = sIconEnvColors[sIconFlashColorIndex].b; + sIconFlashTimer = 12; + sIconFlashColorIndex ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, sIconPrimR, sIconPrimG, sIconPrimB, 255); + gDPSetEnvColor(gfx++, sIconEnvR, sIconEnvG, sIconEnvB, 255); + + if (!play->pauseCtx.bombersNotebookOpen) { + gDPLoadTextureBlock_4b(gfx++, iconTexture, G_IM_FMT_I, 16, 16, 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++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2, + G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale); + } + + msgCtx->stateTimer++; + *gfxP = gfx; + } +} + +void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) { + static Color_RGB16 D_801CFD10[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 D_801CFD1C[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 D_801CFD28 = 0; + static s16 D_801CFD2C = 80; + static s16 D_801CFD30 = 200; + static s16 D_801CFD34 = 12; + static s16 D_801CFD38 = 0; + static s16 D_801CFD3C = 0; + static s16 D_801CFD40 = 0; + static s16 D_801CFD44 = 0; + Gfx* gfx; + MessageContext* msgCtx = &play->msgCtx; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(D_801CFD28 - D_801CFD10[D_801CFD38].r) / D_801CFD34; + primG = ABS_ALT(D_801CFD2C - D_801CFD10[D_801CFD38].g) / D_801CFD34; + primB = ABS_ALT(D_801CFD30 - D_801CFD10[D_801CFD38].b) / D_801CFD34; + + if (D_801CFD28 >= D_801CFD10[D_801CFD38].r) { + D_801CFD28 -= primR; + } else { + D_801CFD28 += primR; + } + + if (D_801CFD2C >= D_801CFD10[D_801CFD38].g) { + D_801CFD2C -= primG; + } else { + D_801CFD2C += primG; + } + + if (D_801CFD30 >= D_801CFD10[D_801CFD38].b) { + D_801CFD30 -= primB; + } else { + D_801CFD30 += primB; + } + + envR = ABS_ALT(D_801CFD3C - D_801CFD1C[D_801CFD38].r) / D_801CFD34; + envG = ABS_ALT(D_801CFD40 - D_801CFD1C[D_801CFD38].g) / D_801CFD34; + envB = ABS_ALT(D_801CFD44 - D_801CFD1C[D_801CFD38].b) / D_801CFD34; + + if (D_801CFD3C >= D_801CFD1C[D_801CFD38].r) { + D_801CFD3C -= envR; + } else { + D_801CFD3C += envR; + } + + if (D_801CFD40 >= D_801CFD1C[D_801CFD38].g) { + D_801CFD40 -= envG; + } else { + D_801CFD40 += envG; + } + + if (D_801CFD44 >= D_801CFD1C[D_801CFD38].b) { + D_801CFD44 -= envB; + } else { + D_801CFD44 += envB; + } + + D_801CFD34--; + if (D_801CFD34 == 0) { + D_801CFD28 = D_801CFD10[D_801CFD38].r; + D_801CFD2C = D_801CFD10[D_801CFD38].g; + D_801CFD30 = D_801CFD10[D_801CFD38].b; + D_801CFD3C = D_801CFD1C[D_801CFD38].r; + D_801CFD40 = D_801CFD1C[D_801CFD38].g; + D_801CFD44 = D_801CFD1C[D_801CFD38].b; + D_801CFD34 = 12; + D_801CFD38 ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gfx++, 0, 0, D_801CFD28, D_801CFD2C, D_801CFD30, 120); + gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 17, arg3 + 11); + gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 14, arg3 + 13); + gDPPipeSync(gfx++); + + msgCtx->stateTimer++; + *gfxP = gfx++; + } +} + +void func_80148558(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) { + static Color_RGB16 D_801CFD48[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 D_801CFD54[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 D_801CFD60 = 0; + static s16 D_801CFD64 = 80; + static s16 D_801CFD68 = 200; + static s16 D_801CFD6C = 12; + static s16 D_801CFD70 = 0; + static s16 D_801CFD74 = 0; + static s16 D_801CFD78 = 0; + static s16 D_801CFD7C = 0; + Gfx* gfx; + MessageContext* msgCtx = &play->msgCtx; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(D_801CFD60 - D_801CFD48[D_801CFD70].r) / D_801CFD6C; + primG = ABS_ALT(D_801CFD64 - D_801CFD48[D_801CFD70].g) / D_801CFD6C; + primB = ABS_ALT(D_801CFD68 - D_801CFD48[D_801CFD70].b) / D_801CFD6C; + + if (D_801CFD60 >= D_801CFD48[D_801CFD70].r) { + D_801CFD60 -= primR; + } else { + D_801CFD60 += primR; + } + + if (D_801CFD64 >= D_801CFD48[D_801CFD70].g) { + D_801CFD64 -= primG; + } else { + D_801CFD64 += primG; + } + + if (D_801CFD68 >= D_801CFD48[D_801CFD70].b) { + D_801CFD68 -= primB; + } else { + D_801CFD68 += primB; + } + + envR = ABS_ALT(D_801CFD74 - D_801CFD54[D_801CFD70].r) / D_801CFD6C; + envG = ABS_ALT(D_801CFD78 - D_801CFD54[D_801CFD70].g) / D_801CFD6C; + envB = ABS_ALT(D_801CFD7C - D_801CFD54[D_801CFD70].b) / D_801CFD6C; + + if (D_801CFD74 >= D_801CFD54[D_801CFD70].r) { + D_801CFD74 -= envR; + } else { + D_801CFD74 += envR; + } + + if (D_801CFD78 >= D_801CFD54[D_801CFD70].g) { + D_801CFD78 -= envG; + } else { + D_801CFD78 += envG; + } + + if (D_801CFD7C >= D_801CFD54[D_801CFD70].b) { + D_801CFD7C -= envB; + } else { + D_801CFD7C += envB; + } + + D_801CFD6C--; + if (D_801CFD6C == 0) { + D_801CFD60 = D_801CFD48[D_801CFD70].r; + D_801CFD64 = D_801CFD48[D_801CFD70].g; + D_801CFD68 = D_801CFD48[D_801CFD70].b; + D_801CFD74 = D_801CFD54[D_801CFD70].r; + D_801CFD78 = D_801CFD54[D_801CFD70].g; + D_801CFD7C = D_801CFD54[D_801CFD70].b; + D_801CFD6C = 12; + D_801CFD70 ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gfx++, 0, 0, D_801CFD60, D_801CFD64, D_801CFD68, 120); + gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 29, arg3 + 11); + gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 26, arg3 + 13); + gDPPipeSync(gfx++); + + msgCtx->stateTimer++; + *gfxP = gfx++; + } +} + +void Message_HandleChoiceSelection(PlayState* play, u8 numChoices) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + Input* input = CONTROLLER1(&play->state); + + if ((input->rel.stick_y >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; msgCtx->choiceIndex--; if (msgCtx->choiceIndex > 128) { msgCtx->choiceIndex = 0; } else { Audio_PlaySfx(NA_SE_SY_CURSOR); } - return; - } else if ((curInput->rel.stick_y < -29) && held == 0) { - held = 1; + } else if ((input->rel.stick_y <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; msgCtx->choiceIndex++; - if (msgCtx->choiceIndex > arg1) { - msgCtx->choiceIndex = arg1; + if (msgCtx->choiceIndex > numChoices) { + msgCtx->choiceIndex = numChoices; } else { Audio_PlaySfx(NA_SE_SY_CURSOR); } - return; - } else { - if (ABS_ALT(curInput->rel.stick_y) < 30) { - held = 0; - } + } else if (ABS_ALT(input->rel.stick_y) < 30) { + sAnalogStickHeld = false; } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148B98.s") -#endif -void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { +void func_80148CBC(PlayState* play, Gfx** gfxP, u8 arg2) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->textPosX = 0x30; + msgCtx->textPosX = 48; if (arg2 == 1) { msgCtx->textPosY = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; } else { msgCtx->textPosY = msgCtx->unk11FFE[msgCtx->choiceIndex]; } - func_80147818(play, puParm2, msgCtx->textPosX, msgCtx->textPosY); + Message_DrawTextboxIcon(play, gfxP, msgCtx->textPosX, msgCtx->textPosY); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148D64.s") +void func_80148D64(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149048.s") + if (play->msgCtx.stickAdjY <= -30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 2) { + msgCtx->unk120C2 = 2; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801491DC.s") + msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 100; + msgCtx->bankRupeesSelected += (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 1] - '0') * 10; + msgCtx->bankRupeesSelected += msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 2] - '0'; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149454.s") +void func_80149048(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801496C8.s") + if (msgCtx->stickAdjY <= -30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawTextChar.s") + msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 10; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149C18.s") +void func_801491DC(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] <= 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 5; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] > 5) { + msgCtx->unk12054[msgCtx->unk120C2] = 1; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 4) { + msgCtx->unk120C2 = 4; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void func_80149454(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] < 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 9; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] > 9) { + msgCtx->unk12054[msgCtx->unk120C2] = 0; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 2) { + msgCtx->unk120C2 = 2; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void func_801496C8(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (play->msgCtx.stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] < 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 3; + } + msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; + Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] >= 4) { + msgCtx->unk12054[msgCtx->unk120C2] = 0; + } + msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; + Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 5) { + msgCtx->unk120C2 = 5; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + s16 x = msgCtx->textPosX; + s16 y = msgCtx->textPosY; + + gDPPipeSync(gfx++); + + gDPLoadTextureBlock_4b(gfx++, texture, G_IM_FMT_I, 16, 16, 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); + + if ((msgCtx->textBoxType != TEXTBOX_TYPE_5) && (msgCtx->textBoxType != TEXTBOX_TYPE_D) && + !play->pauseCtx.bombersNotebookOpen) { + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gSPTextureRectangle(gfx++, (x + 1) << 2, (y + 1) << 2, (x + sCharTexSize + 1) << 2, (y + sCharTexSize + 1) << 2, + G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale); + gDPPipeSync(gfx++); + } + + gDPSetPrimColor(gfx++, 0, 0, msgCtx->textColorR, msgCtx->textColorG, msgCtx->textColorB, msgCtx->textColorAlpha); + gSPTextureRectangle(gfx++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2, G_TX_RENDERTILE, 0, 0, + sCharTexScale, sCharTexScale); + *gfxP = gfx++; +} + +s16 sTextboxWidth = 256; +s16 sTextboxHeight = 64; +s16 sTextboxTexWidth = 1024; +s16 sTextboxTexHeight = 1024; + +f32 D_801CFDA4[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f }; +f32 D_801CFDC8[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f }; + +// resizes textboxes when opening them +void Message_GrowTextbox(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + + if (!play->pauseCtx.bombersNotebookOpen) { + sTextboxWidth = D_801CFDA4[msgCtx->stateTimer] * 256.0f; + sTextboxTexWidth = 1024.0f / D_801CFDA4[msgCtx->stateTimer]; + sTextboxHeight = D_801CFDC8[msgCtx->stateTimer] * 64.0f; + sTextboxTexHeight = 1024.0f / D_801CFDC8[msgCtx->stateTimer]; + msgCtx->textboxY = msgCtx->textboxYTarget + ((64 - sTextboxHeight) / 2); + msgCtx->textboxColorAlphaCurrent += msgCtx->textboxColorAlphaTarget / 8; + msgCtx->stateTimer++; + } else { + msgCtx->stateTimer = 8; + sTextboxWidth = 512; + sTextboxTexWidth = 512; + sTextboxHeight = 89; + sTextboxTexHeight = 731; + msgCtx->textboxY = msgCtx->textboxYTarget + ((90 - sTextboxHeight) / 2); + } + + if (msgCtx->stateTimer == 8) { + // Reached the end + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + msgCtx->msgMode = MSGMODE_TEXT_STARTING; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + } + + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textboxX = msgCtx->textboxXTarget + ((256 - sTextboxWidth) / 2); + } else { + msgCtx->textboxX = msgCtx->textboxXTarget + ((512 - sTextboxWidth) / 2); + } +} void Message_FindMessage(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; @@ -223,13 +807,1075 @@ void Message_FindMessage(PlayState* play, u16 textId) { font->messageEnd = nextSegment - foundSegment; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawItemIcon.s") +Color_RGB8 D_801CFDEC[] = { + { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 255 }, { 255, 0, 0 }, + { 255, 0, 255 }, { 255, 255, 255 }, { 255, 100, 0 }, { 0, 0, 0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") +s16 D_801CFE04[] = { + 150, // ITEM_SONG_SONATA + 255, // ITEM_SONG_LULLABY + 100, // ITEM_SONG_NOVA + 255, // ITEM_SONG_ELEGY + 255, // ITEM_SONG_OATH + 255, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014ADBC.s") +}; +s16 D_801CFE1C[] = { + 255, // ITEM_SONG_SONATA + 80, // ITEM_SONG_LULLABY + 150, // ITEM_SONG_NOVA + 160, // ITEM_SONG_ELEGY + 100, // ITEM_SONG_OATH + 240, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_LoadItemIcon.s") +}; +s16 D_801CFE34[] = { + 100, // ITEM_SONG_SONATA + 40, // ITEM_SONG_LULLABY + 255, // ITEM_SONG_NOVA + 0, // ITEM_SONG_ELEGY + 255, // ITEM_SONG_OATH + 100, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN +}; + +static TexturePtr sStrayFairyIconTextures[] = { + gStrayFairyWoodfallIconTex, + gStrayFairySnowheadIconTex, + gStrayFairyGreatBayIconTex, + gStrayFairyStoneTowerIconTex, +}; + +static Color_RGB8 sStrayFairyIconPrimColors[] = { + { 255, 110, 160 }, + { 90, 255, 100 }, + { 120, 255, 255 }, + { 245, 245, 90 }, +}; + +static Color_RGB8 sStrayFairyIconEnvColors[] = { + { 255, 255, 255 }, + { 255, 255, 255 }, + { 255, 255, 255 }, + { 225, 170, 0 }, +}; + +void Message_DrawItemIcon(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + s32 index; + + msgCtx->unk12016 = msgCtx->unk12014; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha); + + if (msgCtx->itemId == ITEM_RECOVERY_HEART) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 0, 0, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 80, 0, 255); + gDPLoadTextureBlock(gfx++, gHeartFullTex, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + } else if ((msgCtx->itemId >= ITEM_RUPEE_GREEN) && (msgCtx->itemId <= ITEM_RUPEE_HUGE)) { + index = msgCtx->itemId - ITEM_RUPEE_GREEN; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, D_801CFDEC[index].r, D_801CFDEC[index].g, D_801CFDEC[index].b, + msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 80, 0, 255); + gDPLoadTextureBlock(gfx++, gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + } else if (msgCtx->itemId == ITEM_STRAY_FAIRIES) { + msgCtx->unk12016 = 0x18; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].r, + sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].g, + sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].b, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].r, + sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].g, + sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].b, 0); + gDPLoadTextureBlock_4b(gfx++, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 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(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2, + (msgCtx->unk12010 + msgCtx->unk12014) << 2, (msgCtx->unk12012 + msgCtx->unk12016) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha); + gDPLoadTextureBlock(gfx++, sStrayFairyIconTextures[((void)0, gSaveContext.dungeonIndex)], G_IM_FMT_RGBA, + G_IM_SIZ_32b, 32, 24, 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); + } else if ((msgCtx->itemId >= ITEM_SONG_SONATA) && (msgCtx->itemId <= ITEM_SONG_SUN)) { + index = msgCtx->itemId - ITEM_SONG_SONATA; + gDPSetPrimColor(gfx++, 0, 0, D_801CFE04[index], D_801CFE1C[index], D_801CFE34[index], msgCtx->textColorAlpha); + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 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); + msgCtx->unk12016 = 0x18; + } else if (msgCtx->itemId == ITEM_CC) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 0, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 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); + } else if (msgCtx->itemId >= ITEM_B8) { + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 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); + } else if (msgCtx->itemId >= ITEM_SKULL_TOKEN) { + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 24, 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); + } else { + msgCtx->unk12016 = msgCtx->unk12014; + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 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(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2, (msgCtx->unk12010 + msgCtx->unk12014) << 2, + (msgCtx->unk12012 + msgCtx->unk12016) << 2, G_TX_RENDERTILE, 0, 0, D_801F6B08, D_801F6B08); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); + + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 16; + } else { + msgCtx->textPosX += 50; + } + *gfxP = gfx; +} + +void Message_HandleOcarina(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_RECORDING) { + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_START; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->stateTimer = 3; + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) { + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_START; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->stateTimer = 3; + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_SPAWN + 1, 1); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_37) { + msgCtx->msgMode = MSGMODE_2F; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_3A) { + msgCtx->msgMode = MSGMODE_32; + } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) { + msgCtx->msgMode = MSGMODE_35; + } else if (((msgCtx->ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_SONATA) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO)) || + (msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_STARTING; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_GORON) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_ZORA) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) || (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } else { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING; + } + } +} + +Color_RGB16 D_801CFE74[] = { + { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 }, + { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFEA4[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFED4[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFF04[] = { + { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFF34[] = { + { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +u8 D_801CFF64[] = { 2, 1, 3, 6, 6, 6, 3, 3, 3, 3, 1, 6 }; + +#define MESSAGE_ITEM_NONE 9999 + +void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + u16 j; + Font* font = &play->msgCtx.font; + u16 i; + u16 charTexIndex; + Gfx* gfx = *gfxP; + u16 character; + s16 sp130; + s16 sp12E; + s16 sp12C; + s16 sp12A; + u16 lookAheadCharacter; + + play->msgCtx.textPosX = play->msgCtx.unk11F1A[0] + play->msgCtx.unk11FF8; + play->msgCtx.textPosY = play->msgCtx.unk11FFA; + + sp130 = 0; + if (play->msgCtx.itemId != MESSAGE_ITEM_NONE) { + Message_DrawItemIcon(play, &gfx); + } + msgCtx->textColorR = msgCtx->unk120C8; + msgCtx->textColorG = msgCtx->unk120CA; + msgCtx->textColorB = msgCtx->unk120CC; + + charTexIndex = 0; + + for (i = 0; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.wchar[i]; + + switch (character) { + case 0x2000: + if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x2001: + case 0x2002: + case 0x2003: + case 0x2004: + case 0x2005: + case 0x2006: + case 0x2007: + case 0x2008: + if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_NEW_CYCLE_2) && + (character == 0x2002)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + if (msgCtx->unk120D6) { + msgCtx->unk120D4 += 25; + if (msgCtx->unk120D4 >= 100) { + msgCtx->unk120D6 = false; + } + } else { + msgCtx->unk120D4 -= 25; + if (msgCtx->unk120D4 <= -100) { + msgCtx->unk120D6 = true; + } + } + + if (D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4 < 0) { + msgCtx->textColorR = 0; + } else { + msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4; + } + if (D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4 >= 255) { + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g; + } else { + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4; + } + if (D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4 < 0) { + msgCtx->textColorB = 0; + } else { + msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4; + } + } else if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->textColorR = D_801CFF34[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFF34[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFF34[(s16)(character - 0x2001)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textColorR = D_801CFF04[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFF04[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFF04[(s16)(character - 0x2001)].b; + } else { + msgCtx->textColorR = D_801CFEA4[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFEA4[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFEA4[(s16)(character - 0x2001)].b; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x20: // ` ` + msgCtx->textPosX += 6; + break; + + case 0xA: + msgCtx->textPosY += msgCtx->unk11FFC; + // fallthrough + case 0xC: + sp130++; + msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8; + if (msgCtx->choiceNum == 1) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 32; + } else { + msgCtx->textPosX += 57; + } + } else if (msgCtx->choiceNum == 2) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 22; + } else { + msgCtx->textPosX += 57; + } + } + continue; + + case 0x9: + case 0xB: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + msgCtx->unk120CE = msgCtx->textColorR; + msgCtx->unk120D0 = msgCtx->textColorG; + msgCtx->unk120D2 = msgCtx->textColorB; + } + *gfxP = gfx; + return; + + case 0x101: // MESSAGE_QUICKTEXT_ENABLE + if (((i + 1) == msgCtx->textDrawPos) && + ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) { + + j = i; + while (true) { + if ((msgCtx->decodedBuffer.wchar[j] != 0x102) && (msgCtx->decodedBuffer.wchar[j] != 0x104) && + (msgCtx->decodedBuffer.wchar[j] != 0x103) && (msgCtx->decodedBuffer.wchar[j] != 0x230) && + (msgCtx->decodedBuffer.wchar[j] != 9) && (msgCtx->decodedBuffer.wchar[j] != 0xB)) { + j++; + continue; + } + break; + } + + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + break; + + case 0x102: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0x110: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x111: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->unk11F0C == 3) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_55; + } else { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + } + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x112: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_52; + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x120: // MESSAGE_SFX + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + Audio_PlaySfx(msgCtx->decodedBuffer.wchar[i + 1]); + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + i++; + break; + + case 0x128: + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + msgCtx->msgMode = MSGMODE_9; + msgCtx->textDelayTimer = msgCtx->decodedBuffer.wchar[i + 1]; + } + i++; + break; + + case 0x130: + case 0x131: + case 0x132: + case 0x133: + case 0x134: + case 0x135: + case 0x136: + msgCtx->textDelay = character - 0x130; + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x201: // MESSAGE_BACKGROUND + msgCtx->textPosX = 45; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 193) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 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(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 96) << 2, + (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 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(gfx++, (msgCtx->textPosX + 96) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 192) << 2, (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + msgCtx->textPosX += 32; + break; + + case 0x202: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2); + } + break; + + case 0x203: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2); + } + break; + + case 0x20C: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_60; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x220: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_61; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x221: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_62; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x222: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_41; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + break; + + case 0x225: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_63; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x240: + case 0x500: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + if (character == 0x500) { + Font_LoadMessageBoxEndIcon(font, 1); + } else { + Font_LoadMessageBoxEndIcon(font, 0); + } + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } else { + Audio_PlaySfx(NA_SE_NONE); + } + } + *gfxP = gfx; + return; + + case 0x104: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30; + } + *gfxP = gfx; + return; + + case 0x103: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + case 0x230: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_42; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + switch (character) { + case 0x8169: + case 0x8175: + msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale); + break; + + case 0x8148: + case 0x8149: + msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale); + break; + + default: + break; + } + + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { + Audio_PlaySfx(NA_SE_NONE); + } + + if ((character >= 0x839F) && (character < 0x83AB)) { + sp12E = msgCtx->textColorR; + sp12C = msgCtx->textColorG; + sp12A = msgCtx->textColorB; + msgCtx->textColorR = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].r; + msgCtx->textColorG = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].g; + msgCtx->textColorB = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].b; + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + msgCtx->textColorR = sp12E; + msgCtx->textColorG = sp12C; + msgCtx->textColorB = sp12A; + } else { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + charTexIndex += FONT_CHAR_TEX_SIZE; + switch (character) { + case 0x8144: + msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale); + break; + + case 0x816A: + case 0x8176: + msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale); + break; + + case 0x8141: + case 0x8142: + case 0x8168: + msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale); + break; + + case 0x8194: + msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale); + break; + + default: + if ((msgCtx->msgMode >= MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND) && + (msgCtx->msgMode <= MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND)) { + msgCtx->textPosX += (s16)((16.0f * msgCtx->textCharScale) - 1.0f); + } else { + msgCtx->textPosX += (s16)(16.0f * msgCtx->textCharScale); + } + break; + } + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = 0; + if (msgCtx->msgMode == MSGMODE_9) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + } + } else { + msgCtx->textDelayTimer--; + } + *gfxP = gfx; +} + +s16 D_801CFF70[LANGUAGE_MAX] = { + 4, // LANGUAGE_JPN + 0x12, // LANGUAGE_ENG + 0x12, // LANGUAGE_GER + 0x12, // LANGUAGE_FRE + 0x12, // LANGUAGE_SPA +}; +s16 D_801CFF7C[LANGUAGE_MAX] = { + 0, // LANGUAGE_JPN + 0xE, // LANGUAGE_ENG + 0xE, // LANGUAGE_GER + 0xE, // LANGUAGE_FRE + 0xE, // LANGUAGE_SPA +}; +s16 D_801CFF88[LANGUAGE_MAX] = { + 0, // LANGUAGE_JPN + 0x16, // LANGUAGE_ENG + 0x16, // LANGUAGE_GER + 0x16, // LANGUAGE_FRE + 0x16, // LANGUAGE_SPA +}; + +s16 D_801CFF94[] = { + /* 0x00 */ MESSAGE_ITEM_NONE, + /* 0x01 */ ITEM_RUPEE_GREEN, + /* 0x02 */ ITEM_RUPEE_BLUE, + /* 0x03 */ ITEM_RUPEE_10, + /* 0x04 */ ITEM_RUPEE_RED, + /* 0x05 */ ITEM_RUPEE_PURPLE, + /* 0x06 */ ITEM_RUPEE_SILVER, + /* 0x07 */ ITEM_RUPEE_HUGE, + /* 0x08 */ ITEM_WALLET_ADULT, + /* 0x09 */ ITEM_WALLET_GIANT, + /* 0x0A */ ITEM_RECOVERY_HEART, + /* 0x0B */ ITEM_RECOVERY_HEART, + /* 0x0C */ ITEM_HEART_PIECE, + /* 0x0D */ ITEM_HEART_CONTAINER, + /* 0x0E */ ITEM_MAGIC_JAR_SMALL, + /* 0x0F */ ITEM_MAGIC_JAR_BIG, + /* 0x10 */ ITEM_RECOVERY_HEART, + /* 0x11 */ ITEM_STRAY_FAIRIES, + /* 0x12 */ ITEM_RECOVERY_HEART, + /* 0x13 */ ITEM_RECOVERY_HEART, + /* 0x14 */ ITEM_BOMB, + /* 0x15 */ ITEM_BOMB, + /* 0x16 */ ITEM_BOMB, + /* 0x17 */ ITEM_BOMB, + /* 0x18 */ ITEM_BOMB, + /* 0x19 */ ITEM_DEKU_STICK, + /* 0x1A */ ITEM_BOMBCHU, + /* 0x1B */ ITEM_BOMB_BAG_20, + /* 0x1C */ ITEM_BOMB_BAG_30, + /* 0x1D */ ITEM_BOMB_BAG_40, + /* 0x1E */ ITEM_BOW, + /* 0x1F */ ITEM_BOW, + /* 0x20 */ ITEM_BOW, + /* 0x21 */ ITEM_BOW, + /* 0x22 */ ITEM_QUIVER_30, + /* 0x23 */ ITEM_QUIVER_40, + /* 0x24 */ ITEM_QUIVER_50, + /* 0x25 */ ITEM_ARROW_FIRE, + /* 0x26 */ ITEM_ARROW_ICE, + /* 0x27 */ ITEM_ARROW_LIGHT, + /* 0x28 */ ITEM_DEKU_NUT, + /* 0x29 */ ITEM_DEKU_NUT, + /* 0x2A */ ITEM_DEKU_NUT, + /* 0x2B */ MESSAGE_ITEM_NONE, + /* 0x2C */ MESSAGE_ITEM_NONE, + /* 0x2D */ MESSAGE_ITEM_NONE, + /* 0x2E */ MESSAGE_ITEM_NONE, + /* 0x2F */ ITEM_DEKU_STICK_UPGRADE_20, + /* 0x30 */ MESSAGE_ITEM_NONE, + /* 0x31 */ MESSAGE_ITEM_NONE, + /* 0x32 */ ITEM_SHIELD_HERO, + /* 0x33 */ ITEM_SHIELD_MIRROR, + /* 0x34 */ ITEM_POWDER_KEG, + /* 0x35 */ ITEM_MAGIC_BEANS, + /* 0x36 */ ITEM_PICTOGRAPH_BOX, + /* 0x37 */ ITEM_SWORD_KOKIRI, + /* 0x38 */ ITEM_SWORD_RAZOR, + /* 0x39 */ ITEM_SWORD_GILDED, + /* 0x3A */ ITEM_SWORD_DEITY, + /* 0x3B */ ITEM_SWORD_GREAT_FAIRY, + /* 0x3C */ ITEM_KEY_SMALL, + /* 0x3D */ ITEM_KEY_BOSS, + /* 0x3E */ ITEM_DUNGEON_MAP, + /* 0x3F */ ITEM_COMPASS, + /* 0x40 */ ITEM_POWDER_KEG, + /* 0x41 */ ITEM_HOOKSHOT, + /* 0x42 */ ITEM_LENS_OF_TRUTH, + /* 0x43 */ ITEM_PICTOGRAPH_BOX, + /* 0x44 */ ITEM_FISHING_ROD, + /* 0x45 */ MESSAGE_ITEM_NONE, + /* 0x46 */ MESSAGE_ITEM_NONE, + /* 0x47 */ MESSAGE_ITEM_NONE, + /* 0x48 */ MESSAGE_ITEM_NONE, + /* 0x49 */ MESSAGE_ITEM_NONE, + /* 0x4A */ MESSAGE_ITEM_NONE, + /* 0x4B */ MESSAGE_ITEM_NONE, + /* 0x4C */ ITEM_OCARINA_OF_TIME, + /* 0x4D */ MESSAGE_ITEM_NONE, + /* 0x4E */ MESSAGE_ITEM_NONE, + /* 0x4F */ MESSAGE_ITEM_NONE, + /* 0x50 */ ITEM_BOMBERS_NOTEBOOK, + /* 0x51 */ MESSAGE_ITEM_NONE, + /* 0x52 */ ITEM_SKULL_TOKEN, + /* 0x53 */ MESSAGE_ITEM_NONE, + /* 0x54 */ MESSAGE_ITEM_NONE, + /* 0x55 */ ITEM_REMAINS_ODOLWA, + /* 0x56 */ ITEM_REMAINS_GOHT, + /* 0x57 */ ITEM_REMAINS_GYORG, + /* 0x58 */ ITEM_REMAINS_TWINMOLD, + /* 0x59 */ ITEM_POTION_RED, + /* 0x5A */ ITEM_BOTTLE, + /* 0x5B */ ITEM_POTION_RED, + /* 0x5C */ ITEM_POTION_GREEN, + /* 0x5D */ ITEM_POTION_BLUE, + /* 0x5E */ ITEM_FAIRY, + /* 0x5F */ ITEM_DEKU_PRINCESS, + /* 0x60 */ ITEM_MILK_BOTTLE, + /* 0x61 */ ITEM_MILK_HALF, + /* 0x62 */ ITEM_FISH, + /* 0x63 */ ITEM_BUG, + /* 0x64 */ ITEM_BLUE_FIRE, + /* 0x65 */ ITEM_POE, + /* 0x66 */ ITEM_BIG_POE, + /* 0x67 */ ITEM_SPRING_WATER, + /* 0x68 */ ITEM_HOT_SPRING_WATER, + /* 0x69 */ ITEM_ZORA_EGG, + /* 0x6A */ ITEM_GOLD_DUST, + /* 0x6B */ ITEM_MUSHROOM, + /* 0x6C */ MESSAGE_ITEM_NONE, + /* 0x6D */ MESSAGE_ITEM_NONE, + /* 0x6E */ ITEM_SEAHORSE, + /* 0x6F */ ITEM_CHATEAU, + /* 0x70 */ ITEM_HYLIAN_LOACH, + /* 0x71 */ MESSAGE_ITEM_NONE, + /* 0x72 */ MESSAGE_ITEM_NONE, + /* 0x73 */ MESSAGE_ITEM_NONE, + /* 0x74 */ MESSAGE_ITEM_NONE, + /* 0x75 */ MESSAGE_ITEM_NONE, + /* 0x76 */ MESSAGE_ITEM_NONE, + /* 0x77 */ MESSAGE_ITEM_NONE, + /* 0x78 */ ITEM_MASK_DEKU, + /* 0x79 */ ITEM_MASK_GORON, + /* 0x7A */ ITEM_MASK_ZORA, + /* 0x7B */ ITEM_MASK_FIERCE_DEITY, + /* 0x7C */ ITEM_MASK_TRUTH, + /* 0x7D */ ITEM_MASK_KAFEIS_MASK, + /* 0x7E */ ITEM_MASK_ALL_NIGHT, + /* 0x7F */ ITEM_MASK_BUNNY, + /* 0x80 */ ITEM_MASK_KEATON, + /* 0x81 */ ITEM_MASK_GARO, + /* 0x82 */ ITEM_MASK_ROMANI, + /* 0x83 */ ITEM_MASK_CIRCUS_LEADER, + /* 0x84 */ ITEM_MASK_POSTMAN, + /* 0x85 */ ITEM_MASK_COUPLE, + /* 0x86 */ ITEM_MASK_GREAT_FAIRY, + /* 0x87 */ ITEM_MASK_GIBDO, + /* 0x88 */ ITEM_MASK_DON_GERO, + /* 0x89 */ ITEM_MASK_KAMARO, + /* 0x8A */ ITEM_MASK_CAPTAIN, + /* 0x8B */ ITEM_MASK_STONE, + /* 0x8C */ ITEM_MASK_BREMEN, + /* 0x8D */ ITEM_MASK_BLAST, + /* 0x8E */ ITEM_MASK_SCENTS, + /* 0x8F */ ITEM_MASK_GIANT, + /* 0x90 */ MESSAGE_ITEM_NONE, + /* 0x91 */ ITEM_CHATEAU, + /* 0x92 */ ITEM_MILK_BOTTLE, + /* 0x93 */ ITEM_GOLD_DUST, + /* 0x94 */ ITEM_HYLIAN_LOACH, + /* 0x95 */ ITEM_SEAHORSE, + /* 0x96 */ ITEM_MOONS_TEAR, + /* 0x97 */ ITEM_DEED_LAND, + /* 0x98 */ ITEM_DEED_SWAMP, + /* 0x99 */ ITEM_DEED_MOUNTAIN, + /* 0x9A */ ITEM_DEED_OCEAN, + /* 0x9B */ MESSAGE_ITEM_NONE, + /* 0x9C */ MESSAGE_ITEM_NONE, + /* 0x9D */ MESSAGE_ITEM_NONE, + /* 0x9E */ MESSAGE_ITEM_NONE, + /* 0x9F */ MESSAGE_ITEM_NONE, + /* 0xA0 */ ITEM_ROOM_KEY, + /* 0xA1 */ ITEM_LETTER_MAMA, + /* 0xA2 */ MESSAGE_ITEM_NONE, + /* 0xA3 */ MESSAGE_ITEM_NONE, + /* 0xA4 */ MESSAGE_ITEM_NONE, + /* 0xA5 */ MESSAGE_ITEM_NONE, + /* 0xA6 */ MESSAGE_ITEM_NONE, + /* 0xA7 */ MESSAGE_ITEM_NONE, + /* 0xA8 */ MESSAGE_ITEM_NONE, + /* 0xA9 */ MESSAGE_ITEM_NONE, + /* 0xAA */ ITEM_LETTER_TO_KAFEI, + /* 0xAB */ ITEM_PENDANT_OF_MEMORIES, + /* 0xAC */ MESSAGE_ITEM_NONE, + /* 0xAD */ MESSAGE_ITEM_NONE, + /* 0xAE */ MESSAGE_ITEM_NONE, + /* 0xAF */ MESSAGE_ITEM_NONE, + /* 0xB0 */ MESSAGE_ITEM_NONE, + /* 0xB1 */ MESSAGE_ITEM_NONE, + /* 0xB2 */ MESSAGE_ITEM_NONE, + /* 0xB3 */ ITEM_TINGLE_MAP, + /* 0xB4 */ ITEM_TINGLE_MAP, + /* 0xB5 */ ITEM_TINGLE_MAP, + /* 0xB6 */ ITEM_TINGLE_MAP, + /* 0xB7 */ ITEM_TINGLE_MAP, + /* 0xB8 */ ITEM_TINGLE_MAP, + /* 0xB9 */ ITEM_TINGLE_MAP, + /* 0xBA */ MESSAGE_ITEM_NONE, + /* 0xBB */ MESSAGE_ITEM_NONE, + /* 0xBC */ MESSAGE_ITEM_NONE, + /* 0xBD */ MESSAGE_ITEM_NONE, + /* 0xBE */ MESSAGE_ITEM_NONE, + /* 0xBF */ MESSAGE_ITEM_NONE, + /* 0xC0 */ MESSAGE_ITEM_NONE, + /* 0xC1 */ MESSAGE_ITEM_NONE, + /* 0xC2 */ MESSAGE_ITEM_NONE, + /* 0xC3 */ MESSAGE_ITEM_NONE, + /* 0xC4 */ MESSAGE_ITEM_NONE, + /* 0xC5 */ MESSAGE_ITEM_NONE, + /* 0xC6 */ MESSAGE_ITEM_NONE, + /* 0xC7 */ MESSAGE_ITEM_NONE, + /* 0xC8 */ ITEM_SONG_SONATA, + /* 0xC9 */ ITEM_SONG_SONATA, + /* 0xCA */ ITEM_SONG_SONATA, + /* 0xCB */ ITEM_SONG_LULLABY, + /* 0xCC */ ITEM_SONG_NOVA, + /* 0xCD */ ITEM_SONG_ELEGY, + /* 0xCE */ ITEM_SONG_OATH, + /* 0xCF */ ITEM_SONG_SARIA, + /* 0xD0 */ ITEM_SONG_TIME, + /* 0xD1 */ ITEM_SONG_HEALING, + /* 0xD2 */ ITEM_SONG_EPONA, + /* 0xD3 */ ITEM_SONG_SOARING, + /* 0xD4 */ ITEM_SONG_STORMS, + /* 0xD5 */ ITEM_SONG_SUN, + /* 0xD6 */ ITEM_SONG_LULLABY, + /* 0xD7 */ ITEM_SONG_SONATA, + /* 0xD8 */ ITEM_SONG_SONATA, + /* 0xD9 */ ITEM_SONG_SONATA, + /* 0xDA */ ITEM_SONG_LULLABY, + /* 0xDB */ ITEM_SONG_NOVA, + /* 0xDC */ ITEM_B8, + /* 0xDD */ ITEM_B9, + /* 0xDE */ ITEM_BA, + /* 0xDF */ ITEM_BB, + /* 0xE0 */ ITEM_BC, + /* 0xE1 */ ITEM_BD, + /* 0xE2 */ ITEM_BE, + /* 0xE3 */ ITEM_BF, + /* 0xE4 */ ITEM_C0, + /* 0xE5 */ ITEM_C1, + /* 0xE6 */ ITEM_C2, + /* 0xE7 */ ITEM_C3, + /* 0xE8 */ ITEM_C4, + /* 0xE9 */ ITEM_C5, + /* 0xEA */ ITEM_C6, + /* 0xEB */ ITEM_C7, + /* 0xEC */ ITEM_C8, + /* 0xED */ ITEM_C9, + /* 0xEE */ ITEM_CA, + /* 0xEF */ ITEM_CB, + /* 0xF0 */ ITEM_CC, + /* 0xF1 */ MESSAGE_ITEM_NONE, + /* 0xF2 */ MESSAGE_ITEM_NONE, + /* 0xF3 */ MESSAGE_ITEM_NONE, + /* 0xF4 */ MESSAGE_ITEM_NONE, + /* 0xF5 */ MESSAGE_ITEM_NONE, + /* 0xF6 */ MESSAGE_ITEM_NONE, + /* 0xF7 */ MESSAGE_ITEM_NONE, + /* 0xF8 */ MESSAGE_ITEM_NONE, + /* 0xF9 */ MESSAGE_ITEM_NONE, +}; + +void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2) { + MessageContext* msgCtx = &play->msgCtx; + u16* new_var2 = &itemId; + + if (itemId == ITEM_RECOVERY_HEART) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + } else if ((itemId >= ITEM_RUPEE_GREEN) && (itemId <= ITEM_RUPEE_HUGE)) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + } else if (itemId == ITEM_STRAY_FAIRIES) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x20; + } else if ((itemId >= ITEM_SONG_SONATA) && (itemId <= ITEM_SONG_SUN)) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000, + 0x180); + } else if (itemId == ITEM_BOMBERS_NOTEBOOK) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 6); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000, + 0x1000); + } else if (itemId <= ITEM_REMAINS_TWINMOLD) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 6); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), itemId, msgCtx->textboxSegment + 0x1000, 0x1000); + } else if (itemId == ITEM_CC) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 8); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), ITEM_POTION_BLUE, msgCtx->textboxSegment + 0x1000, + 0x400); + } else if (itemId >= ITEM_B8) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 8); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), (itemId - ITEM_B8), msgCtx->textboxSegment + 0x1000, + 0x800); + } else if (itemId >= ITEM_SKULL_TOKEN) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF7C[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x18; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_24_static_yar), (itemId - ITEM_SKULL_TOKEN), + msgCtx->textboxSegment + 0x1000, 0x900); + } + + if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->unk12010 = ((msgCtx->unk12010 * 1.4f) + 2.0f); + msgCtx->unk12014 = (msgCtx->unk12014 * 1.4f); + } + + msgCtx->choiceNum = 1; +} void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; @@ -255,11 +1901,11 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) Font_LoadChar(play, 0x838B, k); // 0x838B = ル in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x838B; - t += 1; + t++; Font_LoadChar(play, 0x8373, k); // 0x8373 = ピ in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x8373; - t += 1; + t++; Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x815C; @@ -270,63 +1916,1411 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) *arg3 = f; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CDF0.s") +/* + * offsetting to actual codepoints is done outside this function + * every digit will be added 0x824F to get an actual S-JIS + * printable character. + */ +void Message_GetTimerDigits(OSTime time, s16* digits) { + OSTime t = time; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s") + // 6 minutes + digits[0] = t / SECONDS_TO_TIMER(360); + t -= digits[0] * SECONDS_TO_TIMER(360); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s") + // minutes + digits[1] = t / SECONDS_TO_TIMER(60); + t -= digits[1] * SECONDS_TO_TIMER(60); -extern u16 D_801D0188[OWL_WARP_MAX][9]; -extern s16 D_801D0250[OWL_WARP_MAX]; + digits[2] = 0x135B; // 0x135B + 0x824F = 分 (minutes) in S-JIS -void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { + // 10 seconds + digits[3] = t / SECONDS_TO_TIMER(10); + t -= digits[3] * SECONDS_TO_TIMER(10); + + // seconds + digits[4] = t / SECONDS_TO_TIMER(1); + t -= digits[4] * SECONDS_TO_TIMER(1); + + digits[5] = 0x1313; // 0x1313 + 0x824F = 秒 (seconds) in S-JIS + + // 100 milliseconds + digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + + // 10 milliseconds + digits[7] = t; +} + +void Message_SetupLoadItemIcon(PlayState* play) { + Font* font; + MessageContext* msgCtx = &play->msgCtx; + + font = &msgCtx->font; + if (msgCtx->msgBufPos == 0) { + if (font->msgBuf.schar[msgCtx->msgBufPos + 2] != 0xFE) { + msgCtx->unk11F18 = 0; + if ((msgCtx->currentTextId == 0x176F) || (msgCtx->currentTextId == 0x1770) || + (msgCtx->currentTextId == 0x1771)) { + msgCtx->itemId = ITEM_OCARINA_OF_TIME; + msgCtx->msgBufPos += 2; + } else { + msgCtx->msgBufPos += 2; + if ((font->msgBuf.schar[msgCtx->msgBufPos] < 0xC8) || (font->msgBuf.schar[msgCtx->msgBufPos] >= 0xD8)) { + msgCtx->itemId = D_801CFF94[(u8)font->msgBuf.schar[msgCtx->msgBufPos]]; + } else { + msgCtx->itemId = 0xFE; + } + } + } else { + msgCtx->msgBufPos += 2; + msgCtx->itemId = font->msgBuf.schar[msgCtx->msgBufPos]; + } + msgCtx->nextTextId = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->nextTextId |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk1206C = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk1206C |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk12070 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk12070 |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk12074 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk12074 |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->msgBufPos++; + if (msgCtx->itemId != 0xFE) { + Message_LoadItemIcon(play, msgCtx->itemId, msgCtx->textboxY + 10); + } + } +} + +void Message_LoadTime(PlayState* play, u16 curChar, s32* offset, f32* arg3, s16* decodedBufPos) { + MessageContext* msgCtx = &play->msgCtx; + s16 i; + s16 p = *decodedBufPos; + s32 o = *offset; + f32 f = *arg3; + u32 dayTime; + s16 digits[4]; + f32 timeInMinutes; + + if (curChar == 0x20F) { + dayTime = TIME_UNTIL_MOON_CRASH; + } else { + dayTime = TIME_UNTIL_NEW_DAY; + } + timeInMinutes = TIME_TO_MINUTES_F(dayTime); + + digits[0] = 0; + digits[1] = (timeInMinutes / 60.0f); + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInMinutes % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, o); // 0x824F = '0' in S-JIS + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = digits[i] + 0x824F; + p++; + if (i == 1) { + // Hours (時間) + Font_LoadChar(play, 0x8E9E, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x8E9E; + p++; + Font_LoadChar(play, 0x8AD4, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x8E9E; + p++; + } else if (i == 3) { + // Minutes (分) + Font_LoadChar(play, 0x95AA, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x95AA; + } + } + + f += 7.0f * (16.0f * msgCtx->textCharScale); + *decodedBufPos = p; + *offset = o; + *arg3 = f; +} + +#define GREAT_BAY_COAST_STR \ + { 0x834F, 0x838C, 0x815B, 0x8367, 0x8378, 0x8343, 0x82CC, 0x8A43, 0x8ADD } +#define ZORA_CAPE_STR \ + { 0x835D, 0x815B, 0x8389, 0x82CC, 0x82DD, 0x82B3, 0x82AB } +#define SNOWHEAD_STR \ + { 0x8358, 0x836D, 0x815B, 0x8377, 0x8362, 0x8368 } +#define MOUNTAIN_VILLAGE_STR \ + { 0x8E52, 0x97A2 } +#define CLOCK_TOWN_STR \ + { 0x834E, 0x838D, 0x8362, 0x834E, 0x835E, 0x8345, 0x8393 } +#define MILK_ROAD_STR \ + { 0x837E, 0x838B, 0x834E, 0x838D, 0x815B, 0x8368 } +#define WOODFALL_STR \ + { 0x8345, 0x8362, 0x8368, 0x8374, 0x8348, 0x815B, 0x838B } +#define SOUTHERN_SWAMP_STR \ + { 0x8FC0, 0x926E } +#define IKANA_CANYON_STR \ + { 0x8343, 0x834A, 0x815B, 0x8369, 0x8C6B, 0x924A } +#define STONE_TOWER_STR \ + { 0x838D, 0x8362, 0x834E, 0x8372, 0x838B } +#define ENTRANCE_STR \ + { 0x93FC, 0x82E8, 0x8CFB } + +// Shift JIS +u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = { + GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST + ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE + SNOWHEAD_STR, // OWL_WARP_SNOWHEAD + MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE + CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN + MILK_ROAD_STR, // OWL_WARP_MILK_ROAD + WOODFALL_STR, // OWL_WARP_WOODFALL + SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP + IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON + STONE_TOWER_STR, // OWL_WARP_STONE_TOWER + ENTRANCE_STR, // OWL_WARP_ENTRANCE +}; + +//! TODO: use sizeof when we have strings +s16 sOwlWarpTextLengthJPN[OWL_WARP_MAX] = { + 9, // OWL_WARP_GREAT_BAY_COAST + 7, // OWL_WARP_ZORA_CAPE + 6, // OWL_WARP_SNOWHEAD + 2, // OWL_WARP_MOUNTAIN_VILLAGE + 7, // OWL_WARP_CLOCK_TOWN + 6, // OWL_WARP_MILK_ROAD + 7, // OWL_WARP_WOODFALL + 2, // OWL_WARP_SOUTHERN_SWAMP + 6, // OWL_WARP_IKANA_CANYON + 5, // OWL_WARP_STONE_TOWER + 3, // OWL_WARP_ENTRANCE +}; + +void Message_LoadOwlWarpText(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; PauseContext* pauseCtx = &play->pauseCtx; s16 stringLimit; - s16 temp_s1 = *arg3; - s32 temp_s2 = *arg1; + s16 curDecodedBufPos = *decodedBufPos; + s32 temp_s2 = *offset; f32 sp3C = *arg2; s16 owlWarpId; - s16 phi_s0; + s16 i; if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { owlWarpId = OWL_WARP_ENTRANCE; } else { owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; } - stringLimit = D_801D0250[owlWarpId]; + stringLimit = sOwlWarpTextLengthJPN[owlWarpId]; - for (phi_s0 = 0; phi_s0 < stringLimit; phi_s0++, temp_s1++, temp_s2 += 0x80) { - msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[owlWarpId][phi_s0]; - Font_LoadChar(play, D_801D0188[owlWarpId][phi_s0], temp_s2); + for (i = 0; i < stringLimit; i++, curDecodedBufPos++, temp_s2 += FONT_CHAR_TEX_SIZE) { + msgCtx->decodedBuffer.wchar[curDecodedBufPos] = sOwlWarpTextJPN[owlWarpId][i]; + Font_LoadChar(play, sOwlWarpTextJPN[owlWarpId][i], temp_s2); } - temp_s1--; + curDecodedBufPos--; sp3C += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); - *arg3 = temp_s1; - *arg1 = temp_s2; + *decodedBufPos = curDecodedBufPos; + *offset = temp_s2; *arg2 = sp3C; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D7B4.s") +// Counterpart to NES D_801D08D8 +u16 D_801D0268[][3] = { + { 0x82CD, 0x82E2, 0x82A2 }, + { 0x82D3, 0x82C2, 0x82A4 }, + { 0x82A8, 0x82BB, 0x82A2 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150A84.s") +// Counterpart to NES D_801D08E4 +u16 D_801D027C[] = { 0x2001, 0x2003, 0x2004, 0x2002 }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150D08.s") +// Counterpart to NES sMaskCodeTextENG +u16 D_801D0284[] = { 0x90D4, 0x90C2, 0x89A9, 0x97CE }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801514B0.s") +#ifdef NON_MATCHING +// https://decomp.me/scratch/ZTbP4 +void Message_Decode(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; // spF0 + Player* player; // spEC + s16 decodedBufPos; // spEA + u32 timeToMoonCrash; + s16 temp2; + s16 spE0; + s32 pad4; + s16 digits[4]; // spD4/D6/D8/DA + s16 spD2; + f32 timeInSeconds; + s32 charTexIdx; // spC8 + s16 var_v0; + s16 loadChar; + f32 spC0; + f32 var_fs0; + s16 index; + s16 value; + s16 playerNameLen; + s16 i; // s1 + s16 spAC[4]; + u8 var_s3_8; + u16 curChar; + u32 temp; + u8* ptr2; + + player = GET_PLAYER(play); + msgCtx->textDelayTimer = 0; + msgCtx->textDelay = msgCtx->textDelayTimer; + msgCtx->textFade = 0; + spC0 = 0.0f; + font->unk_11D88 = (font->unk_11D88 ^ 1) & 1; + + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + spD2 = 0; + spE0 = 0; + decodedBufPos = 0; + charTexIdx = 0; + Message_SetupLoadItemIcon(play); + + while (true) { + curChar = msgCtx->decodedBuffer.wchar[decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos]; + + if ((curChar == 9) || (curChar == 0xB) || (curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112) || + (curChar == 0x103) || (curChar == 0x230) || (curChar == 0x500) || (curChar == 0x240) || + (curChar == 0x104)) { + + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + msgCtx->unk11FFA = msgCtx->textboxY + 6; + msgCtx->unk11F1A[spD2] = 0; + if (msgCtx->unk11F18 == 0) { + msgCtx->unk11F1A[spD2] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) / 2; + } + spC0 = 0.0f; + if (curChar == 0xB) { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spE0 < 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 0x16; + } else if (spE0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 0xE; + } + } + } else { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spE0 == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + 0x16; + } else if (spE0 == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + 0xE; + } + } + } + + { + s32 pad; + + if ((curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112)) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos + 1]; + msgCtx->msgBufPos += 2; + } + } + + msgCtx->decodedTextLen = decodedBufPos; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + msgCtx->unk120C8 = msgCtx->unk120CE; + msgCtx->unk120CA = msgCtx->unk120D0; + msgCtx->unk120CC = msgCtx->unk120D2; + break; + } + + if (curChar == 0x100) { + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.playerData.playerName[i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x100; + + for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = + ptr2[var_v0 + 0] & 0xFF; //! FAKE: Fixes later regalloc + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spC0 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x201) { + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + spE0 = 2; + spD2 = 2; + msgCtx->unk12012 = msgCtx->textboxY + 8; + msgCtx->unk11F18 = 1; + msgCtx->unk12010 = XREG(47); + } else if (curChar == 0x202) { + msgCtx->unk11F18 = 1; + msgCtx->choiceNum = 2; + } else if (curChar == 0x203) { + msgCtx->unk11F18 = 1; + msgCtx->choiceNum = 3; + msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16; + } else if (curChar == 0x204) { + Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC); + + loadChar = false; + for (i = 0; i < 5; i++) { + if ((i == 1) || (spAC[i + 3] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, spAC[i + 3] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if ((curChar == 0x205) || (curChar == 0x206) || (curChar == 0x207) || (curChar == 0x208) || + (curChar == 0x209)) { + Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC); + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, spAC[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x20A) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + if (i == 1) { + Font_LoadChar(play, 0x8E9E, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + decodedBufPos++; + } else if (i == 3) { + Font_LoadChar(play, 0x95AA, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; + } + } + spC0 += 6 * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x20B) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = Flags_GetAllTreasure(play); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x20C) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 2; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + + for (i = 0; i < 3; i++) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20D) { + digits[0] = digits[1] = 0; + digits[2] = msgCtx->bankRupeesSelected; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20E) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = msgCtx->bankRupees; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20F) { + Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos); + } else if (curChar == 0x21C) { + digits[0] = digits[1] = 0; + digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + Message_LoadChar(play, 0x96DA, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x21D) { + digits[0] = digits[1] = 0; + digits[2] = Inventory_GetSkullTokenCount(play->sceneId); + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x21E) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x21F) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x220) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + for (i = 0; i < 2; i++) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x221) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 5; i++) { + msgCtx->unk12054[i] = 1; + Message_LoadChar(play, 0x8250, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0x223) { + if (gSaveContext.save.timeSpeedOffset == 0x12) { + var_s3_8 = 0; + } else if (gSaveContext.save.timeSpeedOffset == 0) { + var_s3_8 = 1; + } else { + var_s3_8 = 2; + } + + for (i = 0; i < 3; i++) { + msgCtx->decodedBuffer.wchar[decodedBufPos] = D_801D0268[var_s3_8][i]; + Font_LoadChar(play, D_801D0268[var_s3_8][i], charTexIdx); + decodedBufPos++; + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos--; + spC0 += 3.0f * (16.0f * msgCtx->textCharScale); + msgCtx->choiceIndex = var_s3_8; + } else if (curChar == 0x224) { + Message_LoadOwlWarpText(play, &charTexIdx, &spC0, &decodedBufPos); + } else if (curChar == 0x225) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 3; i++) { + msgCtx->unk12054[i] = 1; + Font_LoadChar(play, 0x8250, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8250; + spC0 += 16.0f * msgCtx->textCharScale; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0x226) { + for (i = 0; i < 6; i++) { + msgCtx->decodedBuffer.wchar[decodedBufPos] = + D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])]; + decodedBufPos++; + Message_LoadChar(play, i + 0x8250, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; + } else if ((curChar >= 0x227) && (curChar < 0x22B)) { + digits[0] = digits[1] = 0; + digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0x227]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x22B) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos); + } else if ((curChar == 0x22C) || (curChar == 0x22D)) { + if (curChar == 0x22C) { + digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]; + digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]; + digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]; + } else { + digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8; + digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4; + digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF; + } + for (i = 0; i < 3; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if (curChar == 0x22E) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)]; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x22F) { + for (i = 0; i < 5; i++) { + digits[i] = gSaveContext.save.saveInfo.bomberCode[i]; + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if ((curChar >= 0x231) && (curChar < 0x237)) { + // index = curChar - 0x231; + msgCtx->decodedBuffer.wchar[decodedBufPos] = + D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])]; + decodedBufPos++; + Message_LoadChar( + play, + D_801D0284[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])], + &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; + } else if (curChar == 0x237) { + timeToMoonCrash = TIME_UNTIL_MOON_CRASH; + digits[0] = 0; + digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash); + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + loadChar = false; + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Font_LoadChar(play, 0x8E9E, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + decodedBufPos++; + Font_LoadChar(play, 0x8AD4, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + spC0 += 2.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x238) { + Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos); + } else if ((curChar == 0x300) || (curChar == 0x301) || (curChar == 0x302) || (curChar == 0x308)) { + if (curChar == 0x308) { + value = (s32)HS_GET_HIGH_SCORE_3_LOWER(); + } else { + value = HIGH_SCORE(curChar - 0x300); + } + if (curChar == 0x302) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = (s16)((HIGH_SCORE(font->msgBuf.wchar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + } + digits[3] = value; + digits[0] = digits[1] = digits[2] = 0; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0x307) || (curChar == 0x309) || (curChar == 0x30A) || (curChar == 0x30B) || + (curChar == 0x30C)) { + var_fs0 = 8.0f; + if (curChar == 0x307) { + Message_GetTimerDigits(GET_HIGH_SCORE(HS_UNK_1), spAC); + } else if (curChar == 0x309) { + Message_GetTimerDigits(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spAC); + } else { + Message_GetTimerDigits( + ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0x30A]), spAC); + } + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, spAC[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = spAC[i] + 0x824F; + decodedBufPos++; + } else { + var_fs0 -= 1.0f; + } + } + spC0 += var_fs0 * (16.0f * msgCtx->textCharScale); + decodedBufPos--; + } else if ((curChar == 0x303) || (curChar == 0x304) || (curChar == 0x305)) { + temp2 = HIGH_SCORE(curChar - 0x303 + HS_BOAT_ARCHERY); + digits[0] = digits[1] = digits[2] = 0; + digits[3] = temp2; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + if (i == 1) { + Font_LoadChar(play, 0x95AA, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; + decodedBufPos++; + } else if (i == 3) { + Font_LoadChar(play, 0x9562, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x9562; + } + } + spC0 += 4.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x306) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) { + //! Removing index and casting one version causes gSaveContext to be reloaded + // index = curChar - 0x30D; + + for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) { + if (gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0x30D)][playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[curChar - 0x30D][i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x30D; + + for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = ptr2[var_v0 + 0]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spC0 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x310) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x1F) { + decodedBufPos--; + for (i = 0; i < font->msgBuf.wchar[msgCtx->msgBufPos + 1]; i++) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = ' '; + spC0 += 6.0f; + } + msgCtx->msgBufPos++; + } else if ((curChar == 0xC) || (curChar == 0xA)) { + msgCtx->unk11F1A[spD2] = 0; + if (msgCtx->unk11F18 == 0) { + msgCtx->unk11F1A[spD2] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) * 0.5f; + } + spD2++; + spC0 = 0.0f; + if (curChar == 0xA) { + spE0++; + } + } else if ((curChar == 0x101) || (curChar == 0x102) || (curChar == 0x104) || + ((curChar >= 0x130) && (curChar < 0x137))) { + // pass + } else if (curChar == 0x111) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos] & 0xFF; + } else if (curChar == 0x120) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos]; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + Audio_PlaySfx(msgCtx->decodedBuffer.wchar[decodedBufPos]); + } + } else if (curChar == 0x128) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos]; + } else if ((curChar != 0x20) && ((curChar < 0x2000) || (curChar >= 0x2009))) { + Font_LoadChar(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + if ((curChar == 0x8169) || (curChar == 0x8175)) { + spC0 += 10.0f * msgCtx->textCharScale; + } else if (curChar == 0x8145) { + spC0 += (12.0f * msgCtx->textCharScale); + } else if ((curChar == 0x8148) || (curChar == 0x8149)) { + spC0 += 14.0f * msgCtx->textCharScale; + } else if (curChar == 0x8144) { + spC0 += 8.0f * msgCtx->textCharScale; + } else if ((curChar == 0x816A) || (curChar == 0x8176)) { + spC0 += 10.0f * msgCtx->textCharScale; + } else if ((curChar == 0x8141) || (curChar == 0x8142) || (curChar == 0x8168)) { + spC0 += 12.0f * msgCtx->textCharScale; + } else if (curChar == 0x8194) { + spC0 += 14.0f * msgCtx->textCharScale; + } else { + spC0 += 16.0f * msgCtx->textCharScale; + } + + } else if (curChar == 0x20) { + spC0 += 6.0f; + } + + decodedBufPos++; + msgCtx->msgBufPos++; + } + } else if (msgCtx->textIsCredits) { + Message_DecodeCredits(play); + } else { + Message_DecodeNES(play); + } +} +#else +void Message_Decode(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Decode.s") +#endif + +void func_80150A84(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + s32 textBoxType = msgCtx->textBoxType; + + if (D_801CFC78[textBoxType] != 14) { + DmaMgr_SendRequest0(msgCtx->textboxSegment, + &SEGMENT_ROM_START(message_static)[D_801CFC78[textBoxType] * 0x1000], 0x1000); + + if (!play->pauseCtx.bombersNotebookOpen) { + if ((textBoxType == TEXTBOX_TYPE_0) || (textBoxType == TEXTBOX_TYPE_6) || (textBoxType == TEXTBOX_TYPE_A) || + (textBoxType == TEXTBOX_TYPE_B)) { + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + } else if (textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textboxColorRed = 70; + msgCtx->textboxColorGreen = 50; + msgCtx->textboxColorBlue = 30; + } else if ((textBoxType == TEXTBOX_TYPE_2) || (textBoxType == TEXTBOX_TYPE_8)) { + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 10; + msgCtx->textboxColorBlue = 50; + } else if (textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 255; + msgCtx->textboxColorBlue = 195; + } else { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + } + + if (textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textboxColorAlphaTarget = 230; + } else if (textBoxType == TEXTBOX_TYPE_3) { + msgCtx->textboxColorAlphaTarget = 180; + } else if (textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textboxColorAlphaTarget = 220; + } else { + msgCtx->textboxColorAlphaTarget = 170; + } + } else { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 255; + msgCtx->textboxColorBlue = 255; + msgCtx->textboxColorAlphaTarget = 255; + } + msgCtx->textboxColorAlphaCurrent = 0; + } +} + +void Message_OpenText(PlayState* play, u16 textId) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; + Player* player = GET_PLAYER(play); + f32 var_fv0; + + if (play->msgCtx.msgMode == MSGMODE_NONE) { + gSaveContext.prevHudVisibility = gSaveContext.hudVisibility; + } + + if (textId == 0xFF) { + func_80115844(play, DO_ACTION_STOP); + play->msgCtx.hudVisibility = gSaveContext.hudVisibility; + Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C); + gSaveContext.save.unk_06 = 20; + } else if ((textId == 0x579) || (textId == 0x8D8)) { + Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE); + } else if (((textId == 0x28) || (textId == 0x29) || (textId == 0x2A)) && + (player->transformation == PLAYER_FORM_DEKU)) { + //! FAKE: + if (msgCtx) {} + textId = 0xC9; + } else if (textId == 0x11) { + if (gSaveContext.save.saveInfo.inventory.strayFairies[((void)0, gSaveContext.dungeonIndex)] == 0xF) { + textId = 0xF3; + } + } else if ((textId == 0x92) && (play->sceneId == SCENE_KOEPONARACE)) { + textId = 0xCD; + } + + if ((textId == 0xC) && (GET_QUEST_HEART_PIECE_COUNT != 0)) { + textId = GET_QUEST_HEART_PIECE_COUNT; + textId += 0xC4; + } + + msgCtx->currentTextId = textId; + + if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) || + (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7)) { + Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE); + } + + msgCtx->messageHasSetSfx = false; + D_801C6A70 = 0; + msgCtx->textboxSkipped = false; + msgCtx->textIsCredits = false; + var_fv0 = 1.0f; + + if (play->pauseCtx.bombersNotebookOpen) { + if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 1.4f; + msgCtx->unk11FFC = 0x1E; + msgCtx->unk11FF8 = 0x32; + var_fv0 = 1.4; + } else { + msgCtx->textCharScale = 1.4f; + msgCtx->unk11FFC = 0x16; + msgCtx->unk11FF8 = 0x32; + var_fv0 = 1.4; + } + } else if (textId >= 0x4E20) { + msgCtx->textIsCredits = true; + msgCtx->textCharScale = 0.85f; + msgCtx->unk11FFC = 6; + msgCtx->unk11FF8 = 0x14; + } else if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 0.88f; + msgCtx->unk11FFC = 0x12; + msgCtx->unk11FF8 = 0x32; + } else { + msgCtx->textCharScale = 0.75f; + msgCtx->unk11FFC = 0xC; + msgCtx->unk11FF8 = 0x41; + } + + sCharTexSize = msgCtx->textCharScale * 16.0f; + sCharTexScale = 1024.0f / msgCtx->textCharScale; + D_801F6B08 = 1024.0f / var_fv0; + + if (msgCtx->textIsCredits) { + Message_FindCreditsMessage(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(staff_message_data_static)[font->messageStart], + font->messageEnd); + } else if (gSaveContext.options.language == LANGUAGE_JPN) { + Message_FindMessage(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } else { + Message_FindMessageNES(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } + + msgCtx->choiceNum = 0; + msgCtx->textUnskippable = false; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + msgCtx->textDrawPos = 0; + msgCtx->msgBufPos = 0; + msgCtx->decodedTextLen = 0; + + msgCtx->unk11F08 = font->msgBuf.schar[msgCtx->msgBufPos] << 8; + msgCtx->unk11F08 |= font->msgBuf.schar[msgCtx->msgBufPos + 1]; + + msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC; + msgCtx->textBoxType = (msgCtx->unk11F08 & 0xF00) >> 8; + msgCtx->textBoxPos = (msgCtx->unk11F08 & 0xF0) >> 4; + msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF; + + if ((msgCtx->unk11F0C == 1) || (msgCtx->unk11F0C == 3)) { + msgCtx->textUnskippable = true; + } + msgCtx->itemId = 0xFE; + + if ((msgCtx->textBoxType == TEXTBOX_TYPE_5) || (msgCtx->textBoxType == TEXTBOX_TYPE_D) || + (play->pauseCtx.bombersNotebookOpen)) { + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0; + } else { + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0xFF; + } + + msgCtx->choiceIndex = 0; + + if (msgCtx->unk11F0C != 3) { + msgCtx->textColorAlpha = 0xFF; + } else { + msgCtx->textColorAlpha = 0; + } + + if (textId == 0x1467) { + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); + } + + if (textId == 0x2955) { + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ANJU); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK); + } +} + +void func_801514B0(PlayState* play, u16 arg1, u8 arg2) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; + Player* player = GET_PLAYER(play); + f32 temp = 1024.0f; + + msgCtx->ocarinaAction = 0xFFFF; + + if (msgCtx->msgMode == MSGMODE_NONE) { + gSaveContext.prevHudVisibility = gSaveContext.hudVisibility; + } + msgCtx->messageHasSetSfx = false; + D_801C6A70 = 0; + msgCtx->textboxSkipped = false; + msgCtx->textIsCredits = false; + + if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 0.88f; + msgCtx->unk11FFC = 0x12; + msgCtx->unk11FF8 = 0x32; + } else { + msgCtx->textCharScale = 0.75f; + msgCtx->unk11FFC = 0xC; + msgCtx->unk11FF8 = 0x41; + } + + sCharTexSize = msgCtx->textCharScale * 16.0f; + sCharTexScale = temp / msgCtx->textCharScale; + D_801F6B08 = temp / 1; + + if ((arg1 == 0x1709) && (player->transformation == 3)) { + arg1 = 0x1705; + } + + msgCtx->currentTextId = arg1; + + if (gSaveContext.options.language == LANGUAGE_JPN) { + Message_FindMessage(play, arg1); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } else { + Message_FindMessageNES(play, arg1); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } + msgCtx->choiceNum = 0; + msgCtx->textUnskippable = false; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + msgCtx->textDrawPos = 0; + msgCtx->msgBufPos = 0; + msgCtx->decodedTextLen = 0; + msgCtx->unk11F08 = font->msgBuf.wchar[msgCtx->msgBufPos]; + msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC; + msgCtx->textBoxType = TEXTBOX_TYPE_9; + msgCtx->textBoxPos = arg2; + msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF; + msgCtx->textUnskippable = true; + DmaMgr_SendRequest0(msgCtx->textboxSegment, &SEGMENT_ROM_START(message_static)[D_801CFC78[0] << 12], 0x1000); + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + msgCtx->textboxColorAlphaTarget = 0xE6; + msgCtx->textboxColorAlphaCurrent = 0; + msgCtx->textColorAlpha = 0xFF; + msgCtx->talkActor = NULL; + msgCtx->msgMode = MSGMODE_TEXT_START; + msgCtx->stateTimer = 0; + msgCtx->textDelayTimer = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + msgCtx->unk120D2 = 0xFF; + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2; +} void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaAction = 0xFFFF; - func_80150D08(play, textId); + Message_OpenText(play, textId); msgCtx->talkActor = actor; - msgCtx->msgMode = 1; + msgCtx->msgMode = MSGMODE_TEXT_START; msgCtx->stateTimer = 0; msgCtx->textDelayTimer = 0; - play->msgCtx.ocarinaMode = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; } void Message_ContinueTextbox(PlayState* play, u16 textId) { @@ -334,9 +3328,9 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { InterfaceContext* interfaceCtx = &play->interfaceCtx; msgCtx->msgLength = 0; - func_80150D08(play, textId); + Message_OpenText(play, textId); func_80150A84(play); - msgCtx->msgMode = 5; + msgCtx->msgMode = MSGMODE_TEXT_CONTINUING; msgCtx->stateTimer = 8; msgCtx->textDelayTimer = 0; @@ -350,21 +3344,21 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; if (play->pauseCtx.bombersNotebookOpen) { - msgCtx->textboxXTarget = 0x22; - msgCtx->textboxYTarget = 0x15E; - func_80149C18(play); + msgCtx->textboxXTarget = 34; + msgCtx->textboxYTarget = 350; + Message_GrowTextbox(play); msgCtx->stateTimer = 1; } } -void func_80151A68(PlayState* play, u16 textId) { +void Message_DisplaySceneTitleCard(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; msgCtx->msgLength = 0; - func_80150D08(play, textId); + Message_OpenText(play, textId); func_80150A84(play); Message_DecodeNES(play); - msgCtx->msgMode = 0x45; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND; msgCtx->textDelayTimer = 0; msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; msgCtx->stateTimer = 30; @@ -402,7 +3396,10 @@ void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) { } } -u32 func_80151C9C(PlayState* play) { +/** + * @return s32 true if an entry to be shown was found and triggered + */ +s32 Message_BombersNotebookProcessEventQueue(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; while (true) { @@ -429,16 +3426,188 @@ u32 func_80151C9C(PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80151DA4.s") +u16 D_801D028C[] = { + 0x1B5A, // OCARINA_ACTION_0 + 0x1B5B, // + 0x1B5C, // OCARINA_ACTION_DEMONSTRATE_SONATA + 0x1B5D, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY + 0x1B5E, // OCARINA_ACTION_DEMONSTRATE_NEW_WAVE + 0x1B5F, // OCARINA_ACTION_DEMONSTRATE_ELEGY + 0x1B60, // OCARINA_ACTION_DEMONSTRATE_OATH + 0x1B61, // OCARINA_ACTION_DEMONSTRATE_SARIAS + 0x1B62, // OCARINA_ACTION_DEMONSTRATE_TIME + 0x1B63, // OCARINA_ACTION_DEMONSTRATE_HEALING + 0x1B64, // OCARINA_ACTION_DEMONSTRATE_EPONAS + 0x1B65, // OCARINA_ACTION_DEMONSTRATE_SOARING + 0x1B66, // OCARINA_ACTION_DEMONSTRATE_STORMS + 0x1B67, // OCARINA_ACTION_DEMONSTRATE_SUNS + 0x1B68, // OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME + 0x1B69, // OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME + 0x1B6A, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO + 0, // OCARINA_ACTION_11 + 0xDC7, // OCARINA_ACTION_3B + 0xDC9, // OCARINA_ACTION_3C + 0x120A, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF + 0x120B, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF + 0x122C, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF + 0x122F, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF + 0x120A, // OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF + 0x120B, // OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF +}; -void func_80152434(PlayState* play, u16 arg2) { - play->msgCtx.blockSunsSong = false; - func_80151DA4(play, arg2); +u16 sOcarinaSongFlagsMap[] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800 }; + +void Message_DisplayOcarinaStaffImpl(PlayState* play, u16 ocarinaAction) { + MessageContext* msgCtx = &play->msgCtx; + s16 j; + s16 noStop; + s32 k; + u32 i; + + msgCtx->ocarinaAvailableSongs = 0; + + for (i = msgCtx->ocarinaAvailableSongs; i <= (QUEST_SONG_SUN - QUEST_SONG_SONATA); i++) { + if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA + i)) { + msgCtx->ocarinaAvailableSongs = msgCtx->ocarinaAvailableSongs | sOcarinaSongFlagsMap[i]; + } + } + + if (CHECK_QUEST_ITEM(QUEST_SONG_TIME)) { + msgCtx->ocarinaAvailableSongs |= 0x3000; + } + if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) { + msgCtx->ocarinaAvailableSongs |= 0x4000; + } + if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) { + msgCtx->ocarinaAvailableSongs &= (u16)~0x4000; + } + if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { + msgCtx->ocarinaAvailableSongs |= 0x400000; + } + if (CHECK_EVENTINF(EVENTINF_31)) { + msgCtx->ocarinaAvailableSongs |= 0x800000; + } + + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + + if ((ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] = + sOcarinaButtonAlphaValues[3] = 255; + } else { + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + } + + sLastPlayedSong = 0xFF; + msgCtx->lastPlayedSong = 0xFF; + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + noStop = false; + msgCtx->ocarinaAction = ocarinaAction; + + if ((ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) && + (ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) { + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else if ((ocarinaAction == OCARINA_ACTION_3B) || (ocarinaAction == OCARINA_ACTION_3C)) { + noStop = true; + Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]); + func_80150A84(play); + } else if ((ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) && + (ocarinaAction <= OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + noStop = true; + Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]); + func_80150A84(play); + } else if ((ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + noStop = true; + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + if ((ocarinaAction >= OCARINA_ACTION_CHECK_TIME) && (ocarinaAction <= OCARINA_ACTION_CHECK_STORMS)) { + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } + if (ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) { + Message_OpenText(play, 0x1B5B); + func_80150A84(play); + } else { + Message_OpenText(play, 0x1B5A); + func_80150A84(play); + } + } else { + noStop = true; + if (ocarinaAction >= OCARINA_ACTION_PROMPT_SONATA) { + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else { + Message_OpenText(play, D_801D028C[ocarinaAction]); + func_80150A84(play); + } + } + + msgCtx->talkActor = NULL; + msgCtx->textDelayTimer = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + msgCtx->textboxXTarget = 34; + msgCtx->textboxYTarget = 142; + msgCtx->stateTimer = 8; + Message_GrowTextbox(play); + msgCtx->textboxX = 34; + msgCtx->textboxY = 142; + msgCtx->unk1200C = 0x200; + msgCtx->unk1200E = 0x200; + msgCtx->unk12008 = 0x100; + msgCtx->unk1200A = 0x40; + msgCtx->msgMode = MSGMODE_TEXT_CONTINUING; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + + if (!noStop) { + func_80115844(play, DO_ACTION_STOP); + noStop = gSaveContext.hudVisibility; + Interface_SetHudVisibility(HUD_VISIBILITY_B_ALT); + gSaveContext.hudVisibility = noStop; + } + + if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + msgCtx->textBoxType = TEXTBOX_TYPE_E; + } else if (ocarinaAction == OCARINA_ACTION_3A) { + msgCtx->msgMode = MSGMODE_32; + } else if (ocarinaAction == OCARINA_ACTION_37) { + msgCtx->msgMode = MSGMODE_2F; + msgCtx->textBoxType = TEXTBOX_TYPE_2; + } else if (ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufLen = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1); + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + + for (j = 0, k = 0; j < 48; j++, k += FONT_CHAR_TEX_SIZE) { + Font_LoadChar(play, 0x8140, k); + }; + + msgCtx->stateTimer = 3; } -void func_80152464(PlayState* play, u16 arg1) { +void Message_DisplayOcarinaStaff(PlayState* play, u16 ocarinaAction) { + play->msgCtx.blockSunsSong = false; + Message_DisplayOcarinaStaffImpl(play, ocarinaAction); +} + +void Message_DisplayOcarinaStaffBlockSunsSong(PlayState* play, u16 ocarinaAction) { play->msgCtx.blockSunsSong = true; - func_80151DA4(play, arg1); + Message_DisplayOcarinaStaffImpl(play, ocarinaAction); } /** @@ -449,7 +3618,7 @@ u8 Message_GetState(MessageContext* msgCtx) { return TEXT_STATE_NONE; } - if (msgCtx->msgMode == 0x42) { + if (msgCtx->msgMode == MSGMODE_TEXT_DONE) { if (msgCtx->nextTextId != 0xFFFF) { return TEXT_STATE_1; } @@ -482,69 +3651,419 @@ u8 Message_GetState(MessageContext* msgCtx) { return TEXT_STATE_DONE; } - if (msgCtx->msgMode == 0x41) { + if (msgCtx->msgMode == MSGMODE_TEXT_AWAIT_NEXT) { return TEXT_STATE_10; } - if (msgCtx->msgMode == 0x1B) { + if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_DONE) { return TEXT_STATE_7; } - if ((msgCtx->ocarinaMode == 3) || (msgCtx->msgMode == 0x37)) { + if ((msgCtx->ocarinaMode == OCARINA_MODE_EVENT) || (msgCtx->msgMode == MSGMODE_37)) { return TEXT_STATE_8; } - if (msgCtx->msgMode == 0x20) { + if (msgCtx->msgMode == MSGMODE_OCARINA_AWAIT_INPUT) { return TEXT_STATE_9; } - if ((msgCtx->msgMode == 0x21) || (msgCtx->msgMode == 0x3A)) { + if ((msgCtx->msgMode == MSGMODE_21) || (msgCtx->msgMode == MSGMODE_3A)) { return TEXT_STATE_11; } - if (msgCtx->msgMode == 0x3D) { + if (msgCtx->msgMode == MSGMODE_3D) { return TEXT_STATE_12; } - if (msgCtx->msgMode == 0x40) { + if (msgCtx->msgMode == MSGMODE_40) { return TEXT_STATE_13; } - if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) { + if ((msgCtx->msgMode == MSGMODE_TEXT_CLOSING) && (msgCtx->stateTimer == 1) && + (msgCtx->bombersNotebookEventQueueCount == 0)) { return TEXT_STATE_CLOSING; } return TEXT_STATE_3; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8015268C.s") +void Message_DrawTextBox(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; -void func_80152C64(View* view) { + gDPPipeSync(gfx++); + + if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) || + (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) { + gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPSetAlphaCompare(gfx++, G_AC_THRESHOLD); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + } + + gDPSetPrimColor(gfx++, 0, 0, msgCtx->textboxColorRed, msgCtx->textboxColorGreen, msgCtx->textboxColorBlue, + msgCtx->textboxColorAlphaCurrent); + + if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) || + (msgCtx->textBoxType == TEXTBOX_TYPE_6) || (msgCtx->textBoxType == TEXTBOX_TYPE_8) || + (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) { + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_I, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPPipeSync(gfx++); + + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + gDPSetEnvColor(gfx++, 20, 0, 10, 255); + } else { + gDPSetEnvColor(gfx++, 50, 20, 0, 255); + } + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_IA, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } + + if (msgCtx->textBoxType == TEXTBOX_TYPE_A) { + gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY + 22) << 2, + (msgCtx->textboxX + msgCtx->unk12008) << 2, (msgCtx->textboxY + 54) << 2, G_TX_RENDERTILE, + 0, 6, msgCtx->unk1200C << 1, 2 << 10); + } else { + gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY) << 2, + (msgCtx->textboxX + sTextboxWidth) << 2, (msgCtx->textboxY + sTextboxHeight) << 2, + G_TX_RENDERTILE, 0, 0, sTextboxTexWidth, sTextboxTexHeight); + } + + // Draw treble clef + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, + 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 100, 0, 255); + gDPLoadTextureBlock_4b(gfx++, gOcarinaTrebleClefTex, G_IM_FMT_I, 16, 32, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, 78 << 2, 166 << 2, 94 << 2, 198 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + + *gfxP = gfx++; +} + +void Message_SetView(View* view) { SET_FULLSCREEN_VIEWPORT(view); View_ApplyOrthoToOverlay(view); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152CAC.s") +void func_80152CAC(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; -// Spawn song effect? -void func_80152EC0(PlayState* play) { + if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SONATA) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MONKEY); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_HEALING) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_PIANO); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SARIAS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EPONAS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FEMALE_VOICE); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_STORMS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BABY_SINGING); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_OATH) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_ELEGY) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_IKANA_KING); + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + } + + if ((msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS); + AudioOcarina_SetPlaybackSong(OCARINA_SONG_GORON_LULLABY_INTRO + 1, 0x83); + return; + } + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BASS_GUITAR); + AudioOcarina_SetPlaybackSong( + ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) + OCARINA_SONG_EVAN_PART1 + 1), + 0x84); + return; + } + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ZORA_GUITAR); + AudioOcarina_SetPlaybackSong( + ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) + OCARINA_SONG_EVAN_PART1 + 1), + 0x44); + return; + } + AudioOcarina_SetPlaybackSong((msgCtx->ocarinaAction - OCARINA_ACTION_FREE_PLAY), 2); +} + +s16 sOcarinaEffectActorIds[] = { + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE7, // Song of Healing Effect + ACTOR_OCEFF_WIPE2, // Epona's Song Effect + ACTOR_OCEFF_WIPE6, // Song of Soaring Effect + ACTOR_OCEFF_STORM, // Song of Storms Effect II [?] + ACTOR_OCEFF_SPOT, // Sun's Song Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect +}; +s32 sOcarinaEffectActorParams[] = { 0, 1, 2, 3, 4, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0 }; + +void Message_SpawnSongEffect(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Player* player = GET_PLAYER(play); + //! FAKE: if (1) {} - if ((msgCtx->songPlayed < 0x17) && (msgCtx->songPlayed != 0xE) && - ((msgCtx->ocarinaAction < 0x43) || (msgCtx->ocarinaAction >= 0x47))) { + if ((msgCtx->songPlayed <= OCARINA_SONG_SCARECROW_SPAWN) && + (msgCtx->songPlayed != OCARINA_SONG_GORON_LULLABY_INTRO) && + !((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU))) { msgCtx->ocarinaSongEffectActive = true; - if (msgCtx->songPlayed != 0x16) { - Actor_Spawn(&play->actorCtx, play, D_801D02D8[msgCtx->songPlayed], player->actor.world.pos.x, - player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, D_801D02F8[msgCtx->songPlayed]); - return; + if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) { + Actor_Spawn(&play->actorCtx, play, sOcarinaEffectActorIds[msgCtx->songPlayed], player->actor.world.pos.x, + player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, + sOcarinaEffectActorParams[msgCtx->songPlayed]); + } else { + Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z, 0, 0, 0, 0); } - Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y, - player->actor.world.pos.z, 0, 0, 0, 0); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152FB8.s") +Color_RGB16 sOcarinaButtonAPrimColors[] = { + { 80, 150, 255 }, + { 100, 200, 255 }, +}; +Color_RGB16 sOcarinaButtonAEnvColors[] = { + { 10, 10, 10 }, + { 50, 50, 255 }, +}; +Color_RGB16 sOcarinaButtonCPrimColors[] = { + { 255, 255, 50 }, + { 255, 255, 180 }, +}; +Color_RGB16 sOcarinaButtonCEnvColors[] = { + { 10, 10, 10 }, + { 110, 110, 50 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153750.s") +void Message_FlashOcarinaButtons(void) { + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAPrimR - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAPrimG - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAPrimB - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; -void func_80153E7C(PlayState* play, Gfx** gfxP) { - if ((gSaveContext.options.language == 0) && !play->msgCtx.textIsCredits) { - func_8014ADBC(play, gfxP); + if (sOcarinaButtonAPrimR >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonAPrimR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonAPrimR += sOcarinaButtonStepR; + } + if (sOcarinaButtonAPrimG >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonAPrimG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonAPrimG += sOcarinaButtonStepG; + } + if (sOcarinaButtonAPrimB >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonAPrimB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonAPrimB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAEnvR - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAEnvG - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAEnvB - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCEnvR >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonAEnvR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonAEnvR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCEnvG >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonAEnvG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonAEnvG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCEnvB >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonAEnvB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonAEnvB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCPrimR - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCPrimG - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCPrimB - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCPrimR >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonCPrimR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonCPrimR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCPrimG >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonCPrimG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonCPrimG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCPrimB >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonCPrimB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonCPrimB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCEnvR - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCEnvG - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCEnvB - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCEnvR >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonCEnvR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonCEnvR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCEnvG >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonCEnvG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonCEnvG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCEnvB >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonCEnvB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonCEnvB += sOcarinaButtonStepB; + } + + sOcarinaButtonFlashTimer--; + if (sOcarinaButtonFlashTimer == 0) { + sOcarinaButtonAPrimR = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonAPrimG = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonAPrimB = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonAEnvR = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonAEnvG = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonAEnvB = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonCPrimR = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonCPrimG = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonCPrimB = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonCEnvR = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonCEnvG = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonCEnvB = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonFlashTimer = 3; + sOcarinaButtonFlashColorIndex ^= 1; + } +} + +TexturePtr sOcarinaButtonTextures[] = { + gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex, +}; + +void Message_DrawOcarinaButtons(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + u16 i; + u16 notePosX; + + if ((play->msgCtx.msgMode >= MSGMODE_OCARINA_PLAYING) && (msgCtx->msgMode <= MSGMODE_40)) { + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Gfx_SetupDL39_Ptr(&gfx); + + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + if ((msgCtx->msgMode == MSGMODE_SONG_PROMPT) || (msgCtx->msgMode == MSGMODE_36)) { + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + if (msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + // Can never pass as the conditional is opposite to one scope higher + sOcarinaButtonStepG = (msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) + + OCARINA_SONG_EVAN_PART1; + } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN + + OCARINA_SONG_WIND_FISH_HUMAN; + } else { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA; + } + sOcarinaButtonStepR = gOcarinaSongButtons[sOcarinaButtonStepG].numButtons; + + for (notePosX = 98, i = 0; i < sOcarinaButtonStepR; notePosX += 18, i++) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 150); + gDPSetEnvColor(gfx++, 10, 10, 10, 0); + + gDPLoadTextureBlock( + gfx++, sOcarinaButtonTextures[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]], + G_IM_FMT_IA, G_IM_SIZ_8b, 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( + gfx++, notePosX << 2, + msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] << 2, + (notePosX + 16) << 2, + (msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] + 16) + << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + } + + if (msgCtx->msgMode != MSGMODE_SCARECROW_LONG_RECORDING_START) { + for (notePosX = 98, i = 0; i < 8; notePosX += 18, i++) { + if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_INVALID) { + break; + } + + if (sOcarinaButtonAlphaValues[i] != 255) { + sOcarinaButtonAlphaValues[i] += 50; + if (sOcarinaButtonAlphaValues[i] >= 255) { + sOcarinaButtonAlphaValues[i] = 255; + } + } + + gDPPipeSync(gfx++); + if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_A) { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonAPrimR, sOcarinaButtonAPrimG, sOcarinaButtonAPrimB, + sOcarinaButtonAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaButtonAEnvR, sOcarinaButtonAEnvG, sOcarinaButtonAEnvB, 0); + } else { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonCPrimR, sOcarinaButtonCPrimG, sOcarinaButtonCPrimB, + sOcarinaButtonAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaButtonCEnvR, sOcarinaButtonCEnvG, sOcarinaButtonCEnvB, 0); + } + + gDPLoadTextureBlock(gfx++, sOcarinaButtonTextures[sOcarinaButtonIndexBuf[i]], G_IM_FMT_IA, + G_IM_SIZ_8b, 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( + gfx++, notePosX << 2, msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] << 2, + (notePosX + 16) << 2, (msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] + 16) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + } + } + *gfxP = gfx; +} + +void Message_DrawText(PlayState* play, Gfx** gfxP) { + if ((gSaveContext.options.language == LANGUAGE_JPN) && !play->msgCtx.textIsCredits) { + Message_DrawTextDefault(play, gfxP); } else if (play->msgCtx.textIsCredits) { Message_DrawTextCredits(play, gfxP); } else { @@ -552,9 +4071,1035 @@ void func_80153E7C(PlayState* play, Gfx** gfxP) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153EF0.s") +void Message_DrawSceneTitleCard(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801541D4.s") + gfx = *gfxP; + Gfx_SetupDL39_Ptr(&gfx); + + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetTextureFilter(gfx++, G_TF_BILERP); + gDPSetAlphaDither(gfx++, G_AD_NOTPATTERN); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textboxColorAlphaCurrent); + gDPSetEnvColor(gfx++, 140, 40, 160, 255); + gDPLoadTextureBlock(gfx++, gSceneTitleCardGradientTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, 0, XREG(77) << 2, 320 << 2, (XREG(77) + XREG(76)) << 2, G_TX_RENDERTILE, 0, 0, 204, + 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + + if ((msgCtx->currentTextId < 0x1BB2) || (msgCtx->currentTextId >= 0x1BB7)) { + msgCtx->unk11FF8 = XREG(75); + } + msgCtx->unk11FFA = XREG(74); + Message_DrawTextNES(play, &gfx, 0); + *gfxP = gfx++; +} + +s16 sOcarinaSongFanfares[] = { + NA_BGM_OCARINA_SONATA, // OCARINA_SONG_SONATA + NA_BGM_OCARINA_LULLABY, // OCARINA_SONG_GORON_LULLABY + NA_BGM_OCARINA_NEW_WAVE, // OCARINA_SONG_NEW_WAVE + NA_BGM_OCARINA_ELEGY, // OCARINA_SONG_ELEGY + NA_BGM_OCARINA_OATH, // OCARINA_SONG_OATH + NA_BGM_MAJORAS_LAIR, // OCARINA_SONG_SARIAS + NA_BGM_OCARINA_TIME, // OCARINA_SONG_TIME + NA_BGM_OCARINA_HEALING, // OCARINA_SONG_HEALING + NA_BGM_OCARINA_EPONA, // OCARINA_SONG_EPONAS + NA_BGM_OCARINA_SOARING, // OCARINA_SONG_SOARING + NA_BGM_OCARINA_STORM, // OCARINA_SONG_STORMS + NA_BGM_OCARINA_SUNS, // OCARINA_SONG_SUNS + NA_BGM_INVERTED_SONG_OF_TIME, // OCARINA_SONG_INVERTED_TIME + NA_BGM_SONG_OF_DOUBLE_TIME, // OCARINA_SONG_DOUBLE_TIME + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_GORON_LULLABY_INTRO + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_HUMAN + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_GORON +}; + +s8 sOcarinaSongFanfareIoData[PLAYER_FORM_MAX] = { + 0x35, // PLAYER_FORM_FIERCE_DEITY + 0x5C, // PLAYER_FORM_GORON + 0x5D, // PLAYER_FORM_ZORA + 0x5E, // PLAYER_FORM_DEKU + 0x35, // PLAYER_FORM_HUMAN +}; + +u8 sPlayerFormOcarinaInstruments[] = { + OCARINA_INSTRUMENT_DEFAULT, + OCARINA_INSTRUMENT_GORON_DRUMS, + OCARINA_INSTRUMENT_ZORA_GUITAR, + OCARINA_INSTRUMENT_DEKU_PIPES, +}; + +s16 D_801D03A8[TEXTBOX_TYPE_MAX] = { + 0x3B, // TEXTBOX_TYPE_0 + 0x3B, // TEXTBOX_TYPE_1 + 0x3B, // TEXTBOX_TYPE_2 + 0x3B, // TEXTBOX_TYPE_3 + 0x22, // TEXTBOX_TYPE_4 + 0x3B, // TEXTBOX_TYPE_5 + 0x3B, // TEXTBOX_TYPE_6 + 0x3B, // TEXTBOX_TYPE_7 + 0x3B, // TEXTBOX_TYPE_8 + 0x3B, // TEXTBOX_TYPE_9 + 0x3B, // TEXTBOX_TYPE_A + 0x3B, // TEXTBOX_TYPE_B + 0x3B, // TEXTBOX_TYPE_C + 0x3B, // TEXTBOX_TYPE_D + 0x3B, // TEXTBOX_TYPE_E + 0x3B, // TEXTBOX_TYPE_F +}; + +void Message_DrawMain(PlayState* play, Gfx** gfxP) { + s32 pad; + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx; + u16 i; + u16 buttonIndexPos; + u8 ocarinaError; + s32 j; + s16 temp_v0_33; + s16 temp; + + gfx = *gfxP; + + gSPSegment(gfx++, 0x02, play->interfaceCtx.parameterSegment); + gSPSegment(gfx++, 0x07, msgCtx->textboxSegment); + + if (msgCtx->msgLength != 0) { + if (!msgCtx->textIsCredits) { + Message_SetView(&msgCtx->view); + Gfx_SetupDL39_Ptr(&gfx); + if (msgCtx->ocarinaAction != OCARINA_ACTION_37) { + if ((msgCtx->msgMode != MSGMODE_18) && (msgCtx->msgMode != MSGMODE_39) && + (msgCtx->msgMode != MSGMODE_3C) && (msgCtx->msgMode != MSGMODE_3F) && + (msgCtx->msgMode != MSGMODE_3A) && (msgCtx->msgMode != MSGMODE_3D) && + (msgCtx->msgMode != MSGMODE_40) && + (((msgCtx->msgMode >= MSGMODE_TEXT_BOX_GROWING) && (msgCtx->msgMode <= MSGMODE_TEXT_DONE)) || + ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2))) && + (D_801CFC78[msgCtx->textBoxType] != 0xE)) { + Message_DrawTextBox(play, &gfx); + } + } + } + Gfx_SetupDL39_Ptr(&gfx); + gDPSetAlphaCompare(gfx++, G_AC_NONE); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, + 0); + + if (YREG(0) != msgCtx->msgMode) { + YREG(0) = msgCtx->msgMode; + YREG(1) = msgCtx->ocarinaAction; + } + + switch (msgCtx->msgMode) { + case MSGMODE_TEXT_START: + case MSGMODE_TEXT_BOX_GROWING: + case MSGMODE_TEXT_STARTING: + case MSGMODE_TEXT_NEXT_MSG: + break; + + case MSGMODE_TEXT_CONTINUING: + if (msgCtx->stateTimer == 1) { + for (i = 0, j = 0; i < 48; i++, j += FONT_CHAR_TEX_SIZE) { + Font_LoadChar(play, 0x8140, j); + } + Message_DrawText(play, &gfx); + } else { + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } + break; + + case MSGMODE_TEXT_DISPLAYING: + case MSGMODE_TEXT_DELAYED_BREAK: + case MSGMODE_9: + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + if (msgCtx->textDelay != 0) { + msgCtx->textDrawPos += msgCtx->textDelay; + } + Message_DrawTextNES(play, &gfx, 0); + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos); + } + } else if (msgCtx->textIsCredits) { + Message_DrawTextCredits(play, &gfx); + } else { + if (msgCtx->textDelay != 0) { + msgCtx->textDrawPos += msgCtx->textDelay; + } + Message_DrawTextNES(play, &gfx, 0); + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos); + } + } + break; + + case MSGMODE_NEW_CYCLE_0: + case MSGMODE_NEW_CYCLE_1: + case MSGMODE_NEW_CYCLE_2: + case MSGMODE_OWL_SAVE_0: + case MSGMODE_OWL_SAVE_1: + case MSGMODE_OWL_SAVE_2: + Message_DrawTextNES(play, &gfx, 0); + break; + + case MSGMODE_TEXT_AWAIT_INPUT: + case MSGMODE_TEXT_AWAIT_NEXT: + Message_DrawText(play, &gfx); + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + + case MSGMODE_OCARINA_STARTING: + case MSGMODE_SONG_DEMONSTRATION_STARTING: + case MSGMODE_SONG_PROMPT_STARTING: + case MSGMODE_32: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + } + sOcarinaButtonFlashColorIndex = 1; + sOcarinaButtonFlashTimer = 3; + if (msgCtx->msgMode == MSGMODE_OCARINA_STARTING) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) || + (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) || + (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) || + (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) { + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000); + } else if (CHECK_EVENTINF(EVENTINF_31)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartDefault(0x80800000); + } else { + AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) | + 0xC0000000); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + } + } else { + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs); + } + } else { + AudioOcarina_StartDefault((1 << msgCtx->ocarinaAction) | 0x80000000); + } + msgCtx->msgMode = MSGMODE_OCARINA_PLAYING; + if (CHECK_EVENTINF(EVENTINF_24)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET); + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_20)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + //! FAKE: + (void)CUR_FORM; + if (gSaveContext.save.playerForm == 4) {} + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_AMPLIFIED_GUITAR); + } + } else if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_STARTING) { + msgCtx->stateTimer = 20; + msgCtx->msgMode = MSGMODE_19; + } else if (msgCtx->msgMode == MSGMODE_32) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartDefault(0x80800000); + msgCtx->msgMode = MSGMODE_33; + } else { // MSGMODE_SONG_PROMPT_STARTING + if (CHECK_EVENTINF(EVENTINF_24)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET); + } else { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + } + + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_StartForSongCheck( + (1 << (OCARINA_ACTION_PROMPT_SONATA + msgCtx->ocarinaAction)) | 0x80000000, 4); + msgCtx->msgMode = MSGMODE_SONG_PROMPT; + } else { + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_StartDefault( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) + + OCARINA_SONG_WIND_FISH_HUMAN)) | + 0x80000000); + } else { + AudioOcarina_StartDefault( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA) + OCARINA_SONG_SONATA)) | + 0x80000000); + } + msgCtx->msgMode = MSGMODE_SONG_PROMPT; + } + } + + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Message_DrawText(play, &gfx); + } + break; + + case MSGMODE_OCARINA_PLAYING: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if ((msgCtx->ocarinaStaff->pos == 1) && (sOcarinaButtonIndexBufPos == 8)) { + sOcarinaButtonIndexBufPos = 0; + } + + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART1) { + AudioOcarina_ResetAndReadInput(); + AudioOcarina_StartDefault(0x80100000); + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART2) { + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + AudioOcarina_SetOcarinaDisableTimer(0, 20); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_FULL_EVAN_SONG; + } else if ((msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_INVERTED_TIME) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_DOUBLE_TIME) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) || + CHECK_QUEST_ITEM(QUEST_SONG_SONATA + msgCtx->ocarinaStaff->state)) { + sLastPlayedSong = msgCtx->ocarinaStaff->state; + msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state; + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_E; + msgCtx->stateTimer = 20; + + if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) { + if ((msgCtx->ocarinaStaff->state <= OCARINA_SONG_SARIAS) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } else { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW_SPAWN) { + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_STORMS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + msgCtx->msgMode = MSGMODE_OCARINA_FAIL; + } else { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else { + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + SET_EVENTINF(EVENTINF_32); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + AudioOcarina_SetOcarinaDisableTimer(0, 20); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + msgCtx->msgMode = MSGMODE_OCARINA_FAIL; + } else { + AudioOcarina_SetSongStartingPos(); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) | 0xC0000000); + } + } + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Message_DrawText(play, &gfx); + } + break; + + case MSGMODE_E: + case MSGMODE_SONG_PROMPT_SUCCESS: + case MSGMODE_22: + case MSGMODE_SCARECROW_SPAWN_RECORDING_DONE: + case MSGMODE_34: + Message_FlashOcarinaButtons(); + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + + if (msgCtx->msgMode == MSGMODE_E) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 1; + } else if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_SUCCESS) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 1; + } else if (msgCtx->msgMode == MSGMODE_22) { + msgCtx->msgMode = MSGMODE_23; + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + msgCtx->textBoxType = TEXTBOX_TYPE_0; + } else if (msgCtx->msgMode == MSGMODE_34) { + if (msgCtx->songPlayed == OCARINA_SONG_TERMINA_WALL) { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + } else { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_OCARINA_FAIL: + case MSGMODE_SONG_PROMPT_FAIL: + Message_DrawText(play, &gfx); + // fallthrough + case MSGMODE_OCARINA_FAIL_NO_TEXT: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + D_801C6A94 = 1; + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_FAIL) { + Message_ContinueTextbox(play, 0x1B89); + Message_Decode(play); + msgCtx->msgMode = MSGMODE_SONG_PROMPT_NOTES_DROP; + } else { + msgCtx->msgMode = MSGMODE_OCARINA_NOTES_DROP; + } + } + break; + + case MSGMODE_OCARINA_NOTES_DROP: + case MSGMODE_SONG_PROMPT_NOTES_DROP: + for (i = 0; i < 5; i++) { + msgCtx->ocarinaButtonsPosY[i] += D_801C6A94; + } + D_801C6A94 += D_801C6A94; + if (D_801C6A94 >= 0x226) { + Message_ResetOcarinaButtonAlphas(); + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_NOTES_DROP) { + msgCtx->msgMode = MSGMODE_OCARINA_AWAIT_INPUT; + msgCtx->stateTimer = 10; + } else { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + } + break; + + case MSGMODE_SONG_PLAYED: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_Decode(play); + msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED; + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + Message_SpawnSongEffect(play); + } + break; + + case MSGMODE_SETUP_DISPLAY_SONG_PLAYED: + Message_DrawText(play, &gfx); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_SetPlaybackSong(msgCtx->ocarinaAction - OCARINA_ACTION_SCARECROW_LONG_RECORDING, 1); + } else { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_SetPlaybackSong((u8)msgCtx->songPlayed + 1, 1); + if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) { + func_801A3000((u16)sOcarinaSongFanfares[msgCtx->songPlayed], + (u8)sOcarinaSongFanfareIoData[CUR_FORM]); + AudioSfx_MuteBanks(0x20); + } + } + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) { + msgCtx->ocarinaAction = OCARINA_ACTION_FREE_PLAY_DONE; + } + if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) { + msgCtx->ocarinaAction = OCARINA_ACTION_CHECK_NOTIME_DONE; + } + sOcarinaButtonIndexBufPos = 0; + msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED; + break; + + case MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN: + if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) { + Message_ContinueTextbox(play, 0x1B6B); + } else { + Message_ContinueTextbox(play, 0x1B72 + msgCtx->songPlayed); + } + Message_Decode(play); + msgCtx->msgMode = MSGMODE_16; + msgCtx->stateTimer = 20; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_16: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_17; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_17: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_18; + msgCtx->stateTimer = 2; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_18: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + Message_CloseTextbox(play); + if (msgCtx->songPlayed == OCARINA_SONG_EPONAS) { + gHorsePlayedEponasSong = true; + } + + if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) { + if (sLastPlayedSong == OCARINA_SONG_ELEGY) { + if ((play->sceneId == SCENE_F40) || (play->sceneId == SCENE_F41) || + (play->sceneId == SCENE_IKANAMAE) || (play->sceneId == SCENE_CASTLE) || + (play->sceneId == SCENE_IKNINSIDE) || (play->sceneId == SCENE_IKANA) || + (play->sceneId == SCENE_INISIE_N) || (play->sceneId == SCENE_INISIE_R) || + (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_RANDOM) || + (play->sceneId == SCENE_REDEAD) || (play->sceneId == SCENE_TOUGITES)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) { + play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_SCARECROW_SPAWN; + } + } + } else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_SONATA) { + if ((OCARINA_ACTION_CHECK_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + play->msgCtx.ocarinaMode = msgCtx->songPlayed - 1; + } + } else if ((OCARINA_ACTION_PROMPT_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } + break; + + case MSGMODE_19: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + func_80152CAC(play); + sOcarinaButtonIndexBufPos = 0; + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_DISPLAY_SONG_PLAYED: + case MSGMODE_SONG_DEMONSTRATION: + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + if (msgCtx->ocarinaStaff->state == 0) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + } + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } else if (msgCtx->msgMode == MSGMODE_DISPLAY_SONG_PLAYED) { + msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN; + } else { + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_DONE; + } + } else { + if ((sOcarinaButtonIndexBufPos != 0) && (msgCtx->ocarinaStaff->pos == 1)) { + sOcarinaButtonIndexBufPos = 0; + } + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + // fallthrough + case MSGMODE_SONG_DEMONSTRATION_DONE: + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SONG_PROMPT: + case MSGMODE_33: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_22; + } else { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_SONG_PROMPT_SUCCESS; + if (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) { + Item_Give(play, ITEM_SONG_LULLABY_INTRO); + } else if (!((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) && + (msgCtx->ocarinaStaff->state != OCARINA_SONG_NEW_WAVE)) { + Item_Give(play, + (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + } + } + msgCtx->stateTimer = 20; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_34; + Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + msgCtx->stateTimer = 20; + AudioOcarina_SetOcarinaDisableTimer(0, 20); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT) { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_FAIL; + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_OCARINA_AWAIT_INPUT: + Message_DrawText(play, &gfx); + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_21; + msgCtx->textBoxType = TEXTBOX_TYPE_0; + } + } + break; + + case MSGMODE_SCARECROW_LONG_RECORDING_START: + AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_LONG); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING: + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + + if (sOcarinaButtonIndexBufLen >= 8) { + for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) { + sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1]; + } + sOcarinaButtonIndexBufLen--; + } + + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufLen++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + if (msgCtx->ocarinaStaff) {} + if (msgCtx->ocarinaStaff->pos == 8) { + sOcarinaButtonIndexBufPos = 0; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_LONG_DEMONSTRATION: + case MSGMODE_SCARECROW_SPAWN_DEMONSTRATION: + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + if (sOcarinaButtonIndexBufLen >= 8) { + for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) { + sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1]; + } + sOcarinaButtonIndexBufLen--; + } + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufLen++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + if (msgCtx->ocarinaStaff->pos == 8) { + sOcarinaButtonIndexBufLen = sOcarinaButtonIndexBufPos = 0; + } + } + + if (msgCtx->stateTimer == 0) { + if (msgCtx->ocarinaStaff->state == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_11; + Message_CloseTextbox(play); + } + } else { + msgCtx->stateTimer--; + } + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_START: + AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_SPAWN); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING: + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufPos++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_BTN_INVALID; + } + } + + if (msgCtx->ocarinaStaff->state == 0) { + msgCtx->stateTimer = 20; + gSaveContext.save.saveInfo.scarecrowSpawnSongSet = true; + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Lib_MemCpy(gSaveContext.save.saveInfo.scarecrowSpawnSong, gScarecrowSpawnSongPtr, + sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong)); + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.scarecrowSpawnSong); i++) { + // osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]); + } + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + Message_CloseTextbox(play); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_StartTextbox(play, 0x1647, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + break; + + case MSGMODE_2F: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + Message_ResetOcarinaButtonState(play); + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000); + msgCtx->msgMode = MSGMODE_30; + break; + + case MSGMODE_30: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = msgCtx->ocarinaStaff->buttonIndex; + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_31; + } + break; + + case MSGMODE_35: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + Message_ResetOcarinaButtonState(play); + sOcarinaButtonFlashColorIndex = 1; + sOcarinaButtonFlashTimer = 3; + AudioOcarina_StartWithSongNoteLengths( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA) & 0xFFFF)) | 0x80000000); + msgCtx->msgMode = MSGMODE_36; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_36: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_37; + Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + msgCtx->stateTimer = 20; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + ocarinaError = func_8019B5AC(); + if (ocarinaError == OCARINA_ERROR_2) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_3B; + } else if (ocarinaError == OCARINA_ERROR_3) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_3E; + } else { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_38; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_37: + Message_FlashOcarinaButtons(); + Message_DrawText(play, &gfx); + break; + + case MSGMODE_38: + case MSGMODE_3B: + case MSGMODE_3E: + // notes drop + for (i = 0; i < 5; i++) { + msgCtx->ocarinaButtonsPosY[i] += D_801C6A94; + } + + D_801C6A94 += D_801C6A94; + if (D_801C6A94 >= 0x226) { + Message_ResetOcarinaButtonAlphas(); + msgCtx->textBoxType = TEXTBOX_TYPE_0; + msgCtx->textboxColorRed = msgCtx->textboxColorGreen = msgCtx->textboxColorBlue = 0; + msgCtx->stateTimer = 3; + msgCtx->msgMode++; + } + break; + + case MSGMODE_39: + case MSGMODE_3C: + case MSGMODE_3F: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode++; + } + break; + + case MSGMODE_TEXT_DONE: + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_60: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_80148D64(play); + break; + + case TEXTBOX_ENDTYPE_61: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80148558(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + (s32)(16.0f * msgCtx->textCharScale * 5.0f) - 1, + temp); + func_80149048(play); + break; + + case TEXTBOX_ENDTYPE_62: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_801491DC(play); + break; + + case TEXTBOX_ENDTYPE_63: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_80149454(play); + break; + + case TEXTBOX_ENDTYPE_64: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 4)) - 6, + temp); + func_801496C8(play); + break; + + default: + break; + } + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + Message_DrawText(play, &gfx); + + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_10: + func_80148CBC(play, &gfx, 1); + break; + + case TEXTBOX_ENDTYPE_11: + func_80148CBC(play, &gfx, 2); + break; + + case TEXTBOX_ENDTYPE_12: + func_80148CBC(play, &gfx, 1); + break; + + case TEXTBOX_ENDTYPE_30: + case TEXTBOX_ENDTYPE_41: + case TEXTBOX_ENDTYPE_50: + case TEXTBOX_ENDTYPE_52: + case TEXTBOX_ENDTYPE_55: + case TEXTBOX_ENDTYPE_56: + case TEXTBOX_ENDTYPE_57: + case TEXTBOX_ENDTYPE_62: + break; + + case TEXTBOX_ENDTYPE_40: + case TEXTBOX_ENDTYPE_60: + case TEXTBOX_ENDTYPE_61: + default: + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + + case TEXTBOX_ENDTYPE_42: + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND: + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT: + case MSGMODE_SCENE_TITLE_CARD_DISPLAYING: + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT: + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND: + Message_DrawSceneTitleCard(play, &gfx); + break; + + case MSGMODE_21: + case MSGMODE_23: + case MSGMODE_31: + case MSGMODE_3A: + case MSGMODE_3D: + case MSGMODE_40: + case MSGMODE_TEXT_CLOSING: + case MSGMODE_PAUSED: + break; + + case MSGMODE_24: + case MSGMODE_25: + case MSGMODE_26: + default: + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + break; + } + } + Message_DrawOcarinaButtons(play, &gfx); + *gfxP = gfx; +} void Message_Draw(PlayState* play) { Gfx* nextDisplayList; @@ -567,7 +5112,7 @@ void Message_Draw(PlayState* play) { gSPDisplayList(OVERLAY_DISP++, nextDisplayList); if ((play->msgCtx.currentTextId != 0x5E6) || !Play_InCsMode(play)) { - func_801541D4(play, &nextDisplayList); + Message_DrawMain(play, &nextDisplayList); } gSPEndDisplayList(nextDisplayList++); @@ -576,9 +5121,890 @@ void Message_Draw(PlayState* play) { CLOSE_DISPS(gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s") +s16 sTextboxXPositions[TEXTBOX_TYPE_MAX] = { + 34, // TEXTBOX_TYPE_0 + 34, // TEXTBOX_TYPE_1 + 34, // TEXTBOX_TYPE_2 + 34, // TEXTBOX_TYPE_3 + 34, // TEXTBOX_TYPE_4 + 34, // TEXTBOX_TYPE_5 + 34, // TEXTBOX_TYPE_6 + 34, // TEXTBOX_TYPE_7 + 34, // TEXTBOX_TYPE_8 + 34, // TEXTBOX_TYPE_9 + 34, // TEXTBOX_TYPE_A + 34, // TEXTBOX_TYPE_B + 34, // TEXTBOX_TYPE_C + 34, // TEXTBOX_TYPE_D + 34, // TEXTBOX_TYPE_E + 34, // TEXTBOX_TYPE_F +}; -void func_801586A4(PlayState* play) { +s16 sTextboxLowerYPositions[] = { + 142, // TEXTBOX_TYPE_0 + 142, // TEXTBOX_TYPE_1 + 142, // TEXTBOX_TYPE_2 + 142, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 142, // TEXTBOX_TYPE_5 + 142, // TEXTBOX_TYPE_6 + 142, // TEXTBOX_TYPE_7 + 142, // TEXTBOX_TYPE_8 + 130, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 142, // TEXTBOX_TYPE_C + 142, // TEXTBOX_TYPE_D + 142, // TEXTBOX_TYPE_E + 142, // TEXTBOX_TYPE_F +}; + +s16 sTextboxUpperYPositions[] = { + 38, // TEXTBOX_TYPE_0 + 38, // TEXTBOX_TYPE_1 + 38, // TEXTBOX_TYPE_2 + 38, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 38, // TEXTBOX_TYPE_5 + 38, // TEXTBOX_TYPE_6 + 38, // TEXTBOX_TYPE_7 + 38, // TEXTBOX_TYPE_8 + 60, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 38, // TEXTBOX_TYPE_C + 38, // TEXTBOX_TYPE_D + 38, // TEXTBOX_TYPE_E + 38, // TEXTBOX_TYPE_F +}; + +s16 sTextboxMidYPositions[] = { + 90, // TEXTBOX_TYPE_0 + 90, // TEXTBOX_TYPE_1 + 90, // TEXTBOX_TYPE_2 + 90, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 90, // TEXTBOX_TYPE_5 + 90, // TEXTBOX_TYPE_6 + 90, // TEXTBOX_TYPE_7 + 90, // TEXTBOX_TYPE_8 + 90, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 90, // TEXTBOX_TYPE_C + 90, // TEXTBOX_TYPE_D + 90, // TEXTBOX_TYPE_E + 90, // TEXTBOX_TYPE_F +}; + +s16 D_801D0448[] = { 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25 }; + +s16 D_801D045C[] = { + 0x1B91, + 0x1B90, + 0x1B8F, +}; +s16 D_801D0464[] = { + 0x1B92, + 0x1B8E, +}; + +#ifdef NON_MATCHING +// Down to a single compiler-managed stack variable +// Also contains in-function data +// https://decomp.me/scratch/QcQ0a +void Message_Update(PlayState* play) { + static u8 D_801D0468 = 0; + MessageContext* msgCtx = &play->msgCtx; + SramContext* sramCtx = &play->sramCtx; // Optional + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + Input* input = CONTROLLER1(&play->state); + s16 averageY; + s16 sp50; + u16 temp_v1_2; + s16 sp4C; + s16 sp4A; + s16 sp48; + s32 sp44; + s32 sp40; + u16 sp3E; + s16 var_v1; + u16 temp; + + msgCtx->stickAdjX = input->rel.stick_x; + msgCtx->stickAdjY = input->rel.stick_y; + + averageY = 0; + + // If stickAdj is held, set a delay to allow the cursor to read the next input. + // The first delay is given a longer time than all subsequent delays. + if (msgCtx->stickAdjX < -30) { + if (msgCtx->stickXRepeatState == -1) { + msgCtx->stickXRepeatTimer--; + if (msgCtx->stickXRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickXRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjX = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickXRepeatTimer = 10; + msgCtx->stickXRepeatState = -1; + } + } else if (msgCtx->stickAdjX > 30) { + if (msgCtx->stickXRepeatState == 1) { + msgCtx->stickXRepeatTimer--; + if (msgCtx->stickXRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickXRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjX = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickXRepeatTimer = 10; + msgCtx->stickXRepeatState = 1; + } + } else { + msgCtx->stickXRepeatState = 0; + } + + if (msgCtx->stickAdjY < -30) { + if (msgCtx->stickYRepeatState == -1) { + msgCtx->stickYRepeatTimer--; + if (msgCtx->stickYRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickYRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjY = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickYRepeatTimer = 10; + msgCtx->stickYRepeatState = -1; + } + } else if (msgCtx->stickAdjY > 30) { + if (msgCtx->stickYRepeatState == 1) { + msgCtx->stickYRepeatTimer--; + if (msgCtx->stickYRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickYRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjY = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickYRepeatTimer = 10; + msgCtx->stickYRepeatState = 1; + } + } else { + msgCtx->stickYRepeatState = 0; + } + + if (msgCtx->msgLength == 0) { + return; + } + + switch (msgCtx->msgMode) { + case MSGMODE_TEXT_START: + D_801C6A70++; + + temp = false; + if ((D_801C6A70 >= 4) || ((msgCtx->talkActor == NULL) && (D_801C6A70 >= 2))) { + temp = true; + } + if (temp) { + if (msgCtx->talkActor != NULL) { + Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &sp50, &sp4C); + Actor_GetScreenPos(play, msgCtx->talkActor, &sp50, &sp4A); + if (sp4C >= sp4A) { + averageY = ((sp4C - sp4A) / 2) + sp4A; + } else { + averageY = ((sp4A - sp4C) / 2) + sp4C; + } + } else { + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + } + + var_v1 = msgCtx->textBoxType; + + if ((u32)msgCtx->textBoxPos == 0) { + if ((play->sceneId == SCENE_UNSET_04) || (play->sceneId == SCENE_UNSET_05) || + (play->sceneId == SCENE_UNSET_06)) { + if (averageY < 0x64) { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } else { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } + } else { + if (averageY < 0xA0) { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } else { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } + } + } else if (msgCtx->textBoxPos == 1) { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } else if (msgCtx->textBoxPos == 2) { + msgCtx->textboxYTarget = sTextboxMidYPositions[var_v1]; + } else if (msgCtx->textBoxPos == 7) { + msgCtx->textboxYTarget = 0x9E; + } else { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } + + msgCtx->textboxXTarget = sTextboxXPositions[var_v1]; + + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 7); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x19); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2B); + } else { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0x14); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x20); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2C); + } + + if ((msgCtx->textBoxType == TEXTBOX_TYPE_4) || (msgCtx->textBoxType == TEXTBOX_TYPE_5)) { + msgCtx->msgMode = MSGMODE_TEXT_STARTING; + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + msgCtx->unk12008 = 0x100; + msgCtx->unk1200A = 0x40; + msgCtx->unk1200C = 0x200; + msgCtx->unk1200E = 0x200; + break; + } + + Message_GrowTextbox(play); + Audio_PlaySfx_IfNotInCutscene(NA_SE_NONE); + msgCtx->stateTimer = 0; + msgCtx->msgMode = MSGMODE_TEXT_BOX_GROWING; + + if (!pauseCtx->itemDescriptionOn) { + func_80150A84(play); + } + } + break; + + case MSGMODE_TEXT_BOX_GROWING: + Message_GrowTextbox(play); + break; + + case MSGMODE_TEXT_STARTING: + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + if (!pauseCtx->itemDescriptionOn) { + if (msgCtx->currentTextId == 0xFF) { + func_8011552C(play, DO_ACTION_STOP); + } else if (msgCtx->currentTextId != 0xF8) { + func_8011552C(play, DO_ACTION_NEXT); + } + } + break; + + case MSGMODE_TEXT_NEXT_MSG: + Message_Decode(play); + if (msgCtx->textFade) { + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + if (D_801D0468 != 0) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + D_801D0468 = 0; + } + break; + + case MSGMODE_TEXT_CONTINUING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + Message_Decode(play); + } + break; + + case MSGMODE_TEXT_DISPLAYING: + if (msgCtx->textBoxType != TEXTBOX_TYPE_4) { + if (CHECK_BTN_ALL(input->press.button, BTN_B) && !msgCtx->textUnskippable) { + msgCtx->textboxSkipped = true; + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && !msgCtx->textUnskippable) { + + while (true) { + temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos]; + if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) || + (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) || + (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) { + break; + } + msgCtx->textDrawPos++; + } + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && (msgCtx->textUnskippable == 0)) { + while (true) { + temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos]; + if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) || + (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) || + (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) { + break; + } + msgCtx->textDrawPos++; + } + } + break; + + case MSGMODE_TEXT_AWAIT_INPUT: + if (Message_ShouldAdvance(play)) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos++; + } + break; + + case MSGMODE_TEXT_DELAYED_BREAK: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + } + break; + + case MSGMODE_TEXT_AWAIT_NEXT: + if (Message_ShouldAdvance(play)) { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->msgBufPos++; + } + break; + + case MSGMODE_TEXT_DONE: + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52)) { + msgCtx->stateTimer--; + if ((msgCtx->stateTimer == 0) || + ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) && Message_ShouldAdvance(play))) { + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + } else if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + Message_CloseTextbox(play); + } + } else { + Message_CloseTextbox(play); + } + } + } else { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41)) { + return; + } + + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_55: + msgCtx->textColorAlpha += 20; + if (msgCtx->textColorAlpha >= 255) { + msgCtx->textColorAlpha = 255; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_56; + } + break; + + case TEXTBOX_ENDTYPE_56: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_57; + } + break; + + case TEXTBOX_ENDTYPE_57: + msgCtx->textColorAlpha -= 20; + if (msgCtx->textColorAlpha <= 0) { + msgCtx->textColorAlpha = 0; + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + return; + } + if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + Message_CloseTextbox(play); + return; + } + } else { + Message_CloseTextbox(play); + return; + } + } + break; + + case TEXTBOX_ENDTYPE_10: + Message_HandleChoiceSelection(play, 1); + break; + + case TEXTBOX_ENDTYPE_11: + Message_HandleChoiceSelection(play, 2); + break; + + case TEXTBOX_ENDTYPE_12: + Message_HandleChoiceSelection(play, 1); + break; + + default: + break; + } + + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_SOT)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + msgCtx->msgMode = MSGMODE_NEW_CYCLE_0; + msgCtx->decodedTextLen -= 3; + msgCtx->unk120D6 = 0; + msgCtx->unk120D4 = 0; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_INVERTED_TIME)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + if (gSaveContext.save.timeSpeedOffset == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_SLOW; + gSaveContext.save.timeSpeedOffset = -2; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_FAST; + gSaveContext.save.timeSpeedOffset = 0; + } + Message_CloseTextbox(play); + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_DOUBLE_TIME)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + if (gSaveContext.save.isNight != 0) { + gSaveContext.save.time = CLOCK_TIME(6, 0); + } else { + gSaveContext.save.time = CLOCK_TIME(18, 0); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_DOUBLE_SOT; + gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType != TEXTBOX_ENDTYPE_10) || + (pauseCtx->state != PAUSE_STATE_OWLWARP_CONFIRM)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_1B)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP_TO_ENTRANCE; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_55) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_56) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_57) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62)) { + //! FAKE: debug? + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) {} + } else if (pauseCtx->itemDescriptionOn) { + if ((input->rel.stick_x != 0) || (input->rel.stick_y != 0) || + CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B) || + CHECK_BTN_ALL(input->press.button, BTN_START)) { + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + } + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_RESTRICTED_SONG) { + if (Message_ShouldAdvanceSilent(play)) { + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else if ((msgCtx->currentTextId != 0x2790) && Message_ShouldAdvanceSilent(play)) { + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + } else if ((msgCtx->bombersNotebookEventQueueCount == 0) || + (Message_BombersNotebookProcessEventQueue(play) != 1)) { + if (msgCtx->currentTextId == 0x579) { + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + } + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + } + } + } + } + break; + + case MSGMODE_TEXT_CLOSING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer != 0) { + break; + } + + if (sLastPlayedSong == OCARINA_SONG_SOARING) { + if (interfaceCtx->restrictions.songOfSoaring == 0) { + if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { + Message_StartTextbox(play, 0x1B93, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_1B; + sLastPlayedSong = 0xFF; + } else if (!msgCtx->ocarinaSongEffectActive) { + if (gSaveContext.save.saveInfo.playerData.owlActivationFlags != 0) { + pauseCtx->unk_2C8 = pauseCtx->pageIndex; + pauseCtx->unk_2CA = pauseCtx->cursorPoint[4]; + pauseCtx->pageIndex = PAUSE_ITEM; + pauseCtx->state = PAUSE_STATE_OWLWARP_0; + func_800F4A10(play); + pauseCtx->pageIndex = PAUSE_MAP; + sLastPlayedSong = 0xFF; + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + gSaveContext.prevHudVisibility = HUD_VISIBILITY_A_B; + func_80115844(play, DO_ACTION_STOP); + GameState_SetFramerateDivisor(&play->state, 2); + if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) { + ShrinkWindow_Letterbox_SetSizeTarget(0); + } + Audio_PlaySfx_PauseMenuOpenOrClose(1); + break; + } + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0xFB, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } else { + msgCtx->stateTimer = 1; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + break; + } + + if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) || + (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7) || + (msgCtx->currentTextId == 0x2165) || (msgCtx->currentTextId == 0x2166) || + (msgCtx->currentTextId == 0x2167) || (msgCtx->currentTextId == 0x2168)) { + gSaveContext.healthAccumulator = 20 * 0x10; // Refill 20 hearts + } + + if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.save.cutsceneIndex < 0xFFF0) && + ((play->activeCamId == CAM_ID_MAIN) || + ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF))) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) { + if ((gSaveContext.prevHudVisibility == HUD_VISIBILITY_IDLE) || + (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE) || + (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE_ALT)) { + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; + } + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + } + + if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) && + (play->actorCtx.flags & ACTORCTX_FLAG_1)) { + Message_StartTextbox(play, 0x5E6, NULL); + break; + } + + if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + msgCtx->stateTimer = 1; + } + break; + } + + msgCtx->msgLength = 0; + msgCtx->msgMode = MSGMODE_NONE; + msgCtx->currentTextId = 0; + msgCtx->stateTimer = 0; + XREG(31) = 0; + + if (pauseCtx->itemDescriptionOn) { + func_8011552C(play, DO_ACTION_INFO); + pauseCtx->itemDescriptionOn = false; + } + + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP; + } else { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + } + + if (EQ_MAX_QUEST_HEART_PIECE_COUNT) { + RESET_HEART_PIECE_COUNT; + gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10; + gSaveContext.save.saveInfo.playerData.health += 0x10; + } + + if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) { + s16 pad; + + if (sLastPlayedSong == OCARINA_SONG_TIME) { + if (interfaceCtx->restrictions.songOfTime == 0) { + Message_StartTextbox(play, 0x1B8A, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_SOT; + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if (sLastPlayedSong == OCARINA_SONG_INVERTED_TIME) { + if (interfaceCtx->restrictions.invSongOfTime == 0) { + if (R_TIME_SPEED != 0) { + if (gSaveContext.save.timeSpeedOffset == 0) { + Message_StartTextbox(play, 0x1B8C, NULL); + } else { + Message_StartTextbox(play, 0x1B8D, NULL); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_INVERTED_TIME; + } else { + Message_StartTextbox(play, 0x1B8B, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if (sLastPlayedSong == OCARINA_SONG_DOUBLE_TIME) { + if (interfaceCtx->restrictions.songOfDoubleTime == 0) { + if ((CURRENT_DAY != 3) || (gSaveContext.save.isNight == 0)) { + if (gSaveContext.save.isNight) { + Message_StartTextbox(play, D_801D0464[CURRENT_DAY - 1], NULL); + } else { + Message_StartTextbox(play, D_801D045C[CURRENT_DAY - 1], NULL); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_DOUBLE_TIME; + } else { + Message_StartTextbox(play, 0x1B94, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) && + ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG))) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + if (msgCtx->lastPlayedSong == OCARINA_SONG_SOARING) { + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + } + } + sLastPlayedSong = 0xFF; + } + break; + + case MSGMODE_OCARINA_PLAYING: + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } else { + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + } + break; + + case MSGMODE_OCARINA_AWAIT_INPUT: + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + if (Message_ShouldAdvance(play)) { + Message_DisplayOcarinaStaff(play, msgCtx->ocarinaAction); + } + } + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING: + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + Message_CloseTextbox(play); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED; + } else { + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND: + msgCtx->textboxColorAlphaCurrent += XREG(73); + if (msgCtx->textboxColorAlphaCurrent >= 255) { + msgCtx->textboxColorAlphaCurrent = 255; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT: + msgCtx->textColorAlpha += XREG(73); + if (msgCtx->textColorAlpha >= 255) { + msgCtx->textColorAlpha = 255; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_DISPLAYING; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_DISPLAYING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT: + msgCtx->textColorAlpha -= XREG(70); + if (msgCtx->textColorAlpha <= 0) { + msgCtx->textColorAlpha = 0; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND: + msgCtx->textboxColorAlphaCurrent -= XREG(70); + if (msgCtx->textboxColorAlphaCurrent <= 0) { + if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) && + (play->actorCtx.flags & ACTORCTX_FLAG_1)) { + Message_StartTextbox(play, 0x5E6, NULL); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE_ALT); + } else { + //! FAKE: debug? + if (msgCtx->currentTextId >= 0x100) { + if (msgCtx && msgCtx && msgCtx) {} + } + msgCtx->textboxColorAlphaCurrent = 0; + msgCtx->msgLength = 0; + msgCtx->msgMode = MSGMODE_NONE; + msgCtx->currentTextId = 0; + msgCtx->stateTimer = 0; + } + } + break; + + case MSGMODE_NEW_CYCLE_0: + play->state.unk_A3 = 1; + sp44 = gSaveContext.save.cutsceneIndex; + sp3E = gSaveContext.save.time; + sp40 = gSaveContext.save.day; + + Sram_SaveEndOfCycle(play); + gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; + func_8014546C(&play->sramCtx); + + gSaveContext.save.day = sp40; + gSaveContext.save.time = sp3E; + gSaveContext.save.cutsceneIndex = sp44; + + if (gSaveContext.fileNum != 0xFF) { + Sram_SetFlashPagesDefault(&play->sramCtx, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]); + Sram_StartWriteToFlashDefault(&play->sramCtx); + } + msgCtx->msgMode = MSGMODE_NEW_CYCLE_1; + break; + + case MSGMODE_NEW_CYCLE_1: + if (gSaveContext.fileNum != 0xFF) { + play->state.unk_A3 = 1; + if (play->sramCtx.status == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_NEW_CYCLE_2; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_NEW_CYCLE_2; + } + break; + + case MSGMODE_OWL_SAVE_0: + play->state.unk_A3 = 1; + gSaveContext.save.isOwlSave = true; + Play_SaveCycleSceneFlags(&play->state); + func_8014546C(&play->sramCtx); + + if (gSaveContext.fileNum != 0xFF) { + Sram_SetFlashPagesOwlSave(&play->sramCtx, gFlashOwlSaveStartPages[gSaveContext.fileNum * 2], + gFlashOwlSaveNumPages[gSaveContext.fileNum * 2]); + Sram_StartWriteToFlashOwlSave(&play->sramCtx); + } + msgCtx->msgMode = MSGMODE_OWL_SAVE_1; + break; + + case MSGMODE_OWL_SAVE_1: + if (gSaveContext.fileNum != 0xFF) { + play->state.unk_A3 = 1; + if (play->sramCtx.status == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_OWL_SAVE_2; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_OWL_SAVE_2; + } + + if (msgCtx->msgMode == MSGMODE_OWL_SAVE_2) { + gSaveContext.gameMode = GAMEMODE_OWL_SAVE; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_BLACK; + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + gSaveContext.save.cutsceneIndex = 0; + gSaveContext.sceneLayer = 0; + } + break; + + case MSGMODE_9: + case MSGMODE_PAUSED: + case MSGMODE_NEW_CYCLE_2: + case MSGMODE_OWL_SAVE_2: + break; + + default: + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + break; + } +} +#else +u8 D_801D0468 = 0; +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s") +#endif + +void Message_SetTables(PlayState* play) { play->msgCtx.messageEntryTableNes = D_801C6B98; play->msgCtx.messageTableStaff = D_801CFB08; } @@ -587,26 +6013,32 @@ void Message_Init(PlayState* play) { Font* font; MessageContext* msgCtx = &play->msgCtx; - func_801586A4(play); - play->msgCtx.ocarinaMode = 0; - msgCtx->msgMode = 0; + Message_SetTables(play); + + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + + msgCtx->msgMode = MSGMODE_NONE; msgCtx->msgLength = 0; msgCtx->currentTextId = 0; - msgCtx->textboxEndType = 0; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; msgCtx->choiceIndex = 0; msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; msgCtx->textColorAlpha = 0xFF; + View_Init(&msgCtx->view, play->state.gfxCtx); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.tha, 0x13C00); + font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; + msgCtx->textIsCredits = msgCtx->messageHasSetSfx = false; - msgCtx->textboxSkipped = 0; - msgCtx->textFade = 0; + msgCtx->textboxSkipped = false; + msgCtx->textFade = false; msgCtx->ocarinaAvailableSongs = 0; - msgCtx->textboxX = 0x34; - msgCtx->textboxY = 0x24; + msgCtx->textboxX = 52; + msgCtx->textboxY = 36; msgCtx->ocarinaSongEffectActive = false; msgCtx->unk120BE = 0; msgCtx->unk120C0 = 0; diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 6ace9acc1..3775b5b26 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -2,7 +2,6 @@ #include "message_data_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -// fontWidth f32 sNESFontWidths[160] = { 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, diff --git a/src/code/z_message_tables.inc.c b/src/code/z_message_tables.inc.c new file mode 100644 index 000000000..fb60e7a14 --- /dev/null +++ b/src/code/z_message_tables.inc.c @@ -0,0 +1,1172 @@ +#include "include/message_data_static.h" +#include "PR/mbi.h" + +MessageTableEntry D_801C6B98[4590] = { + { 0, 0, 0x08000000 }, { 2, 0, 0x0800000C }, { 4, 0, 0x08000064 }, { 5, 0, 0x080000B8 }, + { 6, 0, 0x08000110 }, { 7, 0, 0x08000168 }, { 8, 0, 0x080001C4 }, { 9, 0, 0x08000248 }, + { 0xA, 0, 0x080002A8 }, { 0xB, 0, 0x08000310 }, { 0xC, 0, 0x0800031C }, { 0xD, 0, 0x080003E8 }, + { 0xE, 0, 0x08000474 }, { 0xF, 0, 0x080004BC }, { 0x10, 0, 0x08000504 }, { 0x11, 0, 0x08000510 }, + { 0x12, 0, 0x08000554 }, { 0x13, 0, 0x08000560 }, { 0x14, 0, 0x0800056C }, { 0x15, 0, 0x08000604 }, + { 0x16, 0, 0x080006A0 }, { 0x17, 0, 0x0800073C }, { 0x18, 0, 0x080007D8 }, { 0x19, 0, 0x08000874 }, + { 0x1A, 0, 0x08000940 }, { 0x1B, 0, 0x080009E8 }, { 0x1C, 0, 0x08000A84 }, { 0x1D, 0, 0x08000AD4 }, + { 0x1E, 0, 0x08000B28 }, { 0x1F, 0, 0x08000B58 }, { 0x20, 0, 0x08000B88 }, { 0x21, 0, 0x08000BB8 }, + { 0x22, 0, 0x08000BE8 }, { 0x23, 0, 0x08000C78 }, { 0x24, 0, 0x08000CD0 }, { 0x25, 0, 0x08000D30 }, + { 0x26, 0, 0x08000DA4 }, { 0x27, 0, 0x08000E38 }, { 0x28, 0, 0x08000EB4 }, { 0x29, 0, 0x08000F88 }, + { 0x2A, 0, 0x08001060 }, { 0x2B, 0, 0x0800113C }, { 0x2C, 0, 0x08001148 }, { 0x2D, 0, 0x08001154 }, + { 0x2E, 0, 0x08001160 }, { 0x2F, 0, 0x08001210 }, { 0x30, 0, 0x0800121C }, { 0x31, 0, 0x08001228 }, + { 0x32, 0, 0x08001234 }, { 0x33, 0, 0x080012D4 }, { 0x34, 0, 0x0800139C }, { 0x35, 0, 0x08001428 }, + { 0x36, 0, 0x080014B0 }, { 0x37, 0, 0x08001554 }, { 0x38, 0, 0x08001560 }, { 0x39, 0, 0x08001624 }, + { 0x3A, 0, 0x080016B8 }, { 0x3B, 0, 0x08001768 }, { 0x3C, 0, 0x08001814 }, { 0x3D, 0, 0x08001884 }, + { 0x3E, 0, 0x080018E0 }, { 0x3F, 0, 0x080019DC }, { 0x40, 0, 0x08001A48 }, { 0x41, 0, 0x08001A54 }, + { 0x42, 0, 0x08001B0C }, { 0x43, 0, 0x08001BF4 }, { 0x4C, 0, 0x08001CBC }, { 0x4D, 0, 0x08001DBC }, + { 0x4E, 0, 0x08001DC8 }, { 0x50, 0, 0x08001DD4 }, { 0x51, 0, 0x08001EA4 }, { 0x52, 0, 0x08001EB0 }, + { 0x53, 0, 0x08001EFC }, { 0x54, 0, 0x08001F08 }, { 0x55, 0, 0x08001F14 }, { 0x56, 0, 0x08001FB8 }, + { 0x57, 0, 0x08002058 }, { 0x58, 0, 0x080020F8 }, { 0x59, 0, 0x080021A0 }, { 0x5A, 0, 0x08002290 }, + { 0x5B, 0, 0x080022E4 }, { 0x5C, 0, 0x08002388 }, { 0x5D, 0, 0x08002434 }, { 0x5E, 0, 0x080024E8 }, + { 0x5F, 0, 0x08002590 }, { 0x60, 0, 0x0800261C }, { 0x61, 0, 0x080026F0 }, { 0x62, 0, 0x080026FC }, + { 0x63, 0, 0x08002760 }, { 0x64, 0, 0x080027CC }, { 0x65, 0, 0x080027D8 }, { 0x66, 0, 0x0800282C }, + { 0x67, 0, 0x08002884 }, { 0x68, 0, 0x080028EC }, { 0x69, 0, 0x08002950 }, { 0x6A, 0, 0x080029CC }, + { 0x6B, 0, 0x08002A24 }, { 0x6E, 0, 0x08002A7C }, { 0x6F, 0, 0x08002A88 }, { 0x70, 0, 0x08002B54 }, + { 0x71, 0, 0x08002B60 }, { 0x72, 0, 0x08002B6C }, { 0x73, 0, 0x08002B78 }, { 0x74, 0, 0x08002B84 }, + { 0x75, 0, 0x08002B90 }, { 0x76, 0, 0x08002B9C }, { 0x77, 0, 0x08002BA8 }, { 0x78, 0, 0x08002BB4 }, + { 0x79, 0, 0x08002C98 }, { 0x7A, 0, 0x08002D54 }, { 0x7B, 0, 0x08002E14 }, { 0x7C, 0, 0x08002E90 }, + { 0x7D, 0, 0x08002F20 }, { 0x7E, 0, 0x08002F9C }, { 0x7F, 0, 0x0800302C }, { 0x80, 0, 0x0800309C }, + { 0x81, 0, 0x08003144 }, { 0x82, 0, 0x080031B0 }, { 0x83, 0, 0x08003224 }, { 0x84, 0, 0x08003298 }, + { 0x85, 0, 0x08003324 }, { 0x86, 0, 0x08003370 }, { 0x87, 0, 0x08003444 }, { 0x88, 0, 0x080034F8 }, + { 0x89, 0, 0x08003560 }, { 0x8A, 0, 0x080035F4 }, { 0x8B, 0, 0x080036B8 }, { 0x8C, 0, 0x08003710 }, + { 0x8D, 0, 0x080037A0 }, { 0x8E, 0, 0x08003828 }, { 0x8F, 0, 0x080038E0 }, { 0x91, 0, 0x0800396C }, + { 0x92, 0, 0x08003A44 }, { 0x93, 0, 0x08003B08 }, { 0x94, 0, 0x08003B60 }, { 0x95, 0, 0x08003B6C }, + { 0x96, 0, 0x08003BC0 }, { 0x97, 0, 0x08003C1C }, { 0x98, 0, 0x08003C60 }, { 0x99, 0, 0x08003CA8 }, + { 0x9A, 0, 0x08003CF4 }, { 0x9B, 0, 0x08003D40 }, { 0x9C, 0, 0x08003DE0 }, { 0x9D, 0, 0x08003E78 }, + { 0x9E, 0, 0x08003F10 }, { 0x9F, 0, 0x08003FA8 }, { 0xA0, 0, 0x08003FB4 }, { 0xA1, 0, 0x0800401C }, + { 0xA2, 0, 0x08004088 }, { 0xA3, 0, 0x08004094 }, { 0xA4, 0, 0x080040A0 }, { 0xA9, 0, 0x080040AC }, + { 0xAA, 0, 0x08004130 }, { 0xAB, 0, 0x08004198 }, { 0xAC, 0, 0x08004240 }, { 0xAD, 0, 0x0800424C }, + { 0xAE, 0, 0x08004258 }, { 0xAF, 0, 0x08004264 }, { 0xB0, 0, 0x08004270 }, { 0xB1, 0, 0x0800427C }, + { 0xB2, 0, 0x08004288 }, { 0xB4, 0, 0x08004294 }, { 0xB5, 0, 0x08004354 }, { 0xB6, 0, 0x08004418 }, + { 0xB7, 0, 0x080044E0 }, { 0xB8, 0, 0x080045A8 }, { 0xB9, 0, 0x08004670 }, { 0xBA, 0, 0x08004738 }, + { 0xBB, 0, 0x08004744 }, { 0xBC, 0, 0x08004750 }, { 0xBD, 0, 0x0800475C }, { 0xBE, 0, 0x08004768 }, + { 0xBF, 0, 0x08004774 }, { 0xC0, 0, 0x08004780 }, { 0xC4, 0, 0x0800478C }, { 0xC5, 0, 0x080047D0 }, + { 0xC6, 0, 0x08004850 }, { 0xC7, 0, 0x080048D0 }, { 0xC8, 0, 0x08004954 }, { 0xC9, 0, 0x08004A5C }, + { 0xCA, 0, 0x08004AFC }, { 0xCB, 0, 0x08004C14 }, { 0xCC, 0, 0x08004C78 }, { 0xCD, 0, 0x08004CDC }, + { 0xF2, 0, 0x08004D8C }, { 0xF3, 0, 0x08004DC8 }, { 0xF4, 0, 0x08004E3C }, { 0xF5, 0, 0x08004E8C }, + { 0xF6, 0, 0x08004EDC }, { 0xF7, 0, 0x08004F30 }, { 0xF8, 0, 0x08004F70 }, { 0xF9, 0, 0x08004F9C }, + { 0xFA, 0, 0x08005034 }, { 0xFB, 0, 0x08005088 }, { 0xFC, 0, 0x080050FC }, { 0xFD, 0, 0x0800515C }, + { 0xFE, 0, 0x08005184 }, { 0xFF, 0, 0x080051B8 }, { 0x100, 0, 0x08005214 }, { 0x101, 0, 0x08005230 }, + { 0x102, 0, 0x0800524C }, { 0x103, 0, 0x08005268 }, { 0x104, 0, 0x08005284 }, { 0x105, 0, 0x080052A0 }, + { 0x106, 0, 0x080052B8 }, { 0x107, 0, 0x080052D4 }, { 0x108, 0, 0x080052F8 }, { 0x109, 0, 0x0800531C }, + { 0x10A, 0, 0x0800533C }, { 0x10B, 0, 0x08005358 }, { 0x10C, 0, 0x0800537C }, { 0x10D, 0, 0x08005390 }, + { 0x10E, 0, 0x080053A8 }, { 0x10F, 0, 0x080053C4 }, { 0x110, 0, 0x080053DC }, { 0x111, 0, 0x080053FC }, + { 0x112, 0, 0x08005414 }, { 0x113, 0, 0x0800542C }, { 0x114, 0, 0x08005450 }, { 0x115, 0, 0x08005470 }, + { 0x116, 0, 0x0800548C }, { 0x117, 0, 0x080054A8 }, { 0x118, 0, 0x080054BC }, { 0x119, 0, 0x080054D4 }, + { 0x11A, 0, 0x080054F4 }, { 0x11B, 0, 0x08005518 }, { 0x11C, 0, 0x0800553C }, { 0x11D, 0, 0x0800555C }, + { 0x11E, 0, 0x08005578 }, { 0x11F, 0, 0x08005598 }, { 0x120, 0, 0x080055B4 }, { 0x121, 0, 0x080055CC }, + { 0x122, 0, 0x080055E8 }, { 0x123, 0, 0x08005604 }, { 0x124, 0, 0x08005620 }, { 0x125, 0, 0x08005638 }, + { 0x126, 0, 0x0800564C }, { 0x127, 0, 0x08005668 }, { 0x129, 0, 0x08005684 }, { 0x12A, 0, 0x0800569C }, + { 0x12B, 0, 0x080056B8 }, { 0x12C, 0, 0x080056D4 }, { 0x12D, 0, 0x080056F0 }, { 0x12E, 0, 0x0800570C }, + { 0x12F, 0, 0x08005724 }, { 0x130, 0, 0x0800573C }, { 0x131, 0, 0x08005758 }, { 0x132, 0, 0x08005770 }, + { 0x134, 0, 0x08005788 }, { 0x135, 0, 0x080057A4 }, { 0x136, 0, 0x080057C0 }, { 0x137, 0, 0x080057D8 }, + { 0x138, 0, 0x080057F4 }, { 0x139, 0, 0x08005814 }, { 0x13A, 0, 0x0800582C }, { 0x13B, 0, 0x0800584C }, + { 0x13D, 0, 0x08005868 }, { 0x13E, 0, 0x08005884 }, { 0x13F, 0, 0x080058A0 }, { 0x140, 0, 0x080058C4 }, + { 0x141, 0, 0x080058DC }, { 0x142, 0, 0x080058F4 }, { 0x143, 0, 0x08005918 }, { 0x144, 0, 0x08005934 }, + { 0x145, 0, 0x08005954 }, { 0x146, 0, 0x08005970 }, { 0x147, 0, 0x08005988 }, { 0x148, 0, 0x080059A4 }, + { 0x149, 0, 0x080059C0 }, { 0x200, 0, 0x080059D8 }, { 0x201, 0, 0x08005A54 }, { 0x202, 0, 0x08005B48 }, + { 0x203, 0, 0x08005B74 }, { 0x204, 0, 0x08005BE4 }, { 0x205, 0, 0x08005C38 }, { 0x206, 0, 0x08005C94 }, + { 0x207, 0, 0x08005D04 }, { 0x208, 0, 0x08005D2C }, { 0x209, 0, 0x08005D64 }, { 0x20A, 0, 0x08005DB4 }, + { 0x20B, 0, 0x08005E08 }, { 0x20C, 0, 0x08005E14 }, { 0x20D, 0, 0x08005E60 }, { 0x20E, 0, 0x08005ECC }, + { 0x20F, 0, 0x08005ED8 }, { 0x210, 0, 0x08005F74 }, { 0x211, 0, 0x08005FAC }, { 0x212, 0, 0x08005FD4 }, + { 0x213, 0, 0x0800602C }, { 0x214, 0, 0x08006050 }, { 0x215, 0, 0x08006124 }, { 0x216, 0, 0x08006358 }, + { 0x217, 0, 0x080065B8 }, { 0x218, 0, 0x08006620 }, { 0x219, 0, 0x0800668C }, { 0x21A, 0, 0x08006720 }, + { 0x21B, 0, 0x0800674C }, { 0x21D, 0, 0x08006774 }, { 0x21E, 0, 0x080067CC }, { 0x21F, 0, 0x08006874 }, + { 0x220, 0, 0x080068E0 }, { 0x221, 0, 0x08006978 }, { 0x222, 0, 0x08006A04 }, { 0x223, 0, 0x08006A48 }, + { 0x224, 0, 0x08006AE8 }, { 0x225, 0, 0x08006B54 }, { 0x226, 0, 0x08006BB0 }, { 0x227, 0, 0x08006BE8 }, + { 0x228, 0, 0x08006D58 }, { 0x229, 0, 0x08006E18 }, { 0x22A, 0, 0x08006EA0 }, { 0x22B, 0, 0x08006F00 }, + { 0x22C, 0, 0x08006F44 }, { 0x22D, 0, 0x08006F60 }, { 0x22E, 0, 0x08006FB0 }, { 0x22F, 0, 0x08006FC8 }, + { 0x230, 0, 0x08007010 }, { 0x231, 0, 0x080070C0 }, { 0x232, 0, 0x08007110 }, { 0x233, 0, 0x08007158 }, + { 0x234, 0, 0x080071A4 }, { 0x235, 0, 0x08007208 }, { 0x236, 0, 0x0800725C }, { 0x237, 0, 0x080072AC }, + { 0x238, 0, 0x0800730C }, { 0x239, 0, 0x0800734C }, { 0x23A, 0, 0x08007400 }, { 0x23B, 0, 0x08007468 }, + { 0x23C, 0, 0x08007500 }, { 0x23D, 0, 0x08007538 }, { 0x23E, 0, 0x080075E4 }, { 0x23F, 0, 0x080075F0 }, + { 0x240, 0, 0x0800765C }, { 0x241, 0, 0x080076D0 }, { 0x242, 0, 0x08007744 }, { 0x243, 0, 0x080077B0 }, + { 0x244, 0, 0x08007830 }, { 0x245, 0, 0x08007888 }, { 0x246, 0, 0x080078B4 }, { 0x247, 0, 0x08007904 }, + { 0x248, 0, 0x08007950 }, { 0x249, 0, 0x080079A0 }, { 0x24A, 0, 0x080079F0 }, { 0x24B, 0, 0x08007A30 }, + { 0x24C, 0, 0x08007A78 }, { 0x24D, 0, 0x08007AD8 }, { 0x24E, 0, 0x08007B54 }, { 0x24F, 0, 0x08007BE8 }, + { 0x250, 0, 0x08007C88 }, { 0x251, 0, 0x08007CEC }, { 0x252, 0, 0x08007D18 }, { 0x253, 0, 0x08007D68 }, + { 0x254, 0, 0x08007DAC }, { 0x255, 0, 0x08007E04 }, { 0x256, 0, 0x08007E4C }, { 0x257, 0, 0x08007EA4 }, + { 0x258, 0, 0x08007F00 }, { 0x25A, 0, 0x08007F58 }, { 0x25B, 0, 0x08007FA0 }, { 0x25C, 0, 0x08007FDC }, + { 0x25D, 0, 0x08007FF8 }, { 0x25E, 0, 0x08008024 }, { 0x25F, 0, 0x080080E4 }, { 0x260, 0, 0x0800818C }, + { 0x261, 0, 0x080081F8 }, { 0x262, 0, 0x08008288 }, { 0x263, 0, 0x08008304 }, { 0x264, 0, 0x08008344 }, + { 0x265, 0, 0x08008420 }, { 0x302, 0, 0x08008498 }, { 0x303, 0, 0x080085DC }, { 0x304, 0, 0x08008660 }, + { 0x305, 0, 0x080086B4 }, { 0x306, 0, 0x08008720 }, { 0x307, 0, 0x0800872C }, { 0x308, 0, 0x0800875C }, + { 0x309, 0, 0x08008788 }, { 0x30A, 0, 0x080087BC }, { 0x30B, 0, 0x080087E8 }, { 0x30C, 0, 0x08008824 }, + { 0x30D, 0, 0x08008894 }, { 0x30E, 0, 0x080088E4 }, { 0x30F, 0, 0x08008914 }, { 0x310, 0, 0x08008970 }, + { 0x311, 0, 0x080089BC }, { 0x312, 0, 0x080089F0 }, { 0x313, 0, 0x08008A64 }, { 0x314, 0, 0x08008AA4 }, + { 0x315, 0, 0x08008B0C }, { 0x316, 0, 0x08008B64 }, { 0x317, 0, 0x08008BA4 }, { 0x318, 0, 0x08008BF0 }, + { 0x319, 0, 0x08008C48 }, { 0x31A, 0, 0x08008C84 }, { 0x31B, 0, 0x08008CD0 }, { 0x31C, 0, 0x08008D10 }, + { 0x31D, 0, 0x08008D5C }, { 0x31E, 0, 0x08008DCC }, { 0x31F, 0, 0x08008E2C }, { 0x320, 0, 0x08008EBC }, + { 0x321, 0, 0x08008F30 }, { 0x322, 0, 0x08008F60 }, { 0x323, 0, 0x08008F9C }, { 0x324, 0, 0x08008FFC }, + { 0x325, 0, 0x08009044 }, { 0x326, 0, 0x080090A8 }, { 0x327, 0, 0x080090F8 }, { 0x328, 0, 0x08009140 }, + { 0x329, 0, 0x08009188 }, { 0x32A, 0, 0x080091F0 }, { 0x32B, 0, 0x08009240 }, { 0x32C, 0, 0x0800928C }, + { 0x32D, 0, 0x080092F0 }, { 0x32E, 0, 0x08009318 }, { 0x32F, 0, 0x08009358 }, { 0x330, 0, 0x0800939C }, + { 0x331, 0, 0x080093E4 }, { 0x332, 0, 0x08009440 }, { 0x333, 0, 0x0800949C }, { 0x334, 0, 0x08009518 }, + { 0x335, 0, 0x0800955C }, { 0x336, 0, 0x08009598 }, { 0x337, 0, 0x08009658 }, { 0x338, 0, 0x08009680 }, + { 0x339, 0, 0x080096A8 }, { 0x33A, 0, 0x080096C8 }, { 0x33B, 0, 0x080096EC }, { 0x33C, 0, 0x0800973C }, + { 0x33D, 0, 0x08009778 }, { 0x33E, 0, 0x080097BC }, { 0x33F, 0, 0x08009930 }, { 0x340, 0, 0x08009C50 }, + { 0x341, 0, 0x08009CC4 }, { 0x342, 0, 0x08009D30 }, { 0x343, 0, 0x08009D58 }, { 0x3E8, 0, 0x08009D7C }, + { 0x3E9, 0, 0x08009DCC }, { 0x3EA, 0, 0x08009DE8 }, { 0x3EB, 0, 0x08009E2C }, { 0x3EC, 0, 0x08009E54 }, + { 0x3ED, 0, 0x08009EB8 }, { 0x3EE, 0, 0x08009EFC }, { 0x3EF, 0, 0x08009F6C }, { 0x3F0, 0, 0x08009FA0 }, + { 0x3F1, 0, 0x08009FF0 }, { 0x3F2, 0, 0x0800A030 }, { 0x3F3, 0, 0x0800A090 }, { 0x3F4, 0, 0x0800A0D0 }, + { 0x3F5, 0, 0x0800A0F8 }, { 0x3F6, 0, 0x0800A158 }, { 0x3F7, 0, 0x0800A190 }, { 0x3F8, 0, 0x0800A1BC }, + { 0x3F9, 0, 0x0800A214 }, { 0x3FA, 0, 0x0800A25C }, { 0x3FB, 0, 0x0800A29C }, { 0x3FC, 0, 0x0800A2D8 }, + { 0x3FD, 0, 0x0800A31C }, { 0x3FE, 0, 0x0800A40C }, { 0x3FF, 0, 0x0800A478 }, { 0x400, 0, 0x0800A4EC }, + { 0x401, 0, 0x0800A528 }, { 0x402, 0, 0x0800A560 }, { 0x403, 0, 0x0800A5D4 }, { 0x404, 0, 0x0800A608 }, + { 0x405, 0, 0x0800A63C }, { 0x406, 0, 0x0800A680 }, { 0x407, 0, 0x0800A6B8 }, { 0x408, 0, 0x0800A70C }, + { 0x44C, 0, 0x0800A75C }, { 0x44D, 0, 0x0800A850 }, { 0x44E, 0, 0x0800A8B8 }, { 0x44F, 0, 0x0800A904 }, + { 0x450, 0, 0x0800A924 }, { 0x451, 0, 0x0800A974 }, { 0x452, 0, 0x0800A9E8 }, { 0x453, 0, 0x0800AA24 }, + { 0x454, 0, 0x0800AA7C }, { 0x455, 0, 0x0800AAB4 }, { 0x456, 0, 0x0800AB10 }, { 0x457, 0, 0x0800AB44 }, + { 0x458, 0, 0x0800AB78 }, { 0x459, 0, 0x0800AC0C }, { 0x45A, 0, 0x0800AC84 }, { 0x45B, 0, 0x0800ACD0 }, + { 0x45C, 0, 0x0800AD4C }, { 0x45D, 0, 0x0800ADC8 }, { 0x45E, 0, 0x0800AE68 }, { 0x45F, 0, 0x0800AEBC }, + { 0x460, 0, 0x0800AF54 }, { 0x461, 0, 0x0800AF98 }, { 0x462, 0, 0x0800AFC8 }, { 0x463, 0, 0x0800AFE8 }, + { 0x464, 0, 0x0800B044 }, { 0x465, 0, 0x0800B094 }, { 0x466, 0, 0x0800B0CC }, { 0x467, 0, 0x0800B0FC }, + { 0x468, 0, 0x0800B178 }, { 0x469, 0, 0x0800B1B8 }, { 0x46A, 0, 0x0800B1F0 }, { 0x46B, 0, 0x0800B244 }, + { 0x46C, 0, 0x0800B258 }, { 0x46D, 0, 0x0800B2B4 }, { 0x46E, 0, 0x0800B324 }, { 0x46F, 0, 0x0800B374 }, + { 0x470, 0, 0x0800B3A8 }, { 0x471, 0, 0x0800B3F4 }, { 0x472, 0, 0x0800B428 }, { 0x473, 0, 0x0800B484 }, + { 0x474, 0, 0x0800B4A4 }, { 0x475, 0, 0x0800B514 }, { 0x476, 0, 0x0800B570 }, { 0x477, 0, 0x0800B5FC }, + { 0x478, 0, 0x0800B65C }, { 0x479, 0, 0x0800B6CC }, { 0x47A, 0, 0x0800B6FC }, { 0x47B, 0, 0x0800B760 }, + { 0x47C, 0, 0x0800B78C }, { 0x47D, 0, 0x0800B7DC }, { 0x47E, 0, 0x0800B82C }, { 0x4B0, 0, 0x0800B854 }, + { 0x4B1, 0, 0x0800B8B0 }, { 0x4B2, 0, 0x0800B8F8 }, { 0x4B3, 0, 0x0800B93C }, { 0x4B4, 0, 0x0800B994 }, + { 0x4B5, 0, 0x0800B9D0 }, { 0x4B6, 0, 0x0800BA04 }, { 0x4B7, 0, 0x0800BA94 }, { 0x4B8, 0, 0x0800BAC4 }, + { 0x4B9, 0, 0x0800BB4C }, { 0x4BA, 0, 0x0800BB7C }, { 0x4BB, 0, 0x0800BBFC }, { 0x4BC, 0, 0x0800BC28 }, + { 0x4BD, 0, 0x0800BCA4 }, { 0x4BE, 0, 0x0800BCD0 }, { 0x4BF, 0, 0x0800BD58 }, { 0x4C0, 0, 0x0800BD84 }, + { 0x4C1, 0, 0x0800BE18 }, { 0x4C2, 0, 0x0800BE54 }, { 0x4C3, 0, 0x0800BED0 }, { 0x4C4, 0, 0x0800BEEC }, + { 0x4C5, 0, 0x0800BF5C }, { 0x4C6, 0, 0x0800BF78 }, { 0x4C7, 0, 0x0800BFF4 }, { 0x4C8, 0, 0x0800C018 }, + { 0x4C9, 0, 0x0800C0A4 }, { 0x4CA, 0, 0x0800C0D8 }, { 0x4CB, 0, 0x0800C140 }, { 0x4CC, 0, 0x0800C158 }, + { 0x4CD, 0, 0x0800C1E0 }, { 0x4CE, 0, 0x0800C220 }, { 0x4CF, 0, 0x0800C29C }, { 0x4D0, 0, 0x0800C2D0 }, + { 0x4D1, 0, 0x0800C34C }, { 0x4D2, 0, 0x0800C378 }, { 0x4D3, 0, 0x0800C400 }, { 0x4D4, 0, 0x0800C448 }, + { 0x4D5, 0, 0x0800C4BC }, { 0x4D6, 0, 0x0800C4E0 }, { 0x4D7, 0, 0x0800C560 }, { 0x4D8, 0, 0x0800C598 }, + { 0x4D9, 0, 0x0800C604 }, { 0x4DA, 0, 0x0800C63C }, { 0x4DB, 0, 0x0800C6B4 }, { 0x4DC, 0, 0x0800C714 }, + { 0x4DD, 0, 0x0800C784 }, { 0x4DE, 0, 0x0800C7B4 }, { 0x4DF, 0, 0x0800C81C }, { 0x4E0, 0, 0x0800C840 }, + { 0x4E1, 0, 0x0800C8AC }, { 0x4E2, 0, 0x0800C8CC }, { 0x4E3, 0, 0x0800C95C }, { 0x4E4, 0, 0x0800C990 }, + { 0x4E5, 0, 0x0800CA04 }, { 0x4E6, 0, 0x0800CA20 }, { 0x4E7, 0, 0x0800CA9C }, { 0x4E8, 0, 0x0800CAC0 }, + { 0x4E9, 0, 0x0800CB48 }, { 0x4EA, 0, 0x0800CB64 }, { 0x4EB, 0, 0x0800CBE8 }, { 0x4EC, 0, 0x0800CC04 }, + { 0x4ED, 0, 0x0800CC64 }, { 0x4EE, 0, 0x0800CC88 }, { 0x4EF, 0, 0x0800CCE8 }, { 0x4F0, 0, 0x0800CD0C }, + { 0x4F1, 0, 0x0800CD7C }, { 0x514, 0, 0x0800CDA4 }, { 0x515, 0, 0x0800CED0 }, { 0x516, 0, 0x0800CFE8 }, + { 0x517, 0, 0x0800D094 }, { 0x518, 0, 0x0800D128 }, { 0x519, 0, 0x0800D1C8 }, { 0x51A, 0, 0x0800D254 }, + { 0x51B, 0, 0x0800D2A8 }, { 0x51C, 0, 0x0800D318 }, { 0x51D, 0, 0x0800D360 }, { 0x51E, 0, 0x0800D3D0 }, + { 0x51F, 0, 0x0800D418 }, { 0x520, 0, 0x0800D488 }, { 0x521, 0, 0x0800D534 }, { 0x522, 0, 0x0800D5BC }, + { 0x523, 0, 0x0800D65C }, { 0x524, 0, 0x0800D6E4 }, { 0x525, 0, 0x0800D728 }, { 0x526, 0, 0x0800D794 }, + { 0x527, 0, 0x0800D7D0 }, { 0x528, 0, 0x0800D834 }, { 0x529, 0, 0x0800D878 }, { 0x52A, 0, 0x0800D8E4 }, + { 0x52B, 0, 0x0800D98C }, { 0x52C, 0, 0x0800DA2C }, { 0x52D, 0, 0x0800DAC8 }, { 0x52E, 0, 0x0800DB6C }, + { 0x52F, 0, 0x0800DBD4 }, { 0x530, 0, 0x0800DC5C }, { 0x531, 0, 0x0800DCC4 }, { 0x532, 0, 0x0800DD54 }, + { 0x533, 0, 0x0800DDA4 }, { 0x534, 0, 0x0800DE1C }, { 0x535, 0, 0x0800DEC8 }, { 0x536, 0, 0x0800DF50 }, + { 0x537, 0, 0x0800DFF0 }, { 0x538, 0, 0x0800E078 }, { 0x539, 0, 0x0800E0BC }, { 0x53A, 0, 0x0800E128 }, + { 0x53B, 0, 0x0800E16C }, { 0x53C, 0, 0x0800E1D8 }, { 0x53D, 0, 0x0800E21C }, { 0x53E, 0, 0x0800E288 }, + { 0x53F, 0, 0x0800E334 }, { 0x540, 0, 0x0800E414 }, { 0x541, 0, 0x0800E474 }, { 0x542, 0, 0x0800E50C }, + { 0x543, 0, 0x0800E57C }, { 0x544, 0, 0x0800E614 }, { 0x545, 0, 0x0800E678 }, { 0x546, 0, 0x0800E728 }, + { 0x547, 0, 0x0800E794 }, { 0x548, 0, 0x0800E7F4 }, { 0x549, 0, 0x0800E86C }, { 0x54A, 0, 0x0800E8D8 }, + { 0x54B, 0, 0x0800E934 }, { 0x54C, 0, 0x0800E9B4 }, { 0x54D, 0, 0x0800EA28 }, { 0x54E, 0, 0x0800EB08 }, + { 0x54F, 0, 0x0800EB60 }, { 0x550, 0, 0x0800EBC8 }, { 0x551, 0, 0x0800EC2C }, { 0x552, 0, 0x0800ECAC }, + { 0x553, 0, 0x0800ED1C }, { 0x554, 0, 0x0800ED9C }, { 0x555, 0, 0x0800EE00 }, { 0x556, 0, 0x0800EEEC }, + { 0x557, 0, 0x0800EF4C }, { 0x558, 0, 0x0800EFBC }, { 0x559, 0, 0x0800F03C }, { 0x55A, 0, 0x0800F0B4 }, + { 0x55B, 0, 0x0800F110 }, { 0x55C, 0, 0x0800F188 }, { 0x55D, 0, 0x0800F258 }, { 0x55E, 0, 0x0800F300 }, + { 0x55F, 0, 0x0800F398 }, { 0x560, 0, 0x0800F44C }, { 0x561, 0, 0x0800F570 }, { 0x562, 0, 0x0800F688 }, + { 0x563, 0, 0x0800F7A8 }, { 0x564, 0, 0x0800F8B8 }, { 0x565, 0, 0x0800F9D8 }, { 0x566, 0, 0x0800FAEC }, + { 0x567, 0, 0x0800FB84 }, { 0x568, 0, 0x0800FC34 }, { 0x569, 0, 0x0800FCC8 }, { 0x56A, 0, 0x0800FD78 }, + { 0x56B, 0, 0x0800FE0C }, { 0x56C, 0, 0x0800FEBC }, { 0x56D, 0, 0x08010008 }, { 0x56E, 0, 0x08010168 }, + { 0x56F, 0, 0x080102C4 }, { 0x570, 0, 0x0801042C }, { 0x571, 0, 0x08010584 }, { 0x572, 0, 0x080106EC }, + { 0x573, 0, 0x08010844 }, { 0x578, 0, 0x080109A4 }, { 0x579, 0, 0x08010A70 }, { 0x57A, 0, 0x08010B28 }, + { 0x57B, 0, 0x08010C7C }, { 0x57C, 0, 0x08010D98 }, { 0x57D, 0, 0x08010EC4 }, { 0x57E, 0, 0x08010FF4 }, + { 0x57F, 0, 0x080110E4 }, { 0x580, 0, 0x080111D0 }, { 0x582, 0, 0x08011260 }, { 0x583, 0, 0x08011304 }, + { 0x584, 0, 0x08011374 }, { 0x585, 0, 0x08011408 }, { 0x586, 0, 0x080114BC }, { 0x587, 0, 0x08011528 }, + { 0x588, 0, 0x080115C0 }, { 0x589, 0, 0x08011674 }, { 0x58A, 0, 0x080116E4 }, { 0x58B, 0, 0x08011760 }, + { 0x58C, 0, 0x08011820 }, { 0x58D, 0, 0x08011884 }, { 0x58E, 0, 0x0801192C }, { 0x58F, 0, 0x08011A20 }, + { 0x590, 0, 0x08011B08 }, { 0x591, 0, 0x08011B68 }, { 0x592, 0, 0x08011BA4 }, { 0x593, 0, 0x08011BE4 }, + { 0x594, 0, 0x08011C20 }, { 0x595, 0, 0x08011D00 }, { 0x59C, 0, 0x08011DC8 }, { 0x59D, 0, 0x08011E78 }, + { 0x59E, 0, 0x08011EB4 }, { 0x59F, 0, 0x08011EFC }, { 0x5A0, 0, 0x08011FB4 }, { 0x5A1, 0, 0x08012068 }, + { 0x5A2, 0, 0x080120A4 }, { 0x5A3, 0, 0x080120E4 }, { 0x5A4, 0, 0x08012198 }, { 0x5A5, 0, 0x08012248 }, + { 0x5A6, 0, 0x08012284 }, { 0x5A7, 0, 0x080122C4 }, { 0x5A8, 0, 0x08012380 }, { 0x5A9, 0, 0x0801243C }, + { 0x5AA, 0, 0x08012478 }, { 0x5DC, 0, 0x080124B8 }, { 0x5DD, 0, 0x08012548 }, { 0x5DE, 0, 0x080125BC }, + { 0x5DF, 0, 0x08012678 }, { 0x5E0, 0, 0x08012730 }, { 0x5E1, 0, 0x0801276C }, { 0x5E2, 0, 0x08012784 }, + { 0x5E3, 0, 0x080127C4 }, { 0x5E4, 0, 0x080128A8 }, { 0x5E5, 0, 0x080128E0 }, { 0x5E6, 0, 0x0801294C }, + { 0x5E7, 0, 0x08012970 }, { 0x5E8, 0, 0x080129A4 }, { 0x5E9, 0, 0x08012A5C }, { 0x5EA, 0, 0x08012ACC }, + { 0x5EB, 0, 0x08012B4C }, { 0x5EC, 0, 0x08012BF0 }, { 0x5ED, 0, 0x08012CE0 }, { 0x5EE, 0, 0x08012D84 }, + { 0x5EF, 0, 0x08012DE4 }, { 0x5F0, 0, 0x08012E1C }, { 0x5F1, 0, 0x08012E7C }, { 0x5F2, 0, 0x08012EF0 }, + { 0x5F3, 0, 0x08012FAC }, { 0x5F4, 0, 0x08013060 }, { 0x5F5, 0, 0x080130F4 }, { 0x5F6, 0, 0x0801315C }, + { 0x5F7, 0, 0x08013210 }, { 0x5F8, 0, 0x08013258 }, { 0x60E, 0, 0x080132B0 }, { 0x60F, 0, 0x08013368 }, + { 0x610, 0, 0x08013470 }, { 0x611, 0, 0x08013530 }, { 0x612, 0, 0x080135F8 }, { 0x613, 0, 0x08013680 }, + { 0x614, 0, 0x080137D0 }, { 0x615, 0, 0x0801386C }, { 0x616, 0, 0x08013944 }, { 0x617, 0, 0x080139B8 }, + { 0x618, 0, 0x08013A44 }, { 0x619, 0, 0x08013AA8 }, { 0x61A, 0, 0x08013BFC }, { 0x61B, 0, 0x08013C5C }, + { 0x61C, 0, 0x08013CB0 }, { 0x61D, 0, 0x08013D00 }, { 0x61E, 0, 0x08013D60 }, { 0x61F, 0, 0x08013DAC }, + { 0x620, 0, 0x08013DEC }, { 0x621, 0, 0x08013E4C }, { 0x622, 0, 0x08013E80 }, { 0x623, 0, 0x08013ED8 }, + { 0x624, 0, 0x08013F24 }, { 0x625, 0, 0x08013FEC }, { 0x626, 0, 0x08014010 }, { 0x627, 0, 0x08014064 }, + { 0x628, 0, 0x080140C4 }, { 0x629, 0, 0x08014170 }, { 0x62A, 0, 0x08014208 }, { 0x62B, 0, 0x080142D0 }, + { 0x62C, 0, 0x08014398 }, { 0x640, 0, 0x0801454C }, { 0x641, 0, 0x0801458C }, { 0x642, 0, 0x080145B4 }, + { 0x644, 0, 0x080145F0 }, { 0x645, 0, 0x08014608 }, { 0x646, 0, 0x08014648 }, { 0x647, 0, 0x080146B0 }, + { 0x648, 0, 0x080146D4 }, { 0x649, 0, 0x08014760 }, { 0x64A, 0, 0x08014798 }, { 0x64B, 0, 0x08014850 }, + { 0x64C, 0, 0x08014898 }, { 0x64D, 0, 0x080148B4 }, { 0x64E, 0, 0x08014924 }, { 0x64F, 0, 0x08014988 }, + { 0x650, 0, 0x080149F0 }, { 0x651, 0, 0x08014A50 }, { 0x652, 0, 0x08014A8C }, { 0x653, 0, 0x08014AF4 }, + { 0x654, 0, 0x08014B34 }, { 0x655, 0, 0x08014B9C }, { 0x656, 0, 0x08014BD8 }, { 0x657, 0, 0x08014C38 }, + { 0x658, 0, 0x08014C78 }, { 0x659, 0, 0x08014CBC }, { 0x65A, 0, 0x08014D10 }, { 0x65B, 0, 0x08014D94 }, + { 0x65C, 0, 0x08014E68 }, { 0x65D, 0, 0x08014F18 }, { 0x65E, 0, 0x08014F5C }, { 0x65F, 0, 0x08014F88 }, + { 0x660, 0, 0x08014FD0 }, { 0x661, 0, 0x08015024 }, { 0x662, 0, 0x080150F0 }, { 0x663, 0, 0x08015188 }, + { 0x664, 0, 0x080151AC }, { 0x665, 0, 0x080151E4 }, { 0x666, 0, 0x08015248 }, { 0x667, 0, 0x0801529C }, + { 0x668, 0, 0x080152CC }, { 0x669, 0, 0x0801532C }, { 0x66A, 0, 0x08015390 }, { 0x66B, 0, 0x080153E4 }, + { 0x66C, 0, 0x08015450 }, { 0x66D, 0, 0x080154BC }, { 0x66E, 0, 0x08015550 }, { 0x66F, 0, 0x080155C0 }, + { 0x670, 0, 0x08015600 }, { 0x671, 0, 0x08015634 }, { 0x672, 0, 0x0801568C }, { 0x673, 0, 0x080156C8 }, + { 0x674, 0, 0x0801574C }, { 0x675, 0, 0x08015784 }, { 0x676, 0, 0x080157F8 }, { 0x677, 0, 0x0801588C }, + { 0x678, 0, 0x080158E4 }, { 0x679, 0, 0x08015940 }, { 0x67A, 0, 0x08015994 }, { 0x67B, 0, 0x080159E8 }, + { 0x67C, 0, 0x08015A48 }, { 0x67D, 0, 0x08015B58 }, { 0x67E, 0, 0x08015C04 }, { 0x67F, 0, 0x08015C50 }, + { 0x680, 0, 0x08015D64 }, { 0x681, 0, 0x08015E40 }, { 0x682, 0, 0x08015ED0 }, { 0x683, 0, 0x08015F00 }, + { 0x684, 0, 0x08015F90 }, { 0x685, 0, 0x08015FCC }, { 0x686, 0, 0x08016020 }, { 0x687, 0, 0x08016078 }, + { 0x688, 0, 0x080160AC }, { 0x689, 0, 0x08016104 }, { 0x68A, 0, 0x08016130 }, { 0x6A4, 0, 0x08016184 }, + { 0x6A5, 0, 0x080161B8 }, { 0x6A6, 0, 0x0801620C }, { 0x6A7, 0, 0x08016248 }, { 0x6A8, 0, 0x080162A0 }, + { 0x6A9, 0, 0x080162C8 }, { 0x6AA, 0, 0x0801634C }, { 0x6AB, 0, 0x08016398 }, { 0x6AC, 0, 0x080163FC }, + { 0x6AD, 0, 0x08016478 }, { 0x6AE, 0, 0x080164B4 }, { 0x6AF, 0, 0x08016508 }, { 0x6B0, 0, 0x08016548 }, + { 0x6B1, 0, 0x080165C0 }, { 0x6B2, 0, 0x08016600 }, { 0x6B3, 0, 0x08016674 }, { 0x6B4, 0, 0x080166B4 }, + { 0x6B5, 0, 0x0801671C }, { 0x6B6, 0, 0x08016758 }, { 0x6B7, 0, 0x080167C0 }, { 0x6B8, 0, 0x080167F8 }, + { 0x6B9, 0, 0x08016858 }, { 0x6BA, 0, 0x08016894 }, { 0x6BB, 0, 0x08016900 }, { 0x6BC, 0, 0x0801693C }, + { 0x6BD, 0, 0x0801698C }, { 0x6BE, 0, 0x080169CC }, { 0x6BF, 0, 0x08016A04 }, { 0x6C0, 0, 0x08016A28 }, + { 0x6C1, 0, 0x08016A7C }, { 0x6C2, 0, 0x08016A98 }, { 0x6C3, 0, 0x08016AC8 }, { 0x6C4, 0, 0x08016AE4 }, + { 0x6C5, 0, 0x08016B2C }, { 0x6C6, 0, 0x08016B84 }, { 0x6C7, 0, 0x08016BC8 }, { 0x6C8, 0, 0x08016BE0 }, + { 0x6C9, 0, 0x08016C34 }, { 0x6CA, 0, 0x08016C94 }, { 0x6CB, 0, 0x08016CD0 }, { 0x6CC, 0, 0x08016D24 }, + { 0x6CD, 0, 0x08016D64 }, { 0x6CE, 0, 0x08016DC8 }, { 0x6CF, 0, 0x08016E08 }, { 0x6D0, 0, 0x08016E6C }, + { 0x6D1, 0, 0x08016EAC }, { 0x6D2, 0, 0x08016F14 }, { 0x6D3, 0, 0x08016F50 }, { 0x6D4, 0, 0x08016FD0 }, + { 0x6D5, 0, 0x08017008 }, { 0x6D6, 0, 0x08017084 }, { 0x6D7, 0, 0x080170C0 }, { 0x6D8, 0, 0x08017110 }, + { 0x6D9, 0, 0x0801714C }, { 0x6DA, 0, 0x080171A4 }, { 0x6DB, 0, 0x080171E0 }, { 0x6DC, 0, 0x08017218 }, + { 0x6DD, 0, 0x08017264 }, { 0x6DE, 0, 0x080172E0 }, { 0x708, 0, 0x08017330 }, { 0x709, 0, 0x080173C4 }, + { 0x70A, 0, 0x0801741C }, { 0x70B, 0, 0x080174B4 }, { 0x70C, 0, 0x0801753C }, { 0x70D, 0, 0x08017564 }, + { 0x70E, 0, 0x0801758C }, { 0x70F, 0, 0x080175FC }, { 0x710, 0, 0x08017650 }, { 0x711, 0, 0x08017748 }, + { 0x712, 0, 0x0801775C }, { 0x713, 0, 0x080177B0 }, { 0x714, 0, 0x080177D8 }, { 0x715, 0, 0x0801781C }, + { 0x716, 0, 0x0801787C }, { 0x717, 0, 0x08017A6C }, { 0x718, 0, 0x08017AB8 }, { 0x719, 0, 0x08017AE8 }, + { 0x71A, 0, 0x08017B48 }, { 0x71B, 0, 0x08017BA0 }, { 0x721, 0, 0x08017C00 }, { 0x722, 0, 0x08017C44 }, + { 0x723, 0, 0x08017C84 }, { 0x724, 0, 0x08017CC4 }, { 0x725, 0, 0x08017D04 }, { 0x726, 0, 0x08017D90 }, + { 0x727, 0, 0x08017DE4 }, { 0x728, 0, 0x08017DF0 }, { 0x729, 0, 0x08017E50 }, { 0x72A, 0, 0x08017E9C }, + { 0x72B, 0, 0x08017F08 }, { 0x72C, 0, 0x08017F5C }, { 0x72D, 0, 0x08017F8C }, { 0x72E, 0, 0x08017FC8 }, + { 0x72F, 0, 0x0801800C }, { 0x730, 0, 0x08018064 }, { 0x731, 0, 0x080180A0 }, { 0x732, 0, 0x080180E8 }, + { 0x733, 0, 0x08018104 }, { 0x734, 0, 0x08018188 }, { 0x735, 0, 0x08018240 }, { 0x736, 0, 0x080182A8 }, + { 0x737, 0, 0x080182E4 }, { 0x738, 0, 0x080184D0 }, { 0x73A, 0, 0x08018510 }, { 0x73B, 0, 0x08018594 }, + { 0x73C, 0, 0x08018618 }, { 0x73D, 0, 0x080186B0 }, { 0x73E, 0, 0x0801876C }, { 0x73F, 0, 0x08018818 }, + { 0x740, 0, 0x080188CC }, { 0x741, 0, 0x08018908 }, { 0x742, 0, 0x08018938 }, { 0x743, 0, 0x080189A0 }, + { 0x744, 0, 0x08018A00 }, { 0x745, 0, 0x08018A90 }, { 0x746, 0, 0x08018B4C }, { 0x747, 0, 0x08018C18 }, + { 0x748, 0, 0x08018C8C }, { 0x749, 0, 0x08018CE0 }, { 0x74A, 0, 0x08018D78 }, { 0x74B, 0, 0x08018DD0 }, + { 0x74C, 0, 0x08018E38 }, { 0x74D, 0, 0x08018E78 }, { 0x74E, 0, 0x08018EC0 }, { 0x74F, 0, 0x08018F38 }, + { 0x750, 0, 0x08018FF4 }, { 0x751, 0, 0x08019014 }, { 0x752, 0, 0x0801910C }, { 0x753, 0, 0x08019160 }, + { 0x754, 0, 0x080191A4 }, { 0x755, 0, 0x080191FC }, { 0x756, 0, 0x08019254 }, { 0x757, 0, 0x0801927C }, + { 0x758, 0, 0x080192E8 }, { 0x759, 0, 0x08019354 }, { 0x75A, 0, 0x0801939C }, { 0x76C, 0, 0x0801941C }, + { 0x76D, 0, 0x08019468 }, { 0x76E, 0, 0x080194BC }, { 0x76F, 0, 0x080194F8 }, { 0x770, 0, 0x08019530 }, + { 0x771, 0, 0x0801956C }, { 0x772, 0, 0x080195A4 }, { 0x773, 0, 0x080195DC }, { 0x774, 0, 0x08019620 }, + { 0x775, 0, 0x08019654 }, { 0x776, 0, 0x08019688 }, { 0x777, 0, 0x080196A4 }, { 0x778, 0, 0x080196F0 }, + { 0x779, 0, 0x080197A4 }, { 0x77A, 0, 0x080197C0 }, { 0x77B, 0, 0x080197E4 }, { 0x77C, 0, 0x0801982C }, + { 0x77D, 0, 0x08019854 }, { 0x7D0, 0, 0x08019878 }, { 0x7D1, 0, 0x080198BC }, { 0x7D2, 0, 0x080199A8 }, + { 0x7D3, 0, 0x080199BC }, { 0x7D4, 0, 0x080199E4 }, { 0x7D5, 0, 0x08019AD8 }, { 0x7D6, 0, 0x08019B10 }, + { 0x7D7, 0, 0x08019B28 }, { 0x7D8, 0, 0x08019BA4 }, { 0x7D9, 0, 0x08019BC8 }, { 0x7DC, 0, 0x08019C20 }, + { 0x7DD, 0, 0x08019C40 }, { 0x7DE, 0, 0x08019C60 }, { 0x800, 0, 0x08019C80 }, { 0x801, 0, 0x08019D44 }, + { 0x802, 0, 0x08019DD0 }, { 0x803, 0, 0x08019E24 }, { 0x804, 0, 0x08019E44 }, { 0x806, 0, 0x08019F84 }, + { 0x807, 0, 0x0801A0F0 }, { 0x80B, 0, 0x0801A0FC }, { 0x80C, 0, 0x0801A144 }, { 0x80D, 0, 0x0801A1AC }, + { 0x80E, 0, 0x0801A218 }, { 0x80F, 0, 0x0801A288 }, { 0x810, 0, 0x0801A320 }, { 0x811, 0, 0x0801A348 }, + { 0x820, 0, 0x0801A378 }, { 0x821, 0, 0x0801A3B4 }, { 0x822, 0, 0x0801A408 }, { 0x823, 0, 0x0801A484 }, + { 0x824, 0, 0x0801A4D4 }, { 0x825, 0, 0x0801A538 }, { 0x826, 0, 0x0801A5A8 }, { 0x827, 0, 0x0801A614 }, + { 0x828, 0, 0x0801A654 }, { 0x829, 0, 0x0801A680 }, { 0x82A, 0, 0x0801A6EC }, { 0x82B, 0, 0x0801A740 }, + { 0x82C, 0, 0x0801A79C }, { 0x82D, 0, 0x0801A808 }, { 0x82E, 0, 0x0801A868 }, { 0x82F, 0, 0x0801A894 }, + { 0x830, 0, 0x0801A918 }, { 0x831, 0, 0x0801A968 }, { 0x832, 0, 0x0801A9DC }, { 0x833, 0, 0x0801AA5C }, + { 0x834, 0, 0x0801AA80 }, { 0x835, 0, 0x0801AAD0 }, { 0x836, 0, 0x0801AB60 }, { 0x838, 0, 0x0801AC28 }, + { 0x839, 0, 0x0801AC7C }, { 0x83A, 0, 0x0801AD18 }, { 0x83B, 0, 0x0801AD48 }, { 0x83C, 0, 0x0801ADC4 }, + { 0x83D, 0, 0x0801AE2C }, { 0x83E, 0, 0x0801AE84 }, { 0x83F, 0, 0x0801AEC4 }, { 0x840, 0, 0x0801AF0C }, + { 0x841, 0, 0x0801AF48 }, { 0x842, 0, 0x0801AFA4 }, { 0x843, 0, 0x0801AFE4 }, { 0x844, 0, 0x0801B054 }, + { 0x845, 0, 0x0801B090 }, { 0x846, 0, 0x0801B0CC }, { 0x847, 0, 0x0801B114 }, { 0x848, 0, 0x0801B168 }, + { 0x849, 0, 0x0801B190 }, { 0x84A, 0, 0x0801B210 }, { 0x84B, 0, 0x0801B278 }, { 0x84C, 0, 0x0801B2BC }, + { 0x84D, 0, 0x0801B310 }, { 0x84E, 0, 0x0801B380 }, { 0x84F, 0, 0x0801B3A4 }, { 0x850, 0, 0x0801B3CC }, + { 0x851, 0, 0x0801B47C }, { 0x852, 0, 0x0801B488 }, { 0x853, 0, 0x0801B4B4 }, { 0x854, 0, 0x0801B5C4 }, + { 0x855, 0, 0x0801B608 }, { 0x856, 0, 0x0801B678 }, { 0x857, 0, 0x0801B6D8 }, { 0x858, 0, 0x0801B718 }, + { 0x859, 0, 0x0801B78C }, { 0x85A, 0, 0x0801B810 }, { 0x85B, 0, 0x0801B85C }, { 0x85C, 0, 0x0801B8C4 }, + { 0x85D, 0, 0x0801B8F4 }, { 0x85E, 0, 0x0801B900 }, { 0x85F, 0, 0x0801B92C }, { 0x860, 0, 0x0801B968 }, + { 0x861, 0, 0x0801B994 }, { 0x862, 0, 0x0801B9E0 }, { 0x863, 0, 0x0801BA6C }, { 0x864, 0, 0x0801BACC }, + { 0x865, 0, 0x0801BB18 }, { 0x866, 0, 0x0801BB8C }, { 0x867, 0, 0x0801BBA4 }, { 0x868, 0, 0x0801BC0C }, + { 0x869, 0, 0x0801BC88 }, { 0x86A, 0, 0x0801BCC0 }, { 0x86B, 0, 0x0801BD30 }, { 0x86C, 0, 0x0801BD90 }, + { 0x86D, 0, 0x0801BDD4 }, { 0x86E, 0, 0x0801BE60 }, { 0x86F, 0, 0x0801BF1C }, { 0x870, 0, 0x0801BF40 }, + { 0x871, 0, 0x0801BF90 }, { 0x872, 0, 0x0801BFB0 }, { 0x873, 0, 0x0801C004 }, { 0x874, 0, 0x0801C038 }, + { 0x875, 0, 0x0801C0A0 }, { 0x876, 0, 0x0801C0F8 }, { 0x877, 0, 0x0801C170 }, { 0x878, 0, 0x0801C1E0 }, + { 0x879, 0, 0x0801C23C }, { 0x87A, 0, 0x0801C2A0 }, { 0x87B, 0, 0x0801C2D4 }, { 0x87C, 0, 0x0801C314 }, + { 0x87D, 0, 0x0801C384 }, { 0x87E, 0, 0x0801C3DC }, { 0x87F, 0, 0x0801C43C }, { 0x880, 0, 0x0801C494 }, + { 0x881, 0, 0x0801C504 }, { 0x882, 0, 0x0801C580 }, { 0x883, 0, 0x0801C5E8 }, { 0x884, 0, 0x0801C694 }, + { 0x885, 0, 0x0801C6DC }, { 0x886, 0, 0x0801C73C }, { 0x887, 0, 0x0801C798 }, { 0x888, 0, 0x0801C7EC }, + { 0x889, 0, 0x0801C824 }, { 0x88A, 0, 0x0801C86C }, { 0x88B, 0, 0x0801C890 }, { 0x88C, 0, 0x0801C8C4 }, + { 0x88D, 0, 0x0801C914 }, { 0x88E, 0, 0x0801C98C }, { 0x88F, 0, 0x0801CA00 }, { 0x890, 0, 0x0801CA40 }, + { 0x898, 0, 0x0801CADC }, { 0x899, 0, 0x0801CB1C }, { 0x89A, 0, 0x0801CB60 }, { 0x89B, 0, 0x0801CC18 }, + { 0x89C, 0, 0x0801CC74 }, { 0x89D, 0, 0x0801CCCC }, { 0x89E, 0, 0x0801CD40 }, { 0x89F, 0, 0x0801CDA0 }, + { 0x8A0, 0, 0x0801CDE8 }, { 0x8A1, 0, 0x0801CE44 }, { 0x8A2, 0, 0x0801CEB0 }, { 0x8A3, 0, 0x0801CF0C }, + { 0x8A4, 0, 0x0801CF38 }, { 0x8A5, 0, 0x0801CFD0 }, { 0x8CA, 0, 0x0801D010 }, { 0x8CB, 0, 0x0801D0E0 }, + { 0x8CC, 0, 0x0801D108 }, { 0x8CD, 0, 0x0801D138 }, { 0x8CE, 0, 0x0801D170 }, { 0x8CF, 0, 0x0801D1C0 }, + { 0x8D0, 0, 0x0801D200 }, { 0x8D1, 0, 0x0801D238 }, { 0x8D2, 0, 0x0801D268 }, { 0x8D3, 0, 0x0801D340 }, + { 0x8D4, 0, 0x0801D3D4 }, { 0x8D5, 0, 0x0801D444 }, { 0x8D6, 0, 0x0801D488 }, { 0x8D7, 0, 0x0801D4D8 }, + { 0x8D8, 0, 0x0801D508 }, { 0x8D9, 0, 0x0801D574 }, { 0x8DA, 0, 0x0801D5A0 }, { 0x8DB, 0, 0x0801D5D0 }, + { 0x8DC, 0, 0x0801D600 }, { 0x8DD, 0, 0x0801D644 }, { 0x8DE, 0, 0x0801D7C8 }, { 0x8DF, 0, 0x0801D7FC }, + { 0x8E0, 0, 0x0801D844 }, { 0x8E1, 0, 0x0801D898 }, { 0x8E2, 0, 0x0801D938 }, { 0x8E3, 0, 0x0801D9E0 }, + { 0x8E4, 0, 0x0801DA40 }, { 0x8E5, 0, 0x0801DA9C }, { 0x8E6, 0, 0x0801DB20 }, { 0x8E7, 0, 0x0801DB88 }, + { 0x8E8, 0, 0x0801DBB0 }, { 0x8E9, 0, 0x0801DBE4 }, { 0x8EA, 0, 0x0801DC6C }, { 0x8EB, 0, 0x0801DC84 }, + { 0x8EC, 0, 0x0801DD18 }, { 0x910, 0, 0x0801DD64 }, { 0x911, 0, 0x0801DDC0 }, { 0x912, 0, 0x0801DE3C }, + { 0x913, 0, 0x0801DEAC }, { 0x914, 0, 0x0801DF18 }, { 0x915, 0, 0x0801DF88 }, { 0x916, 0, 0x0801DFF0 }, + { 0x917, 0, 0x0801E038 }, { 0x918, 0, 0x0801E164 }, { 0x919, 0, 0x0801E1BC }, { 0x91A, 0, 0x0801E204 }, + { 0x91B, 0, 0x0801E330 }, { 0x91C, 0, 0x0801E370 }, { 0x91E, 0, 0x0801E3CC }, { 0x92E, 0, 0x0801E464 }, + { 0x92F, 0, 0x0801E4C0 }, { 0x930, 0, 0x0801E534 }, { 0x931, 0, 0x0801E5AC }, { 0x932, 0, 0x0801E5B8 }, + { 0x933, 0, 0x0801E608 }, { 0x934, 0, 0x0801E650 }, { 0x935, 0, 0x0801E698 }, { 0x936, 0, 0x0801E6D0 }, + { 0x937, 0, 0x0801E738 }, { 0x938, 0, 0x0801E768 }, { 0x960, 0, 0x0801E774 }, { 0x961, 0, 0x0801E798 }, + { 0x962, 0, 0x0801E810 }, { 0x963, 0, 0x0801E8AC }, { 0x964, 0, 0x0801E97C }, { 0x965, 0, 0x0801E9C8 }, + { 0x966, 0, 0x0801EA1C }, { 0x967, 0, 0x0801EABC }, { 0x968, 0, 0x0801EB08 }, { 0x969, 0, 0x0801EBC8 }, + { 0x96A, 0, 0x0801EC58 }, { 0x96B, 0, 0x0801EC8C }, { 0x96C, 0, 0x0801ECD4 }, { 0x96D, 0, 0x0801ED40 }, + { 0x96E, 0, 0x0801ED88 }, { 0x96F, 0, 0x0801EE4C }, { 0x970, 0, 0x0801EF08 }, { 0x971, 0, 0x0801EF98 }, + { 0x972, 0, 0x0801EFF4 }, { 0x9C4, 0, 0x0801F000 }, { 0x9C5, 0, 0x0801F08C }, { 0x9C6, 0, 0x0801F0B0 }, + { 0x9C7, 0, 0x0801F104 }, { 0x9C8, 0, 0x0801F110 }, { 0x9C9, 0, 0x0801F160 }, { 0x9CA, 0, 0x0801F1D4 }, + { 0x9CB, 0, 0x0801F25C }, { 0x9CC, 0, 0x0801F2A0 }, { 0x9CD, 0, 0x0801F2E8 }, { 0x9CE, 0, 0x0801F338 }, + { 0x9CF, 0, 0x0801F37C }, { 0x9D0, 0, 0x0801F3CC }, { 0x9D1, 0, 0x0801F424 }, { 0x9D2, 0, 0x0801F450 }, + { 0x9D3, 0, 0x0801F510 }, { 0x9D4, 0, 0x0801F558 }, { 0x9D5, 0, 0x0801F580 }, { 0x9D6, 0, 0x0801F5D0 }, + { 0x9D7, 0, 0x0801F61C }, { 0x9D8, 0, 0x0801F65C }, { 0x9D9, 0, 0x0801F69C }, { 0x9DA, 0, 0x0801F6EC }, + { 0x9DB, 0, 0x0801F764 }, { 0x9DC, 0, 0x0801F7B0 }, { 0x9DD, 0, 0x0801F808 }, { 0x9DE, 0, 0x0801F8AC }, + { 0x9DF, 0, 0x0801F91C }, { 0x9E0, 0, 0x0801F990 }, { 0x9E1, 0, 0x0801F9CC }, { 0x9E2, 0, 0x0801FA2C }, + { 0x9E3, 0, 0x0801FA74 }, { 0x9E4, 0, 0x0801FB24 }, { 0x9E5, 0, 0x0801FB90 }, { 0x9E6, 0, 0x0801FBBC }, + { 0x9E7, 0, 0x0801FBE4 }, { 0x9E8, 0, 0x0801FC4C }, { 0x9E9, 0, 0x0801FCA0 }, { 0x9EA, 0, 0x0801FD80 }, + { 0x9EB, 0, 0x0801FDE8 }, { 0x9EC, 0, 0x0801FE70 }, { 0x9ED, 0, 0x0801FEAC }, { 0x9EE, 0, 0x0801FF40 }, + { 0x9EF, 0, 0x0801FF8C }, { 0xA28, 0, 0x0801FFC4 }, { 0xA29, 0, 0x0801FFF4 }, { 0xA2A, 0, 0x08020014 }, + { 0xA2B, 0, 0x08020048 }, { 0xA2C, 0, 0x0802012C }, { 0xA2D, 0, 0x08020190 }, { 0xA2E, 0, 0x080201EC }, + { 0xA2F, 0, 0x08020278 }, { 0xA30, 0, 0x080202E4 }, { 0xA31, 0, 0x0802031C }, { 0xA32, 0, 0x08020360 }, + { 0xA33, 0, 0x080203A4 }, { 0xA34, 0, 0x080203C8 }, { 0xA35, 0, 0x08020424 }, { 0xA36, 0, 0x0802047C }, + { 0xA37, 0, 0x080204F0 }, { 0xA38, 0, 0x08020534 }, { 0xA39, 0, 0x08020570 }, { 0xA3A, 0, 0x080205E4 }, + { 0xBB8, 0, 0x08020668 }, { 0xBB9, 0, 0x080206A4 }, { 0xBBA, 0, 0x080206EC }, { 0xBBB, 0, 0x08020710 }, + { 0xBBC, 0, 0x08020764 }, { 0xBBD, 0, 0x080207A4 }, { 0xBBE, 0, 0x080207E8 }, { 0xBBF, 0, 0x08020814 }, + { 0xBC0, 0, 0x08020858 }, { 0xBC1, 0, 0x080208B0 }, { 0xBC2, 0, 0x08020910 }, { 0xBC3, 0, 0x08020960 }, + { 0xBC4, 0, 0x080209C4 }, { 0xBC5, 0, 0x080209F0 }, { 0xBC6, 0, 0x08020A50 }, { 0xBC7, 0, 0x08020A8C }, + { 0xBC8, 0, 0x08020B00 }, { 0xBC9, 0, 0x08020B3C }, { 0xBCA, 0, 0x08020BB8 }, { 0xBCB, 0, 0x08020BF4 }, + { 0xBCC, 0, 0x08020C4C }, { 0xBCD, 0, 0x08020C88 }, { 0xBCE, 0, 0x08020CF0 }, { 0xBCF, 0, 0x08020D2C }, + { 0xBD0, 0, 0x08020D80 }, { 0xBD1, 0, 0x08020DC0 }, { 0xBD2, 0, 0x08020DFC }, { 0xBD3, 0, 0x08020E58 }, + { 0xBD4, 0, 0x08020E88 }, { 0xBD5, 0, 0x08020EE0 }, { 0xBD6, 0, 0x08020F18 }, { 0xBD7, 0, 0x08020F44 }, + { 0xBEA, 0, 0x08020F60 }, { 0xBEB, 0, 0x08021158 }, { 0xBEC, 0, 0x080211C0 }, { 0xBED, 0, 0x080211EC }, + { 0xBEE, 0, 0x08021350 }, { 0xBEF, 0, 0x08021380 }, { 0xBF0, 0, 0x080213F8 }, { 0xBF1, 0, 0x08021480 }, + { 0xBF2, 0, 0x08021558 }, { 0xBF3, 0, 0x08021588 }, { 0xBF4, 0, 0x080215E0 }, { 0xBF5, 0, 0x080216A0 }, + { 0xBF6, 0, 0x080217CC }, { 0xBF7, 0, 0x08021858 }, { 0xBF8, 0, 0x080218CC }, { 0xBF9, 0, 0x08021974 }, + { 0xBFA, 0, 0x080219F8 }, { 0xBFB, 0, 0x08021A68 }, { 0xBFC, 0, 0x08021AF8 }, { 0xBFD, 0, 0x08021B9C }, + { 0xBFE, 0, 0x08021BE0 }, { 0xBFF, 0, 0x08021C54 }, { 0xC00, 0, 0x08021C80 }, { 0xC01, 0, 0x08021CC8 }, + { 0xC02, 0, 0x08021F20 }, { 0xC03, 0, 0x08021F50 }, { 0xC04, 0, 0x08022024 }, { 0xC1D, 0, 0x08022090 }, + { 0xC1E, 0, 0x080220B8 }, { 0xC1F, 0, 0x080220D0 }, { 0xC20, 0, 0x08022104 }, { 0xC21, 0, 0x08022198 }, + { 0xC22, 0, 0x080221B8 }, { 0xC23, 0, 0x080221DC }, { 0xC24, 0, 0x08022248 }, { 0xC25, 0, 0x08022288 }, + { 0xC26, 0, 0x08022308 }, { 0xC27, 0, 0x0802233C }, { 0xC28, 0, 0x0802239C }, { 0xC29, 0, 0x080223E4 }, + { 0xC2A, 0, 0x08022408 }, { 0xC2B, 0, 0x08022470 }, { 0xC2C, 0, 0x080224C4 }, { 0xC2D, 0, 0x0802255C }, + { 0xC2E, 0, 0x08022584 }, { 0xC2F, 0, 0x080225AC }, { 0xC30, 0, 0x08022640 }, { 0xC31, 0, 0x08022670 }, + { 0xC32, 0, 0x0802268C }, { 0xC33, 0, 0x080226A0 }, { 0xC34, 0, 0x080226E0 }, { 0xC35, 0, 0x08022738 }, + { 0xC36, 0, 0x08022760 }, { 0xC37, 0, 0x08022780 }, { 0xC38, 0, 0x080227B8 }, { 0xC39, 0, 0x080227F0 }, + { 0xC3A, 0, 0x080228DC }, { 0xC3B, 0, 0x08022954 }, { 0xC3C, 0, 0x08022AD4 }, { 0xC3D, 0, 0x08022B48 }, + { 0xC3E, 0, 0x08022C14 }, { 0xC3F, 0, 0x08022C48 }, { 0xC40, 0, 0x08022C78 }, { 0xC41, 0, 0x08022CB0 }, + { 0xC42, 0, 0x08022CFC }, { 0xC43, 0, 0x08022D64 }, { 0xC44, 0, 0x08022D84 }, { 0xC45, 0, 0x08022DEC }, + { 0xC46, 0, 0x08022EBC }, { 0xC47, 0, 0x08022F9C }, { 0xC48, 0, 0x08023004 }, { 0xC49, 0, 0x08023024 }, + { 0xC4A, 0, 0x080230B0 }, { 0xC4B, 0, 0x080230E0 }, { 0xC4C, 0, 0x080231E4 }, { 0xC4D, 0, 0x0802329C }, + { 0xC4E, 0, 0x080232FC }, { 0xC4F, 0, 0x08023360 }, { 0xC50, 0, 0x080233BC }, { 0xC51, 0, 0x080233F4 }, + { 0xC52, 0, 0x0802352C }, { 0xC53, 0, 0x08023550 }, { 0xC54, 0, 0x08023640 }, { 0xC55, 0, 0x08023668 }, + { 0xC56, 0, 0x080236A4 }, { 0xC57, 0, 0x080236F4 }, { 0xC58, 0, 0x08023788 }, { 0xC80, 0, 0x080237C4 }, + { 0xC81, 0, 0x08023824 }, { 0xC82, 0, 0x080238F0 }, { 0xC83, 0, 0x08023920 }, { 0xC84, 0, 0x080239E4 }, + { 0xC85, 0, 0x08023B24 }, { 0xC86, 0, 0x08023B58 }, { 0xC87, 0, 0x08023C3C }, { 0xC88, 0, 0x08023CF0 }, + { 0xC89, 0, 0x08023D44 }, { 0xC8A, 0, 0x08023D80 }, { 0xC8B, 0, 0x08023DB0 }, { 0xC8C, 0, 0x08023E0C }, + { 0xC8D, 0, 0x08023E60 }, { 0xC8E, 0, 0x08023E90 }, { 0xC8F, 0, 0x08023F40 }, { 0xC90, 0, 0x08023FA0 }, + { 0xC91, 0, 0x0802400C }, { 0xC92, 0, 0x08024058 }, { 0xC93, 0, 0x080240D0 }, { 0xC94, 0, 0x0802410C }, + { 0xCE4, 0, 0x08024164 }, { 0xCE5, 0, 0x080241D4 }, { 0xCE6, 0, 0x08024254 }, { 0xCE7, 0, 0x08024304 }, + { 0xCE8, 0, 0x08024330 }, { 0xCE9, 0, 0x08024360 }, { 0xCEA, 0, 0x0802444C }, { 0xCEB, 0, 0x08024470 }, + { 0xCEC, 0, 0x080244E8 }, { 0xCED, 0, 0x08024548 }, { 0xCEE, 0, 0x08024634 }, { 0xCEF, 0, 0x08024718 }, + { 0xCF0, 0, 0x0802476C }, { 0xCF1, 0, 0x080247F8 }, { 0xCF2, 0, 0x0802483C }, { 0xCF3, 0, 0x08024880 }, + { 0xCF4, 0, 0x08024918 }, { 0xCF5, 0, 0x08024994 }, { 0xCF6, 0, 0x08024B58 }, { 0xCF7, 0, 0x08024BD8 }, + { 0xCF8, 0, 0x08024C84 }, { 0xCF9, 0, 0x08024D10 }, { 0xCFA, 0, 0x08024D44 }, { 0xCFB, 0, 0x08024D8C }, + { 0xCFC, 0, 0x08024DB8 }, { 0xCFD, 0, 0x08024DFC }, { 0xCFE, 0, 0x08024E6C }, { 0xCFF, 0, 0x08024EA4 }, + { 0xD00, 0, 0x08024ED4 }, { 0xD01, 0, 0x08024F4C }, { 0xD02, 0, 0x08024F8C }, { 0xD03, 0, 0x08024FDC }, + { 0xD04, 0, 0x08025040 }, { 0xD05, 0, 0x080250D8 }, { 0xD06, 0, 0x08025100 }, { 0xD07, 0, 0x08025134 }, + { 0xD08, 0, 0x0802516C }, { 0xD09, 0, 0x080251B4 }, { 0xD0A, 0, 0x080251E0 }, { 0xD0B, 0, 0x08025260 }, + { 0xD0C, 0, 0x080252AC }, { 0xD0D, 0, 0x080252E4 }, { 0xD0E, 0, 0x08025330 }, { 0xD0F, 0, 0x08025358 }, + { 0xD10, 0, 0x08025394 }, { 0xD11, 0, 0x080253C8 }, { 0xD12, 0, 0x08025434 }, { 0xD13, 0, 0x0802547C }, + { 0xD14, 0, 0x080254C0 }, { 0xD15, 0, 0x0802550C }, { 0xD16, 0, 0x08025550 }, { 0xD17, 0, 0x080255A4 }, + { 0xD18, 0, 0x080255DC }, { 0xD19, 0, 0x080255FC }, { 0xD1A, 0, 0x0802563C }, { 0xD1B, 0, 0x080256C8 }, + { 0xD1C, 0, 0x08025708 }, { 0xD1D, 0, 0x0802575C }, { 0xD1E, 0, 0x080257B8 }, { 0xD1F, 0, 0x08025814 }, + { 0xD20, 0, 0x08025874 }, { 0xD21, 0, 0x080258EC }, { 0xD48, 0, 0x08025960 }, { 0xD49, 0, 0x0802597C }, + { 0xD4A, 0, 0x080259B8 }, { 0xD4B, 0, 0x080259F8 }, { 0xD4C, 0, 0x08025A9C }, { 0xD4D, 0, 0x08025AF4 }, + { 0xD4E, 0, 0x08025B4C }, { 0xD4F, 0, 0x08025B80 }, { 0xD5E, 0, 0x08025BBC }, { 0xD5F, 0, 0x08025BD8 }, + { 0xD60, 0, 0x08025BFC }, { 0xD61, 0, 0x08025C3C }, { 0xD62, 0, 0x08025C7C }, { 0xD63, 0, 0x08025CE0 }, + { 0xD64, 0, 0x08025D64 }, { 0xD65, 0, 0x08025D90 }, { 0xD66, 0, 0x08025DC0 }, { 0xD67, 0, 0x08025E34 }, + { 0xD68, 0, 0x08025E74 }, { 0xD69, 0, 0x08025EB0 }, { 0xD6A, 0, 0x08025EE4 }, { 0xD6B, 0, 0x08025F14 }, + { 0xD6C, 0, 0x08025F4C }, { 0xD6D, 0, 0x08025F9C }, { 0xD6E, 0, 0x08025FEC }, { 0xD6F, 0, 0x08026024 }, + { 0xD70, 0, 0x08026064 }, { 0xD71, 0, 0x080260D4 }, { 0xD72, 0, 0x0802613C }, { 0xD73, 0, 0x08026190 }, + { 0xD74, 0, 0x080261E4 }, { 0xD75, 0, 0x0802621C }, { 0xD76, 0, 0x0802626C }, { 0xD77, 0, 0x08026354 }, + { 0xD78, 0, 0x0802637C }, { 0xD79, 0, 0x080263C8 }, { 0xD7A, 0, 0x08026444 }, { 0xD7B, 0, 0x08026490 }, + { 0xD7C, 0, 0x080264EC }, { 0xD7D, 0, 0x08026548 }, { 0xD7E, 0, 0x08026598 }, { 0xD7F, 0, 0x080265C4 }, + { 0xD80, 0, 0x080265F8 }, { 0xD81, 0, 0x08026628 }, { 0xD82, 0, 0x08026658 }, { 0xD83, 0, 0x08026688 }, + { 0xD84, 0, 0x080266D0 }, { 0xD85, 0, 0x08026728 }, { 0xD86, 0, 0x08026770 }, { 0xD87, 0, 0x080267B4 }, + { 0xD88, 0, 0x08026850 }, { 0xD89, 0, 0x080268B0 }, { 0xD8A, 0, 0x08026998 }, { 0xD8B, 0, 0x08026A5C }, + { 0xDAC, 0, 0x08026AA0 }, { 0xDAD, 0, 0x08026AC8 }, { 0xDAE, 0, 0x08026B04 }, { 0xDAF, 0, 0x08026B9C }, + { 0xDB0, 0, 0x08026BDC }, { 0xDB1, 0, 0x08026C6C }, { 0xDB2, 0, 0x08026CD8 }, { 0xDB3, 0, 0x08026D4C }, + { 0xDB4, 0, 0x08026DB4 }, { 0xDB5, 0, 0x08026E34 }, { 0xDB6, 0, 0x08026EA4 }, { 0xDB7, 0, 0x08026EBC }, + { 0xDB8, 0, 0x08026EE8 }, { 0xDB9, 0, 0x08026F28 }, { 0xDBA, 0, 0x08026F70 }, { 0xDBB, 0, 0x08026FA0 }, + { 0xDBC, 0, 0x0802701C }, { 0xDBD, 0, 0x08027070 }, { 0xDBE, 0, 0x08027088 }, { 0xDBF, 0, 0x080270BC }, + { 0xDC0, 0, 0x080270E0 }, { 0xDC1, 0, 0x0802713C }, { 0xDC2, 0, 0x08027194 }, { 0xDC3, 0, 0x08027220 }, + { 0xDC4, 0, 0x0802727C }, { 0xDC5, 0, 0x08027300 }, { 0xDC6, 0, 0x08027334 }, { 0xDC7, 0, 0x08027370 }, + { 0xDC8, 0, 0x08027394 }, { 0xDC9, 0, 0x080273A8 }, { 0xDCA, 0, 0x080273D0 }, { 0xDCB, 0, 0x08027414 }, + { 0xDCC, 0, 0x0802744C }, { 0xDCD, 0, 0x080274BC }, { 0xDCE, 0, 0x08027500 }, { 0xDCF, 0, 0x080275D4 }, + { 0xDD0, 0, 0x0802762C }, { 0xDD1, 0, 0x08027668 }, { 0xDD2, 0, 0x08027684 }, { 0xDD3, 0, 0x080276D8 }, + { 0xDD4, 0, 0x08027710 }, { 0xDD5, 0, 0x0802773C }, { 0xDD6, 0, 0x08027760 }, { 0xDD7, 0, 0x08027798 }, + { 0xDD8, 0, 0x080277C0 }, { 0xDD9, 0, 0x08027824 }, { 0xDDA, 0, 0x080278AC }, { 0xDDB, 0, 0x08027934 }, + { 0xDDC, 0, 0x08027984 }, { 0xDDD, 0, 0x080279E8 }, { 0xDDE, 0, 0x08027A70 }, { 0xDDF, 0, 0x08027AE8 }, + { 0xDE0, 0, 0x08027B28 }, { 0xDE1, 0, 0x08027B84 }, { 0xDE2, 0, 0x08027BF4 }, { 0xDE3, 0, 0x08027C40 }, + { 0xDE4, 0, 0x08027C84 }, { 0xDE5, 0, 0x08027CC8 }, { 0xDE6, 0, 0x08027D3C }, { 0xDE7, 0, 0x08027D8C }, + { 0xDE8, 0, 0x08027DBC }, { 0xDE9, 0, 0x08027DEC }, { 0xDEA, 0, 0x08027E78 }, { 0xDEB, 0, 0x08027EBC }, + { 0xDEC, 0, 0x08027EE4 }, { 0xDED, 0, 0x08027F4C }, { 0xDEE, 0, 0x08027F9C }, { 0xDEF, 0, 0x0802800C }, + { 0xDF0, 0, 0x08028058 }, { 0xDF1, 0, 0x080280A4 }, { 0xDF2, 0, 0x080280DC }, { 0xDF3, 0, 0x08028134 }, + { 0xDF4, 0, 0x080281B0 }, { 0xDF5, 0, 0x080281E8 }, { 0xDF6, 0, 0x08028234 }, { 0xDF7, 0, 0x08028264 }, + { 0xDF8, 0, 0x080282C0 }, { 0xDF9, 0, 0x080282F8 }, { 0xDFA, 0, 0x08028378 }, { 0xDFB, 0, 0x080283C4 }, + { 0xDFC, 0, 0x080283FC }, { 0xDFD, 0, 0x08028444 }, { 0xDFE, 0, 0x08028478 }, { 0xDFF, 0, 0x080284BC }, + { 0xE02, 0, 0x080284F4 }, { 0xE03, 0, 0x08028540 }, { 0xE04, 0, 0x08028588 }, { 0xE05, 0, 0x080285C8 }, + { 0xE06, 0, 0x08028604 }, { 0xE07, 0, 0x08028620 }, { 0xE10, 0, 0x08028670 }, { 0xE11, 0, 0x080286AC }, + { 0xE12, 0, 0x08028744 }, { 0xE13, 0, 0x080287C4 }, { 0xE14, 0, 0x0802885C }, { 0xE15, 0, 0x08028940 }, + { 0xE16, 0, 0x080289D4 }, { 0xE17, 0, 0x08028A20 }, { 0xE18, 0, 0x08028A58 }, { 0xE19, 0, 0x08028AA8 }, + { 0xE1A, 0, 0x08028B5C }, { 0xE1B, 0, 0x08028B8C }, { 0xE1C, 0, 0x08028BF0 }, { 0xE1D, 0, 0x08028C38 }, + { 0xE1E, 0, 0x08028C98 }, { 0xE1F, 0, 0x08028CBC }, { 0xE20, 0, 0x08028D10 }, { 0xE21, 0, 0x08028D28 }, + { 0xE22, 0, 0x08028D68 }, { 0xE23, 0, 0x08028DC8 }, { 0xE24, 0, 0x08028E24 }, { 0xE25, 0, 0x08028E44 }, + { 0xE26, 0, 0x08028E88 }, { 0xE27, 0, 0x08028ED0 }, { 0xE28, 0, 0x08028EEC }, { 0xE29, 0, 0x08028F40 }, + { 0xE2A, 0, 0x08028F9C }, { 0xE2B, 0, 0x08029010 }, { 0xE2C, 0, 0x08029078 }, { 0xE2D, 0, 0x08029104 }, + { 0xE2E, 0, 0x08029174 }, { 0xE2F, 0, 0x080291D4 }, { 0xE30, 0, 0x08029238 }, { 0xE31, 0, 0x080292B8 }, + { 0xE32, 0, 0x0802933C }, { 0xE42, 0, 0x0802939C }, { 0xE43, 0, 0x080293FC }, { 0xE44, 0, 0x08029428 }, + { 0xE45, 0, 0x080294A8 }, { 0xE46, 0, 0x08029500 }, { 0xE47, 0, 0x080295A0 }, { 0xE48, 0, 0x080295C4 }, + { 0xE49, 0, 0x08029634 }, { 0xE4A, 0, 0x0802969C }, { 0xE4B, 0, 0x08029704 }, { 0xE4C, 0, 0x08029774 }, + { 0xE4D, 0, 0x080297D4 }, { 0xE4E, 0, 0x08029860 }, { 0xE4F, 0, 0x080298C8 }, { 0xE50, 0, 0x08029948 }, + { 0xE51, 0, 0x080299D0 }, { 0xE52, 0, 0x08029A30 }, { 0xE74, 0, 0x08029AC0 }, { 0xE75, 0, 0x08029B20 }, + { 0xE76, 0, 0x08029B74 }, { 0xE77, 0, 0x08029BD4 }, { 0xE78, 0, 0x08029C48 }, { 0xE79, 0, 0x08029C9C }, + { 0xE7A, 0, 0x08029CB0 }, { 0xE7B, 0, 0x08029CCC }, { 0xE7C, 0, 0x08029D58 }, { 0xE7D, 0, 0x08029DAC }, + { 0xE7E, 0, 0x08029DC0 }, { 0xE7F, 0, 0x08029E10 }, { 0xE80, 0, 0x08029E74 }, { 0xE81, 0, 0x08029ED4 }, + { 0xE82, 0, 0x08029F2C }, { 0xE83, 0, 0x08029F54 }, { 0xE84, 0, 0x08029FCC }, { 0xE85, 0, 0x0802A03C }, + { 0xE86, 0, 0x0802A090 }, { 0xE87, 0, 0x0802A0D8 }, { 0xE88, 0, 0x0802A128 }, { 0xE89, 0, 0x0802A1BC }, + { 0xE8A, 0, 0x0802A1F4 }, { 0xE8B, 0, 0x0802A260 }, { 0xE8C, 0, 0x0802A2A4 }, { 0xE8D, 0, 0x0802A2F4 }, + { 0xE8E, 0, 0x0802A334 }, { 0xE8F, 0, 0x0802A37C }, { 0xE90, 0, 0x0802A3DC }, { 0xE91, 0, 0x0802A448 }, + { 0xE92, 0, 0x0802A47C }, { 0xE93, 0, 0x0802A4A8 }, { 0xE94, 0, 0x0802A550 }, { 0xE95, 0, 0x0802A5B0 }, + { 0xE97, 0, 0x0802A608 }, { 0xE98, 0, 0x0802A69C }, { 0xE99, 0, 0x0802A6F0 }, { 0xFA0, 0, 0x0802A760 }, + { 0xFA1, 0, 0x0802A79C }, { 0xFA2, 0, 0x0802A7F4 }, { 0xFA3, 0, 0x0802A84C }, { 0xFA4, 0, 0x0802A8F4 }, + { 0xFA5, 0, 0x0802AA24 }, { 0xFA6, 0, 0x0802AAA0 }, { 0xFA7, 0, 0x0802AB04 }, { 0xFA8, 0, 0x0802ABA0 }, + { 0xFA9, 0, 0x0802AC08 }, { 0xFAA, 0, 0x0802ACA4 }, { 0xFAB, 0, 0x0802AD1C }, { 0xFAC, 0, 0x0802AD8C }, + { 0xFAD, 0, 0x0802ADF4 }, { 0xFAE, 0, 0x0802AE90 }, { 0xFAF, 0, 0x0802AF00 }, { 0xFB0, 0, 0x0802AF70 }, + { 0xFB1, 0, 0x0802B018 }, { 0xFB2, 0, 0x0802B0B8 }, { 0xFB3, 0, 0x0802B110 }, { 0xFB4, 0, 0x0802B190 }, + { 0xFB5, 0, 0x0802B24C }, { 0xFB6, 0, 0x0802B288 }, { 0xFB7, 0, 0x0802B2E4 }, { 0xFB8, 0, 0x0802B314 }, + { 0xFB9, 0, 0x0802B39C }, { 0xFBA, 0, 0x0802B40C }, { 0xFBB, 0, 0x0802B488 }, { 0xFBC, 0, 0x0802B4EC }, + { 0xFBD, 0, 0x0802B598 }, { 0xFBE, 0, 0x0802B650 }, { 0xFBF, 0, 0x0802B6F8 }, { 0x1004, 0, 0x0802B750 }, + { 0x1005, 0, 0x0802B778 }, { 0x1006, 0, 0x0802B7A0 }, { 0x1007, 0, 0x0802B7C8 }, { 0x1008, 0, 0x0802B7EC }, + { 0x1009, 0, 0x0802B84C }, { 0x100A, 0, 0x0802B890 }, { 0x100B, 0, 0x0802B8D8 }, { 0x100C, 0, 0x0802B908 }, + { 0x100D, 0, 0x0802B97C }, { 0x100E, 0, 0x0802BA00 }, { 0x100F, 0, 0x0802BA54 }, { 0x1010, 0, 0x0802BAC0 }, + { 0x1011, 0, 0x0802BB28 }, { 0x1012, 0, 0x0802BB94 }, { 0x1013, 0, 0x0802BC18 }, { 0x1014, 0, 0x0802BC44 }, + { 0x1015, 0, 0x0802BC88 }, { 0x1016, 0, 0x0802BCE0 }, { 0x1017, 0, 0x0802BD24 }, { 0x1018, 0, 0x0802BD8C }, + { 0x1019, 0, 0x0802BE18 }, { 0x101A, 0, 0x0802BE80 }, { 0x101B, 0, 0x0802BF84 }, { 0x101C, 0, 0x0802C048 }, + { 0x101D, 0, 0x0802C064 }, { 0x101E, 0, 0x0802C15C }, { 0x101F, 0, 0x0802C284 }, { 0x1020, 0, 0x0802C3BC }, + { 0x1021, 0, 0x0802C3D4 }, { 0x1022, 0, 0x0802C438 }, { 0x1023, 0, 0x0802C470 }, { 0x1024, 0, 0x0802C494 }, + { 0x1025, 0, 0x0802C4C4 }, { 0x1026, 0, 0x0802C4F8 }, { 0x1027, 0, 0x0802C564 }, { 0x1028, 0, 0x0802C5F8 }, + { 0x1029, 0, 0x0802C67C }, { 0x102A, 0, 0x0802C6DC }, { 0x102B, 0, 0x0802C73C }, { 0x102C, 0, 0x0802C798 }, + { 0x102D, 0, 0x0802C824 }, { 0x102E, 0, 0x0802C87C }, { 0x102F, 0, 0x0802C8B8 }, { 0x1030, 0, 0x0802C928 }, + { 0x1031, 0, 0x0802CA60 }, { 0x1032, 0, 0x0802CAB4 }, { 0x1033, 0, 0x0802CB00 }, { 0x1034, 0, 0x0802CB3C }, + { 0x1035, 0, 0x0802CB94 }, { 0x1036, 0, 0x0802CBF0 }, { 0x1037, 0, 0x0802CC28 }, { 0x1038, 0, 0x0802CC80 }, + { 0x1039, 0, 0x0802CCE0 }, { 0x103A, 0, 0x0802CD30 }, { 0x103B, 0, 0x0802CD64 }, { 0x103C, 0, 0x0802CDDC }, + { 0x1068, 0, 0x0802CE10 }, { 0x1069, 0, 0x0802CE64 }, { 0x106A, 0, 0x0802CF30 }, { 0x106B, 0, 0x0802CF90 }, + { 0x106C, 0, 0x0802CFD4 }, { 0x106D, 0, 0x0802D07C }, { 0x106E, 0, 0x0802D0C0 }, { 0x106F, 0, 0x0802D110 }, + { 0x1070, 0, 0x0802D178 }, { 0x1071, 0, 0x0802D1C4 }, { 0x1072, 0, 0x0802D234 }, { 0x1073, 0, 0x0802D27C }, + { 0x1074, 0, 0x0802D2BC }, { 0x1075, 0, 0x0802D314 }, { 0x1076, 0, 0x0802D354 }, { 0x1077, 0, 0x0802D3AC }, + { 0x1078, 0, 0x0802D3F0 }, { 0x1079, 0, 0x0802D434 }, { 0x107A, 0, 0x0802D4AC }, { 0x107B, 0, 0x0802D4EC }, + { 0x107C, 0, 0x0802D554 }, { 0x107D, 0, 0x0802D5A8 }, { 0x107E, 0, 0x0802D5FC }, { 0x107F, 0, 0x0802D69C }, + { 0x1080, 0, 0x0802D6E8 }, { 0x1081, 0, 0x0802D744 }, { 0x1082, 0, 0x0802D7A4 }, { 0x1083, 0, 0x0802D7EC }, + { 0x1084, 0, 0x0802D82C }, { 0x1085, 0, 0x0802D8B0 }, { 0x1086, 0, 0x0802D8F0 }, { 0x1087, 0, 0x0802D954 }, + { 0x1088, 0, 0x0802D9DC }, { 0x1089, 0, 0x0802DA24 }, { 0x108A, 0, 0x0802DA8C }, { 0x108B, 0, 0x0802DACC }, + { 0x108C, 0, 0x0802DB30 }, { 0x108D, 0, 0x0802DBA0 }, { 0x108E, 0, 0x0802DBF4 }, { 0x108F, 0, 0x0802DC28 }, + { 0x1090, 0, 0x0802DC94 }, { 0x1091, 0, 0x0802DCFC }, { 0x1092, 0, 0x0802DDC0 }, { 0x1093, 0, 0x0802DE18 }, + { 0x1094, 0, 0x0802DEA0 }, { 0x1095, 0, 0x0802DF10 }, { 0x1096, 0, 0x0802DF78 }, { 0x1097, 0, 0x0802DFE0 }, + { 0x1098, 0, 0x0802E024 }, { 0x1099, 0, 0x0802E088 }, { 0x109A, 0, 0x0802E170 }, { 0x109B, 0, 0x0802E1F8 }, + { 0x109C, 0, 0x0802E240 }, { 0x109D, 0, 0x0802E290 }, { 0x109E, 0, 0x0802E2D8 }, { 0x109F, 0, 0x0802E308 }, + { 0x10A0, 0, 0x0802E364 }, { 0x10A1, 0, 0x0802E3B8 }, { 0x10A2, 0, 0x0802E3DC }, { 0x10A3, 0, 0x0802E480 }, + { 0x10A4, 0, 0x0802E4D4 }, { 0x10A5, 0, 0x0802E53C }, { 0x10A6, 0, 0x0802E624 }, { 0x10A7, 0, 0x0802E68C }, + { 0x10A8, 0, 0x0802E738 }, { 0x10A9, 0, 0x0802E78C }, { 0x10CE, 0, 0x0802E830 }, { 0x10CF, 0, 0x0802E878 }, + { 0x10D0, 0, 0x0802E8CC }, { 0x10D1, 0, 0x0802E90C }, { 0x10D2, 0, 0x0802E970 }, { 0x10D3, 0, 0x0802E9A4 }, + { 0x10D4, 0, 0x0802E9D0 }, { 0x10D6, 0, 0x0802EA7C }, { 0x10D7, 0, 0x0802EB50 }, { 0x10D8, 0, 0x0802EB6C }, + { 0x10D9, 0, 0x0802EBA0 }, { 0x10DA, 0, 0x0802EBC8 }, { 0x10DB, 0, 0x0802EC10 }, { 0x10DC, 0, 0x0802EC40 }, + { 0x10DD, 0, 0x0802EC6C }, { 0x10DE, 0, 0x0802ECA8 }, { 0x10DF, 0, 0x0802ECD8 }, { 0x10E0, 0, 0x0802ED14 }, + { 0x10E1, 0, 0x0802ED40 }, { 0x10E2, 0, 0x0802ED68 }, { 0x10E3, 0, 0x0802EDA0 }, { 0x10E4, 0, 0x0802EE18 }, + { 0x10E5, 0, 0x0802EE44 }, { 0x10E6, 0, 0x0802EEB0 }, { 0x10E7, 0, 0x0802EEE8 }, { 0x10E8, 0, 0x0802EF24 }, + { 0x10E9, 0, 0x0802EF84 }, { 0x10EA, 0, 0x0802EFCC }, { 0x10EB, 0, 0x0802EFF8 }, { 0x10EC, 0, 0x0802F030 }, + { 0x10ED, 0, 0x0802F078 }, { 0x10EE, 0, 0x0802F0B4 }, { 0x10EF, 0, 0x0802F0E0 }, { 0x10F0, 0, 0x0802F110 }, + { 0x10F1, 0, 0x0802F14C }, { 0x10F2, 0, 0x0802F184 }, { 0x10F3, 0, 0x0802F1A8 }, { 0x10F4, 0, 0x0802F1D4 }, + { 0x10F5, 0, 0x0802F204 }, { 0x10F6, 0, 0x0802F258 }, { 0x10F7, 0, 0x0802F28C }, { 0x10F8, 0, 0x0802F2D4 }, + { 0x10F9, 0, 0x0802F30C }, { 0x10FA, 0, 0x0802F334 }, { 0x10FB, 0, 0x0802F3A8 }, { 0x10FC, 0, 0x0802F3D8 }, + { 0x10FD, 0, 0x0802F408 }, { 0x10FE, 0, 0x0802F44C }, { 0x10FF, 0, 0x0802F484 }, { 0x1100, 0, 0x0802F4CC }, + { 0x1101, 0, 0x0802F500 }, { 0x1102, 0, 0x0802F590 }, { 0x1103, 0, 0x0802F5CC }, { 0x1104, 0, 0x0802F604 }, + { 0x1105, 0, 0x0802F660 }, { 0x1106, 0, 0x0802F694 }, { 0x1107, 0, 0x0802F6B8 }, { 0x1108, 0, 0x0802F730 }, + { 0x1109, 0, 0x0802F7B4 }, { 0x1130, 0, 0x0802F7D8 }, { 0x1131, 0, 0x0802F7F4 }, { 0x1132, 0, 0x0802F82C }, + { 0x1133, 0, 0x0802F8C0 }, { 0x1134, 0, 0x0802F8E8 }, { 0x1135, 0, 0x0802F8F4 }, { 0x1136, 0, 0x0802F900 }, + { 0x1137, 0, 0x0802F960 }, { 0x1138, 0, 0x0802F9D0 }, { 0x1139, 0, 0x0802FA70 }, { 0x113A, 0, 0x0802FB2C }, + { 0x113B, 0, 0x0802FB64 }, { 0x113C, 0, 0x0802FBF4 }, { 0x113D, 0, 0x0802FC4C }, { 0x113E, 0, 0x0802FCA0 }, + { 0x113F, 0, 0x0802FD10 }, { 0x1140, 0, 0x0802FDA8 }, { 0x1141, 0, 0x0802FE38 }, { 0x1142, 0, 0x0802FE7C }, + { 0x1143, 0, 0x0802FEBC }, { 0x1144, 0, 0x0802FEF8 }, { 0x1145, 0, 0x0802FF58 }, { 0x1146, 0, 0x0802FFB4 }, + { 0x1147, 0, 0x08030004 }, { 0x1148, 0, 0x08030018 }, { 0x1149, 0, 0x080300B8 }, { 0x114A, 0, 0x08030114 }, + { 0x114B, 0, 0x08030170 }, { 0x114C, 0, 0x080301CC }, { 0x114D, 0, 0x08030228 }, { 0x114E, 0, 0x08030284 }, + { 0x114F, 0, 0x080302E0 }, { 0x1150, 0, 0x08030318 }, { 0x1151, 0, 0x080303C8 }, { 0x1152, 0, 0x080303DC }, + { 0x1194, 0, 0x08030438 }, { 0x1195, 0, 0x08030458 }, { 0x1196, 0, 0x080304AC }, { 0x1197, 0, 0x080304E0 }, + { 0x1198, 0, 0x08030578 }, { 0x1199, 0, 0x080305E4 }, { 0x119A, 0, 0x080305FC }, { 0x119B, 0, 0x08030638 }, + { 0x119C, 0, 0x080306D0 }, { 0x119D, 0, 0x08030748 }, { 0x119E, 0, 0x08030770 }, { 0x119F, 0, 0x08030784 }, + { 0x11A0, 0, 0x080307EC }, { 0x11A1, 0, 0x08030828 }, { 0x11A2, 0, 0x080308E0 }, { 0x11A3, 0, 0x08030918 }, + { 0x11A4, 0, 0x08030934 }, { 0x11A5, 0, 0x08030948 }, { 0x11A6, 0, 0x080309BC }, { 0x11A7, 0, 0x080309E8 }, + { 0x11A8, 0, 0x08030A38 }, { 0x11A9, 0, 0x08030A60 }, { 0x11AA, 0, 0x08030AA0 }, { 0x11AB, 0, 0x08030ADC }, + { 0x11AC, 0, 0x08030B10 }, { 0x11AD, 0, 0x08030B40 }, { 0x11AE, 0, 0x08030B80 }, { 0x11AF, 0, 0x08030BB4 }, + { 0x11F8, 0, 0x08030BFC }, { 0x11F9, 0, 0x08030C64 }, { 0x11FA, 0, 0x08030CA0 }, { 0x11FB, 0, 0x08030D28 }, + { 0x11FC, 0, 0x08030D58 }, { 0x11FD, 0, 0x08030E14 }, { 0x11FE, 0, 0x08030E94 }, { 0x11FF, 0, 0x08030F2C }, + { 0x1200, 0, 0x08030F6C }, { 0x1201, 0, 0x08031004 }, { 0x1202, 0, 0x08031038 }, { 0x1203, 0, 0x080310A4 }, + { 0x1204, 0, 0x08031110 }, { 0x1205, 0, 0x08031154 }, { 0x1206, 0, 0x080311EC }, { 0x1207, 0, 0x08031230 }, + { 0x1208, 0, 0x08031290 }, { 0x1209, 0, 0x080312C4 }, { 0x120A, 0, 0x08031304 }, { 0x120B, 0, 0x08031320 }, + { 0x120C, 0, 0x08031348 }, { 0x120D, 0, 0x08031390 }, { 0x120E, 0, 0x080313DC }, { 0x120F, 0, 0x08031470 }, + { 0x1210, 0, 0x08031498 }, { 0x1211, 0, 0x08031520 }, { 0x1212, 0, 0x08031580 }, { 0x1213, 0, 0x080315A8 }, + { 0x1214, 0, 0x08031644 }, { 0x1215, 0, 0x080316AC }, { 0x1216, 0, 0x08031708 }, { 0x1217, 0, 0x0803176C }, + { 0x1218, 0, 0x080317BC }, { 0x1219, 0, 0x080317E8 }, { 0x121A, 0, 0x08031834 }, { 0x121B, 0, 0x080318B8 }, + { 0x121C, 0, 0x08031900 }, { 0x121D, 0, 0x08031930 }, { 0x121E, 0, 0x08031984 }, { 0x121F, 0, 0x080319C8 }, + { 0x1220, 0, 0x08031A08 }, { 0x1221, 0, 0x08031A7C }, { 0x1222, 0, 0x08031AFC }, { 0x1223, 0, 0x08031B68 }, + { 0x1224, 0, 0x08031BC0 }, { 0x1225, 0, 0x08031C10 }, { 0x1226, 0, 0x08031CD4 }, { 0x1227, 0, 0x08031D38 }, + { 0x1228, 0, 0x08031DC0 }, { 0x1229, 0, 0x08031E00 }, { 0x122A, 0, 0x08031E54 }, { 0x122B, 0, 0x08031E80 }, + { 0x122C, 0, 0x08031EF8 }, { 0x122D, 0, 0x08031F1C }, { 0x122E, 0, 0x08031FA4 }, { 0x122F, 0, 0x0803202C }, + { 0x1230, 0, 0x08032050 }, { 0x1231, 0, 0x0803210C }, { 0x1232, 0, 0x08032148 }, { 0x1233, 0, 0x080321B4 }, + { 0x1234, 0, 0x08032200 }, { 0x1235, 0, 0x08032250 }, { 0x1236, 0, 0x080322C4 }, { 0x1237, 0, 0x08032330 }, + { 0x1238, 0, 0x08032364 }, { 0x1239, 0, 0x08032414 }, { 0x123A, 0, 0x08032464 }, { 0x123B, 0, 0x08032504 }, + { 0x123C, 0, 0x08032550 }, { 0x123D, 0, 0x080325A4 }, { 0x123E, 0, 0x08032638 }, { 0x123F, 0, 0x08032698 }, + { 0x1240, 0, 0x080326FC }, { 0x1241, 0, 0x080327D4 }, { 0x1242, 0, 0x0803284C }, { 0x1243, 0, 0x08032904 }, + { 0x1244, 0, 0x08032964 }, { 0x1245, 0, 0x080329B8 }, { 0x1246, 0, 0x080329E4 }, { 0x1247, 0, 0x08032A54 }, + { 0x1248, 0, 0x08032AC0 }, { 0x1249, 0, 0x08032B08 }, { 0x124A, 0, 0x08032B68 }, { 0x124B, 0, 0x08032BC4 }, + { 0x124C, 0, 0x08032BE0 }, { 0x124D, 0, 0x08032C24 }, { 0x124E, 0, 0x08032C68 }, { 0x124F, 0, 0x08032CD8 }, + { 0x1250, 0, 0x08032D1C }, { 0x1251, 0, 0x08032D6C }, { 0x1252, 0, 0x08032DE4 }, { 0x1253, 0, 0x08032E0C }, + { 0x1254, 0, 0x08032E60 }, { 0x1255, 0, 0x08032EC4 }, { 0x1256, 0, 0x08032F38 }, { 0x1257, 0, 0x08032F7C }, + { 0x1258, 0, 0x08032FF4 }, { 0x1259, 0, 0x08033030 }, { 0x125A, 0, 0x080330BC }, { 0x125B, 0, 0x080330F8 }, + { 0x125C, 0, 0x0803319C }, { 0x125D, 0, 0x08033224 }, { 0x125E, 0, 0x080332D0 }, { 0x125F, 0, 0x08033358 }, + { 0x1260, 0, 0x080333CC }, { 0x1261, 0, 0x08033410 }, { 0x1262, 0, 0x08033450 }, { 0x1263, 0, 0x080334BC }, + { 0x1264, 0, 0x080334F4 }, { 0x1265, 0, 0x0803353C }, { 0x1266, 0, 0x08033588 }, { 0x1267, 0, 0x080335F4 }, + { 0x1268, 0, 0x08033678 }, { 0x1269, 0, 0x0803370C }, { 0x126A, 0, 0x08033778 }, { 0x126B, 0, 0x080337CC }, + { 0x126C, 0, 0x08033830 }, { 0x126D, 0, 0x080338B0 }, { 0x126E, 0, 0x08033934 }, { 0x126F, 0, 0x0803397C }, + { 0x1270, 0, 0x080339F0 }, { 0x1271, 0, 0x08033A14 }, { 0x1272, 0, 0x08033A44 }, { 0x1273, 0, 0x08033A88 }, + { 0x1274, 0, 0x08033AE0 }, { 0x1275, 0, 0x08033B74 }, { 0x1276, 0, 0x08033BC0 }, { 0x1277, 0, 0x08033C24 }, + { 0x1278, 0, 0x08033CA0 }, { 0x1279, 0, 0x08033D10 }, { 0x127A, 0, 0x08033D80 }, { 0x127B, 0, 0x08033DB4 }, + { 0x127C, 0, 0x08033E18 }, { 0x127D, 0, 0x08033E68 }, { 0x127E, 0, 0x08033EB4 }, { 0x127F, 0, 0x08033F04 }, + { 0x1280, 0, 0x08033F58 }, { 0x1281, 0, 0x08033FB8 }, { 0x1282, 0, 0x08034014 }, { 0x1283, 0, 0x08034044 }, + { 0x1284, 0, 0x0803409C }, { 0x1285, 0, 0x080340EC }, { 0x1286, 0, 0x08034140 }, { 0x1287, 0, 0x080341A0 }, + { 0x1288, 0, 0x08034204 }, { 0x1289, 0, 0x08034248 }, { 0x128A, 0, 0x080342A8 }, { 0x128B, 0, 0x080342E0 }, + { 0x128C, 0, 0x08034314 }, { 0x128D, 0, 0x08034340 }, { 0x128E, 0, 0x08034368 }, { 0x128F, 0, 0x080343C8 }, + { 0x1290, 0, 0x0803445C }, { 0x1291, 0, 0x080344E8 }, { 0x1292, 0, 0x08034528 }, { 0x1293, 0, 0x08034538 }, + { 0x1294, 0, 0x08034578 }, { 0x1295, 0, 0x080345C4 }, { 0x1296, 0, 0x08034618 }, { 0x1297, 0, 0x08034680 }, + { 0x1298, 0, 0x080346AC }, { 0x1299, 0, 0x08034728 }, { 0x129A, 0, 0x0803479C }, { 0x129B, 0, 0x08034808 }, + { 0x129C, 0, 0x08034854 }, { 0x129D, 0, 0x08034888 }, { 0x129E, 0, 0x080348B4 }, { 0x129F, 0, 0x080348FC }, + { 0x12A0, 0, 0x08034938 }, { 0x12A1, 0, 0x08034984 }, { 0x12A2, 0, 0x080349C4 }, { 0x12A3, 0, 0x08034A24 }, + { 0x12A4, 0, 0x08034A80 }, { 0x12A5, 0, 0x08034AF0 }, { 0x12A6, 0, 0x08034B40 }, { 0x12A7, 0, 0x08034B74 }, + { 0x12A8, 0, 0x08034BCC }, { 0x12A9, 0, 0x08034C2C }, { 0x12AA, 0, 0x08034CA0 }, { 0x12AB, 0, 0x08034CDC }, + { 0x12AC, 0, 0x08034D50 }, { 0x12AD, 0, 0x08034D9C }, { 0x12AE, 0, 0x08034E10 }, { 0x12AF, 0, 0x08034E40 }, + { 0x12B0, 0, 0x08034E70 }, { 0x12B1, 0, 0x08034EDC }, { 0x12B2, 0, 0x08034F28 }, { 0x12B3, 0, 0x08034F74 }, + { 0x12B4, 0, 0x08034FA0 }, { 0x12B5, 0, 0x08034FF4 }, { 0x12B6, 0, 0x08035018 }, { 0x12B7, 0, 0x0803504C }, + { 0x12B8, 0, 0x08035078 }, { 0x12B9, 0, 0x080350C0 }, { 0x12BA, 0, 0x080350F0 }, { 0x12BB, 0, 0x08035134 }, + { 0x12BC, 0, 0x0803516C }, { 0x12BD, 0, 0x080351D0 }, { 0x12BE, 0, 0x0803521C }, { 0x12BF, 0, 0x08035288 }, + { 0x12C0, 0, 0x08035308 }, { 0x12C1, 0, 0x0803534C }, { 0x12C2, 0, 0x0803539C }, { 0x12C3, 0, 0x080353CC }, + { 0x12C4, 0, 0x08035410 }, { 0x12C5, 0, 0x08035470 }, { 0x12C6, 0, 0x080354B8 }, { 0x12C7, 0, 0x08035520 }, + { 0x12C8, 0, 0x08035560 }, { 0x12C9, 0, 0x08035604 }, { 0x12CA, 0, 0x0803566C }, { 0x12CB, 0, 0x080356A4 }, + { 0x12CC, 0, 0x080356E4 }, { 0x12CD, 0, 0x0803577C }, { 0x12CE, 0, 0x080357EC }, { 0x12CF, 0, 0x0803581C }, + { 0x12D0, 0, 0x08035848 }, { 0x12D1, 0, 0x08035888 }, { 0x12D2, 0, 0x080358D0 }, { 0x12D3, 0, 0x080358E8 }, + { 0x12D4, 0, 0x0803590C }, { 0x12D5, 0, 0x0803592C }, { 0x12D6, 0, 0x0803596C }, { 0x12D7, 0, 0x080359C4 }, + { 0x12D8, 0, 0x08035A10 }, { 0x12D9, 0, 0x08035A80 }, { 0x12DA, 0, 0x08035ADC }, { 0x12DB, 0, 0x08035B48 }, + { 0x12DC, 0, 0x08035BB8 }, { 0x12DD, 0, 0x08035BF8 }, { 0x12DE, 0, 0x08035C74 }, { 0x12DF, 0, 0x08035CB0 }, + { 0x12E0, 0, 0x08035D10 }, { 0x12E3, 0, 0x08035D4C }, { 0x12E4, 0, 0x08035D70 }, { 0x12E5, 0, 0x08035DAC }, + { 0x12E6, 0, 0x08035DD8 }, { 0x12E7, 0, 0x08035DF4 }, { 0x12E8, 0, 0x08035E0C }, { 0x12E9, 0, 0x08035E58 }, + { 0x12EA, 0, 0x08035ED4 }, { 0x12EB, 0, 0x08035F44 }, { 0x12EC, 0, 0x08036074 }, { 0x12ED, 0, 0x080360BC }, + { 0x12EE, 0, 0x08036104 }, { 0x12EF, 0, 0x0803613C }, { 0x12F0, 0, 0x080361A0 }, { 0x12F1, 0, 0x080361F0 }, + { 0x12F2, 0, 0x08036248 }, { 0x12F3, 0, 0x08036260 }, { 0x12F4, 0, 0x080362A0 }, { 0x12F5, 0, 0x08036300 }, + { 0x12F6, 0, 0x08036324 }, { 0x12F7, 0, 0x080363A0 }, { 0x12F8, 0, 0x0803640C }, { 0x12F9, 0, 0x08036474 }, + { 0x12FA, 0, 0x080364CC }, { 0x12FB, 0, 0x08036508 }, { 0x12FC, 0, 0x0803655C }, { 0x12FD, 0, 0x08036578 }, + { 0x12FE, 0, 0x080365D4 }, { 0x12FF, 0, 0x080365F8 }, { 0x1300, 0, 0x08036654 }, { 0x1301, 0, 0x080366A4 }, + { 0x1302, 0, 0x080366F0 }, { 0x1303, 0, 0x08036738 }, { 0x1304, 0, 0x08036770 }, { 0x1305, 0, 0x080367AC }, + { 0x1306, 0, 0x080367F0 }, { 0x1307, 0, 0x08036830 }, { 0x1308, 0, 0x08036850 }, { 0x1309, 0, 0x0803688C }, + { 0x130A, 0, 0x080368F0 }, { 0x130B, 0, 0x08036924 }, { 0x130C, 0, 0x0803695C }, { 0x130D, 0, 0x080369A8 }, + { 0x130E, 0, 0x080369FC }, { 0x130F, 0, 0x08036A40 }, { 0x1310, 0, 0x08036A74 }, { 0x1311, 0, 0x08036AB8 }, + { 0x1312, 0, 0x08036B14 }, { 0x1313, 0, 0x08036B4C }, { 0x1314, 0, 0x08036BAC }, { 0x1315, 0, 0x08036C0C }, + { 0x1316, 0, 0x08036C64 }, { 0x1317, 0, 0x08036CBC }, { 0x1318, 0, 0x08036D1C }, { 0x1319, 0, 0x08036D80 }, + { 0x131A, 0, 0x08036DC4 }, { 0x131B, 0, 0x08036E0C }, { 0x131C, 0, 0x08036E8C }, { 0x131D, 0, 0x08036F14 }, + { 0x1388, 0, 0x08036F8C }, { 0x1389, 0, 0x08036FB4 }, { 0x138A, 0, 0x08036FF8 }, { 0x138B, 0, 0x08037034 }, + { 0x138C, 0, 0x08037060 }, { 0x138D, 0, 0x0803709C }, { 0x138E, 0, 0x0803711C }, { 0x138F, 0, 0x08037140 }, + { 0x1390, 0, 0x08037178 }, { 0x1391, 0, 0x080371AC }, { 0x1392, 0, 0x08037204 }, { 0x1393, 0, 0x08037234 }, + { 0x1394, 0, 0x08037288 }, { 0x1395, 0, 0x080372BC }, { 0x1396, 0, 0x080372F0 }, { 0x1397, 0, 0x08037310 }, + { 0x1398, 0, 0x08037338 }, { 0x1399, 0, 0x080373C4 }, { 0x139A, 0, 0x08037438 }, { 0x139B, 0, 0x080374A0 }, + { 0x139C, 0, 0x0803751C }, { 0x139D, 0, 0x0803758C }, { 0x139E, 0, 0x08037620 }, { 0x139F, 0, 0x08037704 }, + { 0x13A0, 0, 0x08037764 }, { 0x13A1, 0, 0x080377F4 }, { 0x13A2, 0, 0x08037838 }, { 0x13A3, 0, 0x08037894 }, + { 0x13A4, 0, 0x08037918 }, { 0x13A5, 0, 0x08037974 }, { 0x13A6, 0, 0x080379CC }, { 0x13A7, 0, 0x08037A68 }, + { 0x13A8, 0, 0x08037ACC }, { 0x13AE, 0, 0x08037B5C }, { 0x13AF, 0, 0x08037BF8 }, { 0x13B0, 0, 0x08037CE0 }, + { 0x13B1, 0, 0x08037D2C }, { 0x13B2, 0, 0x08037D54 }, { 0x13B3, 0, 0x08037D74 }, { 0x13EC, 0, 0x08037DB8 }, + { 0x13ED, 0, 0x08037DCC }, { 0x13EE, 0, 0x08037E30 }, { 0x13EF, 0, 0x08037EB4 }, { 0x13F0, 0, 0x08037EF4 }, + { 0x13F1, 0, 0x08037F34 }, { 0x13F2, 0, 0x08037F74 }, { 0x13F3, 0, 0x08037F8C }, { 0x13F4, 0, 0x08037FA4 }, + { 0x13F5, 0, 0x08037FC8 }, { 0x13F6, 0, 0x08037FF8 }, { 0x13F7, 0, 0x0803800C }, { 0x13F8, 0, 0x0803803C }, + { 0x13F9, 0, 0x08038084 }, { 0x13FA, 0, 0x080380C8 }, { 0x13FB, 0, 0x08038108 }, { 0x13FC, 0, 0x080381A4 }, + { 0x13FD, 0, 0x080381FC }, { 0x13FE, 0, 0x08038254 }, { 0x13FF, 0, 0x080382D8 }, { 0x1400, 0, 0x080383A8 }, + { 0x1401, 0, 0x08038504 }, { 0x1402, 0, 0x080385A8 }, { 0x1403, 0, 0x08038630 }, { 0x1404, 0, 0x0803868C }, + { 0x1405, 0, 0x080386C4 }, { 0x1406, 0, 0x08038728 }, { 0x1407, 0, 0x08038824 }, { 0x1408, 0, 0x08038844 }, + { 0x1409, 0, 0x080388F4 }, { 0x140A, 0, 0x08038984 }, { 0x140B, 0, 0x080389D0 }, { 0x140C, 0, 0x08038A3C }, + { 0x140D, 0, 0x08038A88 }, { 0x140E, 0, 0x08038AE8 }, { 0x140F, 0, 0x08038B20 }, { 0x1410, 0, 0x08038B60 }, + { 0x1411, 0, 0x08038BBC }, { 0x1412, 0, 0x08038BF4 }, { 0x1413, 0, 0x08038C34 }, { 0x1414, 0, 0x08038CC0 }, + { 0x1450, 0, 0x08038D04 }, { 0x1451, 0, 0x08038EC4 }, { 0x1452, 0, 0x08038EF8 }, { 0x1453, 0, 0x08038F10 }, + { 0x1454, 0, 0x08038F50 }, { 0x1455, 0, 0x08038F9C }, { 0x1456, 0, 0x08038FE4 }, { 0x1457, 0, 0x08039064 }, + { 0x1458, 0, 0x080390A8 }, { 0x1459, 0, 0x080390D4 }, { 0x145A, 0, 0x08039128 }, { 0x145B, 0, 0x08039198 }, + { 0x145C, 0, 0x080391C4 }, { 0x145D, 0, 0x080391D8 }, { 0x145E, 0, 0x08039204 }, { 0x145F, 0, 0x080392B0 }, + { 0x1460, 0, 0x08039360 }, { 0x1461, 0, 0x080393A8 }, { 0x1462, 0, 0x080393BC }, { 0x1463, 0, 0x080393EC }, + { 0x1464, 0, 0x0803940C }, { 0x1465, 0, 0x0803942C }, { 0x1466, 0, 0x08039454 }, { 0x1467, 0, 0x0803948C }, + { 0x1468, 0, 0x080394E8 }, { 0x1469, 0, 0x08039548 }, { 0x146A, 0, 0x080395A8 }, { 0x146B, 0, 0x08039638 }, + { 0x146C, 0, 0x08039700 }, { 0x146D, 0, 0x08039738 }, { 0x146E, 0, 0x08039758 }, { 0x146F, 0, 0x080397D8 }, + { 0x1470, 0, 0x08039858 }, { 0x1471, 0, 0x08039880 }, { 0x1472, 0, 0x080398B8 }, { 0x1473, 0, 0x08039924 }, + { 0x1474, 0, 0x08039950 }, { 0x1475, 0, 0x08039A64 }, { 0x1476, 0, 0x08039AE8 }, { 0x1477, 0, 0x08039B4C }, + { 0x1478, 0, 0x08039B70 }, { 0x1479, 0, 0x08039B98 }, { 0x147A, 0, 0x08039BCC }, { 0x147B, 0, 0x08039C00 }, + { 0x147C, 0, 0x08039D6C }, { 0x147D, 0, 0x08039E18 }, { 0x14B4, 0, 0x08039E78 }, { 0x14B5, 0, 0x08039EA8 }, + { 0x14B6, 0, 0x08039EF8 }, { 0x14B7, 0, 0x08039F64 }, { 0x14B8, 0, 0x08039F90 }, { 0x14B9, 0, 0x08039FE4 }, + { 0x14BA, 0, 0x0803A044 }, { 0x14BB, 0, 0x0803A090 }, { 0x14BC, 0, 0x0803A110 }, { 0x14BD, 0, 0x0803A138 }, + { 0x14BE, 0, 0x0803A1B8 }, { 0x14BF, 0, 0x0803A208 }, { 0x14C0, 0, 0x0803A25C }, { 0x14C1, 0, 0x0803A29C }, + { 0x14C2, 0, 0x0803A2E8 }, { 0x14C3, 0, 0x0803A384 }, { 0x14C4, 0, 0x0803A3FC }, { 0x14C5, 0, 0x0803A458 }, + { 0x14C6, 0, 0x0803A514 }, { 0x14C7, 0, 0x0803A540 }, { 0x14C8, 0, 0x0803A570 }, { 0x14C9, 0, 0x0803A5E4 }, + { 0x14CA, 0, 0x0803A614 }, { 0x14CB, 0, 0x0803A684 }, { 0x14CC, 0, 0x0803A700 }, { 0x14CD, 0, 0x0803A79C }, + { 0x14CE, 0, 0x0803A7B8 }, { 0x14CF, 0, 0x0803A880 }, { 0x14D0, 0, 0x0803A8AC }, { 0x14D1, 0, 0x0803A96C }, + { 0x14D2, 0, 0x0803AA08 }, { 0x14D3, 0, 0x0803AA80 }, { 0x14D4, 0, 0x0803AB40 }, { 0x14D5, 0, 0x0803AB80 }, + { 0x14D6, 0, 0x0803ABC0 }, { 0x14D7, 0, 0x0803AC30 }, { 0x14D8, 0, 0x0803AC78 }, { 0x14D9, 0, 0x0803ACEC }, + { 0x14DA, 0, 0x0803AD64 }, { 0x14DB, 0, 0x0803AD8C }, { 0x14DC, 0, 0x0803ADB8 }, { 0x14DD, 0, 0x0803ADEC }, + { 0x14DE, 0, 0x0803AE40 }, { 0x14DF, 0, 0x0803AEAC }, { 0x14E0, 0, 0x0803AEFC }, { 0x14E1, 0, 0x0803AF58 }, + { 0x14E2, 0, 0x0803AFDC }, { 0x14E3, 0, 0x0803B018 }, { 0x14E4, 0, 0x0803B044 }, { 0x14E5, 0, 0x0803B07C }, + { 0x14E6, 0, 0x0803B100 }, { 0x14E7, 0, 0x0803B13C }, { 0x14E8, 0, 0x0803B19C }, { 0x14E9, 0, 0x0803B220 }, + { 0x14EA, 0, 0x0803B2A0 }, { 0x14EB, 0, 0x0803B358 }, { 0x14EC, 0, 0x0803B398 }, { 0x14ED, 0, 0x0803B40C }, + { 0x14EE, 0, 0x0803B518 }, { 0x14EF, 0, 0x0803B5F8 }, { 0x14F0, 0, 0x0803B63C }, { 0x14F1, 0, 0x0803B6A8 }, + { 0x14F2, 0, 0x0803B734 }, { 0x14F3, 0, 0x0803B7B8 }, { 0x14F4, 0, 0x0803B834 }, { 0x14F5, 0, 0x0803B910 }, + { 0x14F6, 0, 0x0803B984 }, { 0x14F7, 0, 0x0803B9F0 }, { 0x14F8, 0, 0x0803BA80 }, { 0x14F9, 0, 0x0803BAB8 }, + { 0x14FA, 0, 0x0803BAF8 }, { 0x14FB, 0, 0x0803BB60 }, { 0x14FC, 0, 0x0803BB8C }, { 0x1518, 0, 0x0803BBFC }, + { 0x1519, 0, 0x0803BC5C }, { 0x151A, 0, 0x0803BCB0 }, { 0x151B, 0, 0x0803BCC8 }, { 0x151C, 0, 0x0803BCF8 }, + { 0x151D, 0, 0x0803BD44 }, { 0x151E, 0, 0x0803BDB8 }, { 0x151F, 0, 0x0803BDFC }, { 0x1520, 0, 0x0803BE9C }, + { 0x1521, 0, 0x0803BF18 }, { 0x1522, 0, 0x0803BF64 }, { 0x1523, 0, 0x0803BF8C }, { 0x1524, 0, 0x0803BFA4 }, + { 0x1525, 0, 0x0803BFD8 }, { 0x1526, 0, 0x0803BFF8 }, { 0x1527, 0, 0x0803C014 }, { 0x1528, 0, 0x0803C068 }, + { 0x1529, 0, 0x0803C0EC }, { 0x152A, 0, 0x0803C174 }, { 0x152B, 0, 0x0803C1CC }, { 0x152C, 0, 0x0803C22C }, + { 0x152D, 0, 0x0803C290 }, { 0x152E, 0, 0x0803C314 }, { 0x152F, 0, 0x0803C398 }, { 0x1530, 0, 0x0803C3F0 }, + { 0x1531, 0, 0x0803C454 }, { 0x1532, 0, 0x0803C4DC }, { 0x1533, 0, 0x0803C518 }, { 0x1534, 0, 0x0803C564 }, + { 0x1535, 0, 0x0803C5A4 }, { 0x1536, 0, 0x0803C5E4 }, { 0x1537, 0, 0x0803C644 }, { 0x1538, 0, 0x0803C6C8 }, + { 0x1539, 0, 0x0803C744 }, { 0x153A, 0, 0x0803C7E0 }, { 0x153B, 0, 0x0803C80C }, { 0x153C, 0, 0x0803C84C }, + { 0x153D, 0, 0x0803C884 }, { 0x153E, 0, 0x0803C89C }, { 0x153F, 0, 0x0803C8DC }, { 0x1540, 0, 0x0803C908 }, + { 0x1541, 0, 0x0803C944 }, { 0x1542, 0, 0x0803C9A0 }, { 0x157C, 0, 0x0803C9BC }, { 0x157D, 0, 0x0803C9D4 }, + { 0x157E, 0, 0x0803CA30 }, { 0x157F, 0, 0x0803CA70 }, { 0x1580, 0, 0x0803CAA0 }, { 0x1581, 0, 0x0803CAEC }, + { 0x1582, 0, 0x0803CB04 }, { 0x1583, 0, 0x0803CB18 }, { 0x1584, 0, 0x0803CB30 }, { 0x1585, 0, 0x0803CB64 }, + { 0x1586, 0, 0x0803CBD8 }, { 0x1587, 0, 0x0803CBF4 }, { 0x1588, 0, 0x0803CC34 }, { 0x1589, 0, 0x0803CC78 }, + { 0x158A, 0, 0x0803CD14 }, { 0x158B, 0, 0x0803CDA0 }, { 0x158C, 0, 0x0803CDE0 }, { 0x158D, 0, 0x0803CE3C }, + { 0x158E, 0, 0x0803CEA8 }, { 0x158F, 0, 0x0803CEE8 }, { 0x1590, 0, 0x0803CF30 }, { 0x1591, 0, 0x0803CFA4 }, + { 0x1592, 0, 0x0803D050 }, { 0x1593, 0, 0x0803D0C8 }, { 0x1594, 0, 0x0803D118 }, { 0x1595, 0, 0x0803D168 }, + { 0x1596, 0, 0x0803D1A8 }, { 0x1597, 0, 0x0803D1F0 }, { 0x1598, 0, 0x0803D228 }, { 0x1599, 0, 0x0803D290 }, + { 0x159A, 0, 0x0803D2FC }, { 0x159B, 0, 0x0803D368 }, { 0x159C, 0, 0x0803D448 }, { 0x159D, 0, 0x0803D4C0 }, + { 0x159E, 0, 0x0803D500 }, { 0x159F, 0, 0x0803D558 }, { 0x15A0, 0, 0x0803D5B4 }, { 0x15A1, 0, 0x0803D628 }, + { 0x15A2, 0, 0x0803D730 }, { 0x15A3, 0, 0x0803D798 }, { 0x15A4, 0, 0x0803D818 }, { 0x15A5, 0, 0x0803D868 }, + { 0x15A6, 0, 0x0803D8C4 }, { 0x15A7, 0, 0x0803D9AC }, { 0x15A8, 0, 0x0803D9FC }, { 0x15E0, 0, 0x0803DA3C }, + { 0x15E1, 0, 0x0803DA80 }, { 0x15E2, 0, 0x0803DB14 }, { 0x15E3, 0, 0x0803DB9C }, { 0x15E4, 0, 0x0803DC1C }, + { 0x15E5, 0, 0x0803DC70 }, { 0x15E6, 0, 0x0803DCA8 }, { 0x15E7, 0, 0x0803DCF8 }, { 0x15E8, 0, 0x0803DD5C }, + { 0x15E9, 0, 0x0803DE00 }, { 0x15EA, 0, 0x0803DE5C }, { 0x15EB, 0, 0x0803DE84 }, { 0x15EC, 0, 0x0803DED0 }, + { 0x15ED, 0, 0x0803DF34 }, { 0x15EE, 0, 0x0803DF64 }, { 0x15EF, 0, 0x0803DF9C }, { 0x15F0, 0, 0x0803DFBC }, + { 0x15F1, 0, 0x0803E018 }, { 0x15F2, 0, 0x0803E0B8 }, { 0x15F3, 0, 0x0803E124 }, { 0x15F4, 0, 0x0803E178 }, + { 0x15F5, 0, 0x0803E1E0 }, { 0x15F6, 0, 0x0803E298 }, { 0x15F7, 0, 0x0803E310 }, { 0x15F8, 0, 0x0803E36C }, + { 0x15F9, 0, 0x0803E3D0 }, { 0x15FA, 0, 0x0803E420 }, { 0x15FB, 0, 0x0803E454 }, { 0x15FC, 0, 0x0803E488 }, + { 0x15FD, 0, 0x0803E4E8 }, { 0x15FE, 0, 0x0803E59C }, { 0x15FF, 0, 0x0803E620 }, { 0x1600, 0, 0x0803E66C }, + { 0x1601, 0, 0x0803E70C }, { 0x1602, 0, 0x0803E74C }, { 0x1603, 0, 0x0803E7A4 }, { 0x1604, 0, 0x0803E7DC }, + { 0x1605, 0, 0x0803E804 }, { 0x1606, 0, 0x0803E864 }, { 0x1607, 0, 0x0803E8E8 }, { 0x1608, 0, 0x0803E930 }, + { 0x1609, 0, 0x0803E9E4 }, { 0x160A, 0, 0x0803EA4C }, { 0x160B, 0, 0x0803EAB0 }, { 0x160C, 0, 0x0803EB18 }, + { 0x160D, 0, 0x0803EB58 }, { 0x160E, 0, 0x0803EBA8 }, { 0x160F, 0, 0x0803EBFC }, { 0x1610, 0, 0x0803EC9C }, + { 0x1611, 0, 0x0803ED14 }, { 0x1612, 0, 0x0803EE08 }, { 0x1613, 0, 0x0803EE48 }, { 0x1614, 0, 0x0803EEB0 }, + { 0x1615, 0, 0x0803EEF0 }, { 0x1616, 0, 0x0803EFAC }, { 0x1617, 0, 0x0803F004 }, { 0x1618, 0, 0x0803F04C }, + { 0x1619, 0, 0x0803F078 }, { 0x161A, 0, 0x0803F0E0 }, { 0x161B, 0, 0x0803F110 }, { 0x161C, 0, 0x0803F15C }, + { 0x161D, 0, 0x0803F1EC }, { 0x161E, 0, 0x0803F264 }, { 0x161F, 0, 0x0803F2CC }, { 0x1620, 0, 0x0803F344 }, + { 0x1621, 0, 0x0803F3A8 }, { 0x1622, 0, 0x0803F3F4 }, { 0x1623, 0, 0x0803F46C }, { 0x1624, 0, 0x0803F4AC }, + { 0x1625, 0, 0x0803F500 }, { 0x1626, 0, 0x0803F608 }, { 0x1627, 0, 0x0803F66C }, { 0x1628, 0, 0x0803F6E8 }, + { 0x1629, 0, 0x0803F718 }, { 0x162A, 0, 0x0803F760 }, { 0x162B, 0, 0x0803F7C0 }, { 0x162C, 0, 0x0803F87C }, + { 0x162D, 0, 0x0803F8A8 }, { 0x162E, 0, 0x0803F8EC }, { 0x162F, 0, 0x0803F94C }, { 0x1630, 0, 0x0803F978 }, + { 0x1631, 0, 0x0803F9DC }, { 0x1632, 0, 0x0803FA3C }, { 0x1633, 0, 0x0803FA78 }, { 0x1634, 0, 0x0803FAC4 }, + { 0x1635, 0, 0x0803FB0C }, { 0x1636, 0, 0x0803FB5C }, { 0x1637, 0, 0x0803FBCC }, { 0x1638, 0, 0x0803FC50 }, + { 0x1644, 0, 0x0803FC6C }, { 0x1645, 0, 0x0803FD0C }, { 0x1646, 0, 0x0803FD5C }, { 0x1647, 0, 0x0803FDC0 }, + { 0x1648, 0, 0x0803FE08 }, { 0x1649, 0, 0x0803FE54 }, { 0x164A, 0, 0x0803FEB4 }, { 0x164B, 0, 0x0803FF88 }, + { 0x164C, 0, 0x0803FFF4 }, { 0x164D, 0, 0x08040064 }, { 0x164E, 0, 0x080400BC }, { 0x164F, 0, 0x0804010C }, + { 0x1650, 0, 0x08040174 }, { 0x1651, 0, 0x0804019C }, { 0x1652, 0, 0x08040208 }, { 0x1653, 0, 0x08040250 }, + { 0x1654, 0, 0x080402B0 }, { 0x1655, 0, 0x080402CC }, { 0x1656, 0, 0x0804032C }, { 0x1657, 0, 0x0804035C }, + { 0x1658, 0, 0x080403C0 }, { 0x1659, 0, 0x08040494 }, { 0x165A, 0, 0x08040530 }, { 0x165B, 0, 0x0804054C }, + { 0x165C, 0, 0x080405AC }, { 0x165D, 0, 0x080405E0 }, { 0x165E, 0, 0x08040624 }, { 0x165F, 0, 0x0804070C }, + { 0x1660, 0, 0x08040798 }, { 0x1661, 0, 0x080407C0 }, { 0x1700, 0, 0x08040848 }, { 0x1701, 0, 0x080408E4 }, + { 0x1702, 0, 0x0804092C }, { 0x1703, 0, 0x08040988 }, { 0x1704, 0, 0x080409D4 }, { 0x1705, 0, 0x08040A28 }, + { 0x1706, 0, 0x08040ABC }, { 0x1707, 0, 0x08040B0C }, { 0x1708, 0, 0x08040B50 }, { 0x1709, 0, 0x08040BA4 }, + { 0x170A, 0, 0x08040C18 }, { 0x170B, 0, 0x08040C60 }, { 0x170C, 0, 0x08040C6C }, { 0x170D, 0, 0x08040CC8 }, + { 0x170E, 0, 0x08040D38 }, { 0x170F, 0, 0x08040DBC }, { 0x1710, 0, 0x08040E0C }, { 0x1711, 0, 0x08040E84 }, + { 0x1712, 0, 0x08040E90 }, { 0x1713, 0, 0x08040EE8 }, { 0x1714, 0, 0x08040F30 }, { 0x1715, 0, 0x08040F78 }, + { 0x1716, 0, 0x08040FD0 }, { 0x1717, 0, 0x08041050 }, { 0x1718, 0, 0x08041084 }, { 0x1719, 0, 0x080410E8 }, + { 0x171A, 0, 0x08041128 }, { 0x171B, 0, 0x08041170 }, { 0x171C, 0, 0x080411BC }, { 0x171D, 0, 0x080411C8 }, + { 0x171E, 0, 0x0804122C }, { 0x171F, 0, 0x0804125C }, { 0x1720, 0, 0x080412A8 }, { 0x1721, 0, 0x080412E8 }, + { 0x1722, 0, 0x0804132C }, { 0x1723, 0, 0x08041378 }, { 0x1724, 0, 0x080413C0 }, { 0x1725, 0, 0x08041414 }, + { 0x1726, 0, 0x08041470 }, { 0x1727, 0, 0x0804147C }, { 0x1728, 0, 0x08041488 }, { 0x1729, 0, 0x080414D0 }, + { 0x172A, 0, 0x08041530 }, { 0x172B, 0, 0x08041588 }, { 0x172C, 0, 0x080415E4 }, { 0x172D, 0, 0x08041640 }, + { 0x172E, 0, 0x08041698 }, { 0x172F, 0, 0x080416FC }, { 0x1730, 0, 0x08041740 }, { 0x1731, 0, 0x08041794 }, + { 0x1732, 0, 0x080417A0 }, { 0x1733, 0, 0x080417F4 }, { 0x1734, 0, 0x08041848 }, { 0x1735, 0, 0x0804189C }, + { 0x1736, 0, 0x08041900 }, { 0x1737, 0, 0x08041958 }, { 0x1738, 0, 0x080419A8 }, { 0x1739, 0, 0x080419F4 }, + { 0x173A, 0, 0x08041A54 }, { 0x173B, 0, 0x08041AA0 }, { 0x173C, 0, 0x08041AF8 }, { 0x173D, 0, 0x08041B54 }, + { 0x173E, 0, 0x08041BA4 }, { 0x173F, 0, 0x08041BF4 }, { 0x1740, 0, 0x08041C48 }, { 0x1741, 0, 0x08041CAC }, + { 0x1742, 0, 0x08041D08 }, { 0x1743, 0, 0x08041D68 }, { 0x1744, 0, 0x08041DB4 }, { 0x1745, 0, 0x08041DF8 }, + { 0x1746, 0, 0x08041E54 }, { 0x1747, 0, 0x08041EB0 }, { 0x1748, 0, 0x08041F2C }, { 0x1749, 0, 0x08041F78 }, + { 0x1784, 0, 0x08041FD0 }, { 0x1785, 0, 0x0804202C }, { 0x1786, 0, 0x08042088 }, { 0x1787, 0, 0x080420E4 }, + { 0x1788, 0, 0x080420F0 }, { 0x1789, 0, 0x0804214C }, { 0x178A, 0, 0x080421B0 }, { 0x178B, 0, 0x080421F4 }, + { 0x178C, 0, 0x0804223C }, { 0x178D, 0, 0x08042288 }, { 0x178E, 0, 0x080422CC }, { 0x178F, 0, 0x08042314 }, + { 0x1798, 0, 0x08042360 }, { 0x1799, 0, 0x080423AC }, { 0x179A, 0, 0x080423F4 }, { 0x179B, 0, 0x08042440 }, + { 0x17AA, 0, 0x08042490 }, { 0x17AC, 0, 0x08042514 }, { 0x17AD, 0, 0x08042568 }, { 0x17AE, 0, 0x080425C0 }, + { 0x17AF, 0, 0x0804262C }, { 0x1800, 0, 0x080426AC }, { 0x1801, 0, 0x080426CC }, { 0x1802, 0, 0x0804272C }, + { 0x1803, 0, 0x08042754 }, { 0x1804, 0, 0x08042784 }, { 0x1805, 0, 0x080427E0 }, { 0x1806, 0, 0x08042834 }, + { 0x1807, 0, 0x08042870 }, { 0x1808, 0, 0x080428D0 }, { 0x1809, 0, 0x08042910 }, { 0x180A, 0, 0x0804293C }, + { 0x180B, 0, 0x08042968 }, { 0x180C, 0, 0x08042990 }, { 0x180D, 0, 0x080429AC }, { 0x180E, 0, 0x08042A04 }, + { 0x180F, 0, 0x08042A50 }, { 0x1810, 0, 0x08042A80 }, { 0x1811, 0, 0x08042AB4 }, { 0x1812, 0, 0x08042AF8 }, + { 0x1813, 0, 0x08042B38 }, { 0x1814, 0, 0x08042B6C }, { 0x1815, 0, 0x08042BAC }, { 0x1816, 0, 0x08042C04 }, + { 0x1817, 0, 0x08042C4C }, { 0x1818, 0, 0x08042C8C }, { 0x1819, 0, 0x08042CB8 }, { 0x181A, 0, 0x08042CEC }, + { 0x181B, 0, 0x08042D28 }, { 0x181C, 0, 0x08042D34 }, { 0x181D, 0, 0x08042D94 }, { 0x181E, 0, 0x08042DD8 }, + { 0x181F, 0, 0x08042DF0 }, { 0x1820, 0, 0x08042E40 }, { 0x1821, 0, 0x08042E7C }, { 0x1822, 0, 0x08042EB0 }, + { 0x1823, 0, 0x08042EE8 }, { 0x1824, 0, 0x08042F20 }, { 0x1883, 0, 0x08042F2C }, { 0x1884, 0, 0x08042F60 }, + { 0x1885, 0, 0x08042F9C }, { 0x1886, 0, 0x08043008 }, { 0x1887, 0, 0x08043054 }, { 0x1888, 0, 0x08043094 }, + { 0x1889, 0, 0x080430E4 }, { 0x188A, 0, 0x08043134 }, { 0x188B, 0, 0x08043150 }, { 0x188C, 0, 0x0804318C }, + { 0x188D, 0, 0x080431E8 }, { 0x188E, 0, 0x08043224 }, { 0x188F, 0, 0x0804326C }, { 0x1890, 0, 0x08043298 }, + { 0x1891, 0, 0x080432D8 }, { 0x1892, 0, 0x0804332C }, { 0x1893, 0, 0x08043378 }, { 0x1901, 0, 0x080433B4 }, + { 0x1902, 0, 0x0804341C }, { 0x1903, 0, 0x08043484 }, { 0x1904, 0, 0x08043508 }, { 0x1905, 0, 0x08043580 }, + { 0x1906, 0, 0x08043610 }, { 0x1907, 0, 0x0804367C }, { 0x1908, 0, 0x08043710 }, { 0x1909, 0, 0x08043784 }, + { 0x190A, 0, 0x0804380C }, { 0x190B, 0, 0x08043880 }, { 0x190C, 0, 0x080438E8 }, { 0x190D, 0, 0x08043948 }, + { 0x190E, 0, 0x080439C4 }, { 0x190F, 0, 0x08043A20 }, { 0x1910, 0, 0x08043AA0 }, { 0x1911, 0, 0x08043B24 }, + { 0x1912, 0, 0x08043BA8 }, { 0x1913, 0, 0x08043C30 }, { 0x1914, 0, 0x08043C9C }, { 0x1915, 0, 0x08043CEC }, + { 0x1916, 0, 0x08043D50 }, { 0x1917, 0, 0x08043DD8 }, { 0x1918, 0, 0x08043E40 }, { 0x1919, 0, 0x08043EB0 }, + { 0x191A, 0, 0x08043F24 }, { 0x191B, 0, 0x08043FB0 }, { 0x191C, 0, 0x0804401C }, { 0x191D, 0, 0x08044098 }, + { 0x191E, 0, 0x0804411C }, { 0x191F, 0, 0x08044184 }, { 0x1921, 0, 0x080441E8 }, { 0x1922, 0, 0x08044258 }, + { 0x1923, 0, 0x080442D4 }, { 0x1924, 0, 0x08044348 }, { 0x1925, 0, 0x080443D0 }, { 0x1926, 0, 0x08044458 }, + { 0x1927, 0, 0x080444DC }, { 0x1928, 0, 0x08044574 }, { 0x1929, 0, 0x080445CC }, { 0x192A, 0, 0x08044630 }, + { 0x192C, 0, 0x080446AC }, { 0x192D, 0, 0x0804471C }, { 0x192E, 0, 0x08044780 }, { 0x1930, 0, 0x08044808 }, + { 0x1931, 0, 0x08044898 }, { 0x1932, 0, 0x08044910 }, { 0x1933, 0, 0x0804498C }, { 0x1934, 0, 0x08044A04 }, + { 0x1935, 0, 0x08044A94 }, { 0x1937, 0, 0x08044B10 }, { 0x1939, 0, 0x08044B9C }, { 0x193A, 0, 0x08044C0C }, + { 0x193B, 0, 0x08044C18 }, { 0x193C, 0, 0x08044C8C }, { 0x1942, 0, 0x08044D04 }, { 0x1944, 0, 0x08044D6C }, + { 0x1945, 0, 0x08044DCC }, { 0x1946, 0, 0x08044E48 }, { 0x1947, 0, 0x08044EAC }, { 0x1948, 0, 0x08044F20 }, + { 0x1949, 0, 0x08044F88 }, { 0x194A, 0, 0x08045004 }, { 0x194B, 0, 0x08045084 }, { 0x194C, 0, 0x080450F4 }, + { 0x194D, 0, 0x08045174 }, { 0x1950, 0, 0x080451C8 }, { 0x1951, 0, 0x08045238 }, { 0x1952, 0, 0x080452A0 }, + { 0x1953, 0, 0x08045310 }, { 0x1954, 0, 0x08045378 }, { 0x1955, 0, 0x080453E8 }, { 0x1956, 0, 0x08045458 }, + { 0x1957, 0, 0x080454CC }, { 0x1958, 0, 0x08045540 }, { 0x1959, 0, 0x080455C4 }, { 0x195A, 0, 0x0804564C }, + { 0x195B, 0, 0x080456AC }, { 0x195C, 0, 0x08045704 }, { 0x195D, 0, 0x0804576C }, { 0x195E, 0, 0x080457E8 }, + { 0x195F, 0, 0x08045838 }, { 0x1960, 0, 0x0804589C }, { 0x1961, 0, 0x08045918 }, { 0x1962, 0, 0x08045988 }, + { 0x1963, 0, 0x080459E4 }, { 0x1964, 0, 0x08045A24 }, { 0x1B58, 0, 0x08045ACC }, { 0x1B59, 0, 0x08045ADC }, + { 0x1B5A, 0, 0x08045B00 }, { 0x1B5B, 0, 0x08045B20 }, { 0x1B5C, 0, 0x08045B2C }, { 0x1B5D, 0, 0x08045B58 }, + { 0x1B5E, 0, 0x08045B7C }, { 0x1B5F, 0, 0x08045BAC }, { 0x1B60, 0, 0x08045BD8 }, { 0x1B61, 0, 0x08045BFC }, + { 0x1B62, 0, 0x08045C18 }, { 0x1B63, 0, 0x08045C3C }, { 0x1B64, 0, 0x08045C60 }, { 0x1B65, 0, 0x08045C90 }, + { 0x1B66, 0, 0x08045CC0 }, { 0x1B67, 0, 0x08045CEC }, { 0x1B6A, 0, 0x08045CF8 }, { 0x1B6B, 0, 0x08045D28 }, + { 0x1B72, 0, 0x08045D58 }, { 0x1B73, 0, 0x08045D8C }, { 0x1B74, 0, 0x08045DB8 }, { 0x1B75, 0, 0x08045DEC }, + { 0x1B76, 0, 0x08045E1C }, { 0x1B77, 0, 0x08045E48 }, { 0x1B78, 0, 0x08045E54 }, { 0x1B79, 0, 0x08045E80 }, + { 0x1B7A, 0, 0x08045EB0 }, { 0x1B7B, 0, 0x08045ED8 }, { 0x1B7C, 0, 0x08045F08 }, { 0x1B7D, 0, 0x08045F34 }, + { 0x1B7E, 0, 0x08045F40 }, { 0x1B7F, 0, 0x08045F74 }, { 0x1B80, 0, 0x08045FA8 }, { 0x1B81, 0, 0x08045FD4 }, + { 0x1B89, 0, 0x08045FE0 }, { 0x1B8A, 0, 0x08045FF0 }, { 0x1B8B, 0, 0x08046038 }, { 0x1B8C, 0, 0x08046060 }, + { 0x1B8D, 0, 0x08046098 }, { 0x1B8E, 0, 0x080460D4 }, { 0x1B8F, 0, 0x08046110 }, { 0x1B90, 0, 0x08046150 }, + { 0x1B91, 0, 0x0804618C }, { 0x1B92, 0, 0x080461CC }, { 0x1B93, 0, 0x08046208 }, { 0x1B94, 0, 0x0804622C }, + { 0x1B95, 0, 0x0804626C }, { 0x1B96, 0, 0x080462A8 }, { 0x1B98, 0, 0x080462B4 }, { 0x1B9E, 0, 0x08046300 }, + { 0x1B9F, 0, 0x08046374 }, { 0x1BA0, 0, 0x080463FC }, { 0x1BA1, 0, 0x08046480 }, { 0x1BA2, 0, 0x08046594 }, + { 0x1BA4, 0, 0x080465C4 }, { 0x1BA5, 0, 0x08046654 }, { 0x1BA6, 0, 0x08046684 }, { 0x1BA7, 0, 0x080466D4 }, + { 0x1BA8, 0, 0x08046760 }, { 0x1BAC, 0, 0x080467E8 }, { 0x1BB2, 0, 0x08046848 }, { 0x1BB3, 0, 0x08046888 }, + { 0x1BB4, 0, 0x080468C4 }, { 0x1BB5, 0, 0x08046904 }, { 0x1BB6, 0, 0x08046944 }, { 0x1C00, 0, 0x08046984 }, + { 0x1C01, 0, 0x08046A4C }, { 0x1C02, 0, 0x08046AB8 }, { 0x1C03, 0, 0x08046BA8 }, { 0x1C04, 0, 0x08046C10 }, + { 0x1C05, 0, 0x08046D68 }, { 0x1C06, 0, 0x08046E44 }, { 0x1C07, 0, 0x08046EAC }, { 0x1C08, 0, 0x08046F0C }, + { 0x1C09, 0, 0x08046F5C }, { 0x1C0A, 0, 0x08046F94 }, { 0x1C0B, 0, 0x08047014 }, { 0x1C0C, 0, 0x080470D4 }, + { 0x1C0D, 0, 0x08047118 }, { 0x1C0E, 0, 0x08047130 }, { 0x1C0F, 0, 0x08047148 }, { 0x1C10, 0, 0x08047164 }, + { 0x1C11, 0, 0x0804717C }, { 0x1C12, 0, 0x0804719C }, { 0x1C13, 0, 0x080471BC }, { 0x1C14, 0, 0x080471D4 }, + { 0x1C15, 0, 0x080471F0 }, { 0x1C16, 0, 0x08047214 }, { 0x1C17, 0, 0x0804730C }, { 0x1C18, 0, 0x0804734C }, + { 0x1D00, 0, 0x080473A4 }, { 0x1D01, 0, 0x08047414 }, { 0x1D02, 0, 0x08047524 }, { 0x1D03, 0, 0x0804758C }, + { 0x1D04, 0, 0x08047644 }, { 0x1D05, 0, 0x08047678 }, { 0x1D06, 0, 0x080476D0 }, { 0x1D07, 0, 0x080476F8 }, + { 0x1D08, 0, 0x08047728 }, { 0x1D09, 0, 0x08047788 }, { 0x1D0A, 0, 0x080477C0 }, { 0x1D0B, 0, 0x080477F4 }, + { 0x1D0C, 0, 0x08047808 }, { 0x1D0D, 0, 0x08047820 }, { 0x1D11, 0, 0x08047844 }, { 0x1D12, 0, 0x08047890 }, + { 0x1D13, 0, 0x080478D8 }, { 0x1D14, 0, 0x08047920 }, { 0x1D15, 0, 0x0804796C }, { 0x1D16, 0, 0x080479B4 }, + { 0x1D17, 0, 0x080479FC }, { 0x1F40, 0, 0x08047A20 }, { 0x1F41, 0, 0x08047ABC }, { 0x1F42, 0, 0x08047B20 }, + { 0x1F43, 0, 0x08047B94 }, { 0x1F44, 0, 0x08047BD8 }, { 0x1F45, 0, 0x08047C40 }, { 0x1F46, 0, 0x08047CB4 }, + { 0x1F47, 0, 0x08047D1C }, { 0x1F48, 0, 0x08047D88 }, { 0x1F49, 0, 0x08047DA8 }, { 0x1F4A, 0, 0x08047E48 }, + { 0x1F4B, 0, 0x08047F30 }, { 0x1F4C, 0, 0x08047F88 }, { 0x1F4D, 0, 0x08048014 }, { 0x1F4E, 0, 0x080480E0 }, + { 0x1F4F, 0, 0x0804819C }, { 0x1F50, 0, 0x08048280 }, { 0x1F51, 0, 0x080482E4 }, { 0x1F52, 0, 0x0804833C }, + { 0x1F53, 0, 0x080483B8 }, { 0x1F54, 0, 0x08048430 }, { 0x1F55, 0, 0x080484AC }, { 0x1F56, 0, 0x080484F8 }, + { 0x1F5F, 0, 0x0804857C }, { 0x1F60, 0, 0x0804859C }, { 0x1F61, 0, 0x080485D4 }, { 0x1F62, 0, 0x08048604 }, + { 0x1F63, 0, 0x0804862C }, { 0x1F64, 0, 0x0804866C }, { 0x1F65, 0, 0x080486A4 }, { 0x1F66, 0, 0x080486E0 }, + { 0x1F67, 0, 0x08048708 }, { 0x1F68, 0, 0x08048774 }, { 0x1F69, 0, 0x080487A4 }, { 0x1F6A, 0, 0x080487E0 }, + { 0x1F6B, 0, 0x08048810 }, { 0x1F6C, 0, 0x08048864 }, { 0x1F6D, 0, 0x08048898 }, { 0x1F6E, 0, 0x08048960 }, + { 0x1F6F, 0, 0x08048990 }, { 0x1F70, 0, 0x080489E8 }, { 0x1F71, 0, 0x08048A44 }, { 0x1F72, 0, 0x08048AB8 }, + { 0x1F73, 0, 0x08048AE8 }, { 0x1F74, 0, 0x08048B94 }, { 0x1F75, 0, 0x08048BB0 }, { 0x1FA4, 0, 0x08048BD8 }, + { 0x1FA5, 0, 0x08048C14 }, { 0x1FA6, 0, 0x08048CF8 }, { 0x1FA7, 0, 0x08048D40 }, { 0x1FA8, 0, 0x08048D88 }, + { 0x1FA9, 0, 0x08048DF4 }, { 0x1FAA, 0, 0x08048E68 }, { 0x1FAB, 0, 0x08048EE0 }, { 0x1FAC, 0, 0x08048FB4 }, + { 0x1FAD, 0, 0x08049034 }, { 0x1FAE, 0, 0x08049068 }, { 0x1FAF, 0, 0x080491B0 }, { 0x1FB0, 0, 0x0804927C }, + { 0x1FB1, 0, 0x080492C8 }, { 0x1FB2, 0, 0x08049318 }, { 0x1FB3, 0, 0x08049384 }, { 0x1FB4, 0, 0x08049424 }, + { 0x1FB5, 0, 0x0804951C }, { 0x1FB6, 0, 0x08049558 }, { 0x1FB7, 0, 0x08049598 }, { 0x1FB8, 0, 0x080495B8 }, + { 0x1FB9, 0, 0x080495D0 }, { 0x1FBA, 0, 0x080495E8 }, { 0x1FBB, 0, 0x08049614 }, { 0x1FBC, 0, 0x0804963C }, + { 0x1FBD, 0, 0x08049688 }, { 0x1FBE, 0, 0x080496DC }, { 0x1FBF, 0, 0x08049758 }, { 0x1FC0, 0, 0x080497BC }, + { 0x1FC1, 0, 0x080497E4 }, { 0x1FC2, 0, 0x0804982C }, { 0x1FC3, 0, 0x080498A0 }, { 0x1FC4, 0, 0x08049920 }, + { 0x1FC5, 0, 0x08049940 }, { 0x1FC6, 0, 0x08049A0C }, { 0x1FC7, 0, 0x08049A38 }, { 0x1FC8, 0, 0x08049AA0 }, + { 0x1FC9, 0, 0x08049AB8 }, { 0x1FCA, 0, 0x08049AF0 }, { 0x1FCB, 0, 0x08049B74 }, { 0x1FCC, 0, 0x08049BD0 }, + { 0x1FCD, 0, 0x08049C34 }, { 0x1FCE, 0, 0x08049D14 }, { 0x1FCF, 0, 0x08049D70 }, { 0x1FD0, 0, 0x08049DAC }, + { 0x1FD1, 0, 0x08049E08 }, { 0x1FD2, 0, 0x08049E24 }, { 0x1FD3, 0, 0x08049E44 }, { 0x1FD4, 0, 0x08049E88 }, + { 0x1FD5, 0, 0x08049EB8 }, { 0x1FD6, 0, 0x08049F00 }, { 0x1FD7, 0, 0x08049F3C }, { 0x1FD8, 0, 0x08049F90 }, + { 0x1FD9, 0, 0x08049FC4 }, { 0x1FDA, 0, 0x0804A018 }, { 0x1FDB, 0, 0x0804A050 }, { 0x1FDC, 0, 0x0804A0BC }, + { 0x1FDD, 0, 0x0804A0F0 }, { 0x1FDE, 0, 0x0804A11C }, { 0x1FDF, 0, 0x0804A14C }, { 0x1FE0, 0, 0x0804A1A0 }, + { 0x1FE1, 0, 0x0804A1D4 }, { 0x1FE2, 0, 0x0804A210 }, { 0x1FE3, 0, 0x0804A244 }, { 0x1FE4, 0, 0x0804A290 }, + { 0x1FE5, 0, 0x0804A2C8 }, { 0x1FE6, 0, 0x0804A334 }, { 0x1FE7, 0, 0x0804A36C }, { 0x1FE8, 0, 0x0804A3EC }, + { 0x1FE9, 0, 0x0804A420 }, { 0x1FEA, 0, 0x0804A484 }, { 0x1FEB, 0, 0x0804A4B8 }, { 0x1FEC, 0, 0x0804A51C }, + { 0x1FED, 0, 0x0804A554 }, { 0x1FEE, 0, 0x0804A59C }, { 0x1FEF, 0, 0x0804A5D0 }, { 0x1FF0, 0, 0x0804A620 }, + { 0x1FF1, 0, 0x0804A658 }, { 0x1FF2, 0, 0x0804A6C0 }, { 0x1FF3, 0, 0x0804A6F4 }, { 0x1FF4, 0, 0x0804A74C }, + { 0x1FF5, 0, 0x0804A788 }, { 0x1FF6, 0, 0x0804A800 }, { 0x1FF7, 0, 0x0804A834 }, { 0x1FF8, 0, 0x0804A888 }, + { 0x1FF9, 0, 0x0804A8B8 }, { 0x1FFA, 0, 0x0804A908 }, { 0x1FFB, 0, 0x0804A940 }, { 0x1FFC, 0, 0x0804A970 }, + { 0x1FFD, 0, 0x0804A9A4 }, { 0x1FFE, 0, 0x0804AA00 }, { 0x1FFF, 0, 0x0804AA60 }, { 0x2000, 0, 0x0804AAA0 }, + { 0x2001, 0, 0x0804AACC }, { 0x2002, 0, 0x0804AB00 }, { 0x2003, 0, 0x0804AB60 }, { 0x2004, 0, 0x0804ABA0 }, + { 0x2005, 0, 0x0804ACE0 }, { 0x2006, 0, 0x0804ADB4 }, { 0x2007, 0, 0x0804AE8C }, { 0x2008, 0, 0x0804AEE0 }, + { 0x2009, 0, 0x0804AEF8 }, { 0x200A, 0, 0x0804AF10 }, { 0x200B, 0, 0x0804AFAC }, { 0x200C, 0, 0x0804B024 }, + { 0x200D, 0, 0x0804B058 }, { 0x200E, 0, 0x0804B0D0 }, { 0x200F, 0, 0x0804B144 }, { 0x2010, 0, 0x0804B168 }, + { 0x2011, 0, 0x0804B1B4 }, { 0x2012, 0, 0x0804B1F8 }, { 0x2013, 0, 0x0804B260 }, { 0x2014, 0, 0x0804B298 }, + { 0x2015, 0, 0x0804B300 }, { 0x2016, 0, 0x0804B338 }, { 0x2017, 0, 0x0804B350 }, { 0x201D, 0, 0x0804B3B0 }, + { 0x201E, 0, 0x0804B3F8 }, { 0x201F, 0, 0x0804B508 }, { 0x2020, 0, 0x0804B58C }, { 0x2021, 0, 0x0804B5F8 }, + { 0x2022, 0, 0x0804B68C }, { 0x2023, 0, 0x0804B6E4 }, { 0x2024, 0, 0x0804B6F0 }, { 0x2026, 0, 0x0804B6FC }, + { 0x2027, 0, 0x0804B71C }, { 0x2028, 0, 0x0804B744 }, { 0x2029, 0, 0x0804B758 }, { 0x202A, 0, 0x0804B770 }, + { 0x202B, 0, 0x0804B7C4 }, { 0x202C, 0, 0x0804B81C }, { 0x202D, 0, 0x0804B860 }, { 0x202E, 0, 0x0804B8A8 }, + { 0x202F, 0, 0x0804B908 }, { 0x2030, 0, 0x0804B93C }, { 0x2031, 0, 0x0804B9B8 }, { 0x2032, 0, 0x0804BA20 }, + { 0x2033, 0, 0x0804BA9C }, { 0x2034, 0, 0x0804BAEC }, { 0x2035, 0, 0x0804BB34 }, { 0x2036, 0, 0x0804BB7C }, + { 0x2037, 0, 0x0804BBAC }, { 0x2038, 0, 0x0804BBDC }, { 0x2039, 0, 0x0804BC20 }, { 0x203A, 0, 0x0804BC98 }, + { 0x203B, 0, 0x0804BCF0 }, { 0x203C, 0, 0x0804BD40 }, { 0x203D, 0, 0x0804BD5C }, { 0x203E, 0, 0x0804BDAC }, + { 0x203F, 0, 0x0804BE24 }, { 0x2040, 0, 0x0804BE4C }, { 0x2041, 0, 0x0804BEB8 }, { 0x2042, 0, 0x0804BEEC }, + { 0x2043, 0, 0x0804BF08 }, { 0x2044, 0, 0x0804BF38 }, { 0x2045, 0, 0x0804BF74 }, { 0x2046, 0, 0x0804BFB4 }, + { 0x2047, 0, 0x0804C028 }, { 0x2048, 0, 0x0804C08C }, { 0x2049, 0, 0x0804C0BC }, { 0x204A, 0, 0x0804C0D8 }, + { 0x204B, 0, 0x0804C114 }, { 0x204C, 0, 0x0804C144 }, { 0x204D, 0, 0x0804C180 }, { 0x204E, 0, 0x0804C204 }, + { 0x206C, 0, 0x0804C264 }, { 0x206D, 0, 0x0804C2A8 }, { 0x206E, 0, 0x0804C2F8 }, { 0x206F, 0, 0x0804C338 }, + { 0x2070, 0, 0x0804C384 }, { 0x2076, 0, 0x0804C390 }, { 0x2077, 0, 0x0804C3C0 }, { 0x2078, 0, 0x0804C404 }, + { 0x2079, 0, 0x0804C480 }, { 0x2080, 0, 0x0804C4C4 }, { 0x2081, 0, 0x0804C5B4 }, { 0x2082, 0, 0x0804C5FC }, + { 0x2083, 0, 0x0804C630 }, { 0x208A, 0, 0x0804C674 }, { 0x208B, 0, 0x0804C6BC }, { 0x208C, 0, 0x0804C708 }, + { 0x208D, 0, 0x0804C7B4 }, { 0x208E, 0, 0x0804C7FC }, { 0x2093, 0, 0x0804C8A4 }, { 0x2094, 0, 0x0804C8C0 }, + { 0x2095, 0, 0x0804C8E8 }, { 0x20B0, 0, 0x0804C920 }, { 0x20B1, 0, 0x0804C984 }, { 0x20B2, 0, 0x0804CA38 }, + { 0x20B3, 0, 0x0804CB34 }, { 0x20B4, 0, 0x0804CC18 }, { 0x20B5, 0, 0x0804CD10 }, { 0x20B6, 0, 0x0804CDD4 }, + { 0x20B7, 0, 0x0804CE8C }, { 0x20B8, 0, 0x0804CF48 }, { 0x20B9, 0, 0x0804CFA4 }, { 0x20BA, 0, 0x0804D018 }, + { 0x20BB, 0, 0x0804D084 }, { 0x20BC, 0, 0x0804D0EC }, { 0x20BD, 0, 0x0804D158 }, { 0x20BE, 0, 0x0804D1C0 }, + { 0x20BF, 0, 0x0804D230 }, { 0x20C0, 0, 0x0804D294 }, { 0x20C1, 0, 0x0804D300 }, { 0x20C2, 0, 0x0804D380 }, + { 0x20C3, 0, 0x0804D3F8 }, { 0x20C4, 0, 0x0804D460 }, { 0x20C5, 0, 0x0804D4AC }, { 0x20C6, 0, 0x0804D52C }, + { 0x20C7, 0, 0x0804D590 }, { 0x20D0, 0, 0x0804D5FC }, { 0x20D1, 0, 0x0804D654 }, { 0x20D2, 0, 0x0804D6C8 }, + { 0x20D4, 0, 0x0804D6EC }, { 0x20D5, 0, 0x0804D75C }, { 0x20D6, 0, 0x0804D7B4 }, { 0x20D7, 0, 0x0804D834 }, + { 0x20D8, 0, 0x0804D8B0 }, { 0x20D9, 0, 0x0804D93C }, { 0x20DA, 0, 0x0804D99C }, { 0x20DB, 0, 0x0804D9FC }, + { 0x20DC, 0, 0x0804DA74 }, { 0x20DD, 0, 0x0804DB20 }, { 0x20DE, 0, 0x0804DBB0 }, { 0x20DF, 0, 0x0804DC18 }, + { 0x20E0, 0, 0x0804DC90 }, { 0x20E1, 0, 0x0804DCFC }, { 0x20E2, 0, 0x0804DD84 }, { 0x20E3, 0, 0x0804DE0C }, + { 0x20E4, 0, 0x0804DEA0 }, { 0x20E5, 0, 0x0804DF10 }, { 0x20E6, 0, 0x0804DF78 }, { 0x20E7, 0, 0x0804DFEC }, + { 0x20F3, 0, 0x0804E05C }, { 0x20F7, 0, 0x0804E0C0 }, { 0x20F8, 0, 0x0804E134 }, { 0x20F9, 0, 0x0804E1AC }, + { 0x2103, 0, 0x0804E220 }, { 0x2104, 0, 0x0804E288 }, { 0x2105, 0, 0x0804E2CC }, { 0x2106, 0, 0x0804E320 }, + { 0x2107, 0, 0x0804E364 }, { 0x2108, 0, 0x0804E3BC }, { 0x2109, 0, 0x0804E408 }, { 0x210A, 0, 0x0804E458 }, + { 0x210B, 0, 0x0804E4B0 }, { 0x210C, 0, 0x0804E4EC }, { 0x210D, 0, 0x0804E52C }, { 0x210E, 0, 0x0804E578 }, + { 0x210F, 0, 0x0804E5D0 }, { 0x2110, 0, 0x0804E618 }, { 0x2111, 0, 0x0804E660 }, { 0x2112, 0, 0x0804E6BC }, + { 0x2113, 0, 0x0804E70C }, { 0x2114, 0, 0x0804E75C }, { 0x2115, 0, 0x0804E7A8 }, { 0x2116, 0, 0x0804E7F0 }, + { 0x2134, 0, 0x0804E83C }, { 0x2135, 0, 0x0804E880 }, { 0x2136, 0, 0x0804E8CC }, { 0x2137, 0, 0x0804E91C }, + { 0x2138, 0, 0x0804E96C }, { 0x2139, 0, 0x0804E9B4 }, { 0x213A, 0, 0x0804E9FC }, { 0x213B, 0, 0x0804EA38 }, + { 0x213C, 0, 0x0804EA88 }, { 0x213D, 0, 0x0804EAD0 }, { 0x213E, 0, 0x0804EB28 }, { 0x213F, 0, 0x0804EB80 }, + { 0x2140, 0, 0x0804EBD0 }, { 0x2141, 0, 0x0804EC1C }, { 0x2142, 0, 0x0804EC60 }, { 0x2143, 0, 0x0804ECAC }, + { 0x2144, 0, 0x0804ECF0 }, { 0x2145, 0, 0x0804ED40 }, { 0x2146, 0, 0x0804ED88 }, { 0x2147, 0, 0x0804EDDC }, + { 0x2152, 0, 0x0804EE34 }, { 0x2153, 0, 0x0804EE78 }, { 0x2154, 0, 0x0804EECC }, { 0x2156, 0, 0x0804EF1C }, + { 0x2157, 0, 0x0804EF64 }, { 0x2158, 0, 0x0804EFC4 }, { 0x2159, 0, 0x0804F014 }, { 0x215A, 0, 0x0804F05C }, + { 0x215B, 0, 0x0804F0C0 }, { 0x215D, 0, 0x0804F124 }, { 0x215E, 0, 0x0804F178 }, { 0x215F, 0, 0x0804F184 }, + { 0x2160, 0, 0x0804F1D8 }, { 0x2161, 0, 0x0804F234 }, { 0x2162, 0, 0x0804F298 }, { 0x2163, 0, 0x0804F2A4 }, + { 0x2164, 0, 0x0804F2F8 }, { 0x2165, 0, 0x0804F358 }, { 0x2166, 0, 0x0804F3B0 }, { 0x2167, 0, 0x0804F400 }, + { 0x2168, 0, 0x0804F458 }, { 0x2169, 0, 0x0804F4B0 }, { 0x216A, 0, 0x0804F504 }, { 0x216B, 0, 0x0804F554 }, + { 0x216C, 0, 0x0804F5A0 }, { 0x216D, 0, 0x0804F5F8 }, { 0x216E, 0, 0x0804F658 }, { 0x216F, 0, 0x0804F6B8 }, + { 0x2170, 0, 0x0804F710 }, { 0x2171, 0, 0x0804F764 }, { 0x2172, 0, 0x0804F7BC }, { 0x2173, 0, 0x0804F814 }, + { 0x2174, 0, 0x0804F870 }, { 0x2198, 0, 0x0804F8CC }, { 0x2199, 0, 0x0804F920 }, { 0x219A, 0, 0x0804F978 }, + { 0x219B, 0, 0x0804F9D0 }, { 0x219C, 0, 0x0804FA2C }, { 0x219D, 0, 0x0804FA80 }, { 0x219E, 0, 0x0804FAD0 }, + { 0x219F, 0, 0x0804FB28 }, { 0x21A0, 0, 0x0804FB80 }, { 0x21A1, 0, 0x0804FBD8 }, { 0x21A2, 0, 0x0804FC30 }, + { 0x21A3, 0, 0x0804FC88 }, { 0x21A4, 0, 0x0804FCD8 }, { 0x21A5, 0, 0x0804FD30 }, { 0x21A6, 0, 0x0804FD84 }, + { 0x21A7, 0, 0x0804FDDC }, { 0x21A8, 0, 0x0804FE34 }, { 0x21A9, 0, 0x0804FE88 }, { 0x21AA, 0, 0x0804FED8 }, + { 0x21AB, 0, 0x0804FF30 }, { 0x21AC, 0, 0x0804FF84 }, { 0x21AD, 0, 0x0804FFDC }, { 0x21AE, 0, 0x08050038 }, + { 0x21AF, 0, 0x08050094 }, { 0x21B0, 0, 0x080500EC }, { 0x21B1, 0, 0x08050140 }, { 0x21B2, 0, 0x08050198 }, + { 0x21B3, 0, 0x080501F4 }, { 0x21B4, 0, 0x0805024C }, { 0x21B5, 0, 0x080502A4 }, { 0x21B6, 0, 0x080502F8 }, + { 0x21B7, 0, 0x08050350 }, { 0x21B8, 0, 0x080503A8 }, { 0x21B9, 0, 0x08050400 }, { 0x21BA, 0, 0x0805045C }, + { 0x21CA, 0, 0x080504AC }, { 0x21CB, 0, 0x080504EC }, { 0x21CC, 0, 0x08050528 }, { 0x21CD, 0, 0x08050580 }, + { 0x21CE, 0, 0x080505C8 }, { 0x21CF, 0, 0x08050604 }, { 0x21D0, 0, 0x08050648 }, { 0x21D1, 0, 0x08050680 }, + { 0x21D2, 0, 0x080506CC }, { 0x21D3, 0, 0x08050700 }, { 0x21D4, 0, 0x0805075C }, { 0x21D5, 0, 0x080507A8 }, + { 0x21D6, 0, 0x080507F0 }, { 0x21D7, 0, 0x08050840 }, { 0x21D8, 0, 0x08050884 }, { 0x21D9, 0, 0x080508CC }, + { 0x21DA, 0, 0x08050910 }, { 0x21DB, 0, 0x0805094C }, { 0x21DC, 0, 0x08050998 }, { 0x21DD, 0, 0x080509D0 }, + { 0x21FC, 0, 0x08050A20 }, { 0x21FD, 0, 0x08050A50 }, { 0x21FE, 0, 0x08050A74 }, { 0x21FF, 0, 0x08050ABC }, + { 0x2200, 0, 0x08050ADC }, { 0x2201, 0, 0x08050AF0 }, { 0x2202, 0, 0x08050B0C }, { 0x2203, 0, 0x08050B44 }, + { 0x2204, 0, 0x08050B74 }, { 0x2205, 0, 0x08050B98 }, { 0x2206, 0, 0x08050BCC }, { 0x2207, 0, 0x08050BF8 }, + { 0x2208, 0, 0x08050C48 }, { 0x2209, 0, 0x08050CB0 }, { 0x220A, 0, 0x08050CC4 }, { 0x220B, 0, 0x08050CE0 }, + { 0x220C, 0, 0x08050D10 }, { 0x220D, 0, 0x08050D44 }, { 0x220E, 0, 0x08050D98 }, { 0x220F, 0, 0x08050DE0 }, + { 0x2210, 0, 0x08050E24 }, { 0x2211, 0, 0x08050E44 }, { 0x2212, 0, 0x08050E78 }, { 0x2213, 0, 0x08050E8C }, + { 0x2214, 0, 0x08050ECC }, { 0x2215, 0, 0x08050F14 }, { 0x2216, 0, 0x08050F44 }, { 0x2217, 0, 0x08050F6C }, + { 0x2218, 0, 0x08050FB4 }, { 0x2219, 0, 0x08050FDC }, { 0x221A, 0, 0x0805100C }, { 0x221B, 0, 0x08051034 }, + { 0x221C, 0, 0x08051054 }, { 0x221D, 0, 0x08051080 }, { 0x221E, 0, 0x080510A0 }, { 0x221F, 0, 0x080510DC }, + { 0x2220, 0, 0x08051104 }, { 0x2221, 0, 0x08051138 }, { 0x2222, 0, 0x0805114C }, { 0x2223, 0, 0x0805117C }, + { 0x2224, 0, 0x080511A8 }, { 0x2225, 0, 0x080511E4 }, { 0x2226, 0, 0x0805122C }, { 0x2227, 0, 0x08051258 }, + { 0x2228, 0, 0x080512AC }, { 0x2229, 0, 0x080512D8 }, { 0x222A, 0, 0x08051338 }, { 0x222B, 0, 0x08051374 }, + { 0x2328, 0, 0x080513C4 }, { 0x2329, 0, 0x08051410 }, { 0x232A, 0, 0x08051454 }, { 0x232B, 0, 0x080514B4 }, + { 0x232C, 0, 0x08051514 }, { 0x232D, 0, 0x08051564 }, { 0x232E, 0, 0x080515A8 }, { 0x232F, 0, 0x080515E4 }, + { 0x2330, 0, 0x08051630 }, { 0x2331, 0, 0x08051680 }, { 0x2332, 0, 0x08051700 }, { 0x2333, 0, 0x08051750 }, + { 0x2334, 0, 0x080517AC }, { 0x2335, 0, 0x08051814 }, { 0x2336, 0, 0x08051868 }, { 0x2337, 0, 0x080518C8 }, + { 0x2338, 0, 0x08051914 }, { 0x2339, 0, 0x08051948 }, { 0x233A, 0, 0x080519A4 }, { 0x233B, 0, 0x080519D8 }, + { 0x233C, 0, 0x08051A10 }, { 0x233D, 0, 0x08051A70 }, { 0x233E, 0, 0x08051AA4 }, { 0x233F, 0, 0x08051ADC }, + { 0x2340, 0, 0x08051B10 }, { 0x2341, 0, 0x08051B54 }, { 0x2342, 0, 0x08051BC8 }, { 0x2343, 0, 0x08051C38 }, + { 0x2344, 0, 0x08051C70 }, { 0x2345, 0, 0x08051CC0 }, { 0x2346, 0, 0x08051CFC }, { 0x2347, 0, 0x08051D24 }, + { 0x2348, 0, 0x08051DA4 }, { 0x2349, 0, 0x08051DE4 }, { 0x234A, 0, 0x08051E44 }, { 0x234B, 0, 0x08051E84 }, + { 0x234C, 0, 0x08051EA4 }, { 0x234D, 0, 0x08051EC4 }, { 0x234E, 0, 0x08051F04 }, { 0x234F, 0, 0x08051F30 }, + { 0x2350, 0, 0x08051F48 }, { 0x2351, 0, 0x08051F7C }, { 0x2352, 0, 0x08051FA8 }, { 0x2353, 0, 0x08051FC0 }, + { 0x2354, 0, 0x08051FE4 }, { 0x2355, 0, 0x08052004 }, { 0x2356, 0, 0x08052020 }, { 0x2357, 0, 0x08052048 }, + { 0x2358, 0, 0x080520AC }, { 0x2359, 0, 0x080520DC }, { 0x235A, 0, 0x08052104 }, { 0x235B, 0, 0x08052138 }, + { 0x235C, 0, 0x0805215C }, { 0x235D, 0, 0x08052188 }, { 0x235E, 0, 0x080522B4 }, { 0x235F, 0, 0x080522DC }, + { 0x2360, 0, 0x08052334 }, { 0x2361, 0, 0x080523A8 }, { 0x2362, 0, 0x08052400 }, { 0x2363, 0, 0x08052450 }, + { 0x2364, 0, 0x0805250C }, { 0x2365, 0, 0x08052644 }, { 0x2366, 0, 0x080526C0 }, { 0x2367, 0, 0x08052718 }, + { 0x2368, 0, 0x080527E4 }, { 0x2369, 0, 0x080528E0 }, { 0x236A, 0, 0x08052930 }, { 0x236B, 0, 0x08052A04 }, + { 0x236C, 0, 0x08052A40 }, { 0x236D, 0, 0x08052A8C }, { 0x236E, 0, 0x08052ABC }, { 0x236F, 0, 0x08052AD8 }, + { 0x2370, 0, 0x08052B34 }, { 0x2371, 0, 0x08052B64 }, { 0x2372, 0, 0x08052BE0 }, { 0x2373, 0, 0x08052BF8 }, + { 0x2374, 0, 0x08052C3C }, { 0x2375, 0, 0x08052C80 }, { 0x2376, 0, 0x08052CE4 }, { 0x2377, 0, 0x08052D08 }, + { 0x2378, 0, 0x08052D54 }, { 0x2710, 0, 0x08052D8C }, { 0x2711, 0, 0x08052E54 }, { 0x2712, 0, 0x08052EA4 }, + { 0x2713, 0, 0x08053008 }, { 0x2714, 0, 0x0805305C }, { 0x2715, 0, 0x080531A0 }, { 0x2716, 0, 0x08053220 }, + { 0x2717, 0, 0x08053284 }, { 0x2718, 0, 0x080532BC }, { 0x2719, 0, 0x08053300 }, { 0x271A, 0, 0x0805332C }, + { 0x271B, 0, 0x08053424 }, { 0x271C, 0, 0x080534AC }, { 0x271D, 0, 0x08053524 }, { 0x271E, 0, 0x0805358C }, + { 0x271F, 0, 0x08053608 }, { 0x2720, 0, 0x0805367C }, { 0x2721, 0, 0x08053718 }, { 0x2722, 0, 0x0805374C }, + { 0x2723, 0, 0x080537A8 }, { 0x2724, 0, 0x080537F4 }, { 0x2725, 0, 0x08053850 }, { 0x2726, 0, 0x080538A8 }, + { 0x2727, 0, 0x08053914 }, { 0x2728, 0, 0x08053974 }, { 0x2729, 0, 0x08053A34 }, { 0x272A, 0, 0x08053A4C }, + { 0x272B, 0, 0x08053A90 }, { 0x272C, 0, 0x08053AB0 }, { 0x272D, 0, 0x08053AF4 }, { 0x272E, 0, 0x08053B3C }, + { 0x272F, 0, 0x08053B9C }, { 0x2730, 0, 0x08053BCC }, { 0x2731, 0, 0x08053C04 }, { 0x2732, 0, 0x08053C70 }, + { 0x2733, 0, 0x08053CD8 }, { 0x2734, 0, 0x08053D4C }, { 0x2735, 0, 0x08053DD4 }, { 0x2736, 0, 0x08053E48 }, + { 0x2737, 0, 0x08053EA8 }, { 0x2738, 0, 0x08053F9C }, { 0x2739, 0, 0x08054038 }, { 0x273A, 0, 0x080540A0 }, + { 0x273B, 0, 0x0805411C }, { 0x273C, 0, 0x08054188 }, { 0x273D, 0, 0x080541D0 }, { 0x273E, 0, 0x08054278 }, + { 0x273F, 0, 0x080542A0 }, { 0x2740, 0, 0x0805432C }, { 0x2741, 0, 0x080543CC }, { 0x2742, 0, 0x08054478 }, + { 0x2743, 0, 0x080544F8 }, { 0x2744, 0, 0x08054580 }, { 0x2745, 0, 0x08054630 }, { 0x2746, 0, 0x08054674 }, + { 0x2747, 0, 0x080546C4 }, { 0x2748, 0, 0x08054784 }, { 0x2749, 0, 0x080547EC }, { 0x274A, 0, 0x0805483C }, + { 0x274B, 0, 0x0805489C }, { 0x274C, 0, 0x08054924 }, { 0x274D, 0, 0x0805494C }, { 0x274E, 0, 0x080549E0 }, + { 0x274F, 0, 0x08054A90 }, { 0x2774, 0, 0x08054B24 }, { 0x2775, 0, 0x08054B7C }, { 0x2776, 0, 0x08054C30 }, + { 0x2777, 0, 0x08054C3C }, { 0x2778, 0, 0x08054CD0 }, { 0x2779, 0, 0x08054CDC }, { 0x277A, 0, 0x08054D00 }, + { 0x277B, 0, 0x08054DA4 }, { 0x277C, 0, 0x08054EC8 }, { 0x277D, 0, 0x08054F54 }, { 0x277E, 0, 0x08054FA0 }, + { 0x277F, 0, 0x08055004 }, { 0x2780, 0, 0x0805503C }, { 0x2781, 0, 0x080550B0 }, { 0x2782, 0, 0x08055110 }, + { 0x2783, 0, 0x08055138 }, { 0x2784, 0, 0x08055160 }, { 0x2785, 0, 0x08055194 }, { 0x2786, 0, 0x080551E0 }, + { 0x2787, 0, 0x08055224 }, { 0x2788, 0, 0x08055264 }, { 0x2789, 0, 0x080552A8 }, { 0x278A, 0, 0x080552E8 }, + { 0x278B, 0, 0x08055310 }, { 0x278C, 0, 0x0805535C }, { 0x278D, 0, 0x080553E0 }, { 0x278E, 0, 0x08055424 }, + { 0x278F, 0, 0x08055448 }, { 0x2790, 0, 0x08055470 }, { 0x2791, 0, 0x080554F0 }, { 0x2792, 0, 0x08055510 }, + { 0x2793, 0, 0x08055534 }, { 0x2794, 0, 0x080555BC }, { 0x2795, 0, 0x080555FC }, { 0x2796, 0, 0x0805565C }, + { 0x2797, 0, 0x08055688 }, { 0x2798, 0, 0x080556CC }, { 0x2799, 0, 0x08055700 }, { 0x279A, 0, 0x0805573C }, + { 0x279B, 0, 0x0805576C }, { 0x279C, 0, 0x080557B0 }, { 0x279D, 0, 0x08055804 }, { 0x279E, 0, 0x08055858 }, + { 0x279F, 0, 0x080558DC }, { 0x27A0, 0, 0x0805591C }, { 0x27A1, 0, 0x08055984 }, { 0x27A2, 0, 0x080559C0 }, + { 0x27A3, 0, 0x08055A10 }, { 0x27A4, 0, 0x08055A38 }, { 0x27A5, 0, 0x08055AB0 }, { 0x27A6, 0, 0x08055AE8 }, + { 0x27A7, 0, 0x08055B1C }, { 0x27A8, 0, 0x08055B60 }, { 0x27A9, 0, 0x08055BA8 }, { 0x27AA, 0, 0x08055BC0 }, + { 0x27AB, 0, 0x08055C10 }, { 0x27AC, 0, 0x08055C34 }, { 0x27AD, 0, 0x08055CAC }, { 0x27AE, 0, 0x08055CC4 }, + { 0x27D8, 0, 0x08055D0C }, { 0x27D9, 0, 0x08055D50 }, { 0x27DA, 0, 0x08055D94 }, { 0x27DB, 0, 0x08055DCC }, + { 0x27DC, 0, 0x08055E10 }, { 0x27DD, 0, 0x08055E50 }, { 0x27DE, 0, 0x08055ED0 }, { 0x27DF, 0, 0x08055F14 }, + { 0x27E0, 0, 0x08055F70 }, { 0x27E1, 0, 0x08056000 }, { 0x27E2, 0, 0x0805609C }, { 0x27E3, 0, 0x080560DC }, + { 0x27E4, 0, 0x080560F8 }, { 0x27E5, 0, 0x08056128 }, { 0x27E6, 0, 0x08056170 }, { 0x27E7, 0, 0x08056220 }, + { 0x27E8, 0, 0x0805627C }, { 0x27E9, 0, 0x080562D8 }, { 0x27EA, 0, 0x08056334 }, { 0x27EB, 0, 0x0805635C }, + { 0x27EC, 0, 0x080563B0 }, { 0x27ED, 0, 0x080563D8 }, { 0x27EE, 0, 0x0805643C }, { 0x27EF, 0, 0x08056468 }, + { 0x27F0, 0, 0x08056488 }, { 0x27F1, 0, 0x080564AC }, { 0x27F2, 0, 0x080564F4 }, { 0x27F3, 0, 0x0805653C }, + { 0x27F4, 0, 0x08056570 }, { 0x27F5, 0, 0x0805662C }, { 0x27F6, 0, 0x0805668C }, { 0x27F7, 0, 0x080566B0 }, + { 0x27F8, 0, 0x080566E4 }, { 0x27F9, 0, 0x08056708 }, { 0x27FA, 0, 0x08056734 }, { 0x283C, 0, 0x0805678C }, + { 0x283D, 0, 0x080567C4 }, { 0x2841, 0, 0x080567FC }, { 0x2842, 0, 0x08056840 }, { 0x2843, 0, 0x08056878 }, + { 0x2844, 0, 0x080568E0 }, { 0x2845, 0, 0x0805696C }, { 0x2846, 0, 0x080569BC }, { 0x2847, 0, 0x08056A18 }, + { 0x2848, 0, 0x08056A54 }, { 0x2849, 0, 0x08056AB0 }, { 0x284A, 0, 0x08056AF4 }, { 0x284B, 0, 0x08056B38 }, + { 0x284C, 0, 0x08056B88 }, { 0x284D, 0, 0x08056BCC }, { 0x284E, 0, 0x08056C2C }, { 0x284F, 0, 0x08056C7C }, + { 0x2850, 0, 0x08056CA8 }, { 0x2851, 0, 0x08056CF8 }, { 0x2852, 0, 0x08056D24 }, { 0x2853, 0, 0x08056D68 }, + { 0x2854, 0, 0x08056DC0 }, { 0x2855, 0, 0x08056E04 }, { 0x2856, 0, 0x08056E50 }, { 0x2857, 0, 0x08056E98 }, + { 0x2858, 0, 0x08056EFC }, { 0x2859, 0, 0x08056F44 }, { 0x285A, 0, 0x08056FA8 }, { 0x285B, 0, 0x08056FE8 }, + { 0x285C, 0, 0x08057014 }, { 0x285D, 0, 0x0805705C }, { 0x285E, 0, 0x08057088 }, { 0x285F, 0, 0x080570C8 }, + { 0x2860, 0, 0x080570FC }, { 0x2861, 0, 0x08057114 }, { 0x2862, 0, 0x08057174 }, { 0x2863, 0, 0x080571C0 }, + { 0x2864, 0, 0x0805722C }, { 0x2865, 0, 0x08057278 }, { 0x2866, 0, 0x080572E4 }, { 0x2867, 0, 0x08057328 }, + { 0x2868, 0, 0x08057358 }, { 0x2869, 0, 0x080573A4 }, { 0x286A, 0, 0x08057410 }, { 0x286B, 0, 0x08057454 }, + { 0x286C, 0, 0x08057484 }, { 0x286D, 0, 0x080574D0 }, { 0x286E, 0, 0x080574F8 }, { 0x286F, 0, 0x0805753C }, + { 0x2870, 0, 0x080575A8 }, { 0x2871, 0, 0x080575E4 }, { 0x2872, 0, 0x08057628 }, { 0x2873, 0, 0x0805765C }, + { 0x2874, 0, 0x080576B4 }, { 0x2875, 0, 0x080576D0 }, { 0x2876, 0, 0x08057728 }, { 0x2877, 0, 0x0805777C }, + { 0x2878, 0, 0x080577D4 }, { 0x2879, 0, 0x08057828 }, { 0x287A, 0, 0x08057890 }, { 0x287B, 0, 0x08057900 }, + { 0x287C, 0, 0x08057968 }, { 0x287D, 0, 0x080579B8 }, { 0x287E, 0, 0x080579E8 }, { 0x287F, 0, 0x08057A5C }, + { 0x2880, 0, 0x08057AA8 }, { 0x2881, 0, 0x08057B24 }, { 0x2882, 0, 0x08057B5C }, { 0x2883, 0, 0x08057B94 }, + { 0x2884, 0, 0x08057BC8 }, { 0x2885, 0, 0x08057BE0 }, { 0x2886, 0, 0x08057BF8 }, { 0x2887, 0, 0x08057C24 }, + { 0x2888, 0, 0x08057C5C }, { 0x2889, 0, 0x08057C88 }, { 0x288A, 0, 0x08057CB4 }, { 0x288B, 0, 0x08057CD4 }, + { 0x28A0, 0, 0x08057CF0 }, { 0x28A1, 0, 0x08057D20 }, { 0x28A2, 0, 0x08057D5C }, { 0x28A3, 0, 0x08057D94 }, + { 0x28A4, 0, 0x08057E80 }, { 0x28A5, 0, 0x08057F64 }, { 0x28A6, 0, 0x08057FA8 }, { 0x28A7, 0, 0x08058080 }, + { 0x28A8, 0, 0x080580B4 }, { 0x28A9, 0, 0x080580F4 }, { 0x28AA, 0, 0x08058130 }, { 0x28AB, 0, 0x08058160 }, + { 0x28AC, 0, 0x080581EC }, { 0x28AD, 0, 0x080582C0 }, { 0x28AF, 0, 0x080582DC }, { 0x28B0, 0, 0x080582F8 }, + { 0x28B1, 0, 0x08058340 }, { 0x28B2, 0, 0x080583A8 }, { 0x28B3, 0, 0x08058400 }, { 0x28B4, 0, 0x08058488 }, + { 0x28B5, 0, 0x080584E8 }, { 0x28B6, 0, 0x08058524 }, { 0x28B7, 0, 0x08058594 }, { 0x28B8, 0, 0x080585F4 }, + { 0x28B9, 0, 0x08058618 }, { 0x28BA, 0, 0x0805864C }, { 0x28BB, 0, 0x08058688 }, { 0x28BC, 0, 0x080586B8 }, + { 0x28BD, 0, 0x080586F8 }, { 0x28BE, 0, 0x0805871C }, { 0x28BF, 0, 0x08058760 }, { 0x28C0, 0, 0x0805878C }, + { 0x28C1, 0, 0x080587B4 }, { 0x28C2, 0, 0x0805881C }, { 0x28C3, 0, 0x08058880 }, { 0x28C4, 0, 0x080589EC }, + { 0x28C5, 0, 0x08058A60 }, { 0x28C6, 0, 0x08058A78 }, { 0x28C7, 0, 0x08058AC0 }, { 0x28C8, 0, 0x08058AF4 }, + { 0x28C9, 0, 0x08058B54 }, { 0x28CA, 0, 0x08058B9C }, { 0x28CB, 0, 0x08058BD4 }, { 0x28CC, 0, 0x08058C24 }, + { 0x28CD, 0, 0x08058C58 }, { 0x28CE, 0, 0x08058C6C }, { 0x28CF, 0, 0x08058C88 }, { 0x28D0, 0, 0x08058CCC }, + { 0x28D1, 0, 0x08058D1C }, { 0x28D2, 0, 0x08058D4C }, { 0x28D3, 0, 0x08058DA0 }, { 0x28D4, 0, 0x08058DF0 }, + { 0x28D5, 0, 0x08058E4C }, { 0x28D6, 0, 0x08058EE8 }, { 0x28D7, 0, 0x08058F10 }, { 0x28D8, 0, 0x08058F60 }, + { 0x28D9, 0, 0x0805901C }, { 0x28DA, 0, 0x08059030 }, { 0x28DB, 0, 0x08059154 }, { 0x28DC, 0, 0x08059184 }, + { 0x28DE, 0, 0x080591A8 }, { 0x28DF, 0, 0x080591E4 }, { 0x28E0, 0, 0x08059220 }, { 0x28E1, 0, 0x08059260 }, + { 0x28E2, 0, 0x080592C8 }, { 0x28E3, 0, 0x0805931C }, { 0x28E4, 0, 0x08059378 }, { 0x28E5, 0, 0x080593A4 }, + { 0x28E6, 0, 0x080593B8 }, { 0x28E7, 0, 0x080593FC }, { 0x28E8, 0, 0x08059420 }, { 0x28E9, 0, 0x0805945C }, + { 0x28EA, 0, 0x08059480 }, { 0x28EB, 0, 0x080594D4 }, { 0x28EC, 0, 0x08059564 }, { 0x28ED, 0, 0x080595B8 }, + { 0x28EE, 0, 0x080595F8 }, { 0x28EF, 0, 0x08059640 }, { 0x28F0, 0, 0x080596F8 }, { 0x28F1, 0, 0x08059754 }, + { 0x28F2, 0, 0x080597D4 }, { 0x28F3, 0, 0x08059814 }, { 0x28F4, 0, 0x080599B0 }, { 0x28F5, 0, 0x080599F8 }, + { 0x28F6, 0, 0x08059AC0 }, { 0x28F7, 0, 0x08059AEC }, { 0x28F8, 0, 0x08059B70 }, { 0x28F9, 0, 0x08059BDC }, + { 0x28FA, 0, 0x08059C00 }, { 0x28FB, 0, 0x08059C60 }, { 0x28FC, 0, 0x08059CBC }, { 0x28FD, 0, 0x08059DA0 }, + { 0x28FE, 0, 0x08059DB0 }, { 0x28FF, 0, 0x08059E2C }, { 0x2900, 0, 0x08059EC8 }, { 0x2901, 0, 0x08059EF4 }, + { 0x2902, 0, 0x08059F70 }, { 0x2903, 0, 0x08059FD0 }, { 0x2904, 0, 0x0805A04C }, { 0x2905, 0, 0x0805A24C }, + { 0x2906, 0, 0x0805A4F8 }, { 0x2907, 0, 0x0805A584 }, { 0x2908, 0, 0x0805A5C0 }, { 0x2909, 0, 0x0805A60C }, + { 0x290A, 0, 0x0805A640 }, { 0x290B, 0, 0x0805A6C8 }, { 0x290C, 0, 0x0805A9C0 }, { 0x290D, 0, 0x0805AD84 }, + { 0x290E, 0, 0x0805ADF8 }, { 0x290F, 0, 0x0805AE40 }, { 0x2910, 0, 0x0805AE74 }, { 0x2911, 0, 0x0805AF50 }, + { 0x2912, 0, 0x0805AFCC }, { 0x2913, 0, 0x0805B044 }, { 0x2914, 0, 0x0805B104 }, { 0x2915, 0, 0x0805B1F8 }, + { 0x2916, 0, 0x0805B224 }, { 0x2917, 0, 0x0805B244 }, { 0x2918, 0, 0x0805B2A0 }, { 0x2919, 0, 0x0805B2D0 }, + { 0x291A, 0, 0x0805B314 }, { 0x291B, 0, 0x0805B354 }, { 0x291C, 0, 0x0805B3B0 }, { 0x291D, 0, 0x0805B400 }, + { 0x291E, 0, 0x0805B454 }, { 0x291F, 0, 0x0805B494 }, { 0x2920, 0, 0x0805B4EC }, { 0x2921, 0, 0x0805B538 }, + { 0x2922, 0, 0x0805B58C }, { 0x2923, 0, 0x0805B600 }, { 0x2924, 0, 0x0805B65C }, { 0x2925, 0, 0x0805B738 }, + { 0x2926, 0, 0x0805B770 }, { 0x2927, 0, 0x0805B794 }, { 0x2928, 0, 0x0805B7C8 }, { 0x2929, 0, 0x0805B7EC }, + { 0x292A, 0, 0x0805B814 }, { 0x292B, 0, 0x0805B8C0 }, { 0x292C, 0, 0x0805B994 }, { 0x292D, 0, 0x0805BA44 }, + { 0x292E, 0, 0x0805BB14 }, { 0x292F, 0, 0x0805BB74 }, { 0x2930, 0, 0x0805BBEC }, { 0x2931, 0, 0x0805BC40 }, + { 0x2932, 0, 0x0805BCBC }, { 0x2933, 0, 0x0805BD3C }, { 0x2934, 0, 0x0805BDA4 }, { 0x2935, 0, 0x0805BDE0 }, + { 0x2936, 0, 0x0805BE20 }, { 0x2937, 0, 0x0805BE90 }, { 0x2938, 0, 0x0805BEE8 }, { 0x2939, 0, 0x0805BF5C }, + { 0x293A, 0, 0x0805BF80 }, { 0x293B, 0, 0x0805BFE4 }, { 0x293C, 0, 0x0805C00C }, { 0x293D, 0, 0x0805C094 }, + { 0x293E, 0, 0x0805C0EC }, { 0x293F, 0, 0x0805C168 }, { 0x2940, 0, 0x0805C1EC }, { 0x2941, 0, 0x0805C258 }, + { 0x2942, 0, 0x0805C2DC }, { 0x2943, 0, 0x0805C350 }, { 0x2944, 0, 0x0805C3B8 }, { 0x2945, 0, 0x0805C3F8 }, + { 0x2946, 0, 0x0805C44C }, { 0x2947, 0, 0x0805C470 }, { 0x2948, 0, 0x0805C4F0 }, { 0x2949, 0, 0x0805C518 }, + { 0x294A, 0, 0x0805C534 }, { 0x294B, 0, 0x0805C54C }, { 0x294C, 0, 0x0805C570 }, { 0x294D, 0, 0x0805C5A8 }, + { 0x294E, 0, 0x0805C680 }, { 0x294F, 0, 0x0805C740 }, { 0x2950, 0, 0x0805C794 }, { 0x2951, 0, 0x0805C7F4 }, + { 0x2952, 0, 0x0805C854 }, { 0x2953, 0, 0x0805C914 }, { 0x2954, 0, 0x0805C940 }, { 0x2955, 0, 0x0805C980 }, + { 0x2956, 0, 0x0805C9DC }, { 0x2957, 0, 0x0805CA08 }, { 0x2958, 0, 0x0805CA2C }, { 0x2959, 0, 0x0805CA48 }, + { 0x295A, 0, 0x0805CA6C }, { 0x295B, 0, 0x0805CAB4 }, { 0x295C, 0, 0x0805CB08 }, { 0x295D, 0, 0x0805CB24 }, + { 0x295E, 0, 0x0805CB44 }, { 0x295F, 0, 0x0805CB60 }, { 0x2960, 0, 0x0805CC3C }, { 0x2961, 0, 0x0805CD14 }, + { 0x2962, 0, 0x0805CD3C }, { 0x2968, 0, 0x0805CE60 }, { 0x2969, 0, 0x0805CE78 }, { 0x296A, 0, 0x0805CEF4 }, + { 0x296B, 0, 0x0805CF24 }, { 0x296C, 0, 0x0805CF64 }, { 0x296D, 0, 0x0805CF9C }, { 0x296E, 0, 0x0805CFB4 }, + { 0x296F, 0, 0x0805D018 }, { 0x2970, 0, 0x0805D08C }, { 0x2971, 0, 0x0805D17C }, { 0x2972, 0, 0x0805D1C4 }, + { 0x2973, 0, 0x0805D234 }, { 0x2974, 0, 0x0805D258 }, { 0x2975, 0, 0x0805D2E4 }, { 0x2976, 0, 0x0805D314 }, + { 0x2977, 0, 0x0805D358 }, { 0x2978, 0, 0x0805D3DC }, { 0x2979, 0, 0x0805D414 }, { 0x297A, 0, 0x0805D458 }, + { 0x29CC, 0, 0x0805D4A8 }, { 0x29CD, 0, 0x0805D4C0 }, { 0x29CE, 0, 0x0805D514 }, { 0x29CF, 0, 0x0805D550 }, + { 0x29D0, 0, 0x0805D580 }, { 0x29D1, 0, 0x0805D5AC }, { 0x29D2, 0, 0x0805D5D4 }, { 0x29D3, 0, 0x0805D620 }, + { 0x29D4, 0, 0x0805D724 }, { 0x29D5, 0, 0x0805D824 }, { 0x29D6, 0, 0x0805D864 }, { 0x29D7, 0, 0x0805D8A8 }, + { 0x29D8, 0, 0x0805D9A8 }, { 0x29D9, 0, 0x0805DAA4 }, { 0x29DA, 0, 0x0805DAFC }, { 0x29DB, 0, 0x0805DB3C }, + { 0x29DC, 0, 0x0805DBA0 }, { 0x29DD, 0, 0x0805DBDC }, { 0x29DE, 0, 0x0805DC00 }, { 0x29DF, 0, 0x0805DC68 }, + { 0x29E0, 0, 0x0805DC94 }, { 0x29E1, 0, 0x0805DCC0 }, { 0x29E2, 0, 0x0805DCE8 }, { 0x29E3, 0, 0x0805DE80 }, + { 0x29E4, 0, 0x0805DEC0 }, { 0x29E5, 0, 0x0805DFAC }, { 0x29E6, 0, 0x0805DFC8 }, { 0x29E7, 0, 0x0805E00C }, + { 0x29E8, 0, 0x0805E098 }, { 0x29E9, 0, 0x0805E0DC }, { 0x29EA, 0, 0x0805E1D0 }, { 0x29EB, 0, 0x0805E204 }, + { 0x29EC, 0, 0x0805E234 }, { 0x29ED, 0, 0x0805E258 }, { 0x29EE, 0, 0x0805E2A4 }, { 0x29EF, 0, 0x0805E2D4 }, + { 0x29F0, 0, 0x0805E314 }, { 0x29F1, 0, 0x0805E344 }, { 0x29F2, 0, 0x0805E390 }, { 0x29F3, 0, 0x0805E3EC }, + { 0x29F4, 0, 0x0805E428 }, { 0x29F5, 0, 0x0805E49C }, { 0x29F8, 0, 0x0805E4D8 }, { 0x29F9, 0, 0x0805E530 }, + { 0x29FA, 0, 0x0805E56C }, { 0x29FB, 0, 0x0805E5B8 }, { 0x29FC, 0, 0x0805E608 }, { 0x29FD, 0, 0x0805E654 }, + { 0x29FE, 0, 0x0805E6C8 }, { 0x29FF, 0, 0x0805E700 }, { 0x2A00, 0, 0x0805E7B4 }, { 0x2A01, 0, 0x0805E7D0 }, + { 0x2A02, 0, 0x0805E81C }, { 0x2A30, 0, 0x0805E878 }, { 0x2A31, 0, 0x0805E898 }, { 0x2A32, 0, 0x0805E8DC }, + { 0x2A33, 0, 0x0805E94C }, { 0x2A34, 0, 0x0805EA04 }, { 0x2A35, 0, 0x0805EA90 }, { 0x2A36, 0, 0x0805EB14 }, + { 0x2A37, 0, 0x0805EB4C }, { 0x2A38, 0, 0x0805EBD0 }, { 0x2A39, 0, 0x0805EC28 }, { 0x2A3A, 0, 0x0805EC40 }, + { 0x2A94, 0, 0x0805EC78 }, { 0x2A95, 0, 0x0805ECA4 }, { 0x2A96, 0, 0x0805ECD0 }, { 0x2A97, 0, 0x0805EDEC }, + { 0x2A98, 0, 0x0805EF18 }, { 0x2A99, 0, 0x0805EF50 }, { 0x2A9A, 0, 0x0805EFE0 }, { 0x2A9B, 0, 0x0805F120 }, + { 0x2A9C, 0, 0x0805F254 }, { 0x2A9D, 0, 0x0805F30C }, { 0x2A9E, 0, 0x0805F3CC }, { 0x2A9F, 0, 0x0805F4B4 }, + { 0x2AA0, 0, 0x0805F5D0 }, { 0x2AA1, 0, 0x0805F604 }, { 0x2AA2, 0, 0x0805F63C }, { 0x2AA3, 0, 0x0805F68C }, + { 0x2AA4, 0, 0x0805F6BC }, { 0x2AA5, 0, 0x0805F71C }, { 0x2AA6, 0, 0x0805F760 }, { 0x2AA7, 0, 0x0805F7E4 }, + { 0x2AA8, 0, 0x0805F81C }, { 0x2AA9, 0, 0x0805F834 }, { 0x2AAA, 0, 0x0805F870 }, { 0x2AAB, 0, 0x0805F888 }, + { 0x2AAC, 0, 0x0805F8B0 }, { 0x2AAD, 0, 0x0805F8D4 }, { 0x2AAE, 0, 0x0805F944 }, { 0x2AAF, 0, 0x0805F988 }, + { 0x2AB0, 0, 0x0805F9B0 }, { 0x2AB1, 0, 0x0805FA58 }, { 0x2AB2, 0, 0x0805FA6C }, { 0x2AB3, 0, 0x0805FA80 }, + { 0x2AB4, 0, 0x0805FB0C }, { 0x2AB5, 0, 0x0805FB20 }, { 0x2AB6, 0, 0x0805FB64 }, { 0x2AB7, 0, 0x0805FB80 }, + { 0x2AB8, 0, 0x0805FB9C }, { 0x2AB9, 0, 0x0805FBF4 }, { 0x2ABA, 0, 0x0805FC24 }, { 0x2ABB, 0, 0x0805FC88 }, + { 0x2ABC, 0, 0x0805FCB0 }, { 0x2ABD, 0, 0x0805FCD8 }, { 0x2ABE, 0, 0x0805FDD8 }, { 0x2ABF, 0, 0x0805FDFC }, + { 0x2AC0, 0, 0x0805FF50 }, { 0x2AC1, 0, 0x0805FF7C }, { 0x2AC2, 0, 0x080600D0 }, { 0x2AC3, 0, 0x080600EC }, + { 0x2AC4, 0, 0x080601F8 }, { 0x2AC5, 0, 0x0806022C }, { 0x2AC6, 0, 0x08060250 }, { 0x2AC7, 0, 0x08060260 }, + { 0x2AC8, 0, 0x08060270 }, { 0x2AC9, 0, 0x08060280 }, { 0x2ACA, 0, 0x080602E0 }, { 0x2ACB, 0, 0x0806030C }, + { 0x2ACC, 0, 0x08060340 }, { 0x2ACD, 0, 0x080603A4 }, { 0x2ACE, 0, 0x080603C0 }, { 0x2ACF, 0, 0x0806047C }, + { 0x2AD0, 0, 0x08060494 }, { 0x2AD1, 0, 0x0806053C }, { 0x2AD2, 0, 0x080605B0 }, { 0x2AD3, 0, 0x080605FC }, + { 0x2AD4, 0, 0x0806067C }, { 0x2AD5, 0, 0x080606A0 }, { 0x2AD6, 0, 0x080606BC }, { 0x2AD7, 0, 0x080606EC }, + { 0x2AD8, 0, 0x08060724 }, { 0x2AD9, 0, 0x08060748 }, { 0x2ADA, 0, 0x08060794 }, { 0x2ADB, 0, 0x08060814 }, + { 0x2ADC, 0, 0x08060874 }, { 0x2ADD, 0, 0x080608B4 }, { 0x2ADE, 0, 0x080608D0 }, { 0x2ADF, 0, 0x08060960 }, + { 0x2AE0, 0, 0x08060A00 }, { 0x2AE1, 0, 0x08060AA8 }, { 0x2AE2, 0, 0x08060AD4 }, { 0x2AE3, 0, 0x08060B10 }, + { 0x2AE4, 0, 0x08060B74 }, { 0x2AE5, 0, 0x08060BD0 }, { 0x2AE6, 0, 0x08060C6C }, { 0x2AEA, 0, 0x08060CDC }, + { 0x2AEB, 0, 0x08060D1C }, { 0x2AEC, 0, 0x08060D70 }, { 0x2AED, 0, 0x08060D98 }, { 0x2AEE, 0, 0x08060DB8 }, + { 0x2AF8, 0, 0x08060DC8 }, { 0x2AF9, 0, 0x08060DE4 }, { 0x2AFA, 0, 0x08060EC8 }, { 0x2AFB, 0, 0x08060FC0 }, + { 0x2AFC, 0, 0x080610CC }, { 0x2AFD, 0, 0x080611BC }, { 0x2AFE, 0, 0x080611F4 }, { 0x2AFF, 0, 0x080612EC }, + { 0x2B00, 0, 0x080613FC }, { 0x2B01, 0, 0x08061448 }, { 0x2B02, 0, 0x08061470 }, { 0x2B03, 0, 0x080614D0 }, + { 0x2B04, 0, 0x08061504 }, { 0x2B05, 0, 0x08061578 }, { 0x2B06, 0, 0x080615DC }, { 0x2B07, 0, 0x08061658 }, + { 0x2B08, 0, 0x0806167C }, { 0x2B09, 0, 0x080616C0 }, { 0x2B0A, 0, 0x08061714 }, { 0x2B0B, 0, 0x08061750 }, + { 0x2B0C, 0, 0x080617A8 }, { 0x2B0D, 0, 0x080617D8 }, { 0x2B0E, 0, 0x08061810 }, { 0x2B0F, 0, 0x08061890 }, + { 0x2B10, 0, 0x080619A0 }, { 0x2B11, 0, 0x08061AD8 }, { 0x2B12, 0, 0x08061B44 }, { 0x2B13, 0, 0x08061BA0 }, + { 0x2B14, 0, 0x08061C0C }, { 0x2B15, 0, 0x08061C44 }, { 0x2B16, 0, 0x08061CE0 }, { 0x2B17, 0, 0x08061D4C }, + { 0x2B18, 0, 0x08061D70 }, { 0x2B19, 0, 0x08061DD4 }, { 0x2B1A, 0, 0x08061EB4 }, { 0x2B1B, 0, 0x08061F10 }, + { 0x2B1C, 0, 0x08061F88 }, { 0x2B1D, 0, 0x08061FC4 }, { 0x2B1E, 0, 0x08061FEC }, { 0x2B1F, 0, 0x08062024 }, + { 0x2B20, 0, 0x0806209C }, { 0x2B21, 0, 0x0806212C }, { 0x2B22, 0, 0x08062164 }, { 0x2B23, 0, 0x080621A8 }, + { 0x2B24, 0, 0x0806229C }, { 0x2B25, 0, 0x080622D8 }, { 0x2B26, 0, 0x080622F8 }, { 0x2B27, 0, 0x08062350 }, + { 0x2B28, 0, 0x080623A0 }, { 0x2B29, 0, 0x080623D0 }, { 0x2B2A, 0, 0x08062428 }, { 0x2B2B, 0, 0x08062478 }, + { 0x2B2C, 0, 0x080624AC }, { 0x2B2D, 0, 0x08062500 }, { 0x2B2E, 0, 0x08062550 }, { 0x2B2F, 0, 0x08062580 }, + { 0x2B30, 0, 0x080625D4 }, { 0x2B31, 0, 0x08062624 }, { 0x2B32, 0, 0x08062650 }, { 0x2B33, 0, 0x08062670 }, + { 0x2B34, 0, 0x080626B0 }, { 0x2B35, 0, 0x080626DC }, { 0x2B36, 0, 0x080626FC }, { 0x2B37, 0, 0x0806273C }, + { 0x2B38, 0, 0x080627D8 }, { 0x2B39, 0, 0x08062890 }, { 0x2B3A, 0, 0x08062910 }, { 0x2B3B, 0, 0x08062968 }, + { 0x2B3C, 0, 0x080629A4 }, { 0x2B3D, 0, 0x080629E0 }, { 0x2B3E, 0, 0x08062A90 }, { 0x2B3F, 0, 0x08062AD8 }, + { 0x2B40, 0, 0x08062B34 }, { 0x2B5C, 0, 0x08062B84 }, { 0x2B5D, 0, 0x08062C3C }, { 0x2B5E, 0, 0x08062C68 }, + { 0x2B5F, 0, 0x08062C94 }, { 0x2B60, 0, 0x08062CE8 }, { 0x2B61, 0, 0x08062D8C }, { 0x2B62, 0, 0x08062E34 }, + { 0x2B63, 0, 0x08062E84 }, { 0x2B64, 0, 0x08062F18 }, { 0x2B65, 0, 0x08062F50 }, { 0x2B66, 0, 0x08062F98 }, + { 0x2B67, 0, 0x08062FE0 }, { 0x32C8, 0, 0x08063054 }, { 0x32C9, 0, 0x080630D8 }, { 0x32CA, 0, 0x08063120 }, + { 0x32CB, 0, 0x08063184 }, { 0x32CC, 0, 0x080631E0 }, { 0x32CD, 0, 0x08063210 }, { 0x32CE, 0, 0x0806326C }, + { 0x32CF, 0, 0x08063294 }, { 0x32D0, 0, 0x080632B4 }, { 0x32D1, 0, 0x08063300 }, { 0x32D2, 0, 0x08063338 }, + { 0x32D3, 0, 0x08063384 }, { 0x32D4, 0, 0x080633B4 }, { 0x332C, 0, 0x080633E8 }, { 0x332D, 0, 0x08063408 }, + { 0x332E, 0, 0x080634FC }, { 0x332F, 0, 0x0806356C }, { 0x3330, 0, 0x08063594 }, { 0x3331, 0, 0x080635AC }, + { 0x3332, 0, 0x080635D0 }, { 0x3333, 0, 0x08063618 }, { 0x3334, 0, 0x0806369C }, { 0x3335, 0, 0x08063714 }, + { 0x3336, 0, 0x08063734 }, { 0x3337, 0, 0x08063788 }, { 0x3338, 0, 0x080637AC }, { 0x3339, 0, 0x080637CC }, + { 0x333A, 0, 0x08063838 }, { 0x333B, 0, 0x08063868 }, { 0x333C, 0, 0x08063898 }, { 0x333D, 0, 0x08063948 }, + { 0x333E, 0, 0x08063988 }, { 0x333F, 0, 0x080639AC }, { 0x3340, 0, 0x08063A58 }, { 0x3341, 0, 0x08063AB0 }, + { 0x3342, 0, 0x08063B24 }, { 0x3343, 0, 0x08063BBC }, { 0x3344, 0, 0x08063C28 }, { 0x3345, 0, 0x08063CF0 }, + { 0x3346, 0, 0x08063D24 }, { 0x3347, 0, 0x08063D5C }, { 0x3348, 0, 0x08063D8C }, { 0x3349, 0, 0x08063DEC }, + { 0x334A, 0, 0x08063E70 }, { 0x334B, 0, 0x08063EA8 }, { 0x334C, 0, 0x08063EC4 }, { 0x334D, 0, 0x08063FB4 }, + { 0x334E, 0, 0x08063FDC }, { 0x334F, 0, 0x08064038 }, { 0x3350, 0, 0x08064058 }, { 0x3351, 0, 0x0806408C }, + { 0x3352, 0, 0x080640B0 }, { 0x3353, 0, 0x080640E0 }, { 0x3354, 0, 0x08064168 }, { 0x3355, 0, 0x080641B4 }, + { 0x3356, 0, 0x080641EC }, { 0x3357, 0, 0x08064218 }, { 0x3358, 0, 0x08064230 }, { 0x3359, 0, 0x08064264 }, + { 0x335A, 0, 0x08064298 }, { 0x335B, 0, 0x080642F0 }, { 0x335C, 0, 0x08064354 }, { 0x335D, 0, 0x0806437C }, + { 0x335E, 0, 0x080643B4 }, { 0x335F, 0, 0x080643E4 }, { 0x3360, 0, 0x0806444C }, { 0x3361, 0, 0x08064498 }, + { 0x3362, 0, 0x080644EC }, { 0x3363, 0, 0x0806453C }, { 0x3364, 0, 0x08064564 }, { 0x3365, 0, 0x08064654 }, + { 0x3366, 0, 0x08064718 }, { 0x3367, 0, 0x080647E4 }, { 0x3368, 0, 0x08064860 }, { 0x3369, 0, 0x080648B8 }, + { 0x336A, 0, 0x08064988 }, { 0x336B, 0, 0x080649F4 }, { 0x336C, 0, 0x08064A44 }, { 0x336D, 0, 0x08064AA0 }, + { 0x336E, 0, 0x08064AE8 }, { 0x336F, 0, 0x08064B10 }, { 0x3370, 0, 0x08064B64 }, { 0x3371, 0, 0x08064BBC }, + { 0x3390, 0, 0x08064BEC }, { 0x3391, 0, 0x08064C24 }, { 0x3392, 0, 0x08064CE0 }, { 0x3393, 0, 0x08064D4C }, + { 0x3394, 0, 0x08064DA0 }, { 0x3395, 0, 0x08064E04 }, { 0x3396, 0, 0x08064F10 }, { 0x3397, 0, 0x08064F84 }, + { 0x3398, 0, 0x08064FBC }, { 0x3399, 0, 0x08065070 }, { 0x339A, 0, 0x080650DC }, { 0x339B, 0, 0x08065144 }, + { 0x339C, 0, 0x0806516C }, { 0x339D, 0, 0x0806519C }, { 0x339E, 0, 0x080651D4 }, { 0x339F, 0, 0x080651F0 }, + { 0x33A0, 0, 0x0806524C }, { 0x33A1, 0, 0x08065358 }, { 0x33A2, 0, 0x080653CC }, { 0x33A3, 0, 0x08065408 }, + { 0x33A4, 0, 0x08065438 }, { 0x33A5, 0, 0x08065470 }, { 0x33A6, 0, 0x080654CC }, { 0x33A7, 0, 0x08065510 }, + { 0x33A8, 0, 0x0806555C }, { 0x33A9, 0, 0x080655A0 }, { 0x33AA, 0, 0x080655C0 }, { 0x33AB, 0, 0x08065600 }, + { 0x33AC, 0, 0x08065658 }, { 0x33AD, 0, 0x08065678 }, { 0x33AE, 0, 0x08065710 }, { 0x33AF, 0, 0x080657A8 }, + { 0x33B0, 0, 0x080657D0 }, { 0x33B1, 0, 0x080657E8 }, { 0x33B2, 0, 0x08065860 }, { 0x33B3, 0, 0x080658E4 }, + { 0x33B4, 0, 0x08065930 }, { 0x33B5, 0, 0x0806597C }, { 0x33B6, 0, 0x080659DC }, { 0x33B7, 0, 0x08065A28 }, + { 0x33B8, 0, 0x08065ABC }, { 0x33B9, 0, 0x08065AE0 }, { 0x33BA, 0, 0x08065B08 }, { 0x33BB, 0, 0x08065B7C }, + { 0x33BC, 0, 0x08065BD8 }, { 0x33BD, 0, 0x08065C5C }, { 0x33BE, 0, 0x08065C88 }, { 0x33BF, 0, 0x08065CCC }, + { 0x33C0, 0, 0x08065D30 }, { 0x33C1, 0, 0x08065DD4 }, { 0x33C2, 0, 0x08065E24 }, { 0x33C3, 0, 0x08065E84 }, + { 0x33C4, 0, 0x08065F4C }, { 0x33C5, 0, 0x08066024 }, { 0x33C6, 0, 0x08066120 }, { 0x33C7, 0, 0x08066144 }, + { 0x33C8, 0, 0x08066200 }, { 0x33C9, 0, 0x08066268 }, { 0x33CA, 0, 0x0806629C }, { 0x33CB, 0, 0x080662D0 }, + { 0x33CC, 0, 0x0806630C }, { 0x33CD, 0, 0x08066324 }, { 0x33CE, 0, 0x0806635C }, { 0x33CF, 0, 0x0806637C }, + { 0x33D0, 0, 0x080663AC }, { 0x33D1, 0, 0x08066464 }, { 0x33D2, 0, 0x08066578 }, { 0x33D3, 0, 0x080665F4 }, + { 0x33D4, 0, 0x0806665C }, { 0x33D5, 0, 0x080666D0 }, { 0x33D6, 0, 0x08066708 }, { 0x33D7, 0, 0x08066788 }, + { 0x33D8, 0, 0x080667D4 }, { 0x33D9, 0, 0x08066834 }, { 0x33F4, 0, 0x080668FC }, { 0x33F5, 0, 0x08066934 }, + { 0x33F6, 0, 0x080669DC }, { 0x33F7, 0, 0x08066A3C }, { 0x33F9, 0, 0x08066B00 }, { 0x3458, 0, 0x08066B40 }, + { 0x3459, 0, 0x08066B60 }, { 0x345A, 0, 0x08066BC0 }, { 0x345B, 0, 0x08066C10 }, { 0x345C, 0, 0x08066C7C }, + { 0x345D, 0, 0x08066CB8 }, { 0x345E, 0, 0x08066D20 }, { 0x345F, 0, 0x08066D90 }, { 0x3460, 0, 0x08066E58 }, + { 0x3461, 0, 0x08066E9C }, { 0x3462, 0, 0x08066EE8 }, { 0x3463, 0, 0x08066F38 }, { 0x3464, 0, 0x08066F64 }, + { 0x3465, 0, 0x08066FF8 }, { 0x3466, 0, 0x080670A4 }, { 0x3467, 0, 0x080670F0 }, { 0x3468, 0, 0x08067144 }, + { 0x3469, 0, 0x08067174 }, { 0x346A, 0, 0x080671E8 }, { 0x346B, 0, 0x08067208 }, { 0x346C, 0, 0x08067224 }, + { 0x346D, 0, 0x0806728C }, { 0x346E, 0, 0x0806731C }, { 0x346F, 0, 0x0806739C }, { 0x3470, 0, 0x08067400 }, + { 0x3471, 0, 0x0806743C }, { 0x3472, 0, 0x0806746C }, { 0x3473, 0, 0x080674B0 }, { 0x3474, 0, 0x08067520 }, + { 0x3475, 0, 0x08067594 }, { 0x3476, 0, 0x080675B8 }, { 0x3477, 0, 0x080675E0 }, { 0x3478, 0, 0x08067618 }, + { 0x3479, 0, 0x08067648 }, { 0x347A, 0, 0x08067688 }, { 0x347B, 0, 0x080676B0 }, { 0x347C, 0, 0x080676F0 }, + { 0x347D, 0, 0x08067760 }, { 0x347E, 0, 0x080677A4 }, { 0x347F, 0, 0x080677F4 }, { 0x3480, 0, 0x0806782C }, + { 0x3481, 0, 0x080678A0 }, { 0x3482, 0, 0x080678C8 }, { 0x3483, 0, 0x080678F8 }, { 0x3484, 0, 0x08067934 }, + { 0x3485, 0, 0x08067990 }, { 0x3486, 0, 0x080679E0 }, { 0x3487, 0, 0x08067A18 }, { 0x3488, 0, 0x08067A68 }, + { 0x3489, 0, 0x08067AE8 }, { 0x348A, 0, 0x08067B54 }, { 0x348B, 0, 0x08067BBC }, { 0x348C, 0, 0x08067C0C }, + { 0x348D, 0, 0x08067C5C }, { 0x348E, 0, 0x08067CB8 }, { 0x348F, 0, 0x08067D6C }, { 0x3490, 0, 0x08067DE0 }, + { 0x3491, 0, 0x08067E2C }, { 0x3492, 0, 0x08067E80 }, { 0x3493, 0, 0x08067EDC }, { 0x3494, 0, 0x08067F20 }, + { 0x3495, 0, 0x08067F44 }, { 0x3496, 0, 0x08067F64 }, { 0x3497, 0, 0x08067FEC }, { 0x3498, 0, 0x0806803C }, + { 0x3499, 0, 0x08068094 }, { 0x349A, 0, 0x080680C8 }, { 0x349B, 0, 0x080680FC }, { 0x349C, 0, 0x0806812C }, + { 0x349D, 0, 0x08068158 }, { 0x349E, 0, 0x08068180 }, { 0x349F, 0, 0x080681C0 }, { 0x34A0, 0, 0x08068224 }, + { 0x34A1, 0, 0x08068278 }, { 0x34A2, 0, 0x080682C0 }, { 0x34A3, 0, 0x0806830C }, { 0x34A4, 0, 0x08068394 }, + { 0x34A5, 0, 0x080683F4 }, { 0x34A6, 0, 0x08068430 }, { 0x34A7, 0, 0x08068498 }, { 0x34A8, 0, 0x080684FC }, + { 0x34A9, 0, 0x08068544 }, { 0x34AA, 0, 0x08068564 }, { 0x34AB, 0, 0x08068598 }, { 0x34AC, 0, 0x0806860C }, + { 0x34AD, 0, 0x08068640 }, { 0x34AE, 0, 0x080686F4 }, { 0x34AF, 0, 0x08068768 }, { 0x34B0, 0, 0x08068780 }, + { 0x34B1, 0, 0x080687E0 }, { 0x34B2, 0, 0x080687F8 }, { 0x34B3, 0, 0x08068860 }, { 0x3520, 0, 0x080688F4 }, + { 0x3521, 0, 0x08068958 }, { 0x3522, 0, 0x080689C8 }, { 0x3523, 0, 0x08068A38 }, { 0x3524, 0, 0x08068A88 }, + { 0x3525, 0, 0x08068B04 }, { 0x3526, 0, 0x08068B30 }, { 0x3527, 0, 0x08068B7C }, { 0x3528, 0, 0x08068CA0 }, + { 0x3529, 0, 0x08068CF4 }, { 0x352A, 0, 0x08068D1C }, { 0x352B, 0, 0x08068DB0 }, { 0x352C, 0, 0x08068E28 }, + { 0x352D, 0, 0x08068E78 }, { 0x352E, 0, 0x08068F14 }, { 0x352F, 0, 0x08068F78 }, { 0x3530, 0, 0x08068FA0 }, + { 0x3531, 0, 0x08069020 }, { 0x3532, 0, 0x080690CC }, { 0x3533, 0, 0x0806913C }, { 0x3534, 0, 0x080691B0 }, + { 0x3535, 0, 0x08069224 }, { 0x3536, 0, 0x0806923C }, { 0x3537, 0, 0x08069284 }, { 0x3538, 0, 0x080692D8 }, + { 0x3539, 0, 0x08069314 }, { 0x353A, 0, 0x08069358 }, { 0x353B, 0, 0x08069390 }, { 0x353C, 0, 0x080693E4 }, + { 0x353D, 0, 0x08069434 }, { 0x353E, 0, 0x08069490 }, { 0x353F, 0, 0x080694C4 }, { 0x3540, 0, 0x08069524 }, + { 0x3541, 0, 0x0806957C }, { 0x3542, 0, 0x080695C0 }, { 0x3543, 0, 0x08069608 }, { 0x3544, 0, 0x08069668 }, + { 0x3545, 0, 0x080696DC }, { 0x3546, 0, 0x08069734 }, { 0x3548, 0, 0x08069774 }, { 0x3549, 0, 0x08069814 }, + { 0x354A, 0, 0x080698A0 }, { 0x354B, 0, 0x08069930 }, { 0x354C, 0, 0x08069998 }, { 0xFFFC, 0, 0x080699C8 }, + { 0xFFFD, 0, 0x080699D4 }, { 0xFFFF, 0, NULL }, +}; + +MessageTableEntry D_801CFB08[46] = { + { 0x4E20, 0xB0, 0x07000000 }, { 0x4E21, 0xB0, 0x0700003C }, { 0x4E22, 0xB0, 0x07000094 }, + { 0x4E23, 0xB0, 0x070000F0 }, { 0x4E24, 0xB0, 0x07000140 }, { 0x4E25, 0xB0, 0x0700019C }, + { 0x4E26, 0xB0, 0x070001D8 }, { 0x4E27, 0xB0, 0x07000248 }, { 0x4E28, 0xB0, 0x0700027C }, + { 0x4E29, 0xB0, 0x070002E0 }, { 0x4E2A, 0xB0, 0x0700033C }, { 0x4E2B, 0xB0, 0x07000384 }, + { 0x4E2C, 0xB0, 0x070003C8 }, { 0x4E2D, 0xB0, 0x0700040C }, { 0x4E2E, 0xB0, 0x07000450 }, + { 0x4E2F, 0xB0, 0x070004A8 }, { 0x4E30, 0xB0, 0x07000504 }, { 0x4E31, 0xB0, 0x07000564 }, + { 0x4E32, 0xB0, 0x070005CC }, { 0x4E33, 0xB0, 0x07000610 }, { 0x4E34, 0xB0, 0x07000654 }, + { 0x4E35, 0xB0, 0x07000698 }, { 0x4E36, 0xB0, 0x070006F8 }, { 0x4E37, 0xB0, 0x07000750 }, + { 0x4E38, 0xB0, 0x07000798 }, { 0x4E39, 0xB0, 0x0700081C }, { 0x4E3A, 0xB0, 0x07000888 }, + { 0x4E3B, 0xB0, 0x07000924 }, { 0x4E3C, 0xB0, 0x070009B4 }, { 0x4E3D, 0xB0, 0x070009E8 }, + { 0x4E3E, 0xB0, 0x07000A78 }, { 0x4E3F, 0xB0, 0x07000AB0 }, { 0x4E40, 0xB0, 0x07000B2C }, + { 0x4E41, 0xB0, 0x07000B54 }, { 0x4E42, 0xB0, 0x07000B7C }, { 0x4E43, 0xB0, 0x07000BA4 }, + { 0x4E44, 0xB0, 0x07000BCC }, { 0x4E45, 0xB0, 0x07000BF4 }, { 0x4E46, 0xB0, 0x07000C1C }, + { 0x4E47, 0xB0, 0x07000C44 }, { 0x4E48, 0xB0, 0x07000C6C }, { 0x4E49, 0xB0, 0x07000CEC }, + { 0x4E4A, 0xB0, 0x07000D5C }, { 0x4E4B, 0xB0, 0x07000DC8 }, { 0x4E4C, 0xB0, 0x07000E54 }, + { 0xFFFF, 0, NULL }, +}; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 4fcd31c8b..956bda896 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1709,7 +1709,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { if (CHECK_EVENTINF(EVENTINF_41)) { // Related to swamp boat (non-minigame)? for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { - if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != 0)) { + if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != MSGMODE_NONE)) { if (gSaveContext.buttonStatus[i] == BTN_ENABLED) { restoreHudVisibility = true; } @@ -3657,7 +3657,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME_LENS: // Slowly consume magic while Lens of Truth is active if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -3700,7 +3700,7 @@ void Magic_Update(PlayState* play) { // fallthrough case MAGIC_STATE_CONSUME_GORON_ZORA: if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == 0) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; @@ -3722,7 +3722,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME_GIANTS_MASK: if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; @@ -3932,7 +3932,7 @@ void Interface_DrawItemButtons(PlayState* play) { if ((gSaveContext.hudVisibility == HUD_VISIBILITY_NONE) || (gSaveContext.hudVisibility == HUD_VISIBILITY_NONE_ALT) || (gSaveContext.hudVisibility == HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE) || - (msgCtx->msgMode != 0)) { + (msgCtx->msgMode != MSGMODE_NONE)) { temp = 0; } else if (player->stateFlags1 & PLAYER_STATE1_200000) { temp = 70; @@ -4400,8 +4400,8 @@ void Interface_DrawClock(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((R_TIME_SPEED != 0) && - ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || - (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + ((msgCtx->msgMode == MSGMODE_NONE) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || + (msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && !FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) { /** @@ -5440,31 +5440,31 @@ void Interface_StartMoonCrash(PlayState* play) { play->transitionType = TRANS_TYPE_FADE_WHITE; } -void Interface_GetTimerDigits(u64 timer, s16* timerArr) { - u64 time = timer; +void Interface_GetTimerDigits(OSTime time, s16* timerArr) { + OSTime t = time; // 6 minutes - timerArr[0] = time / SECONDS_TO_TIMER(360); - time -= timerArr[0] * SECONDS_TO_TIMER(360); + timerArr[0] = t / SECONDS_TO_TIMER(360); + t -= timerArr[0] * SECONDS_TO_TIMER(360); // minutes - timerArr[1] = time / SECONDS_TO_TIMER(60); - time -= timerArr[1] * SECONDS_TO_TIMER(60); + timerArr[1] = t / SECONDS_TO_TIMER(60); + t -= timerArr[1] * SECONDS_TO_TIMER(60); // 10 seconds - timerArr[3] = time / SECONDS_TO_TIMER(10); - time -= timerArr[3] * SECONDS_TO_TIMER(10); + timerArr[3] = t / SECONDS_TO_TIMER(10); + t -= timerArr[3] * SECONDS_TO_TIMER(10); // seconds - timerArr[4] = time / SECONDS_TO_TIMER(1); - time -= timerArr[4] * SECONDS_TO_TIMER(1); + timerArr[4] = t / SECONDS_TO_TIMER(1); + t -= timerArr[4] * SECONDS_TO_TIMER(1); // 100 milliseconds - timerArr[6] = time / SECONDS_TO_TIMER_PRECISE(0, 10); - time -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + timerArr[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10); // 10 milliseconds - timerArr[7] = time; + timerArr[7] = t; } #define IS_POSTMAN_TIMER_DRAWN \ @@ -5500,8 +5500,8 @@ void Interface_DrawTimers(PlayState* play) { // Not satisfying any of these conditions will pause the timer if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && - ((msgCtx->msgMode == 0) || - ((msgCtx->msgMode != 0) && (msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) && + ((msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId >= 0x1BB2) && + (msgCtx->currentTextId <= 0x1BB6))) && !(player->stateFlags1 & PLAYER_STATE1_200) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -5950,7 +5950,7 @@ void Interface_UpdateBottleTimers(PlayState* play) { // Not satisfying any of these conditions will pause the bottle timer if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && - ((msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + ((msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -6870,7 +6870,7 @@ void Interface_Update(PlayState* play) { interfaceCtx->aButtonRoll = -15700.0f; interfaceCtx->aButtonState = A_BTN_STATE_2; - if ((msgCtx->msgMode != 0) && (msgCtx->textboxYTarget == 0x26)) { + if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->textboxYTarget == 38)) { R_A_BTN_Y_OFFSET = -14; } else { R_A_BTN_Y_OFFSET = 0; @@ -7018,8 +7018,9 @@ void Interface_Update(PlayState* play) { // Update Sun Song if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) { // exit out of ocarina mode after suns song finishes playing - if ((msgCtx->ocarinaAction != 0x39) && (gSaveContext.sunsSongState == SUNSSONG_START)) { - play->msgCtx.ocarinaMode = 4; + if ((msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) && + (gSaveContext.sunsSongState == SUNSSONG_START)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } // handle suns song in areas where time moves @@ -7039,7 +7040,7 @@ void Interface_Update(PlayState* play) { // Daytime has been reached. End suns song effect gSaveContext.sunsSongState = SUNSSONG_INACTIVE; R_TIME_SPEED = sPrevTimeSpeed; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } else { // Daytime @@ -7047,7 +7048,7 @@ void Interface_Update(PlayState* play) { // Nighttime has been reached. End suns song effect gSaveContext.sunsSongState = SUNSSONG_INACTIVE; R_TIME_SPEED = sPrevTimeSpeed; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } } else { diff --git a/src/code/z_play.c b/src/code/z_play.c index 41b921125..9a5e6541d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1072,7 +1072,7 @@ void Play_Update(PlayState* this) { this->pauseCtx.bombersNotebookOpen = false; sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; this->msgCtx.msgLength = 0; - this->msgCtx.msgMode = 0; + this->msgCtx.msgMode = MSGMODE_NONE; this->msgCtx.currentTextId = 0; this->msgCtx.stateTimer = 0; Audio_PlaySfx(NA_SE_SY_CANCEL); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c5fe03475..059596909 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -638,7 +638,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { } gSaveContext.save.saveInfo.playerData.rupees = 0; - gSaveContext.save.saveInfo.unk_F41 = 0; + gSaveContext.save.saveInfo.scarecrowSpawnSongSet = false; gSaveContext.powderKegTimer = 0; gSaveContext.unk_1014 = 0; gSaveContext.jinxTimer = 0; @@ -1304,7 +1304,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible; } - if (gSaveContext.save.saveInfo.unk_F41) { + if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.saveInfo.scarecrowSpawnSong, sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong)); @@ -1649,7 +1649,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { } else { if (phi_s2) { gSaveContext.options.optionId = 0xA51D; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; @@ -1657,7 +1657,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { Lib_MemCpy(&gSaveContext.options, sramCtx->saveBuf, sizeof(SaveOptions)); if (gSaveContext.options.optionId != 0xA51D) { gSaveContext.options.optionId = 0xA51D; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; @@ -1671,7 +1671,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { gSaveContext.flashSaveAvailable = D_801F6AF2; } - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s") @@ -1853,8 +1853,7 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { */ void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) { if (gSaveContext.flashSaveAvailable) { - // TODO: macros for languages - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions)); } } diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 1d8ca14b0..83edc9548 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -204,7 +204,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) { void ArrowFire_Update(Actor* thisx, PlayState* play) { ArrowFire* this = (ArrowFire*)thisx; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index b3df6c265..8a908a0e3 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -176,7 +176,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) { void ArrowIce_Update(Actor* thisx, PlayState* play) { ArrowIce* this = THIS; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } else { diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index 8b4f8cad9..902443a95 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -172,7 +172,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) { void ArrowLight_Update(Actor* thisx, PlayState* play) { ArrowLight* this = THIS; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } 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 764b00224..d224694ec 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -176,7 +176,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) { D_80AAAAB4 = false; } - if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { if ((player2->actor.world.pos.x > -40.0f) && (player2->actor.world.pos.x < 40.0f) && 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 0948b7afc..250abea20 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -266,7 +266,7 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) { } else { sSuccessSoundAlreadyPlayed = false; } - if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE)) { if ((player2->actor.world.pos.x > -5780.0f) && (player2->actor.world.pos.x < -5385.0f)) { if ((player2->actor.world.pos.z > 1120.0f) && (player2->actor.world.pos.z < 2100.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 9b1d0f048..fb45200bc 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1867,7 +1867,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { // This code is responsible for making in-game time pass while using the telescope in the Astral Observatory. // Skull Kid is always loaded in the scene, even if he isn't visible, hence why time always passes. - if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && + if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == CS_STATE_IDLE)) { 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 0d6ee9380..c7bfb6234 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -457,7 +457,7 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C &= ~0x1; this->unk_32C |= 0x40; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -546,7 +546,7 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -650,7 +650,7 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -739,7 +739,7 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -838,7 +838,7 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -922,7 +922,7 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x161A; this->actionFunc = func_80BEF360; @@ -1011,7 +1011,7 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x1629; this->actionFunc = func_80BEF360; @@ -1095,7 +1095,7 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -1335,7 +1335,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->unk_32C & 1) { this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0; this->actionFunc = func_80BEEE10; @@ -1343,7 +1343,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->unk_32C &= ~0x20; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_32C &= ~0x4; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->animIndex = ENAKINDONUTS_ANIM_8; this->unk_33C = 0; @@ -1378,7 +1378,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { void func_80BEF18C(EnAkindonuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0; this->actionFunc = func_80BEEE10; @@ -1405,7 +1405,7 @@ void func_80BEF20C(EnAkindonuts* this, PlayState* play) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_32C & 1) { this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BEF360; } else { 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 eab1c83ce..eea47caa5 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 @@ -449,7 +449,7 @@ void EnAob01_BeforeRace_HandleConversation(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; Rupees_ChangeBy(-this->rupeesBet); func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnAob01_BeforeRace_StartRace; return; @@ -518,7 +518,7 @@ void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* pla } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->textId = 0; this->actionFunc = EnAob01_BeforeRace_Idle; @@ -672,7 +672,7 @@ void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_LAUGH; if (this->stateFlags & ENAOB01_FLAG_CONVERSATION_OVER) { this->stateFlags &= ~ENAOB01_FLAG_CONVERSATION_OVER; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnAob01_BeforeRace_Idle; } else { @@ -898,7 +898,7 @@ void EnAob01_AfterRace_GiveReward(EnAob01* this, PlayState* play) { if (EnAob01_ProcessIdleAnim(this)) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { this->rupeesBet = 0; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } 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 8b98808e1..17c9dbc50 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -707,7 +707,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { if (SubS_StartCutscene(&brother->actor, brother->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_NORMAL)) { brother->unk_374 |= 0x8000; - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; ret = 0; } } else if (Message_ShouldAdvance(play)) { @@ -832,7 +832,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10DB: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->unk_2FA = 1; ret = 0; } else { @@ -945,7 +945,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10EB: if (play->msgCtx.choiceIndex == 0) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; Audio_PlaySfx_MessageDecide(); switch (this->unk_2FA) { case 4: @@ -1497,7 +1497,7 @@ void func_80A97A28(EnAz* this, PlayState* play) { void func_80A97A40(EnAz* this, PlayState* play) { if (SubS_StartCutscene(&this->actor, 0, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80A97A9C(this, play); } @@ -1525,7 +1525,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { case 0x10D8: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; func_800FD750(NA_BGM_TIMED_MINI_GAME); func_80A94AB8(this, play, 1); func_80A979DC(this, play); 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 bf93ad365..43cbd2969 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -596,7 +596,7 @@ void EnBaba_FollowSchedule_Talk(EnBaba* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnBaba_FollowSchedule; } @@ -610,7 +610,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { @@ -629,7 +629,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { } } else if (this->stateFlags & BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnBaba_GiveBlastMask; } else { 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 81e94d78f..a9f290371 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 @@ -101,7 +101,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_809CD028(this, play); } else { 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 7e277f4cf..061081bc1 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 @@ -393,7 +393,7 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && - ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { + ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { play->nextEntrance = Entrance_CreateFromSpawn(6); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; @@ -511,7 +511,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { if (this->unk_2C2 == 0) { if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && - ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { + ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { this->unk_2C2 = 1; func_809C4B6C(this); if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { 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 f96e43cd5..5a234c05e 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -268,7 +268,7 @@ void EnCow_Talk(EnCow* this, PlayState* play) { } void EnCow_Idle(EnCow* this, PlayState* play) { - if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_NONE) || (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) { if (gHorsePlayedEponasSong) { if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) { this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK; diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 6a936636c..d9147aa26 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -429,7 +429,7 @@ void func_80B3EE8C(EnDai* this, PlayState* play) { void func_80B3EEDC(EnDai* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->actionFunc = func_80B3EE8C; 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 500259dc6..d32f2f3f4 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -372,7 +372,7 @@ void func_80A71C3C(EnDno* this, PlayState* play) { } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80A71E54(this, play); } else if (this->actor.xzDistToPlayer < 60.0f) { @@ -482,7 +482,7 @@ void func_80A71F18(EnDno* this, PlayState* play) { if (Message_ShouldAdvance(play)) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IMPLORE_END, &this->animIndex); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; } break; @@ -688,7 +688,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0x800: case 0x801: if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->unk_452 = 1; this->unk_454 = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_OPEN_PARASOL, 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 08f97aa93..b2a9b75d8 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -5605,7 +5605,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Audio_PlaySfx_AtPos(&sStreamSoundProjectedPos, NA_SE_EV_WATER_WALL - SFX_FLAG); - if (gSaveContext.options.language == 0) { // Added in MM + if (gSaveContext.options.language == LANGUAGE_JPN) { // Added in MM gSaveContext.minigameScore = D_8090CCF8; } else { gSaveContext.minigameScore = (SQ((f32)D_8090CCF8) * 0.0036f) + 0.5f; 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 917624a64..ec8c09b71 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -410,7 +410,7 @@ void EnFsn_EndInteraction(EnFsn* this, PlayState* play) { this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -995,7 +995,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); @@ -1204,7 +1204,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { item = this->items[this->cursorIndex]; item->buyFanfareFunc(play, item); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -1246,7 +1246,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1327,7 +1327,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1378,7 +1378,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1433,12 +1433,12 @@ void EnFsn_ConverseBackroom(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->flags & ENFSN_END_CONVERSATION) { this->flags &= ~ENFSN_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnFsn_IdleBackroom; } else if (this->flags & ENFSN_GIVE_ITEM) { this->flags &= ~ENFSN_GIVE_ITEM; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnFsn_GiveItem; } else { 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 36e18e350..b9ef1fe88 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -379,8 +379,8 @@ void func_80B0FE7C(PlayState* play) { } void func_80B0FEBC(EnGb2* this, PlayState* play) { - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { - play->msgCtx.ocarinaMode = 4; + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; SET_EVENTINF(EVENTINF_47); this->unk_26E = 0x14D1; this->unk_288 = 10; @@ -400,7 +400,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26E = 0x14D1; this->unk_288 = 30; @@ -443,7 +443,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { case 0: Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; @@ -568,7 +568,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26C &= ~2; if (this->unk_26E == 0x14DD) { @@ -598,7 +598,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { } else { Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; @@ -771,7 +771,7 @@ void func_80B10E98(EnGb2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { this->unk_26C &= ~2; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); @@ -814,7 +814,7 @@ void func_80B11048(EnGb2* this, PlayState* play) { void func_80B110F8(EnGb2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26C &= ~2; this->actionFunc = func_80B10A48; 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 9183856ab..727b2ff2a 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -598,7 +598,7 @@ void func_80BB26EC(EnGeg* this, PlayState* play) { case 0xD61: CutsceneManager_Stop(this->csId); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; this->actionFunc = func_80BB221C; @@ -617,14 +617,14 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (this->unk_496) { case 0xD63: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB221C; break; case 0xD69: this->nextCsId = this->csIdList[6]; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB2520; break; @@ -632,7 +632,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { case 0xD6D: case 0xD6F: case 0xD8A: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB31B8; break; @@ -640,7 +640,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { case 0xD72: case 0xD75: case 0xD8B: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; this->nextCsId = this->csIdList[7]; @@ -667,7 +667,7 @@ void func_80BB2944(EnGeg* this, PlayState* play) { } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_496 == 0xD67) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->nextCsId = this->csIdList[4]; this->actionFunc = func_80BB2520; @@ -684,7 +684,7 @@ void func_80BB2A54(EnGeg* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->unk_230 &= ~0x10; this->unk_244 = 65; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB347C; } else { 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 1d59139a4..5a0f0f3f2 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -278,7 +278,7 @@ void func_80B35450(EnGg* this, PlayState* play) { void func_80B3556C(EnGg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->animIndex == ENGG_ANIM_4) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_308 = 0; this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; @@ -429,7 +429,7 @@ void func_80B359DC(EnGg* this, PlayState* play) { this->unk_306 = 0; } - if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_19_80); 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 e106c8f88..3b6d62775 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -201,7 +201,7 @@ void func_80B3B05C(EnGg2* this, PlayState* play) { void func_80B3B0A0(EnGg2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_2F0 = 0; this->actionFunc = func_80B3B5D4; 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 566f35ba0..2a5e6712a 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 @@ -223,7 +223,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x464: - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; EnGinkoMan_SetupStamp(this); // stamp player break; 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 ad5bc484f..900664e4c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -294,7 +294,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) { this->unk_1E4 &= ~0x40; } - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); this->animIndex = ENGK_ANIM_3; @@ -545,7 +545,7 @@ void func_80B51410(EnGk* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->actor.xzDistToPlayer < 100.0f) { - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY_INTRO)) { this->unk_1E4 |= 0x20; } @@ -906,7 +906,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { } if (this->unk_1E4 & 2) { - if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && + if ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) && (play->msgCtx.ocarinaMode != OCARINA_MODE_EVENT) && (play->csCtx.state == CS_STATE_IDLE)) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } @@ -918,7 +918,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { void func_80B5216C(EnGk* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80B51698; } 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 f5678eedd..0aecc3233 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -748,7 +748,7 @@ s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 isFallingAsleep = false; - if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) && (this->actor.xzDistToPlayer < 400.0f)) || (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) && 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 55bd83106..6cc8af5a5 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -277,13 +277,13 @@ void func_80997FF0(EnGs* this, PlayState* play) { } void func_80998040(EnGs* this, PlayState* play) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); this->actionFunc = func_8099807C; } void func_8099807C(EnGs* this, PlayState* play) { switch (play->msgCtx.ocarinaMode) { - case 3: + case OCARINA_MODE_EVENT: switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_HEALING: case OCARINA_SONG_EPONAS: @@ -341,11 +341,11 @@ void func_8099807C(EnGs* this, PlayState* play) { } break; - case 0: - case 4: + case OCARINA_MODE_NONE: + case OCARINA_MODE_END: func_80998300(this, play); - case 26: + case OCARINA_MODE_APPLY_DOUBLE_SOT: func_80997D14(this, play); break; @@ -1030,7 +1030,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) { EnGs* this = THIS; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; this->collider.base.acFlags &= ~AC_HIT; func_80997DEC(this, play); 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 ded070de4..648b63b6b 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -398,7 +398,7 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { sHasSoundPlayed = false; } - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) { this->csIdIndex = HG_CS_SONG_OF_HEALING; 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 5d1e0ee24..b10793a56 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 @@ -210,8 +210,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { } if (!(this->actor.xzDistToPlayer > 120.0f)) { - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { - play->msgCtx.ocarinaMode = 4; + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_80BDB788(this); } else if (func_801A5100() == 2) { func_80BDB788(this); 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 f9e51b55c..b0ea746d9 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 @@ -417,7 +417,7 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; if (this->skelAnime.animation == &object_skb_Anim_00697C) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->actor.speed = 2.4f; this->actor.gravity = -1.0f; this->actor.velocity.y = 3.0f; 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 137799af3..4573bdcf5 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -365,7 +365,7 @@ void EnJg_GoronShrineTalk(EnJg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if ((this->textId == 0xDCC) || (this->textId == 0xDDD) || (this->textId == 0xDE0)) { // There is nothing more to say after these lines, so end the current conversation. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_GoronShrineIdle; @@ -430,7 +430,7 @@ void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { } } else if (this->animIndex == EN_JG_ANIM_SURPRISE_LOOP) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->animIndex = EN_JG_ANIM_WALK; @@ -488,7 +488,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { temp = this->textId; if ((temp == 0xDB4) || (temp == 0xDB5) || (temp == 0xDC4) || (temp == 0xDC6)) { // There is nothing more to say after these lines, so end the current conversation. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; @@ -500,7 +500,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_80)) { // The player hasn't talked to the Goron Child at least once, so they can't learn // the Lullaby Intro. End the current conversation with the player. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; @@ -514,7 +514,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { // To get to this point, the player *has* talked to the Goron Child, but doesn't // already have the Lullaby or Lullaby Intro. End the current conversation and // start the cutscene that teaches the Lullaby Intro. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->csId = EnJg_GetCsIdForTeachingLullabyIntro(this); @@ -605,7 +605,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) { void EnJg_EndFrozenInteraction(EnJg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnJg_FrozenIdle; } 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 d2c877ad3..a3d0e4608 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -575,7 +575,7 @@ void EnKakasi_SetupSongTeach(EnKakasi* this, PlayState* play) { */ void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - func_80152434(play, 0x35); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_SCARECROW_SPAWN_RECORDING); this->unkState1A8 = 0; if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -632,7 +632,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { func_8096FAAC(this, play); func_8096FBB8(this, play); - if (play->msgCtx.ocarinaMode == 4) { // song failed + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { // song failed this->unk190 = 0; this->unkCounter1A4 = 0; CutsceneManager_Stop(this->csIdList[0]); @@ -645,7 +645,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); this->actionFunc = EnKakasi_RegularDialogue; - } else if (play->msgCtx.ocarinaMode == 3) { // song success + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { // song success this->postTeachTimer = 30; this->skelAnime.playSpeed = 2.0f; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); @@ -668,7 +668,7 @@ void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) { CutsceneManager_Stop(this->csIdList[0]); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->unk190 = 0; this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); @@ -1054,9 +1054,9 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) { void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) && - ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) { + ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN))) { this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = EnKakasi_SetupRiseOutOfGround; } } 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 8e5aa5802..4a95c525d 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -824,13 +824,14 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { switch (this->ocarinaFlag) { case 0: - if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { this->ocarinaFlag = 1; } break; case 1: - if ((play->msgCtx.ocarinaMode == 4) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_END) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { this->actionState = ENKANBAN_REPAIR; this->bounceX = 1; Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); 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 43f9a3d99..0c9f545f1 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -412,7 +412,7 @@ void func_80959E18(EnMk* this, PlayState* play) { } if (func_800B8718(&this->actor, &play->state)) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = func_80959D28; if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { this->actor.csId = this->csIdList[0]; diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index 8113526f2..bf6c611f6 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -1318,7 +1318,7 @@ void EnMnk_MonkeyTiedUp_ReactToWrongInstrument(EnMnk* this, PlayState* play) { case 0x8DB: Message_CloseTextbox(play); this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT); if (this->csId != CS_ID_NONE) { CutsceneManager_Stop(this->csId); @@ -1489,7 +1489,7 @@ void EnMnk_MonkeyTiedUp_WaitForInstrument(EnMnk* this, PlayState* play) { this->csId = 2; SET_EVENTINF(EVENTINF_24); this->picto.actor.csId = this->csIdList[2]; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; CutsceneManager_Queue(this->csIdList[2]); return; @@ -1577,7 +1577,7 @@ void EnMnk_MonkeyTiedUp_Wait(EnMnk* this, PlayState* play) { this->csId = 2; SET_EVENTINF(EVENTINF_24); this->picto.actor.csId = this->csIdList[2]; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; CutsceneManager_Queue(this->csIdList[2]); } else if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { 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 c65ca03ba..b07a5d58c 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.saveInfo.unk_F41 == 0) { + if (!gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { return; } } @@ -89,7 +89,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { var_v1 = 0; } if (func_800B8718(&this->actor, &play->state)) { - func_80152434(play, var_v1 + 0x29); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_CHECK_HEALING + var_v1); this->actionFunc = func_8093E68C; } else { yDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y)); @@ -111,14 +111,17 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { } void func_8093E68C(EnOkarinaTag* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { this->actionFunc = func_8093E518; } else { - if ((play->msgCtx.ocarinaMode == 3) || - ((this->unk14A == -1) && - ((play->msgCtx.ocarinaMode == 5) || (play->msgCtx.ocarinaMode == 6) || (play->msgCtx.ocarinaMode == 7) || - (play->msgCtx.ocarinaMode == 8) || (play->msgCtx.ocarinaMode == 0xA) || (play->msgCtx.ocarinaMode == 9) || - (play->msgCtx.ocarinaMode == 0xF)))) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + ((this->unk14A == -1) && ((play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_TIME) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_HEALING) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_EPONAS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SOARING) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) { if (this->switchFlags >= 0) { switch (this->unk148) { case 0: @@ -136,7 +139,7 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { break; } } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); this->actionFunc = func_8093E518; } 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 4bac34933..4e666ed5c 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -84,14 +84,14 @@ Actor* func_80B11F44(PlayState* play) { } void func_80B11F78(EnOnpuman* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { this->actionFunc = func_80B121D8; if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Stop(this->actor.csId); } - } else if (play->msgCtx.ocarinaMode == 3) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Stop(this->actor.csId); } @@ -118,7 +118,7 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) { case 0x8D6: this->actionFunc = func_80B11F78; - func_80152434(play, 0x3A); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_3A); if (this->unk_2A0 != NULL) { this->unk_2A0->home.rot.x = 0; } 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 9046f613a..eb0936ef9 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -888,7 +888,7 @@ void EnOsn_Talk(EnOsn* this, PlayState* play) { if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) { if (this->stateFlags & OSN_STATE_END_CONVERSATION) { this->stateFlags &= ~OSN_STATE_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnOsn_Idle; } else { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index fe7333cf7..096b8ff38 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -304,7 +304,7 @@ void EnOssan_EndInteraction(PlayState* play, EnOssan* this) { Player* player = GET_PLAYER(play); Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -994,7 +994,7 @@ void EnOssan_SetupBuyItemWithFanfare(PlayState* play, EnOssan* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -1124,7 +1124,7 @@ void EnOssan_BuyItemWithFanfare(EnOssan* this, PlayState* play) { void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnOssan_SetupAction(this, EnOssan_ItemPurchased); if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { 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 f22a78ec2..27f95af01 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -368,7 +368,7 @@ void EnRuppecrow_UpdatePosition(EnRuppecrow* this, PlayState* play) { s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { Player* player = GET_PLAYER(play); - if (play->msgCtx.ocarinaMode == 0x3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { switch (player->transformation) { case PLAYER_FORM_DEKU: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) { 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 3e3ecc621..a89ec608e 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 @@ -811,7 +811,7 @@ s32 EnSGoro_CheckLullaby(EnSGoro* this, PlayState* play) { s32 actorType; Player* player = GET_PLAYER(play); - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3)) { + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT)) { if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) { this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); @@ -1157,7 +1157,7 @@ void EnSGoro_SpringShrineGoron_Talk(EnSGoro* this, PlayState* play) { if (this->actionFlags & EN_S_GORO_ACTIONFLAG_LASTMESSAGE) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_LASTMESSAGE; this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_ENGAGED; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnSGoro_SpringShrineGoron_Idle; return; @@ -1243,7 +1243,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_BombshopGoron_NextTextId(this, play); if ((this->textId == 0x675) || (this->textId == 0x676)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Actor_OfferGetItem(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f); this->actionFunc = EnSGoro_ShopGoron_TakePayment; @@ -1288,7 +1288,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) { void EnSGoro_SleepTalk(EnSGoro* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) { if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnSGoro_Sleep; } 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 c8bc7d660..a280a94c6 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -318,7 +318,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->unk_328 & 1) { this->unk_328 &= ~1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_328 &= ~4; @@ -341,7 +341,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { Message_StartTextbox(play, this->unk_33C, &this->actor); } else { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Rupees_ChangeBy(-this->unk_358); this->actionFunc = func_80BCB90C; 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 fbd757bd5..597c2c392 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -470,7 +470,7 @@ void func_80ADBAB8(EnSellnuts* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80ADBBEC; func_800B7298(play, NULL, PLAYER_CSMODE_19); @@ -516,7 +516,7 @@ void func_80ADBD64(EnSellnuts* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_338 &= ~2; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; @@ -558,7 +558,7 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) { void func_80ADBFA0(EnSellnuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->unk_34C == 0) { this->actionFunc = func_80ADB544; @@ -721,7 +721,7 @@ void func_80ADC6D0(EnSellnuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { @@ -751,7 +751,7 @@ void func_80ADC7B4(EnSellnuts* this, PlayState* play) { CutsceneManager_Queue(this->csId); } } else if ((this->unk_366 == 1) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_366 = 0; CutsceneManager_Stop(this->csId); 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 90a625c88..e5ab7dbad 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -466,7 +466,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) { this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -957,7 +957,7 @@ void EnSob1_SetupBuyItemWithFanfare(PlayState* play, EnSob1* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -1110,7 +1110,7 @@ void EnSob1_BuyItemWithFanfare(EnSob1* this, PlayState* play) { void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnSob1_SetupAction(this, EnSob1_ItemPurchased); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { 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 29f53ae7c..bc0099298 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1201,7 +1201,7 @@ void func_80BAD130(EnSuttari* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->flags1 & 8) { this->actionFunc = func_80BAD004; @@ -1238,7 +1238,7 @@ void func_80BAD2B4(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD230; } else { CutsceneManager_Stop(this->csIdList[1]); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; this->actionFunc = func_80BAD380; @@ -1262,7 +1262,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_10000000; this->flags1 &= ~0x4000; CutsceneManager_Stop(this->csIdList[1]); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; } @@ -1403,7 +1403,7 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { ((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 0x10; this->flags2 &= ~1; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->textId = 0; if (this->flags1 & 1) { 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 52c6d42f9..28eeafc09 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 @@ -362,7 +362,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { Rupees_ChangeBy(-20); SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; player->stateFlags1 |= PLAYER_STATE1_20; @@ -415,7 +415,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0xA2B: // The rules of the game are a piece of cake! case 0xA2C: // I keep saying - you have to aim with [Control Stick]! case 0xA35: // You almost had it! Well...just this once...here you go! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; Interface_InitMinigame(play); @@ -450,7 +450,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) break; case 0xA34: // Perfect! Take this! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; gSaveContext.minigameStatus = MINIGAME_STATUS_END; @@ -485,7 +485,7 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags1 &= ~PLAYER_STATE1_20; CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); @@ -764,7 +764,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) this->prevTextId = 0x400; } } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; @@ -777,7 +777,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0x3FE: // Our highest score is [score]. If you break the record, you'll win a prize! case 0x400: // Our highest score is [score]. Good luck! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; this->flagsIndex = 0; @@ -827,7 +827,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0x405: // No way! That was perfect! case 0x406: // That was perfect! case 0x407: // You got a new record! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; gSaveContext.minigameStatus = MINIGAME_STATUS_END; 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 e897ffefb..062f76230 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -359,7 +359,7 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) { if (this->unk_D78->unk_1 != 0) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); CutsceneManager_Queue(this->csId); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; } return false; } @@ -391,7 +391,7 @@ s32 func_80A3EB8C(EnTest3* this, PlayState* play) { if (hideoutObject != NULL) { this->player.lockOnActor = hideoutObject; } - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; return 1; } return 0; 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 3c1a5958d..e726408a5 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -48,12 +48,12 @@ static s16 sCurCsId; void func_80A41D70(EnTest4* this, PlayState* play) { if (this->csIdIndex != 0) { - func_80151A68(play, sNightMessages1[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sNightMessages1[CURRENT_DAY - 1]); } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { if (play->actorCtx.flags & ACTORCTX_FLAG_1) { Sram_IncrementDay(); gSaveContext.save.time = CLOCK_TIME(6, 0); - func_80151A68(play, sDayMessages1[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sDayMessages1[CURRENT_DAY - 1]); } else { this->csIdIndex = 0; this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; @@ -91,12 +91,12 @@ void func_80A41D70(EnTest4* this, PlayState* play) { void func_80A41FA4(EnTest4* this, PlayState* play) { if (this->csIdIndex != 0) { - func_80151A68(play, sNightMessages2[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sNightMessages2[CURRENT_DAY - 1]); } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { Sram_IncrementDay(); gSaveContext.save.time = CLOCK_TIME(6, 0); Interface_NewDay(play, CURRENT_DAY); - func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sDayMessages2[CURRENT_DAY - 1]); D_801BDBC8 = 0xFE; func_800FB758(play); func_800FEAF4(&play->envCtx); diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index 462e1e784..bee7c94e7 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -685,7 +685,7 @@ void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play) { if (DECR(this->timer) == 0) { EnTest6_StopInvertedSoTCutscene(this, play); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } @@ -1091,7 +1091,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) { } else { gSaveContext.respawnFlag = 2; } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; return; } } else { @@ -1168,7 +1168,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) { play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.respawnFlag = 2; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } return; } diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index ded290262..a76d9ed47 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -116,13 +116,13 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { Actor* thisx = &this->actor; - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { - if (thisx->csId != CS_ID_NONE) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { + if (this->actor.csId != CS_ID_NONE) { this->actionFunc = EnTimeTag_RooftopOath_Cutscene; CutsceneManager_Queue(thisx->csId); gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } @@ -186,11 +186,11 @@ void EnTimeTag_Diary_AfterOcarina(EnTimeTag* this, PlayState* play) { } void EnTimeTag_Diary_TeachEvanSongSnippets(EnTimeTag* this, PlayState* play) { - if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == 0x1B)) { + if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == MSGMODE_SONG_DEMONSTRATION_DONE)) { TIMETAG_DIARY_TIMER(&this->actor) = 5; this->actionFunc = EnTimeTag_Diary_AfterOcarina; play->msgCtx.msgLength = 0; - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; } } @@ -217,13 +217,13 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) { break; case 0x122B: // Mikau diary part 1 - func_80152434(play, 0x3F); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF); this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets; TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART1; break; case 0x122E: // Mikau diary part 3 - func_80152434(play, 0x40); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF); this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets; TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART2; break; 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 61540eec0..8afe73e5e 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -290,7 +290,7 @@ void func_80AECA3C(EnTk* this, PlayState* play) { void func_80AECA90(EnTk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AEDE10(this, play); } else if (this->actor.xzDistToPlayer < 100.0f) { @@ -317,7 +317,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { this->actor.textId = 0; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AED4F8(this, play); return; @@ -691,7 +691,7 @@ void func_80AED940(EnTk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_2CA &= ~0x80; this->actor.flags &= ~ACTOR_FLAG_10000; - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AEDE10(this, play); } else if (!(this->unk_2CA & 0x80)) { @@ -874,7 +874,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) { this->unk_2CA |= 2; if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; func_80AEE2A8(this, play); } else { Audio_PlaySfx_MessageCancel(); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index d167e51fd..ce02cd835 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -151,7 +151,12 @@ static Vec3s D_80BA510C[] = { { 0xFF64, 0x0016, 0xFE7E }, }; -static u16 D_80BA5120[] = { 67, 68, 69, 70 }; +static u16 sOcarinaActionWindFishPrompts[] = { + OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN, + OCARINA_ACTION_PROMPT_WIND_FISH_GORON, + OCARINA_ACTION_PROMPT_WIND_FISH_ZORA, + OCARINA_ACTION_PROMPT_WIND_FISH_DEKU, +}; static u8 D_80BA5128[] = { 8, 4, 2, 1 }; @@ -542,12 +547,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) { s32 func_80BA46D8(EnToto* this, PlayState* play) { func_800B7298(play, NULL, PLAYER_CSMODE_68); - func_80152434(play, D_80BA5120[CUR_FORM]); + Message_DisplayOcarinaStaff(play, sOcarinaActionWindFishPrompts[CUR_FORM]); return 0; } s32 func_80BA4740(EnToto* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { SET_WEEKEVENTREG(WEEKEVENTREG_56_10); } 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 0eb54ed34..499a3a748 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -217,7 +217,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) { this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -362,7 +362,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_PayForMushroom; break; @@ -412,7 +412,7 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_GiveRedPotionForKoume; } else { @@ -660,7 +660,7 @@ void EnTrt_SetupBuyItemWithFanfare(PlayState* play, EnTrt* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -999,7 +999,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_GiveRedPotionForKoume; } else { 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 40d1946fc..8bc8e2541 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -347,7 +347,7 @@ void func_80AD3CEC(EnTrt2* this, PlayState* play) { Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3D8 = false; } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); this->unk_3B2 = 4; @@ -375,7 +375,7 @@ void func_80AD3DA4(EnTrt2* this, PlayState* play) { void func_80AD3E34(EnTrt2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (Inventory_HasEmptyBottle()) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } else { @@ -403,7 +403,7 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } @@ -447,7 +447,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) { func_80AD349C(this); func_80AD3DA4(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->unk_3A8 == 0x84C) { EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); @@ -529,7 +529,7 @@ void func_80AD4550(EnTrt2* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } 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 cbb095279..bae88696f 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 @@ -37,8 +37,10 @@ ActorInit En_Warp_tag_InitVars = { }; // this appears to be unused, as the code never accesses it in known vanilla cases -// these unknown values get passed to a unknown z_message function -u8 D_809C1000[] = { 0x28, 0x29, 0x2A, 0x2B, 0x2D, 0x2C, 0, 0 }; +u8 D_809C1000[] = { + OCARINA_ACTION_CHECK_TIME, OCARINA_ACTION_CHECK_HEALING, OCARINA_ACTION_CHECK_EPONAS, + OCARINA_ACTION_CHECK_SOARING, OCARINA_ACTION_CHECK_SUNS, OCARINA_ACTION_CHECK_STORMS, +}; static InitChainEntry sInitChain[] = { ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE), @@ -113,7 +115,7 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { // and I doubt its set externally by another actor, so I believe this is unused // might be a bug, they might have meant to set actor flag (0x2000 0000) up above but mistyped (0x200 0000) // also WARPTAG_GET_3C0 should always return 2C0 -> 0xF for all known in-game uses, which is OOB - func_80152434(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]); // unk message function + Message_DisplayOcarinaStaff(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]); this->actionFunc = EnWarpTag_Unused809C0A20; } else { @@ -125,13 +127,13 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { * Unused ActionFunc: assigned by EnWarpTag_Unused809C09A0, no known variants use. */ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 9) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) { func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = EnWarpTag_RespawnPlayer; CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); - } else if (play->msgCtx.ocarinaMode >= 2) { - play->msgCtx.ocarinaMode = 4; + } else if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = EnWarpTag_Unused809C09A0; } } diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index 97c381beb..fb34c3b64 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -497,7 +497,7 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) { EnWeatherTag* this = THIS; this->actionFunc(this, play); - if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && + if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == CS_STATE_IDLE)) { 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 c9881a5e0..42bc9ffb4 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -358,7 +358,7 @@ void EnYb_Idle(EnYb* this, PlayState* play) { EnYb_UpdateAnimation(this, play); if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) && - (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { this->actionFunc = EnYb_TeachingDance; this->teachingCutsceneTimer = 200; 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 b54986829..9e6310a71 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -268,7 +268,7 @@ void func_80B9FC70(EnZob* this, s16 csIdIndex) { void func_80B9FCA0(EnZob* this, PlayState* play) { Message_CloseTextbox(play); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_80B9FC0C(this); this->unk_2F4 &= ~1; this->actionFunc = func_80BA0728; @@ -315,7 +315,7 @@ void func_80B9FE1C(EnZob* this, PlayState* play) { void func_80B9FE5C(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { play->msgCtx.msgLength = 0; this->actionFunc = func_80B9FDDC; func_80B9FC70(this, 0); @@ -331,7 +331,7 @@ void func_80B9FE5C(EnZob* this, PlayState* play) { void func_80B9FF20(EnZob* this, PlayState* play) { func_80B9F86C(this); if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) { - func_80152434(play, 0x42); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF); this->actionFunc = func_80B9FE5C; func_80B9FC70(this, 2); } @@ -339,11 +339,11 @@ void func_80B9FF20(EnZob* this, PlayState* play) { void func_80B9FF80(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { this->actionFunc = func_80B9FF20; this->unk_304 = 6; func_80B9F7E4(this, 1, ANIMMODE_LOOP); - func_80152434(play, 0x3E); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF); func_80B9FC70(this, 1); } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_11) { play->msgCtx.msgLength = 0; @@ -357,7 +357,7 @@ void func_80B9FF80(EnZob* this, PlayState* play) { void func_80BA005C(EnZob* this, PlayState* play) { func_80B9F86C(this); if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) { - func_80152434(play, 0x41); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF); this->actionFunc = func_80B9FF80; func_80B9FC70(this, 2); } @@ -426,7 +426,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) { break; case 0x1209: - func_80152434(play, 0x3D); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF); this->unk_304 = 4; func_80B9F7E4(this, 0, ANIMMODE_LOOP); this->actionFunc = func_80BA005C; @@ -439,7 +439,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) { } void func_80BA0318(EnZob* this, PlayState* play) { - func_80152434(play, 0x3D); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF); this->unk_304 = 4; func_80B9F7E4(this, 0, ANIMMODE_LOOP); this->actionFunc = func_80BA005C; 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 2e99ccb7b..92fa313a6 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -627,7 +627,7 @@ void func_80B9451C(EnZog* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_300 = 2; this->actionFunc = func_80B94470; - } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; @@ -715,7 +715,7 @@ void func_80B948A8(EnZog* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_300 = 2; this->actionFunc = func_80B946FC; - } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; 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 0e3262869..8a942ce17 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -555,8 +555,8 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { func_80BBB0D4(this, play); - if (play->msgCtx.ocarinaMode == 0x2A) { - play->msgCtx.ocarinaMode = 4; + if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = func_80BBBB84; this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 120.0f); 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 e9e86668a..e17f6dc94 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1146,7 +1146,7 @@ void func_80B98BF4(EnZot* this, PlayState* play) { void func_80B98CA8(EnZot* this, PlayState* play) { if (func_800B8718(&this->actor, &play->state)) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; AudioOcarina_StartDefault(0xFFFF); this->actionFunc = func_80B98BF4; this->actor.flags |= ACTOR_FLAG_10000; 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 5668021e3..92479cc4a 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -99,7 +99,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_80B3C260(this); } @@ -120,7 +120,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) { case 2: Audio_PlaySfx_MessageCancel(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_80B3C260(this); break; 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 17a277e82..b5ba51418 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -203,7 +203,7 @@ void func_80AC9AB8(ObjOcarinalift* this) { void func_80AC9AE0(ObjOcarinalift* this, PlayState* play) { if (func_800B8718(&this->dyna.actor, &play->state)) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); func_80AC9B48(this); } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_800B8804(&this->dyna.actor, play, 40.0f); @@ -216,7 +216,7 @@ void func_80AC9B48(ObjOcarinalift* this) { void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { if (func_800B886C(&this->dyna.actor, play)) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { if (play->msgCtx.lastPlayedSong == 0) { if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) { Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)); @@ -225,8 +225,8 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { func_80AC9C20(this); } } else { - if (play->msgCtx.ocarinaMode >= 2) { - play->msgCtx.ocarinaMode = 4; + if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } func_80AC9AB8(this); } 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 09b95d3a0..3f556d640 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -897,7 +897,7 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) { case TEXT_STATE_CHOICE: case TEXT_STATE_5: if (Message_ShouldAdvance(play) && func_80B795A0(play, this, arg2)) { - msgCtx->msgMode = 0x43; + msgCtx->msgMode = MSGMODE_TEXT_CLOSING; ret = true; } break; 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 e3d11f2fc..62ec8f0f7 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -141,7 +141,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) { } else if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x4D; + play->msgCtx.msgMode = MSGMODE_OWL_SAVE_0; play->msgCtx.unk120D6 = 0; play->msgCtx.unk120D4 = 0; gSaveContext.save.owlSaveLocation = OBJ_WARPSTONE_GET_ID(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c index 6f361294e..00b4e9acf 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -39,7 +39,8 @@ void func_808A7954(ObjWturn* this) { } void func_808A7968(ObjWturn* this, PlayState* play) { - if (play->msgCtx.ocarinaMode >= 28 && play->msgCtx.ocarinaMode < 39) { + if ((play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && + (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE)) { Flags_UnsetSwitch(play, this->actor.params); Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 406e4ba0f..be5374519 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -81,11 +81,12 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) { } else { Actor_Kill(&this->actor); if ((R_TIME_SPEED != 400) && !play->msgCtx.blockSunsSong) { - if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) { + if ((play->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) || + (play->msgCtx.ocarinaMode != OCARINA_MODE_PLAYED_SUNS)) { gSaveContext.sunsSongState = SUNSSONG_START; } } else { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } } diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 4130dcb74..7a5cc209d 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -129,18 +129,18 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play) { s32 type = SHOTSUN_GET_TYPE(&this->actor); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_STORMS: if (type == SHOTSUN_FAIRY_SPAWNER_STORMS) { this->actionFunc = ShotSun_TriggerFairy; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } break; case OCARINA_SONG_SUNS: if (type == SHOTSUN_FAIRY_SPAWNER_SUNS) { this->actionFunc = ShotSun_TriggerFairy; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } break; } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 07e691591..57322fb0f 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -16630,10 +16630,12 @@ void Player_Action_62(Player* this, PlayState* play) { s32 func_80851C40(PlayState* play, Player* this) { return ((play->sceneId == SCENE_MILK_BAR) && Audio_IsSequencePlaying(NA_BGM_BALLAD_OF_THE_WIND_FISH)) || (((play->sceneId != SCENE_MILK_BAR) && (this->csMode == PLAYER_CSMODE_68)) || - ((play->msgCtx.msgMode == 0x12) || (play->msgCtx.msgMode == 0x13) || (play->msgCtx.msgMode == 0x14) || - ((play->msgCtx.ocarinaMode != 1) && - ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == 3) || - play->msgCtx.ocarinaAction == 0x32)))); + ((play->msgCtx.msgMode == MSGMODE_SONG_PLAYED) || + (play->msgCtx.msgMode == MSGMODE_SETUP_DISPLAY_SONG_PLAYED) || + (play->msgCtx.msgMode == MSGMODE_DISPLAY_SONG_PLAYED) || + ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) && + ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + play->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE)))); } // Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z @@ -16653,7 +16655,7 @@ void func_80851D30(PlayState* play, Player* this) { *var_s0 = sp50.x; var_s0++; } - } else if (play->msgCtx.ocarinaMode == 1) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { var_s0[play->msgCtx.ocarinaButtonIndex] = 1.2f; func_8082DB90(play, this, D_8085D190[this->transformation]); @@ -16738,7 +16740,7 @@ void func_808521E0(PlayState* play, Player* this) { } func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); - } else if (play->msgCtx.ocarinaMode == 1) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { func_80851EC8(play, this); } @@ -16760,7 +16762,8 @@ void func_80852290(PlayState* play, Player* this) { s16 var_a1_3; s16 sp38; - if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) && + (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { this->unk_A90->flags |= ACTOR_FLAG_20000000; this->unk_A94 = 0.0f; @@ -16841,10 +16844,10 @@ void Player_Action_63(Player* this, PlayState* play) { ((this->skelAnime.mode == 0) && (this->actionVar2 == 0)))) { func_808525C4(play, this); if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); } } else if (this->actionVar2 != 0) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); this->actor.flags &= ~ACTOR_FLAG_20000000; @@ -16860,12 +16863,15 @@ void Player_Action_63(Player* this, PlayState* play) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } } else { - s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27); + s32 var_v1 = (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && + (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE); s32 pad[2]; - if (var_v1 || (play->msgCtx.ocarinaMode == 0x16) || (play->msgCtx.ocarinaMode == 0x1A) || - (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) { - if (play->msgCtx.ocarinaMode == 0x16) { + if (var_v1 || (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_DOUBLE_SOT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_FAST) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_SLOW)) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) { if (!func_8082DA90(play)) { if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) { play->nextEntrance = ENTRANCE(CUTSCENE, 1); @@ -16896,7 +16902,8 @@ void Player_Action_63(Player* this, PlayState* play) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } } - } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); @@ -18114,7 +18121,7 @@ void Player_Action_87(Player* this, PlayState* play) { void Player_Action_88(Player* this, PlayState* play) { if (this->actionVar2++ > 90) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_8085B384(this, play); } else if (this->actionVar2 == 10) { func_80848640(play, this); @@ -19814,7 +19821,7 @@ void Player_CsAction_4(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; - Message_BombersNotebookQueueEvent(play, 0x1B); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT); Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); } } 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 6b451b506..c99e6d718 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 @@ -2799,10 +2799,14 @@ void KaleidoScope_UpdateOpening(PlayState* play) { } } +u16 sCursorPointsToOcarinaModes[] = { + OCARINA_MODE_WARP_TO_GREAT_BAY_COAST, OCARINA_MODE_WARP_TO_ZORA_CAPE, OCARINA_MODE_WARP_TO_SNOWHEAD, + OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE, OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN, OCARINA_MODE_WARP_TO_MILK_ROAD, + OCARINA_MODE_WARP_TO_WOODFALL, OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP, OCARINA_MODE_WARP_TO_IKANA_CANYON, + OCARINA_MODE_WARP_TO_STONE_TOWER, +}; + void KaleidoScope_Update(PlayState* play) { - static u16 sCursorPointsToOcarinaModes[] = { - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - }; static s16 sUnpausedHudVisibility = HUD_VISIBILITY_IDLE; static s16 sNextMainState = PAUSE_MAIN_STATE_IDLE; static s16 sDelayTimer = 10; @@ -3484,7 +3488,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) { Audio_PlaySfx(NA_SE_SY_DECIDE); @@ -3498,7 +3502,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_OWLWARP_CONFIRM: if (CHECK_BTN_ALL(input->press.button, BTN_A)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; if (msgCtx->choiceIndex == 0) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; @@ -3513,17 +3517,17 @@ void KaleidoScope_Update(PlayState* play) { } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT; Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } break; @@ -3598,7 +3602,7 @@ void KaleidoScope_Update(PlayState* play) { MsgEvent_SendNullTask(); func_80143324(play, &play->skyboxCtx, play->skyboxId); - if ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF)) { + if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF)) { func_80115844(play, DO_ACTION_STOP); func_8011552C(play, DO_ACTION_STOP); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 8a60d1f66..79ab56b45 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2820,15 +2820,15 @@ 0x80147314:("func_80147314",), 0x80147414:("func_80147414",), 0x8014750C:("Sram_nop8014750C",), - 0x80147520:("func_80147520",), - 0x80147564:("func_80147564",), + 0x80147520:("Message_ResetOcarinaButtonAlphas",), + 0x80147564:("Message_ResetOcarinaButtonState",), 0x80147624:("Message_ShouldAdvance",), 0x80147734:("Message_ShouldAdvanceSilent",), 0x801477B4:("Message_CloseTextbox",), - 0x80147818:("func_80147818",), + 0x80147818:("Message_DrawTextboxIcon",), 0x80147F18:("func_80147F18",), 0x80148558:("func_80148558",), - 0x80148B98:("func_80148B98",), + 0x80148B98:("Message_HandleChoiceSelection",), 0x80148CBC:("func_80148CBC",), 0x80148D64:("func_80148D64",), 0x80149048:("func_80149048",), @@ -2836,43 +2836,43 @@ 0x80149454:("func_80149454",), 0x801496C8:("func_801496C8",), 0x8014995C:("Message_DrawTextChar",), - 0x80149C18:("func_80149C18",), + 0x80149C18:("Message_GrowTextbox",), 0x80149EBC:("Message_FindMessage",), 0x80149F74:("Message_DrawItemIcon",), 0x8014AAD0:("Message_HandleOcarina",), - 0x8014ADBC:("func_8014ADBC",), + 0x8014ADBC:("Message_DrawTextDefault",), 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), - 0x8014CDF0:("func_8014CDF0",), + 0x8014CDF0:("Message_GetTimerDigits",), 0x8014CFDC:("Message_SetupLoadItemIcon",), - 0x8014D304:("func_8014D304",), - 0x8014D62C:("func_8014D62C",), - 0x8014D7B4:("func_8014D7B4",), + 0x8014D304:("Message_LoadTime",), + 0x8014D62C:("Message_LoadOwlWarpText",), + 0x8014D7B4:("Message_Decode",), 0x80150A84:("func_80150A84",), - 0x80150D08:("func_80150D08",), + 0x80150D08:("Message_OpenText",), 0x801514B0:("func_801514B0",), 0x801518B0:("Message_StartTextbox",), 0x80151938:("Message_ContinueTextbox",), - 0x80151A68:("func_80151A68",), + 0x80151A68:("Message_DisplaySceneTitleCard",), 0x80151BB4:("Message_BombersNotebookQueueEvent",), - 0x80151C9C:("func_80151C9C",), - 0x80151DA4:("func_80151DA4",), - 0x80152434:("func_80152434",), - 0x80152464:("func_80152464",), + 0x80151C9C:("Message_BombersNotebookProcessEventQueue",), + 0x80151DA4:("Message_DisplayOcarinaStaffImpl",), + 0x80152434:("Message_DisplayOcarinaStaff",), + 0x80152464:("Message_DisplayOcarinaStaffBlockSunsSong",), 0x80152498:("Message_GetState",), - 0x8015268C:("func_8015268C",), - 0x80152C64:("func_80152C64",), + 0x8015268C:("Message_DrawTextBox",), + 0x80152C64:("Message_SetView",), 0x80152CAC:("func_80152CAC",), - 0x80152EC0:("func_80152EC0",), - 0x80152FB8:("func_80152FB8",), - 0x80153750:("func_80153750",), - 0x80153E7C:("func_80153E7C",), - 0x80153EF0:("func_80153EF0",), - 0x801541D4:("func_801541D4",), + 0x80152EC0:("Message_SpawnSongEffect",), + 0x80152FB8:("Message_FlashOcarinaButtons",), + 0x80153750:("Message_DrawOcarinaButtons",), + 0x80153E7C:("Message_DrawText",), + 0x80153EF0:("Message_DrawSceneTitleCard",), + 0x801541D4:("Message_DrawMain",), 0x80156758:("Message_Draw",), 0x8015680C:("Message_Update",), - 0x801586A4:("func_801586A4",), + 0x801586A4:("Message_SetTables",), 0x801586D4:("Message_Init",), 0x801588D0:("Message_FindMessageNES",), 0x80158988:("Message_LoadCharNES",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 5aaa2f1d0..6f243b124 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1941,44 +1941,34 @@ 0x801C6A50:("D_801C6A50","UNK_TYPE1","",0x1), 0x801C6A58:("D_801C6A58","UNK_TYPE1","",0x1), 0x801C6A70:("D_801C6A70","UNK_TYPE1","",0x1), - 0x801C6A74:("D_801C6A74","UNK_TYPE2","",0x2), - 0x801C6A78:("D_801C6A78","UNK_TYPE2","",0x2), - 0x801C6A7C:("D_801C6A7C","UNK_TYPE2","",0x2), - 0x801C6A80:("D_801C6A80","UNK_TYPE2","",0x2), - 0x801C6A84:("D_801C6A84","UNK_TYPE2","",0x2), - 0x801C6A88:("D_801C6A88","UNK_TYPE2","",0x2), - 0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2), - 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), + 0x801C6A74:("sOcarinaButtonIndexBufPos","UNK_TYPE2","",0x2), + 0x801C6A78:("sOcarinaButtonIndexBufLen","UNK_TYPE2","",0x2), + 0x801C6A7C:("sLastPlayedSong","UNK_TYPE2","",0x2), + 0x801C6A80:("sOcarinaButtonStepR","UNK_TYPE2","",0x2), + 0x801C6A84:("sOcarinaButtonStepG","UNK_TYPE2","",0x2), + 0x801C6A88:("sOcarinaButtonStepB","UNK_TYPE2","",0x2), + 0x801C6A8C:("sOcarinaButtonFlashTimer","UNK_TYPE2","",0x2), + 0x801C6A90:("sOcarinaButtonFlashColorIndex","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), 0x801C6AB8:("sBombersNotebookEventMessages","UNK_TYPE1","",0x1), 0x801C6B28:("gBombersNotebookWeekEventFlags","UNK_TYPE1","",0x1), 0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1), - 0x801CED40:("D_801CED40","UNK_TYPE1","",0x1), 0x801CFB08:("D_801CFB08","UNK_TYPE1","",0x1), - 0x801CFC78:("D_801CFC78","UNK_TYPE2","",0x2), - 0x801CFC7A:("D_801CFC7A","UNK_TYPE1","",0x1), - 0x801CFC7C:("D_801CFC7C","UNK_TYPE1","",0x1), - 0x801CFC7E:("D_801CFC7E","UNK_TYPE1","",0x1), - 0x801CFC84:("D_801CFC84","UNK_TYPE1","",0x1), - 0x801CFC88:("D_801CFC88","UNK_TYPE1","",0x1), - 0x801CFC8C:("D_801CFC8C","UNK_TYPE1","",0x1), - 0x801CFC8E:("D_801CFC8E","UNK_TYPE1","",0x1), - 0x801CFC92:("D_801CFC92","UNK_TYPE1","",0x1), - 0x801CFC98:("D_801CFC98","UNK_TYPE1","",0x1), - 0x801CFCA4:("D_801CFCA4","UNK_TYPE2","",0x2), - 0x801CFCAC:("D_801CFCAC","UNK_TYPE2","",0x2), + 0x801CFC78:("D_801CFC78","s16","[15]",0x1E), + 0x801CFC98:("sOcarinaButtonIndexBuf","UNK_TYPE1","",0x1), + 0x801CFCA4:("sOcarinaButtonAlphaValues","UNK_TYPE2","",0x2), 0x801CFCB8:("gOcarinaSongItemMap","UNK_TYPE1","",0x1), - 0x801CFCD8:("D_801CFCD8","UNK_TYPE2","",0x2), - 0x801CFCE4:("D_801CFCE4","UNK_TYPE2","",0x2), - 0x801CFCF0:("D_801CFCF0","UNK_TYPE2","",0x2), - 0x801CFCF4:("D_801CFCF4","UNK_TYPE2","",0x2), - 0x801CFCF8:("D_801CFCF8","UNK_TYPE2","",0x2), - 0x801CFCFC:("D_801CFCFC","UNK_TYPE2","",0x2), - 0x801CFD00:("D_801CFD00","UNK_TYPE2","",0x2), - 0x801CFD04:("D_801CFD04","UNK_TYPE2","",0x2), - 0x801CFD08:("D_801CFD08","UNK_TYPE2","",0x2), - 0x801CFD0C:("D_801CFD0C","UNK_TYPE2","",0x2), + 0x801CFCD8:("sIconPrimColors","UNK_TYPE2","",0x2), + 0x801CFCE4:("sIconEnvColors","UNK_TYPE2","",0x2), + 0x801CFCF0:("sIconPrimR","UNK_TYPE2","",0x2), + 0x801CFCF4:("sIconPrimG","UNK_TYPE2","",0x2), + 0x801CFCF8:("sIconPrimB","UNK_TYPE2","",0x2), + 0x801CFCFC:("sIconFlashTimer","UNK_TYPE2","",0x2), + 0x801CFD00:("sIconFlashColorIndex","UNK_TYPE2","",0x2), + 0x801CFD04:("sIconEnvR","UNK_TYPE2","",0x2), + 0x801CFD08:("sIconEnvG","UNK_TYPE2","",0x2), + 0x801CFD0C:("sIconEnvB","UNK_TYPE2","",0x2), 0x801CFD10:("D_801CFD10","UNK_TYPE2","",0x2), 0x801CFD1C:("D_801CFD1C","UNK_TYPE2","",0x2), 0x801CFD28:("D_801CFD28","UNK_TYPE2","",0x2), @@ -1999,24 +1989,24 @@ 0x801CFD74:("D_801CFD74","UNK_TYPE2","",0x2), 0x801CFD78:("D_801CFD78","UNK_TYPE2","",0x2), 0x801CFD7C:("D_801CFD7C","UNK_TYPE2","",0x2), - 0x801CFD80:("D_801CFD80","UNK_TYPE2","",0x2), - 0x801CFD84:("D_801CFD84","UNK_TYPE2","",0x2), - 0x801CFD88:("D_801CFD88","UNK_TYPE2","",0x2), - 0x801CFD8C:("D_801CFD8C","UNK_TYPE2","",0x2), - 0x801CFD90:("D_801CFD90","UNK_TYPE2","",0x2), - 0x801CFD94:("D_801CFD94","UNK_PTR","",0x4), - 0x801CFD98:("D_801CFD98","UNK_TYPE2","",0x2), - 0x801CFD9C:("D_801CFD9C","UNK_TYPE2","",0x2), - 0x801CFDA0:("D_801CFDA0","UNK_TYPE2","",0x2), + 0x801CFD80:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD84:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD88:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD8C:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD90:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD94:("sTextboxWidth","UNK_PTR","",0x4), + 0x801CFD98:("sTextboxHeight","UNK_TYPE2","",0x2), + 0x801CFD9C:("sTextboxTexWidth","UNK_TYPE2","",0x2), + 0x801CFDA0:("sTextboxTexHeight","UNK_TYPE2","",0x2), 0x801CFDA4:("D_801CFDA4","UNK_TYPE1","",0x1), 0x801CFDC8:("D_801CFDC8","UNK_TYPE1","",0x1), 0x801CFDEC:("D_801CFDEC","UNK_TYPE1","",0x1), 0x801CFE04:("D_801CFE04","UNK_TYPE1","",0x1), 0x801CFE1C:("D_801CFE1C","UNK_TYPE1","",0x1), 0x801CFE34:("D_801CFE34","UNK_TYPE1","",0x1), - 0x801CFE4C:("D_801CFE4C","UNK_TYPE1","",0x1), - 0x801CFE5C:("D_801CFE5C","UNK_TYPE1","",0x1), - 0x801CFE68:("D_801CFE68","UNK_TYPE1","",0x1), + 0x801CFE4C:("sStrayFairyIconTextures","UNK_TYPE1","",0x1), + 0x801CFE5C:("sStrayFairyIconPrimColors","UNK_TYPE1","",0x1), + 0x801CFE68:("sStrayFairyIconEnvColors","UNK_TYPE1","",0x1), 0x801CFE74:("D_801CFE74","UNK_TYPE1","",0x1), 0x801CFEA4:("D_801CFEA4","UNK_TYPE1","",0x1), 0x801CFED4:("D_801CFED4","UNK_TYPE1","",0x1), @@ -2027,59 +2017,38 @@ 0x801CFF7C:("D_801CFF7C","UNK_TYPE1","",0x1), 0x801CFF88:("D_801CFF88","UNK_TYPE1","",0x1), 0x801CFF94:("D_801CFF94","UNK_TYPE1","",0x1), - 0x801D0000:("D_801D0000","UNK_TYPE1","",0x1), - 0x801D0001:("D_801D0001","UNK_TYPE1","",0x1), - 0x801D001F:("D_801D001F","UNK_TYPE1","",0x1), - 0x801D0188:("D_801D0188","UNK_TYPE1","",0x1), - 0x801D023A:("D_801D023A","UNK_TYPE1","",0x1), - 0x801D0250:("D_801D0250","UNK_TYPE1","",0x1), + 0x801D0188:("sOwlWarpTextJPN","UNK_TYPE1","",0x1), + 0x801D0250:("sOwlWarpTextLengthJPN","UNK_TYPE1","",0x1), 0x801D0268:("D_801D0268","UNK_TYPE2","",0x2), 0x801D027C:("D_801D027C","UNK_TYPE1","",0x1), 0x801D0284:("D_801D0284","UNK_TYPE1","",0x1), 0x801D028C:("D_801D028C","UNK_TYPE1","",0x1), - 0x801D02C0:("D_801D02C0","UNK_TYPE1","",0x1), - 0x801D02D8:("D_801D02D8","UNK_TYPE1","",0x1), - 0x801D02F8:("D_801D02F8","UNK_TYPE1","",0x1), + 0x801D02C0:("sOcarinaSongFlagsMap","UNK_TYPE1","",0x1), + 0x801D02D8:("sOcarinaEffectActorIds","UNK_TYPE1","",0x1), + 0x801D02F8:("sOcarinaEffectActorParams","UNK_TYPE1","",0x1), 0x801D0330:("D_801D0330","UNK_TYPE1","",0x1), - 0x801D0334:("D_801D0334","UNK_TYPE1","",0x1), - 0x801D0340:("D_801D0340","UNK_TYPE1","",0x1), - 0x801D034C:("D_801D034C","UNK_TYPE1","",0x1), - 0x801D0358:("D_801D0358","UNK_TYPE1","",0x1), - 0x801D0364:("D_801D0364","UNK_TYPE1","",0x1), - 0x801D0378:("D_801D0378","UNK_TYPE1","",0x1), - 0x801D039C:("D_801D039C","UNK_TYPE1","",0x8), - 0x801D03A4:("D_801D03A4","UNK_TYPE1","",0x1), + 0x801D0334:("sOcarinaButtonAPrimColors","UNK_TYPE1","",0x1), + 0x801D0340:("sOcarinaButtonAEnvColors","UNK_TYPE1","",0x1), + 0x801D034C:("sOcarinaButtonCPrimColors","UNK_TYPE1","",0x1), + 0x801D0358:("sOcarinaButtonCEnvColors","UNK_TYPE1","",0x1), + 0x801D0364:("sOcarinaButtonTextures","UNK_TYPE1","",0x1), + 0x801D0378:("sOcarinaSongFanfares","UNK_TYPE1","",0x1), + 0x801D039C:("sOcarinaSongFanfareIoData","UNK_TYPE1","",0x8), + 0x801D03A4:("sPlayerFormOcarinaInstruments","UNK_TYPE1","",0x1), 0x801D03A8:("D_801D03A8","UNK_TYPE1","",0x1), - 0x801D03C8:("D_801D03C8","UNK_TYPE1","",0x1), - 0x801D03E8:("D_801D03E8","UNK_TYPE1","",0x1), - 0x801D03F0:("D_801D03F0","UNK_TYPE1","",0x1), - 0x801D0408:("D_801D0408","UNK_TYPE1","",0x1), - 0x801D0428:("D_801D0428","UNK_TYPE1","",0x1), - 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1), - 0x801D0462:("D_801D0462","UNK_TYPE1","",0x1), + 0x801D03C8:("sTextboxXPositions","UNK_TYPE1","",0x20), + 0x801D03E8:("sTextboxLowerYPositions","UNK_TYPE1","",0x20), + 0x801D0408:("sTextboxUpperYPositions","UNK_TYPE1","",0x1), + 0x801D0428:("sTextboxMidYPositions","UNK_TYPE1","",0x1), + 0x801D0448:("D_801D0448","s16","[10]",0x14), + 0x801D045C:("D_801D045C","s16","[3]",0x8), + 0x801D0464:("D_801D0464","s16","[2]",0x4), 0x801D0468:("D_801D0468","UNK_TYPE1","",0x1), 0x801D0470:("sNESFontWidths","UNK_TYPE1","",0x1), 0x801D06F0:("sRupeesTextLocalization","char","[]",0x18), - 0x801D0708:("D_801D0708","char","[]",1), 0x801D0710:("sRupeesTextLength","UNK_TYPE1","",0x1), - 0x801D0714:("D_801D0714","char","[]",0x1), - 0x801D0724:("D_801D0724","char","[]",0x1), - 0x801D0730:("D_801D0730","char","[]",0x1), - 0x801D0734:("D_801D0734","char","[]",0x1), - 0x801D0740:("D_801D0740","char","[]",0x1), - 0x801D0744:("D_801D0744","char","[]",0x1), - 0x801D0760:("D_801D0760","char","[]",0x1), - 0x801D0764:("D_801D0764","char","[]",0x1), - 0x801D0770:("D_801D0770","char","[]",0x1), - 0x801D0774:("D_801D0774","char","[]",0x1), - 0x801D0780:("D_801D0780","char","[]",0x1), - 0x801D0784:("D_801D0784","char","[]",0x1), - 0x801D0794:("D_801D0794","char","[]",0x1), - 0x801D07A4:("D_801D07A4","char","[]",0x1), - 0x801D07B0:("D_801D07B0","char","[]",0x1), - 0x801D07B4:("D_801D07B4","char","[]",0x1), - 0x801D07C0:("D_801D07C0","char","[]",0x1), - 0x801D07C4:("D_801D07C4","UNK_TYPE1","",0x1), + 0x801D0714:("sOwlWarpTextENG","char","[]",0xB0), + 0x801D07C4:("sOwlWarpTextLengthENG","UNK_TYPE1","",0x16), 0x801D07DC:("D_801D07DC","UNK_TYPE1","",0x1), 0x801D080C:("D_801D080C","UNK_TYPE1","",0x1), 0x801D083C:("D_801D083C","UNK_TYPE1","",0x1), @@ -2090,6 +2059,7 @@ 0x801D08E4:("D_801D08E4","UNK_TYPE1","",0x1), 0x801D08E8:("sMaskCodeTextENG","UNK_TYPE1","",0x1), 0x801D0900:("sMaskCodeTextLengthENG","UNK_TYPE1","",0x1), + 0x801D0910:("sCreditsFontWidths","f32","[]",0x1), 0x801D0B50:("Player_InitVars","ActorInit","",0x20), 0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38), 0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4), @@ -3982,21 +3952,21 @@ 0x801F6AE0:("sSkyboxDrawMatrix","Mtx*","",0x4), 0x801F6AF0:("D_801F6AF0","UNK_TYPE1","",0x1), 0x801F6AF2:("D_801F6AF2","UNK_TYPE1","",0x1), - 0x801F6B00:("D_801F6B00","UNK_TYPE4","",0x4), - 0x801F6B04:("D_801F6B04","UNK_TYPE4","",0x4), + 0x801F6B00:("sCharTexSize","UNK_TYPE4","",0x4), + 0x801F6B04:("sCharTexScale","UNK_TYPE4","",0x4), 0x801F6B08:("D_801F6B08","UNK_TYPE4","",0x4), - 0x801F6B0C:("D_801F6B0C","UNK_TYPE1","",0x1), - 0x801F6B0E:("D_801F6B0E","UNK_TYPE1","",0x1), - 0x801F6B10:("D_801F6B10","UNK_TYPE1","",0x1), - 0x801F6B12:("D_801F6B12","UNK_TYPE1","",0x1), - 0x801F6B14:("D_801F6B14","UNK_TYPE1","",0x1), - 0x801F6B16:("D_801F6B16","UNK_TYPE1","",0x1), - 0x801F6B18:("D_801F6B18","UNK_TYPE1","",0x1), - 0x801F6B1A:("D_801F6B1A","UNK_TYPE1","",0x1), - 0x801F6B1C:("D_801F6B1C","UNK_TYPE1","",0x1), - 0x801F6B1E:("D_801F6B1E","UNK_TYPE1","",0x1), - 0x801F6B20:("D_801F6B20","UNK_TYPE1","",0x1), - 0x801F6B22:("D_801F6B22","UNK_TYPE1","",0x1), + 0x801F6B0C:("sOcarinaButtonAPrimR","UNK_TYPE1","",0x1), + 0x801F6B0E:("sOcarinaButtonAPrimB","UNK_TYPE1","",0x1), + 0x801F6B10:("sOcarinaButtonAPrimG","UNK_TYPE1","",0x1), + 0x801F6B12:("sOcarinaButtonAEnvR","UNK_TYPE1","",0x1), + 0x801F6B14:("sOcarinaButtonAEnvB","UNK_TYPE1","",0x1), + 0x801F6B16:("sOcarinaButtonAEnvG","UNK_TYPE1","",0x1), + 0x801F6B18:("sOcarinaButtonCPrimR","UNK_TYPE1","",0x1), + 0x801F6B1A:("sOcarinaButtonCPrimB","UNK_TYPE1","",0x1), + 0x801F6B1C:("sOcarinaButtonCPrimG","UNK_TYPE1","",0x1), + 0x801F6B1E:("sOcarinaButtonCEnvR","UNK_TYPE1","",0x1), + 0x801F6B20:("sOcarinaButtonCEnvB","UNK_TYPE1","",0x1), + 0x801F6B22:("sOcarinaButtonCEnvG","UNK_TYPE1","",0x1), 0x801F6B30:("sPlayerCallInitFunc","UNK_TYPE1","",0x1), 0x801F6B34:("sPlayerCallDestroyFunc","UNK_TYPE1","",0x1), 0x801F6B38:("sPlayerCallUpdateFunc","UNK_TYPE1","",0x1), @@ -15291,7 +15261,7 @@ 0x80BA50BC:("D_80BA50BC","UNK_TYPE1","",0x1), 0x80BA50DC:("D_80BA50DC","UNK_TYPE1","",0x1), 0x80BA510C:("D_80BA510C","UNK_TYPE1","",0x1), - 0x80BA5120:("D_80BA5120","UNK_TYPE2","",0x2), + 0x80BA5120:("sOcarinaActionWindFishPrompts","UNK_TYPE2","",0x2), 0x80BA5128:("D_80BA5128","UNK_TYPE1","",0x1), 0x80BA512C:("D_80BA512C","UNK_PTR","",0x4), 0x80BA5174:("D_80BA5174","UNK_PTR","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index 7fb2fe912..43e554975 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1104,7 +1104,7 @@ wordReplace = { "play->msgCtx.unk12023": "play->msgCtx.stateTimer", "play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode", "play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction", - "play->msgCtx.unk12048": "play->msgCtx.lastOcarinaButtonIndex", + "play->msgCtx.unk12048": "play->msgCtx.ocarinaButtonIndex", "play->msgCtx.unk120B0": "play->msgCtx.ocarinaSongEffectActive", "play->msgCtx.unk12046": "play->msgCtx.blockSunsSong", "play->msgCtx.unk12090": "play->msgCtx.textIsCredits", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 3e6042f03..762334814 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2334,59 +2334,59 @@ asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWr asm/non_matchings/code/z_sram_NES/func_80147314.s,func_80147314,0x80147314,0x40 asm/non_matchings/code/z_sram_NES/func_80147414.s,func_80147414,0x80147414,0x3E asm/non_matchings/code/z_sram_NES/Sram_nop8014750C.s,Sram_nop8014750C,0x8014750C,0x5 -asm/non_matchings/code/z_message/func_80147520.s,func_80147520,0x80147520,0x11 -asm/non_matchings/code/z_message/func_80147564.s,func_80147564,0x80147564,0x30 +asm/non_matchings/code/z_message/Message_ResetOcarinaButtonAlphas.s,Message_ResetOcarinaButtonAlphas,0x80147520,0x11 +asm/non_matchings/code/z_message/Message_ResetOcarinaButtonState.s,Message_ResetOcarinaButtonState,0x80147564,0x30 asm/non_matchings/code/z_message/Message_ShouldAdvance.s,Message_ShouldAdvance,0x80147624,0x44 asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s,Message_ShouldAdvanceSilent,0x80147734,0x20 asm/non_matchings/code/z_message/Message_CloseTextbox.s,Message_CloseTextbox,0x801477B4,0x19 -asm/non_matchings/code/z_message/func_80147818.s,func_80147818,0x80147818,0x1C0 +asm/non_matchings/code/z_message/Message_DrawTextboxIcon.s,Message_DrawTextboxIcon,0x80147818,0x1C0 asm/non_matchings/code/z_message/func_80147F18.s,func_80147F18,0x80147F18,0x190 asm/non_matchings/code/z_message/func_80148558.s,func_80148558,0x80148558,0x190 -asm/non_matchings/code/z_message/func_80148B98.s,func_80148B98,0x80148B98,0x49 +asm/non_matchings/code/z_message/Message_HandleChoiceSelection.s,Message_HandleChoiceSelection,0x80148B98,0x49 asm/non_matchings/code/z_message/func_80148CBC.s,func_80148CBC,0x80148CBC,0x2A asm/non_matchings/code/z_message/func_80148D64.s,func_80148D64,0x80148D64,0xB9 asm/non_matchings/code/z_message/func_80149048.s,func_80149048,0x80149048,0x65 asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5 -asm/non_matchings/code/z_message/func_8014995C.s,func_8014995C,0x8014995C,0xAF -asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149C18,0xA9 +asm/non_matchings/code/z_message/Message_DrawTextChar.s,Message_DrawTextChar,0x8014995C,0xAF +asm/non_matchings/code/z_message/Message_GrowTextbox.s,Message_GrowTextbox,0x80149C18,0xA9 asm/non_matchings/code/z_message/Message_FindMessage.s,Message_FindMessage,0x80149EBC,0x2E asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149F74,0x2D7 -asm/non_matchings/code/z_message/func_8014AAD0.s,func_8014AAD0,0x8014AAD0,0xBB -asm/non_matchings/code/z_message/func_8014ADBC.s,func_8014ADBC,0x8014ADBC,0x654 -asm/non_matchings/code/z_message/func_8014C70C.s,func_8014C70C,0x8014C70C,0x142 +asm/non_matchings/code/z_message/Message_HandleOcarina.s,Message_HandleOcarina,0x8014AAD0,0xBB +asm/non_matchings/code/z_message/Message_DrawTextDefault.s,Message_DrawTextDefault,0x8014ADBC,0x654 +asm/non_matchings/code/z_message/Message_LoadItemIcon.s,Message_LoadItemIcon,0x8014C70C,0x142 asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28 asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F -asm/non_matchings/code/z_message/func_8014CDF0.s,func_8014CDF0,0x8014CDF0,0x7B +asm/non_matchings/code/z_message/Message_GetTimerDigits.s,Message_GetTimerDigits,0x8014CDF0,0x7B asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s,Message_SetupLoadItemIcon,0x8014CFDC,0xCA -asm/non_matchings/code/z_message/func_8014D304.s,func_8014D304,0x8014D304,0xCA -asm/non_matchings/code/z_message/func_8014D62C.s,func_8014D62C,0x8014D62C,0x62 -asm/non_matchings/code/z_message/func_8014D7B4.s,func_8014D7B4,0x8014D7B4,0xCB4 +asm/non_matchings/code/z_message/Message_LoadTime.s,Message_LoadTime,0x8014D304,0xCA +asm/non_matchings/code/z_message/Message_LoadOwlWarpText.s,Message_LoadOwlWarpText,0x8014D62C,0x62 +asm/non_matchings/code/z_message/Message_Decode.s,Message_Decode,0x8014D7B4,0xCB4 asm/non_matchings/code/z_message/func_80150A84.s,func_80150A84,0x80150A84,0xA1 -asm/non_matchings/code/z_message/func_80150D08.s,func_80150D08,0x80150D08,0x1EA +asm/non_matchings/code/z_message/Message_OpenText.s,Message_OpenText,0x80150D08,0x1EA asm/non_matchings/code/z_message/func_801514B0.s,func_801514B0,0x801514B0,0x100 asm/non_matchings/code/z_message/Message_StartTextbox.s,Message_StartTextbox,0x801518B0,0x22 asm/non_matchings/code/z_message/Message_ContinueTextbox.s,Message_ContinueTextbox,0x80151938,0x4C -asm/non_matchings/code/z_message/func_80151A68.s,func_80151A68,0x80151A68,0x53 +asm/non_matchings/code/z_message/Message_DisplaySceneTitleCard.s,Message_DisplaySceneTitleCard,0x80151A68,0x53 asm/non_matchings/code/z_message/Message_BombersNotebookQueueEvent.s,Message_BombersNotebookQueueEvent,0x80151BB4,0x3A -asm/non_matchings/code/z_message/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42 -asm/non_matchings/code/z_message/func_80151DA4.s,func_80151DA4,0x80151DA4,0x1A4 -asm/non_matchings/code/z_message/func_80152434.s,func_80152434,0x80152434,0xC -asm/non_matchings/code/z_message/func_80152464.s,func_80152464,0x80152464,0xD +asm/non_matchings/code/z_message/Message_BombersNotebookProcessEventQueue.s,func_80151C9C,0x80151C9C,0x42 +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffImpl.s,Message_DisplayOcarinaStaffImpl,0x80151DA4,0x1A4 +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaff.s,Message_DisplayOcarinaStaff,0x80152434,0xC +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffBlockSunsSong.s,Message_DisplayOcarinaStaffBlockSunsSong,0x80152464,0xD asm/non_matchings/code/z_message/Message_GetState.s,Message_GetState,0x80152498,0x7D -asm/non_matchings/code/z_message/func_8015268C.s,func_8015268C,0x8015268C,0x176 -asm/non_matchings/code/z_message/func_80152C64.s,func_80152C64,0x80152C64,0x12 +asm/non_matchings/code/z_message/Message_DrawTextBox.s,Message_DrawTextBox,0x8015268C,0x176 +asm/non_matchings/code/z_message/Message_SetView.s,Message_SetView,0x80152C64,0x12 asm/non_matchings/code/z_message/func_80152CAC.s,func_80152CAC,0x80152CAC,0x85 -asm/non_matchings/code/z_message/func_80152EC0.s,func_80152EC0,0x80152EC0,0x3E -asm/non_matchings/code/z_message/func_80152FB8.s,func_80152FB8,0x80152FB8,0x1E6 -asm/non_matchings/code/z_message/func_80153750.s,func_80153750,0x80153750,0x1CB -asm/non_matchings/code/z_message/func_80153E7C.s,func_80153E7C,0x80153E7C,0x1D -asm/non_matchings/code/z_message/func_80153EF0.s,func_80153EF0,0x80153EF0,0xB9 -asm/non_matchings/code/z_message/func_801541D4.s,func_801541D4,0x801541D4,0x961 +asm/non_matchings/code/z_message/Message_SpawnSongEffect.s,Message_SpawnSongEffect,0x80152EC0,0x3E +asm/non_matchings/code/z_message/Message_FlashOcarinaButtons.s,Message_FlashOcarinaButtons,0x80152FB8,0x1E6 +asm/non_matchings/code/z_message/Message_DrawOcarinaButtons.s,Message_DrawOcarinaButtons,0x80153750,0x1CB +asm/non_matchings/code/z_message/Message_DrawText.s,Message_DrawText,0x80153E7C,0x1D +asm/non_matchings/code/z_message/Message_DrawSceneTitleCard.s,Message_DrawSceneTitleCard,0x80153EF0,0xB9 +asm/non_matchings/code/z_message/Message_DrawMain.s,Message_DrawMain,0x801541D4,0x961 asm/non_matchings/code/z_message/Message_Draw.s,Message_Draw,0x80156758,0x2D asm/non_matchings/code/z_message/Message_Update.s,Message_Update,0x8015680C,0x7A6 -asm/non_matchings/code/z_message/func_801586A4.s,func_801586A4,0x801586A4,0xC +asm/non_matchings/code/z_message/Message_SetTables.s,Message_SetTables,0x801586A4,0xC asm/non_matchings/code/z_message/Message_Init.s,Message_Init,0x801586D4,0x7F asm/non_matchings/code/z_message_nes/Message_FindMessageNES.s,Message_FindMessageNES,0x801588D0,0x2E asm/non_matchings/code/z_message_nes/Message_LoadCharNES.s,Message_LoadCharNES,0x80158988,0x27 @@ -2395,12 +2395,12 @@ asm/non_matchings/code/z_message_nes/Message_LoadLocalizedRupeesNES.s,Message_Lo asm/non_matchings/code/z_message_nes/Message_LoadRupeesNES.s,Message_LoadRupeesNES,0x80158D98,0x86 asm/non_matchings/code/z_message_nes/Message_LoadTimeNES.s,Message_LoadTimeNES,0x80158FB0,0xAF asm/non_matchings/code/z_message_nes/Message_LoadOwlWarpTextNES.s,Message_LoadOwlWarpTextNES,0x8015926C,0x73 -asm/non_matchings/code/z_message_nes/func_80159438.s,func_80159438,0x80159438,0x8D -asm/non_matchings/code/z_message_nes/func_8015966C.s,func_8015966C,0x8015966C,0x6CB -asm/non_matchings/code/z_message_nes/func_8015B198.s,func_8015B198,0x8015B198,0xD6E +asm/non_matchings/code/z_message_nes/Message_GetTimerDigitsNES.s,Message_GetTimerDigitsNES,0x80159438,0x8D +asm/non_matchings/code/z_message_nes/Message_DrawTextNES.s,Message_DrawTextNES,0x8015966C,0x6CB +asm/non_matchings/code/z_message_nes/Message_DecodeNES.s,Message_DecodeNES,0x8015B198,0xD6E asm/non_matchings/code/z_message_staff/Message_FindCreditsMessage.s,Message_FindCreditsMessage,0x8015E750,0x27 -asm/non_matchings/code/z_message_staff/func_8015E7EC.s,func_8015E7EC,0x8015E7EC,0x42F -asm/non_matchings/code/z_message_staff/func_8015F8A8.s,func_8015F8A8,0x8015F8A8,0x47A +asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s,Message_DrawTextCredits,0x8015E7EC,0x42F +asm/non_matchings/code/z_message_staff/Message_DecodeCredits.s,Message_DecodeCredits,0x8015F8A8,0x47A asm/non_matchings/code/z_player_call/PlayerCall_InitFuncPtrs.s,PlayerCall_InitFuncPtrs,0x80160A90,0x1A asm/non_matchings/code/z_player_call/PlayerCall_Init.s,PlayerCall_Init,0x80160AF8,0x12 asm/non_matchings/code/z_player_call/PlayerCall_Destroy.s,PlayerCall_Destroy,0x80160B40,0x10 From d635b81ee6f952fd8ec5c997912d5f0fb69e8a43 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Tue, 3 Oct 2023 23:31:06 -0300 Subject: [PATCH 117/121] document object_kanban (cuttable sign) (#1364) * initial commit of doc * comment * model and material * indeed c file exists * renamed confusing stuff * space Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_kanban.xml | 29 ++++---- .../actors/ovl_En_Kanban/z_en_kanban.c | 73 +++++++++++-------- .../actors/ovl_En_Kanban/z_en_kanban.h | 42 +++++------ 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml index c52be1022..e5baa90ee 100644 --- a/assets/xml/objects/object_kanban.xml +++ b/assets/xml/objects/object_kanban.xml @@ -1,18 +1,19 @@  + - - - - - - - - - - - - - - + + + + + + + + + + + + + + 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 4a95c525d..cd34383be 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -50,8 +50,9 @@ static ColliderCylinderInit sCylinderInit = { }; static u16 sPartFlags[] = { - PART_UPPER_LEFT, PART_LEFT_UPPER, PART_LEFT_LOWER, PART_RIGHT_UPPER, PART_RIGHT_LOWER, PART_LOWER_LEFT, - PART_UPPER_RIGHT, PART_LOWER_RIGHT, PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND, + PART_UPPER_SIDE_LEFT, PART_LEFT_SIDE_UPPER, PART_LEFT_SIDE_LOWER, PART_RIGHT_SIDE_UPPER, + PART_RIGHT_SIDE_LOWER, PART_LOWER_SIDE_LEFT, PART_UPPER_SIDE_RIGHT, PART_LOWER_SIDE_RIGHT, + PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND, }; static Vec3f sPieceOffsets[] = { @@ -289,40 +290,48 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->zTargetTimer = 10; } - if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_RIGHT)) { + if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_WHOLE_SIGN; - } else if ((piece->partFlags & PART_LEFT_UPPER) && (piece->partFlags & PART_RIGHT_UPPER)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_UPPER) && + (piece->partFlags & PART_RIGHT_SIDE_UPPER)) { piece->pieceType = PIECE_UPPER_HALF; - } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_RIGHT_LOWER)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) && + (piece->partFlags & PART_RIGHT_SIDE_LOWER)) { piece->pieceType = PIECE_LOWER_HALF; - } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_LOWER_RIGHT)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) && + (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_RIGHT_HALF; - } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_LEFT)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && + (piece->partFlags & PART_LOWER_SIDE_LEFT)) { piece->pieceType = PIECE_LEFT_HALF; - } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LEFT_UPPER)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && + (piece->partFlags & PART_LEFT_SIDE_UPPER)) { piece->pieceType = PIECE_2ND_QUAD; - } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_RIGHT_UPPER)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) && + (piece->partFlags & PART_RIGHT_SIDE_UPPER)) { piece->pieceType = PIECE_1ST_QUAD; - } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_LOWER_LEFT)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) && + (piece->partFlags & PART_LOWER_SIDE_LEFT)) { piece->pieceType = PIECE_3RD_QUAD; - } else if ((piece->partFlags & PART_RIGHT_LOWER) && (piece->partFlags & PART_LOWER_RIGHT)) { + } else if ((piece->partFlags & PART_RIGHT_SIDE_LOWER) && + (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_4TH_QUAD; - } else if (piece->partFlags & PART_UPPER_LEFT) { - piece->pieceType = PIECE_UPPER_LEFT; - } else if (piece->partFlags & PART_LEFT_UPPER) { - piece->pieceType = PIECE_LEFT_UPPER; - } else if (piece->partFlags & PART_LEFT_LOWER) { - piece->pieceType = PIECE_LEFT_LOWER; - } else if (piece->partFlags & PART_LOWER_LEFT) { - piece->pieceType = PIECE_LOWER_LEFT; - } else if (piece->partFlags & PART_UPPER_RIGHT) { - piece->pieceType = PIECE_UPPER_RIGHT; - } else if (piece->partFlags & PART_RIGHT_UPPER) { - piece->pieceType = PIECE_RIGHT_UPPER; - } else if (piece->partFlags & PART_RIGHT_LOWER) { - piece->pieceType = PIECE_RIGHT_LOWER; - } else if (piece->partFlags & PART_LOWER_RIGHT) { - piece->pieceType = PIECE_LOWER_RIGHT; + } else if (piece->partFlags & PART_UPPER_SIDE_LEFT) { + piece->pieceType = PIECE_UPPER_SIDE_LEFT; + } else if (piece->partFlags & PART_LEFT_SIDE_UPPER) { + piece->pieceType = PIECE_LEFT_SIDE_UPPER; + } else if (piece->partFlags & PART_LEFT_SIDE_LOWER) { + piece->pieceType = PIECE_LEFT_SIDE_LOWER; + } else if (piece->partFlags & PART_LOWER_SIDE_LEFT) { + piece->pieceType = PIECE_LOWER_SIDE_LEFT; + } else if (piece->partFlags & PART_UPPER_SIDE_RIGHT) { + piece->pieceType = PIECE_UPPER_SIDE_RIGHT; + } else if (piece->partFlags & PART_RIGHT_SIDE_UPPER) { + piece->pieceType = PIECE_RIGHT_SIDE_UPPER; + } else if (piece->partFlags & PART_RIGHT_SIDE_LOWER) { + piece->pieceType = PIECE_RIGHT_SIDE_LOWER; + } else if (piece->partFlags & PART_LOWER_SIDE_RIGHT) { + piece->pieceType = PIECE_LOWER_SIDE_RIGHT; } else if (piece->partFlags & PART_POST_UPPER) { piece->pieceType = PIECE_POST_UPPER; } else if (piece->partFlags & PART_POST_LOWER) { @@ -891,9 +900,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } static Gfx* sDisplayLists[] = { - object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38, - object_kanban_DL_000FF8, object_kanban_DL_0010B8, object_kanban_DL_0011C0, object_kanban_DL_0012C8, - object_kanban_DL_0013D0, object_kanban_DL_001488, object_kanban_DL_001540, + gSignUpperSideLeftModelDL, gSignLeftSideUpperModelDL, gSignLeftSideLowerModelDL, gSignRightSideUpperModelDL, + gSignRightSideLowerModelDL, gSignLowerSideLeftModelDL, gSignUpperSideRightModelDL, gSignLowerSideRightModelDL, + gSignPostUpperModelDL, gSignPostLowerModelDL, gSignPostStandModelDL, }; #include "z_en_kanban_gfx.c" @@ -924,7 +933,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30); + gSPDisplayList(POLY_OPA_DISP++, gSignMaterialDL); if (this->actionState != ENKANBAN_SIGN) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); @@ -983,7 +992,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 255, 255, 255, this->cutMarkAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 150, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, object_kanban_DL_001630); + gSPDisplayList(POLY_XLU_DISP++, gSignParticleDL); } } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h index e54bb3fad..43b3b61fb 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h @@ -5,22 +5,22 @@ struct EnKanban; -#define PART_UPPER_LEFT (1 << 0) -#define PART_LEFT_UPPER (1 << 1) -#define PART_LEFT_LOWER (1 << 2) -#define PART_RIGHT_UPPER (1 << 3) -#define PART_RIGHT_LOWER (1 << 4) -#define PART_LOWER_LEFT (1 << 5) -#define PART_UPPER_RIGHT (1 << 6) -#define PART_LOWER_RIGHT (1 << 7) +#define PART_UPPER_SIDE_LEFT (1 << 0) +#define PART_LEFT_SIDE_UPPER (1 << 1) +#define PART_LEFT_SIDE_LOWER (1 << 2) +#define PART_RIGHT_SIDE_UPPER (1 << 3) +#define PART_RIGHT_SIDE_LOWER (1 << 4) +#define PART_LOWER_SIDE_LEFT (1 << 5) +#define PART_UPPER_SIDE_RIGHT (1 << 6) +#define PART_LOWER_SIDE_RIGHT (1 << 7) #define PART_POST_UPPER (1 << 8) #define PART_POST_LOWER (1 << 9) #define PART_POST_STAND (1 << 10) -#define LEFT_HALF (PART_UPPER_LEFT | PART_LEFT_UPPER | PART_LEFT_LOWER | PART_LOWER_LEFT) -#define RIGHT_HALF (PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_RIGHT_LOWER | PART_LOWER_RIGHT) -#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_LEFT_UPPER) -#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_LEFT_LOWER | PART_UPPER_LEFT | PART_LEFT_UPPER) -#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_RIGHT_LOWER) +#define LEFT_HALF (PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER | PART_LEFT_SIDE_LOWER | PART_LOWER_SIDE_LEFT) +#define RIGHT_HALF (PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_RIGHT_SIDE_LOWER | PART_LOWER_SIDE_RIGHT) +#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER) +#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_LEFT_SIDE_LOWER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER) +#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_RIGHT_SIDE_LOWER) #define ALL_PARTS (LEFT_HALF | RIGHT_HALF | PART_POST_UPPER | PART_POST_LOWER) typedef enum { @@ -42,14 +42,14 @@ typedef enum { /* 6 */ PIECE_1ST_QUAD, /* 7 */ PIECE_3RD_QUAD, /* 8 */ PIECE_4TH_QUAD, - /* 9 */ PIECE_UPPER_LEFT, - /* 10 */ PIECE_LEFT_UPPER, - /* 11 */ PIECE_LEFT_LOWER, - /* 12 */ PIECE_LOWER_LEFT, - /* 13 */ PIECE_UPPER_RIGHT, - /* 14 */ PIECE_RIGHT_UPPER, - /* 15 */ PIECE_RIGHT_LOWER, - /* 16 */ PIECE_LOWER_RIGHT, + /* 9 */ PIECE_UPPER_SIDE_LEFT, + /* 10 */ PIECE_LEFT_SIDE_UPPER, + /* 11 */ PIECE_LEFT_SIDE_LOWER, + /* 12 */ PIECE_LOWER_SIDE_LEFT, + /* 13 */ PIECE_UPPER_SIDE_RIGHT, + /* 14 */ PIECE_RIGHT_SIDE_UPPER, + /* 15 */ PIECE_RIGHT_SIDE_LOWER, + /* 16 */ PIECE_LOWER_SIDE_RIGHT, /* 17 */ PIECE_POST_UPPER, /* 18 */ PIECE_POST_LOWER, /* 100 */ PIECE_OTHER = 100 From f4a490bb6a2e4d1564ed06b0ee98be274dda7b91 Mon Sep 17 00:00:00 2001 From: fig02 Date: Tue, 3 Oct 2023 23:01:04 -0400 Subject: [PATCH 118/121] Port Proposed OoT Object Docs (#1361) * port docs in z_scene * undo accidental ctrl-f * another fix * expose Object_SpawnPersistent --------- Co-authored-by: engineer124 --- include/z64object.h | 7 - include/z64scene.h | 26 +-- src/code/z_actor.c | 8 +- src/code/z_draw.c | 4 +- src/code/z_effect_soft_sprite_old_init.c | 2 +- src/code/z_en_hy_code.c | 6 +- src/code/z_en_item00.c | 12 +- src/code/z_play.c | 24 +-- src/code/z_player_lib.c | 6 +- src/code/z_scene.c | 157 ++++++++++-------- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 4 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 8 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 2 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 12 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 10 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 12 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 18 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 10 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 10 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 4 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 6 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 4 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 4 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 8 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 12 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 8 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 8 +- .../z_en_invadepoh_demo.c | 8 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 2 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 6 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 12 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 12 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 8 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 2 +- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 2 +- .../ovl_Item_Etcetera/z_item_etcetera.c | 2 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 2 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 2 +- .../actors/ovl_Obj_Purify/z_obj_purify.c | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 2 +- .../actors/ovl_player_actor/z_player.c | 4 +- .../z_eff_en_ice_block.c | 4 +- .../ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c | 4 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 6 +- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c | 6 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 6 +- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 4 +- tools/disasm/functions.txt | 8 +- tools/namefixer.py | 4 + tools/sizes/code_functions.csv | 8 +- 68 files changed, 279 insertions(+), 269 deletions(-) diff --git a/include/z64object.h b/include/z64object.h index 712826815..d547d4a9e 100644 --- a/include/z64object.h +++ b/include/z64object.h @@ -1,13 +1,6 @@ #ifndef Z64OBJECT_H #define Z64OBJECT_H -#define OBJECT_SPACE_SIZE_DEFAULT 1413120 -#define OBJECT_SPACE_SIZE_CLOCK_TOWN 1566720 -#define OBJECT_SPACE_SIZE_MILK_BAR 1617920 -#define OBJECT_SPACE_SIZE_TERMINA_FIELD 1505280 - -#define OBJECT_EXCHANGE_BANK_MAX 35 - #define DEFINE_OBJECT(_name, enumValue) enumValue, #define DEFINE_OBJECT_UNSET(enumValue) enumValue, #define DEFINE_OBJECT_SIZE_ZERO(_name, enumValue) enumValue, diff --git a/include/z64scene.h b/include/z64scene.h index e0f186cd8..b66ad4e41 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -74,7 +74,7 @@ typedef struct { typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 naviQuestHintFileId; - /* 0x4 */ u32 subKeepIndex; + /* 0x4 */ u32 subKeepId; } SCmdSpecialFiles; // size = 0x8 typedef struct { @@ -415,7 +415,7 @@ typedef struct { /* 0x08 */ DmaRequest dmaReq; /* 0x28 */ OSMesgQueue loadQueue; /* 0x40 */ OSMesg loadMsg; -} ObjectStatus; // size = 0x44 +} ObjectEntry; // size = 0x44 typedef struct { /* 0x0 */ RomFile segment; @@ -475,11 +475,11 @@ typedef RoomShapeCullable PolygonType2; typedef struct { /* 0x000 */ void* spaceStart; /* 0x004 */ void* spaceEnd; - /* 0x008 */ u8 num; - /* 0x009 */ u8 spawnedObjectCount; - /* 0x00A */ u8 mainKeepIndex; - /* 0x00B */ u8 subKeepIndex; - /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; + /* 0x008 */ u8 numEntries; // total amount of used entries + /* 0x009 */ u8 numPersistentEntries; // amount of entries that won't be reused when loading a new object list (when loading a new room) + /* 0x00A */ u8 mainKeepSlot; // "gameplay_keep" slot + /* 0x00B */ u8 subKeepSlot; // "gameplay_field_keep" or "gameplay_dangeon_keep" slot + /* 0x00C */ ObjectEntry slots[35]; } ObjectContext; // size = 0x958 #define PATH_INDEX_NONE -1 @@ -899,13 +899,13 @@ typedef enum { #define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED #define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST -s32 Object_Spawn(ObjectContext* objectCtx, s16 id); -void Object_InitBank(struct GameState* gameState, ObjectContext* objectCtx); -void Object_UpdateBank(ObjectContext* objectCtx); -s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId); -s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index); +s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id); +void Object_InitContext(struct GameState* gameState, ObjectContext* objectCtx); +void Object_UpdateEntries(ObjectContext* objectCtx); +s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId); +s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot); void Object_LoadAll(ObjectContext* objectCtx); -void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id); +void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id); void Scene_CommandSpawnList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandActorList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandActorCutsceneCamList(struct PlayState* play, SceneCmd* cmd); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 10f782e25..7c741ae85 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1096,7 +1096,7 @@ void Actor_SetScale(Actor* actor, f32 scale) { } void Actor_SetObjectDependency(PlayState* play, Actor* actor) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[actor->objBankIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[actor->objBankIndex].segment); } void Actor_Init(Actor* actor, PlayState* play) { @@ -2700,8 +2700,8 @@ void Actor_Draw(PlayState* play, Actor* actor) { Matrix_Scale(actor->scale.x, actor->scale.y, actor->scale.z, MTXMODE_APPLY); Actor_SetObjectDependency(play, actor); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); if (actor->colorFilterTimer != 0) { s32 colorFlag = COLORFILTER_GET_COLORFLAG(actor->colorFilterParams); @@ -3299,7 +3299,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 return NULL; } - objBankIndex = Object_GetIndex(&play->objectCtx, actorInit->objectId); + objBankIndex = Object_GetSlot(&play->objectCtx, actorInit->objectId); if ((objBankIndex < 0) || ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) && (actorInit->id != ACTOR_BOSS_05))) { Actor_FreeOverlay(&gActorOverlayTable[index]); diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 2a56e0ba5..3f1d1dc47 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -827,9 +827,9 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_BSMASK); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_BSMASK); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index 63b6861a7..d71a18674 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -41,7 +41,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { MtxF mfTrans11DA0; s32 pad1; Mtx* mtx; - void* object = play->objectCtx.status[this->rgObjBankIndex].segment; + void* object = play->objectCtx.slots[this->rgObjBankIndex].segment; OPEN_DISPS(gfxCtx); diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index e2f31c404..d64308bff 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -133,7 +133,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { } void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); EnHy_ChangeAnim(&enHy->skelAnime, animIndex); } @@ -141,7 +141,7 @@ s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play) { s32 isUpdated = false; if (enHy->actor.draw != NULL) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); SkelAnime_Update(&enHy->skelAnime); isUpdated = true; } @@ -168,7 +168,7 @@ s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg enHy->actor.objBankIndex = enHy->skelLowerObjIndex; isInitialized = true; ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->actor.objBankIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->actor.objBankIndex].segment); SkelAnime_InitFlex(play, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable, ENHY_LIMB_MAX); EnHy_ChangeObjectAndAnim(enHy, play, animIndex); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index f9f5df5a8..c6b52e476 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -184,17 +184,17 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; case ITEM00_SHIELD_HERO: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_SHIELD_2); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_MAP: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_MAP); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_COMPASS: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_COMPASS); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; @@ -317,7 +317,7 @@ void EnItem00_Destroy(Actor* thisx, PlayState* play) { } void EnItem00_WaitForHeartObject(EnItem00* this, PlayState* play) { - s32 objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { this->actor.objBankIndex = objBankIndex; @@ -725,7 +725,7 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) { case ITEM00_RECOVERY_HEART: if (this->unk152 < 0) { if (this->unk152 == -1) { - s8 bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEART); + s8 bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEART); if (Object_IsLoaded(&play->objectCtx, bankIndex)) { this->actor.objBankIndex = bankIndex; @@ -852,7 +852,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) { s32 pad[2]; - if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { + if (Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/code/z_play.c b/src/code/z_play.c index 9a5e6541d..f71cf0c0d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -921,8 +921,8 @@ void Play_UpdateMain(PlayState* this) { u8 freezeFlashTimer; s32 sp5C = false; - gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_PROCESS) { @@ -972,7 +972,7 @@ void Play_UpdateMain(PlayState* this) { sp5C = (this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE); AnimationContext_Reset(&this->animationCtx); - Object_UpdateBank(&this->objectCtx); + Object_UpdateEntries(&this->objectCtx); if (!sp5C && (IREG(72) == 0)) { this->gameplayFrames++; @@ -1153,17 +1153,17 @@ void Play_DrawMain(PlayState* this) { OPEN_DISPS(gfxCtx); - gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); - gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); - gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); - gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); + gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSPSegment(POLY_OPA_DISP++, 0x02, this->sceneSegment); gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment); @@ -1585,7 +1585,7 @@ void Play_InitScene(PlayState* this, s32 spawn) { this->sceneMaterialAnims = NULL; this->roomCtx.unk74 = NULL; this->numSetupActors = 0; - Object_InitBank(&this->state, &this->objectCtx); + Object_InitContext(&this->state, &this->objectCtx); LightContext_Init(this, &this->lightCtx); Door_InitContext(&this->state, &this->doorCtx); Room_Init(this, &this->roomCtx); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 24b55cfea..f288b31de 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -396,9 +396,9 @@ void func_8012301C(Actor* thisx, PlayState* play2) { gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); - this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->actor.objBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); } else if (this->actionVar1 >= 3) { - s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { this->actor.objBankIndex = objBankIndex; @@ -1869,7 +1869,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis 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); + gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.slots[player->actor.objBankIndex].segment); gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 811853f07..d26156d58 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -1,28 +1,41 @@ #include "global.h" -s32 Object_Spawn(ObjectContext* objectCtx, s16 id) { +/** + * Spawn an object file of a specified ID that will persist through room changes. + * + * This waits for the file to be fully loaded, the data is available when the function returns. + * + * @return The new object slot corresponding to the requested object ID. + * + * @note This function is not meant to be called externally to spawn object files on the fly. + * When an object is spawned with this function, all objects that come before it in the entry list will be treated as + * persistent, which will likely cause either the amount of free slots or object space memory to run out. + * This function is only meant to be called internally on scene load, before the object list from any room is processed. + */ +s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id) { size_t size; - objectCtx->status[objectCtx->num].id = id; + objectCtx->slots[objectCtx->numEntries].id = id; size = gObjectTable[id].vromEnd - gObjectTable[id].vromStart; if (1) {} if (size != 0) { - DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, gObjectTable[id].vromStart, size); + DmaMgr_SendRequest0(objectCtx->slots[objectCtx->numEntries].segment, gObjectTable[id].vromStart, size); } - if (objectCtx->num < OBJECT_EXCHANGE_BANK_MAX - 1) { - objectCtx->status[objectCtx->num + 1].segment = ALIGN16((u32)objectCtx->status[objectCtx->num].segment + size); + if (objectCtx->numEntries < ARRAY_COUNT(objectCtx->slots) - 1) { + objectCtx->slots[objectCtx->numEntries + 1].segment = + ALIGN16((u32)objectCtx->slots[objectCtx->numEntries].segment + size); } - objectCtx->num++; - objectCtx->spawnedObjectCount = objectCtx->num; + objectCtx->numEntries++; + objectCtx->numPersistentEntries = objectCtx->numEntries; - return objectCtx->num - 1; + return objectCtx->numEntries - 1; } -void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { +void Object_InitContext(GameState* gameState, ObjectContext* objectCtx) { PlayState* play = (PlayState*)gameState; s32 pad; u32 spaceSize; @@ -30,66 +43,66 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { if (play->sceneId == SCENE_CLOCKTOWER || play->sceneId == SCENE_TOWN || play->sceneId == SCENE_BACKTOWN || play->sceneId == SCENE_ICHIBA) { - spaceSize = OBJECT_SPACE_SIZE_CLOCK_TOWN; + spaceSize = 1530 * 1024; } else if (play->sceneId == SCENE_MILK_BAR) { - spaceSize = OBJECT_SPACE_SIZE_MILK_BAR; + spaceSize = 1580 * 1024; } else if (play->sceneId == SCENE_00KEIKOKU) { - spaceSize = OBJECT_SPACE_SIZE_TERMINA_FIELD; + spaceSize = 1470 * 1024; } else { - spaceSize = OBJECT_SPACE_SIZE_DEFAULT; + spaceSize = 1380 * 1024; } - objectCtx->num = 0; - objectCtx->spawnedObjectCount = 0; - objectCtx->mainKeepIndex = 0; - objectCtx->subKeepIndex = 0; + objectCtx->numEntries = 0; + objectCtx->numPersistentEntries = 0; + objectCtx->mainKeepSlot = 0; + objectCtx->subKeepSlot = 0; // clang-format off - for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; } + for (i = 0; i < ARRAY_COUNT(objectCtx->slots); i++) { objectCtx->slots[i].id = 0; } // clang-format on - objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); + objectCtx->spaceStart = objectCtx->slots[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize); - objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP); + objectCtx->mainKeepSlot = Object_SpawnPersistent(objectCtx, GAMEPLAY_KEEP); - gSegments[0x04] = VIRTUAL_TO_PHYSICAL(objectCtx->status[objectCtx->mainKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(objectCtx->slots[objectCtx->mainKeepSlot].segment); } -void Object_UpdateBank(ObjectContext* objectCtx) { +void Object_UpdateEntries(ObjectContext* objectCtx) { s32 i; - ObjectStatus* status = &objectCtx->status[0]; + ObjectEntry* entry = &objectCtx->slots[0]; RomFile* objectFile; size_t size; - for (i = 0; i < objectCtx->num; i++) { - if (status->id < 0) { - s32 id = -status->id; + for (i = 0; i < objectCtx->numEntries; i++) { + if (entry->id < 0) { + s32 id = -entry->id; - if (status->dmaReq.vromAddr == 0) { + if (entry->dmaReq.vromAddr == 0) { objectFile = &gObjectTable[id]; size = objectFile->vromEnd - objectFile->vromStart; if (size == 0) { - status->id = 0; + entry->id = 0; } else { - osCreateMesgQueue(&status->loadQueue, &status->loadMsg, 1); - DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart, size, 0, - &status->loadQueue, NULL); + osCreateMesgQueue(&entry->loadQueue, &entry->loadMsg, 1); + DmaMgr_SendRequestImpl(&entry->dmaReq, entry->segment, objectFile->vromStart, size, 0, + &entry->loadQueue, NULL); } - } else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) { - status->id = id; + } else if (!osRecvMesg(&entry->loadQueue, NULL, OS_MESG_NOBLOCK)) { + entry->id = id; } } - status++; + entry++; } } -s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { +s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId) { s32 i; - for (i = 0; i < objectCtx->num; i++) { - if (ABS_ALT(objectCtx->status[i].id) == objectId) { + for (i = 0; i < objectCtx->numEntries; i++) { + if (ABS_ALT(objectCtx->slots[i].id) == objectId) { return i; } } @@ -97,8 +110,8 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { return -1; } -s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index) { - if (objectCtx->status[index].id > 0) { +s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot) { + if (objectCtx->slots[slot].id > 0) { return true; } else { return false; @@ -110,31 +123,31 @@ void Object_LoadAll(ObjectContext* objectCtx) { s32 id; uintptr_t vromSize; - for (i = 0; i < objectCtx->num; i++) { - id = objectCtx->status[i].id; + for (i = 0; i < objectCtx->numEntries; i++) { + id = objectCtx->slots[i].id; vromSize = gObjectTable[id].vromEnd - gObjectTable[id].vromStart; if (vromSize == 0) { continue; } - DmaMgr_SendRequest0(objectCtx->status[i].segment, gObjectTable[id].vromStart, vromSize); + DmaMgr_SendRequest0(objectCtx->slots[i].segment, gObjectTable[id].vromStart, vromSize); } } -void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) { +void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id) { u32 addr; uintptr_t vromSize; RomFile* fileTableEntry; - objectCtx->status[iParm2].id = -id; - objectCtx->status[iParm2].dmaReq.vromAddr = 0; + objectCtx->slots[slot].id = -id; + objectCtx->slots[slot].dmaReq.vromAddr = 0; fileTableEntry = &gObjectTable[id]; vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart; // TODO: UB to cast void to u32 - addr = ((u32)objectCtx->status[iParm2].segment) + vromSize; + addr = ((u32)objectCtx->slots[slot].segment) + vromSize; addr = ALIGN16(addr); return (void*)addr; @@ -152,19 +165,19 @@ void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { ((gSaveContext.respawnFlag == 2) && (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { // Skull Kid Object - Object_Spawn(&play->objectCtx, OBJECT_STK); + Object_SpawnPersistent(&play->objectCtx, OBJECT_STK); return; } - loadedCount = Object_Spawn(&play->objectCtx, OBJECT_LINK_CHILD); - nextObject = play->objectCtx.status[play->objectCtx.num].segment; - play->objectCtx.num = loadedCount; - play->objectCtx.spawnedObjectCount = loadedCount; + loadedCount = Object_SpawnPersistent(&play->objectCtx, OBJECT_LINK_CHILD); + nextObject = play->objectCtx.slots[play->objectCtx.numEntries].segment; + play->objectCtx.numEntries = loadedCount; + play->objectCtx.numPersistentEntries = loadedCount; playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[0].initInfo->objectId = playerObjectId; - Object_Spawn(&play->objectCtx, playerObjectId); + Object_SpawnPersistent(&play->objectCtx, playerObjectId); - play->objectCtx.status[play->objectCtx.num].segment = nextObject; + play->objectCtx.slots[play->objectCtx.numEntries].segment = nextObject; } // SceneTableEntry Header Command 0x01: Actor List @@ -224,10 +237,10 @@ void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) { { SEGMENT_ROM_START(elf_message_ydan), SEGMENT_ROM_END(elf_message_ydan) }, }; - if (cmd->specialFiles.subKeepIndex != 0) { - play->objectCtx.subKeepIndex = Object_Spawn(&play->objectCtx, cmd->specialFiles.subKeepIndex); + if (cmd->specialFiles.subKeepId != 0) { + play->objectCtx.subKeepSlot = Object_SpawnPersistent(&play->objectCtx, cmd->specialFiles.subKeepId); // TODO: Segment number enum? - gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment); + gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[play->objectCtx.subKeepSlot].segment); } if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) { @@ -255,28 +268,28 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { s32 i; s32 j; s32 k; - ObjectStatus* firstObject; - ObjectStatus* status; - ObjectStatus* status2; + ObjectEntry* firstObject; + ObjectEntry* entry; + ObjectEntry* invalidatedEntry; s16* objectEntry; void* nextPtr; objectEntry = Lib_SegmentedToVirtual(cmd->objectList.segment); k = 0; - i = play->objectCtx.spawnedObjectCount; - status = &play->objectCtx.status[i]; - firstObject = play->objectCtx.status; + i = play->objectCtx.numPersistentEntries; + entry = &play->objectCtx.slots[i]; + firstObject = &play->objectCtx.slots[0]; - while (i < play->objectCtx.num) { - if (status->id != *objectEntry) { - status2 = &play->objectCtx.status[i]; + while (i < play->objectCtx.numEntries) { + if (entry->id != *objectEntry) { + invalidatedEntry = &play->objectCtx.slots[i]; - for (j = i; j < play->objectCtx.num; j++) { - status2->id = 0; - status2++; + for (j = i; j < play->objectCtx.numEntries; j++) { + invalidatedEntry->id = 0; + invalidatedEntry++; } - play->objectCtx.num = i; + play->objectCtx.numEntries = i; Actor_KillAllWithMissingObject(play, &play->actorCtx); continue; @@ -285,13 +298,13 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { i++; k++; objectEntry++; - status++; + entry++; } while (k < cmd->objectList.num) { nextPtr = func_8012F73C(&play->objectCtx, i, *objectEntry); - if (i < OBJECT_EXCHANGE_BANK_MAX - 1) { + if (i < ARRAY_COUNT(play->objectCtx.slots) - 1) { firstObject[i + 1].segment = nextPtr; } @@ -300,7 +313,7 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { objectEntry++; } - play->objectCtx.num = i; + play->objectCtx.numEntries = i; } // SceneTableEntry Header Command 0x0C: Light List diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 4baff41ce..3dc02ba7d 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -1174,7 +1174,7 @@ s8 SubS_IsObjectLoaded(s8 index, PlayState* play) { } s8 SubS_GetObjectIndex(s16 id, PlayState* play) { - return Object_GetIndex(&play->objectCtx, id); + return Object_GetSlot(&play->objectCtx, id); } /** diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index ea2fe2c90..dae692c89 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -212,7 +212,7 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) { BgBreakwallStruct* sp24 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)]; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - this->unk_15C = Object_GetIndex(&play->objectCtx, sp24->unk_00); + this->unk_15C = Object_GetSlot(&play->objectCtx, sp24->unk_00); if ((this->unk_15C < 0) || !sp24->unk_14(this, play)) { Actor_Kill(&this->dyna.actor); 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 8e96cae50..91ea969e2 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 @@ -404,13 +404,13 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gWoodenFlowerOuterPetalDL); } - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_SYOKUDAI); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_SYOKUDAI); if ((objectIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objectIndex))) { Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y - 64.5f, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(1.5f, 1.5f, 1.5f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); gSPDisplayList(POLY_OPA_DISP++, gObjectSyokudaiTypeNoSwitchDL); } 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 16e068156..63cedff5a 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -103,7 +103,7 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { thisx->update = Actor_Noop; } } else { - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UMAJUMP); if (this->objectIndex < 0) { Actor_Kill(thisx); 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 e9a3e79c7..e9394f783 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2152,14 +2152,14 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { /* Start of Gyorg's Draw section */ void Boss03_SetObject(PlayState* play, s16 objectId) { - s32 objectIndex = Object_GetIndex(&play->objectCtx, objectId); + s32 objectIndex = Object_GetSlot(&play->objectCtx, objectId); OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index ff88a61db..8f3b401da 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -57,7 +57,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) { objectIndex = 0; } else { - objectIndex = Object_GetIndex(&play->objectCtx, sEffectTypeObjects[type]); + objectIndex = Object_GetSlot(&play->objectCtx, sEffectTypeObjects[type]); } if (objectIndex < 0) { diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c index 63228436f..b52787f36 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -57,7 +57,7 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { this->getItemDrawId = sGetItemDraws[itemIndex]; this->cueType = sCueTypes[itemIndex]; - objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectBankIndices[itemIndex]); if (objectIndex < 0) { Actor_Kill(&this->actor); return; 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 1ee2b1c9d..badd4bc12 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -461,7 +461,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) { case DEMO_KANKYO_TYPE_GIANTS: this->isSafeToDrawGiants = false; - objId = Object_GetIndex(&play->objectCtx, sObjectBubbleIndex); + objId = Object_GetSlot(&play->objectCtx, sObjectBubbleIndex); DemoKankyo_SetupAction(this, DemoKakyo_GiantObjectCheck); break; 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 dfcb610c8..a55f2cc1f 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -81,9 +81,9 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { } if (objectIndex2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return isAnimFinished; @@ -101,10 +101,10 @@ s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { } if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return didAnimChange; @@ -312,9 +312,9 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Matrix_TranslateRotateZYX(&D_80C1D2C8, &D_80C1D2D4); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index 9f30d4343..3c499aa7a 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -72,7 +72,7 @@ void DmChar03_Destroy(Actor* thisx, PlayState* play) { } void func_80AAB5F8(DmChar03* this, PlayState* play) { - s32 index = Object_GetIndex(&play->objectCtx, OBJECT_GI_NUTSMASK); + s32 index = Object_GetSlot(&play->objectCtx, OBJECT_GI_NUTSMASK); if (index >= 0) { this->objectIndex = index; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index 192e040a9..f2f8980a0 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -178,7 +178,7 @@ void DmChar05_Destroy(Actor* thisx, PlayState* play) { } void func_80AAC990(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_GOLONMASK); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_GOLONMASK); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -200,7 +200,7 @@ void func_80AAC9DC(DmChar05* this, PlayState* play) { } void func_80AACA98(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK13); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK13); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -232,7 +232,7 @@ void func_80AACBE4(DmChar05* this, PlayState* play) { OBJECT_GI_MASK11, OBJECT_GI_MASK20, OBJECT_GI_RABIT_MASK, OBJECT_GI_MASK12, }; s32 params = DMCHAR05_GET(&this->actor) - DMCHAR05_5; - s32 objectIdx = Object_GetIndex(&play->objectCtx, D_80AAE2F0[params]); + s32 objectIdx = Object_GetSlot(&play->objectCtx, D_80AAE2F0[params]); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -278,7 +278,7 @@ void func_80AACD0C(DmChar05* this, PlayState* play) { } void func_80AACD1C(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_ZORAMASK); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_ZORAMASK); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -298,7 +298,7 @@ void func_80AACD68(DmChar05* this, PlayState* play) { } void func_80AACE10(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK15); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK15); if (objectIdx >= 0) { this->unk_18F = objectIdx; 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 2f7435053..ec5a83095 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -81,9 +81,9 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { } if (objectIndex2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return isAnimFinished; @@ -101,10 +101,10 @@ s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { } if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return didAnimChange; @@ -312,9 +312,9 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_TranslateRotateZYX(&D_80C25218, &D_80C25224); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); Matrix_Pop(); 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 fb45200bc..cf8ed15e1 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -320,7 +320,7 @@ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) { } if (objectIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } } @@ -1062,9 +1062,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->shouldDraw = true; if (DM_STK_GET_TYPE(&this->actor) != DM_STK_TYPE_MAJORAS_MASK) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_NOT_READY; - this->objectStkObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK); - this->objectStk2ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK2); - this->objectStk3ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK3); + this->objectStkObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK); + this->objectStk2ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK2); + this->objectStk3ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK3); if (this->objectStkObjectIndex < 0) { Actor_Kill(&this->actor); } @@ -1968,15 +1968,15 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot (this->objectStk2ObjectIndex >= 0)) { Matrix_Push(); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStk2ObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStk2ObjectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStk2ObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStk2ObjectIndex].segment); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gSkullKidMajorasMaskCurseOverlayTexAnim)); Gfx_DrawDListOpa(play, gSkullKidMajorasMaskCurseOverlayDL); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStkObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStkObjectIndex].segment); Matrix_Pop(); } @@ -2095,7 +2095,7 @@ void DmStk_Draw(Actor* thisx, PlayState* play) { return; } - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); OPEN_DISPS(play->state.gfxCtx); 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 c6e0e4269..b9b53a081 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -234,7 +234,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->slidingDoor.dyna.actor.room = -1; } - if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { + if ((this->requiredObjBankIndex = Object_GetSlot(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { Actor_Kill(&this->slidingDoor.dyna.actor); return; } 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 7b9355305..46fd9d5b2 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 @@ -264,9 +264,9 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -303,8 +303,8 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == BBA_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } 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 daa07db44..09d67ac24 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 @@ -254,10 +254,10 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == CNE_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); *dList = gCneHeadBrownHairDL; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -294,8 +294,8 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == CNE_LIMB_RIGHT_FOOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } 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 5282697a4..31e904bcf 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -588,10 +588,10 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA); + objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_BOMBIWA); if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) { gDPPipeSync(POLY_OPA_DISP++); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIdx].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIdx].segment); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 2dfc36daa..61170a5d0 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -210,7 +210,7 @@ s32 func_80A515C4(EnDnk* this) { void func_80A51648(EnDnk* this, PlayState* play) { if (SubS_IsObjectLoaded(this->unk_28E, play) == true) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_28E].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_28E].segment); this->actor.draw = func_80A52018; this->actor.objBankIndex = this->unk_28E; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f); 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 289b1403d..a63766b70 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -440,16 +440,16 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { break; } } - if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { objectInfo++; } } this->knobDoor.dlIndex = objectInfo->dListIndex; - objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectBankIndex < 0) { objectInfo = &sObjInfo[15]; - objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectBankIndex != 0) { Actor_Kill(&this->knobDoor.dyna.actor); return; diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index dfa0e4934..fe09aa1fe 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -101,10 +101,10 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { break; } } - if ((i >= 15) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= 15) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { objectInfo++; } - objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectIndex < 0) { Actor_Kill(&this->knobDoor.dyna.actor); } else { diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index da2f0571d..a521abaa0 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -118,9 +118,9 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp].segment); gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp2].segment); CLOSE_DISPS(play->state.gfxCtx); } 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 8f6551e84..64b7ea1c2 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 @@ -172,7 +172,7 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectIndex].segment); switch (this->type) { case ENDING_HERO6_TYPE_DAIKU_RED: diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 8468c3e54..e902baa2d 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -165,19 +165,19 @@ void EnFall_Init(Actor* thisx, PlayState* play) { case EN_FALL_TYPE_LODMOON_NO_LERP: case EN_FALL_TYPE_LODMOON: case EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_LODMOON); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_LODMOON); break; case EN_FALL_TYPE_MOONS_TEAR: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MOONSTON); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MOONSTON); break; case EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL2); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL2); break; default: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL); break; } 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 727b2ff2a..938874266 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -416,12 +416,12 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { } void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); SkelAnime_Update(&this->skelAnime); } void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -550,7 +550,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) { break; case 0xD66: - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_19; EnGeg_ChangeAnim(this, play); @@ -568,7 +568,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD72: case 0xD75: case 0xD8B: - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_4; EnGeg_ChangeAnim(this, play); @@ -713,7 +713,7 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->unk_496 = 0xD68; Message_ContinueTextbox(play, this->unk_496); - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_13; EnGeg_ChangeAnim(this, play); @@ -926,7 +926,7 @@ void EnGeg_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 < 0) { Actor_Kill(&this->actor); } 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 495f4712c..299ab5c4b 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -165,7 +165,7 @@ void EnGirlA_InitObjIndex(EnGirlA* this, PlayState* play) { return; } - this->objIndex = Object_GetIndex(&play->objectCtx, sShopItemEntries[params].objectId); + this->objIndex = Object_GetSlot(&play->objectCtx, sShopItemEntries[params].objectId); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; 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 0aecc3233..2f6217411 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -991,10 +991,10 @@ s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) { } if (extraObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment); this->skelAnime.playSpeed = this->animPlaySpeed; isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); } return isAnimFinished; @@ -1051,11 +1051,11 @@ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { } if (extraObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); this->animPlaySpeed = this->skelAnime.playSpeed; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); } return didAnimChange; 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 088e3fae0..df5718605 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -738,7 +738,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_DONKEY; this->unk_528 = 80.0f; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { Actor_Kill(&this->actor); return; } @@ -748,8 +748,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_2; this->unk_528 = 64.8f; this->boostSpeed = 15; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) { - thisx->objBankIndex = Object_Spawn(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) { + thisx->objBankIndex = Object_SpawnPersistent(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); Actor_SetObjectDependency(play, &this->actor); Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); Animation_PlayOnce(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex]); @@ -760,7 +760,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { } else if (ENHORSE_IS_BANDIT_TYPE(&this->actor)) { this->type = HORSE_TYPE_BANDIT; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index cb5d73093..801ad428c 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -209,7 +209,7 @@ void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sAlienInitChain); this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000; - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UCH); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -220,7 +220,7 @@ void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sRomaniInitChain); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MA1); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -233,7 +233,7 @@ void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowInitChain); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0, EN_INVADEPOH_DEMO_TYPE_COW_TAIL); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -250,7 +250,7 @@ void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowTailInitChain); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; 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 23e19bba2..10dc7bcdf 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -425,7 +425,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { this->unk_197 |= 1; } - this->unk_196 = Object_GetIndex(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]); + this->unk_196 = Object_GetSlot(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]); if (this->unk_196 < 0) { Actor_Kill(&this->actor); return; 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 890fafd37..0b246b4df 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -393,7 +393,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) { this->isInWater |= 1; } - this->objIndex = Object_GetIndex(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]); + this->objIndex = Object_GetSlot(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 215c2146c..856c13c0d 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -707,7 +707,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { s16 step; // Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default. - gSPSegment(gfx++, 0x06, play->objectCtx.status[this->actor.objBankIndex].segment); + gSPSegment(gfx++, 0x06, play->objectCtx.slots[this->actor.objBankIndex].segment); Gfx_SetupDL39_Ptr(&gfx); 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 2a6a7ea1b..6ee4a5f80 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -61,7 +61,7 @@ void EnNwc_Init(Actor* thisx, PlayState* play) { s32 niwObjectIndex; EnNwc* this = THIS; - niwObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_NIW); + niwObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_NIW); if (niwObjectIndex < 0) { // niw object does not exist, we need it for tranformation, despawn Actor_Kill(&this->actor); @@ -248,14 +248,14 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) { void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->niwObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectIndex].segment); SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Animation_Change(&this->niwSkeleton, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, 0.0f); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->nwcObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->nwcObjectIndex].segment); this->state = NWC_STATE_NIW_LOADED; EnNwc_ToggleState(this); } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 096b8ff38..45f2b485c 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -275,7 +275,7 @@ void EnOssan_Init(Actor* thisx, PlayState* play) { return; } id = sObjectIds[this->actor.params]; - this->objIndex = Object_GetIndex(&play->objectCtx, id); + this->objIndex = Object_GetSlot(&play->objectCtx, id); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; 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 a89ec608e..33f79d4f2 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 @@ -786,18 +786,18 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) { if (this->animInfoIndex == EN_S_GORO_ANIM_IDLE_STAND) { if (((EnJg*)this->otherGoron)->flags & 1) { - this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); + this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); this->animInfoIndex = EN_S_GORO_ANIM_TAISOU_CHEER; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); return true; } } } else if ((this->animInfoIndex == EN_S_GORO_ANIM_TAISOU_CHEER) && !(((EnJg*)this->otherGoron)->flags & 1)) { - this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); this->animInfoIndex = EN_S_GORO_ANIM_IDLE_STAND; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); this->skelAnime.curFrame = this->skelAnime.endFrame; @@ -1307,7 +1307,7 @@ void EnSGoro_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - s32 objIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + s32 objIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); this->loadedObjIndex = objIndex; if (objIndex < 0) { @@ -1329,7 +1329,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); 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); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); SkelAnime_Update(&this->skelAnime); if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { EnSGoro_UpdateAttentionTarget(this, play); 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 2e05f0f57..92b88e462 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -69,7 +69,7 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN); } - objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); if (objectIndex >= 0) { this->objectIndex = objectIndex; } 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 e5ab7dbad..8a8be15c4 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -381,7 +381,7 @@ void EnSob1_SpawnShopItems(EnSob1* this, PlayState* play, ShopItem* shopItem) { s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { if (objIds[1] != OBJECT_ID_MAX) { - this->unusedObjIndex = Object_GetIndex(&play->objectCtx, objIds[1]); + this->unusedObjIndex = Object_GetSlot(&play->objectCtx, objIds[1]); if (this->unusedObjIndex < 0) { return false; } @@ -389,7 +389,7 @@ s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { this->unusedObjIndex = -1; } if (objIds[2] != OBJECT_ID_MAX) { - this->shopkeeperAnimObjIndex = Object_GetIndex(&play->objectCtx, objIds[2]); + this->shopkeeperAnimObjIndex = Object_GetSlot(&play->objectCtx, objIds[2]); if (this->shopkeeperAnimObjIndex < 0) { return false; } @@ -427,7 +427,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { } objIds = sObjectIds[this->shopType]; - this->mainObjIndex = Object_GetIndex(&play->objectCtx, objIds[0]); + this->mainObjIndex = Object_GetSlot(&play->objectCtx, objIds[0]); if (this->mainObjIndex < 0) { Actor_Kill(&this->actor); return; @@ -1345,7 +1345,7 @@ void EnSob1_Blink(EnSob1* this) { } void EnSob1_ChangeObject(EnSob1* this, PlayState* play) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); } s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { @@ -1363,7 +1363,7 @@ s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gZoraSkel, NULL, this->jointTable, this->morphTable, ZORA_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); Animation_Change(&this->skelAnime, &gZoraShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gZoraShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_ZoraShopkeeper_Draw; @@ -1372,7 +1372,7 @@ void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { void EnSob1_GoronShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); Animation_Change(&this->skelAnime, &gGoronShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGoronShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_GoronShopkeeper_Draw; 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 2491ec4ed..e4240de0a 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -245,9 +245,9 @@ void func_808A54B0(EnSt* this, PlayState* play) { if ((this->unk_18C & 1) && (this->actor.colChkInfo.health != 0)) { OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_2C0].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_2C0].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->unk_2C0].segment); Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); @@ -842,7 +842,7 @@ void func_808A701C(EnSt* this, PlayState* play) { void EnSt_Init(Actor* thisx, PlayState* play) { EnSt* this = THIS; - this->unk_2C0 = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->unk_2C0 = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); if (((ENST_GET_3F(&this->actor) != ENST_3F_63) && Flags_GetSwitch(play, ENST_GET_3F(&this->actor))) || (this->unk_2C0 < 0)) { Actor_Kill(&this->actor); 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 97aa3ed7b..daf58065f 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -112,12 +112,12 @@ void EnSth_Init(Actor* thisx, PlayState* play) { // this actor can draw two separate bodies that use different objects if (STH_GET_SWAMP_BODY(&this->actor)) { - objectId = Object_GetIndex(&play->objectCtx, OBJECT_AHG); + objectId = Object_GetSlot(&play->objectCtx, OBJECT_AHG); } else { - objectId = Object_GetIndex(&play->objectCtx, OBJECT_STH); + objectId = Object_GetSlot(&play->objectCtx, OBJECT_STH); } this->mainObjectId = objectId; - this->maskOfTruthObjectId = Object_GetIndex(&play->objectCtx, OBJECT_MASK_TRUTH); + this->maskOfTruthObjectId = Object_GetSlot(&play->objectCtx, OBJECT_MASK_TRUTH); Actor_SetScale(&this->actor, 0.01f); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -740,7 +740,7 @@ void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.status[this->maskOfTruthObjectId].segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[this->maskOfTruthObjectId].segment); gSPDisplayList(POLY_OPA_DISP++, object_mask_truth_DL_0001A0); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index 66b87c998..be0821580 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -35,7 +35,7 @@ ActorInit En_Sth2_InitVars = { void EnSth2_Init(Actor* thisx, PlayState* play) { EnSth2* this = THIS; - this->objIndex = Object_GetIndex(&play->objectCtx, OBJECT_STH); + this->objIndex = Object_GetSlot(&play->objectCtx, OBJECT_STH); Actor_SetScale(&this->actor, 0.01f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); this->unused = 0; diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.c b/src/overlays/actors/ovl_En_Test2/z_en_test2.c index e853570f4..d909826bb 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -83,7 +83,7 @@ void EnTest2_Update(Actor* thisx, PlayState* play) { EnTest2ModelInfo* modelInfo; EnTest2* this = THIS; - objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[this->actor.params]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[this->actor.params]); if (objectIndex < 0) { Actor_Kill(&this->actor); return; 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 bae88696f..4ae591302 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 @@ -60,7 +60,7 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnWarpTag_WaitForPlayer; } else { - if ((this->dangeonKeepObject = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) { + if ((this->dangeonKeepObject = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index c5b218815..ba4507b71 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -55,7 +55,7 @@ void ItemEtcetera_Init(Actor* thisx, PlayState* play) { s32 pad; ItemEtcetera* this = THIS; s32 type = ITEMETCETERA_GET_FF(&this->actor); - s32 objBankIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); if (objBankIndex < 0) { // assert on debug 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 12afce508..3846ecfd0 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -80,7 +80,7 @@ void ObjEtcetera_Init(Actor* thisx, PlayState* play) { type = DEKU_FLOWER_TYPE_PINK; } - objectIndex = Object_GetIndex(&play->objectCtx, objectIds[type]); + objectIndex = Object_GetSlot(&play->objectCtx, objectIds[type]); if (objectIndex >= 0) { this->objIndex = objectIndex; } 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 e33f62f8b..93c79efa6 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -149,7 +149,7 @@ void ObjKibako_Init(Actor* thisx, PlayState* play2) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collider); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->bankIndex = Object_GetIndex(&play->objectCtx, sObjectIdList[whichBankIndex]); + this->bankIndex = Object_GetSlot(&play->objectCtx, sObjectIdList[whichBankIndex]); if (this->bankIndex < 0) { Actor_Kill(&this->actor); return; 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 d783c88e8..770f2131d 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -93,7 +93,7 @@ void ObjNozoki_Destroy(Actor* thisx, PlayState* play) { } void func_80BA2514(ObjNozoki* this, PlayState* play) { - s32 sp24 = Object_GetIndex(&play->objectCtx, D_80BA34B8[this->unk_15C]); + s32 sp24 = Object_GetSlot(&play->objectCtx, D_80BA34B8[this->unk_15C]); if (sp24 < 0) { Actor_Kill(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c index 649343554..d8b04684b 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -130,7 +130,7 @@ void ObjPurify_Init(Actor* thisx, PlayState* play) { if (sp20 == 1) { DynaPolyActor_Init(&this->dyna, 0); } - this->objIndex = Object_GetIndex(&play->objectCtx, info->objectId); + this->objIndex = Object_GetSlot(&play->objectCtx, info->objectId); if (this->objIndex < 0) { Actor_Kill(&this->dyna.actor); } else if (sp20 == 0) { 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 3bedc3ea4..9a0c9d1c3 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -207,7 +207,7 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - this->unk_17A = Object_GetIndex(&play->objectCtx, sp24->unk_00); + this->unk_17A = Object_GetSlot(&play->objectCtx, sp24->unk_00); if (sp28 == 0) { func_809A3D1C(this); 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 d6f8b468b..1a316dfab 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -186,7 +186,7 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) { this->cylinderCollider.dim.radius = sPotTypeData[type].radius; this->cylinderCollider.dim.height = sPotTypeData[type].height; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->objBankIndex = Object_GetIndex(&play->objectCtx, sPotTypeData[type].objId); + this->objBankIndex = Object_GetSlot(&play->objectCtx, sPotTypeData[type].objId); if (this->objBankIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 57322fb0f..d04907e50 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10661,7 +10661,7 @@ void Player_Init(Actor* thisx, PlayState* play) { if (this->actor.shape.rot.x != 0) { this->transformation = this->actor.shape.rot.x - 1; - objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); + objBankIndex = Object_GetSlot(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); this->actor.objBankIndex = objBankIndex; if (objBankIndex < 0) { Actor_Kill(&this->actor); @@ -12380,7 +12380,7 @@ void Player_Update(Actor* thisx, PlayState* play) { // This block is a leftover dog-following mechanic from OoT if (gSaveContext.dogParams < 0) { - if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) { + if (Object_GetSlot(&play->objectCtx, OBJECT_DOG) < 0) { gSaveContext.dogParams = 0; } else { Actor* dog; diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c index e63d414d9..a7161d37e 100644 --- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c +++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c @@ -25,7 +25,7 @@ EffectSsInit Effect_En_Ice_Block_InitVars = { #define rRotVel regs[3] u32 EffectEnIceBlock_CheckIceBlockObject(EffectSs* this, PlayState* play) { - if (((this->rObjId = Object_GetIndex(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) || + if (((this->rObjId = Object_GetSlot(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjId))) { this->life = -1; this->draw = NULL; @@ -63,7 +63,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x06, - play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK + play->objectCtx.slots[this->rObjId].segment); // object: OBJECT_ICE_BLOCK Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index 87e50fb5f..5febef413 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -29,7 +29,7 @@ EffectSsInit Effect_Ss_D_Fire_InitVars = { static TexturePtr sFireTextures[] = { gDodongoFire0Tex, gDodongoFire1Tex, gDodongoFire2Tex, gDodongoFire3Tex }; s32 EffectSsDFire_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_DODONGO)) < 0) || + if (((this->rObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_DODONGO)) < 0) || !Object_IsLoaded(&play->objectCtx, this->rObjectIndex)) { this->life = -1; this->draw = NULL; @@ -69,7 +69,7 @@ void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) { f32 scale; if (EffectSsDFire_CheckForObject(this, play)) { - object = play->objectCtx.status[this->rObjectIndex].segment; + object = play->objectCtx.slots[this->rObjectIndex].segment; OPEN_DISPS(gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index e3daa2530..e15e58f25 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -33,11 +33,11 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar EffectSsExtraInitParams* params = PARAMS; s32 objIndex; - objIndex = Object_GetIndex(&play->objectCtx, OBJECT_YABUSAME_POINT); + objIndex = Object_GetSlot(&play->objectCtx, OBJECT_YABUSAME_POINT); if ((objIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objIndex))) { void* segBackup = gSegments[6]; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); this->pos = params->pos; this->velocity = params->velocity; @@ -62,7 +62,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) { void* storedSegment; scale = this->rScale / 100.0f; - storedSegment = play->objectCtx.status[this->rObjId].segment; + storedSegment = play->objectCtx.slots[this->rObjId].segment; OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c index 15444ad47..828570685 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c @@ -27,7 +27,7 @@ EffectSsInit Effect_Ss_Hahen_InitVars = { }; void EffectSsHahen_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId)) < 0) || + if (((this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId)) < 0) || !Object_IsLoaded(&play->objectCtx, this->rObjBankIndex)) { this->life = -1; this->draw = NULL; @@ -69,7 +69,7 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != HAHEN_OBJECT_DEFAULT) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -85,7 +85,7 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != -1) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index c552e7c50..bde2227d2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -95,9 +95,9 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != KAKERA_OBJECT_DEFAULT) { if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } else { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } } @@ -127,7 +127,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { } void EffectSsKakera_CheckForObject(EffectSs* this, PlayState* play) { - this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId); + this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId); if ((this->rObjBankIndex < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjBankIndex))) { this->life = 0; this->draw = NULL; diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index c1615e2bf..fcdca875f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -25,7 +25,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar EffectSsStickInitParams* initParams = PARAMS; Vec3f pos; - this->rObjBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->rObjBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); pos = initParams->pos; this->pos = pos; this->vec = pos; @@ -51,7 +51,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 79ab56b45..0d5c950c6 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2415,10 +2415,10 @@ 0x8012F1BC:("Inventory_IncrementSkullTokenCount",), 0x8012F22C:("Inventory_GetSkullTokenCount",), 0x8012F278:("Inventory_SaveLotteryCodeGuess",), - 0x8012F2E0:("Object_Spawn",), - 0x8012F3D0:("Object_InitBank",), - 0x8012F4FC:("Object_UpdateBank",), - 0x8012F608:("Object_GetIndex",), + 0x8012F2E0:("Object_SpawnPersistent",), + 0x8012F3D0:("Object_InitContext",), + 0x8012F4FC:("Object_UpdateEntries",), + 0x8012F608:("Object_GetSlot",), 0x8012F668:("Object_IsLoaded",), 0x8012F698:("Object_LoadAll",), 0x8012F73C:("func_8012F73C",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 43e554975..1fe4ce07f 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -774,6 +774,9 @@ wordReplace = { "func_80133038": "Schedule_RunScript", + "Object_GetIndex": "Object_GetSlot", + "Object_Spawn": "Object_SpawnPersistent", + "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", "EffectSsKiraKira_SpawnSmall": "EffectSsKirakira_SpawnSmall", "EffectSsKiraKira_SpawnDispersed": "EffectSsKirakira_SpawnDispersed", @@ -1156,6 +1159,7 @@ wordReplace = { "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1", "play->roomCtx.curRoom.unk2": "play->roomCtx.curRoom.behaviorType2", "play->roomCtx.unk31": "play->roomCtx.status", + "play->objectCtx.status": "play->objectCtx.slots", "actorCtx.unkC": "actorCtx.halfDaysBit", "actorCtx.unk1F4": "actorCtx.playerImpact.type", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 762334814..02e1bf9cd 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1929,10 +1929,10 @@ asm/non_matchings/code/code_8012EC80/Inventory_SaveDekuPlaygroundHighScore.s,Inv asm/non_matchings/code/code_8012EC80/Inventory_IncrementSkullTokenCount.s,Inventory_IncrementSkullTokenCount,0x8012F1BC,0x1C asm/non_matchings/code/code_8012EC80/Inventory_GetSkullTokenCount.s,Inventory_GetSkullTokenCount,0x8012F22C,0x13 asm/non_matchings/code/code_8012EC80/Inventory_SaveLotteryCodeGuess.s,Inventory_SaveLotteryCodeGuess,0x8012F278,0x16 -asm/non_matchings/code/z_scene/Object_Spawn.s,Object_Spawn,0x8012F2E0,0x3C -asm/non_matchings/code/z_scene/Object_InitBank.s,Object_InitBank,0x8012F3D0,0x4B -asm/non_matchings/code/z_scene/Object_UpdateBank.s,Object_UpdateBank,0x8012F4FC,0x43 -asm/non_matchings/code/z_scene/Object_GetIndex.s,Object_GetIndex,0x8012F608,0x18 +asm/non_matchings/code/z_scene/Object_SpawnPersistent.s,Object_SpawnPersistent,0x8012F2E0,0x3C +asm/non_matchings/code/z_scene/Object_InitContext.s,Object_InitContext,0x8012F3D0,0x4B +asm/non_matchings/code/z_scene/Object_UpdateEntries.s,Object_UpdateEntries,0x8012F4FC,0x43 +asm/non_matchings/code/z_scene/Object_GetSlot.s,Object_GetSlot,0x8012F608,0x18 asm/non_matchings/code/z_scene/Object_IsLoaded.s,Object_IsLoaded,0x8012F668,0xC asm/non_matchings/code/z_scene/Object_LoadAll.s,Object_LoadAll,0x8012F698,0x29 asm/non_matchings/code/z_scene/func_8012F73C.s,func_8012F73C,0x8012F73C,0x18 From d3104be63caa4060a87ff169f42bf255d6a2a08c Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 5 Oct 2023 15:44:51 +1100 Subject: [PATCH 119/121] Switch Flag Cleanup (#1406) * cleanup switchFlag * more cleanup * switchFlags --- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 +- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 6 +-- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.h | 2 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 30 ++++++----- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h | 6 +-- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 52 +++++++++---------- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h | 4 +- .../z_bg_dblue_waterfall.c | 20 +++---- .../z_bg_dblue_waterfall.h | 2 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 17 +++--- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h | 2 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 10 ++-- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.h | 2 +- .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 8 +-- .../ovl_Bg_F40_Switch/z_bg_f40_switch.h | 2 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 2 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.h | 2 +- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c | 15 +++--- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h | 2 +- .../z_bg_hakugin_bombwall.c | 4 +- .../z_bg_hakugin_bombwall.h | 2 +- .../z_bg_hakugin_elvpole.c | 10 ++-- .../z_bg_hakugin_elvpole.h | 2 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 36 ++++++------- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h | 5 +- .../z_bg_hakugin_switch.c | 18 +++---- .../z_bg_hakugin_switch.h | 2 +- .../z_bg_ikana_bombwall.c | 4 +- .../z_bg_ikana_bombwall.h | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h | 2 +- .../z_bg_ikana_rotaryroom.c | 22 ++++---- .../z_bg_ikana_rotaryroom.h | 4 +- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c | 10 ++-- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h | 3 ++ .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 4 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h | 2 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 4 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.h | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h | 2 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c | 4 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h | 2 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 4 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h | 2 + .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.h | 2 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.c | 4 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.h | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.h | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 11 ++-- .../actors/ovl_Door_Shutter/z_door_shutter.h | 2 +- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h | 2 +- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h | 2 +- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h | 2 +- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h | 2 +- src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c | 12 ++--- src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h | 2 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 22 ++++---- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.h | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 7 +-- .../actors/ovl_En_Bigokuta/z_en_bigokuta.h | 2 + src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 13 ++--- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 18 +++---- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 10 +--- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.h | 2 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 4 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.h | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 4 +- .../actors/ovl_En_Elfbub/z_en_elfbub.h | 2 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 2 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 10 ++-- .../actors/ovl_En_Elforg/z_en_elforg.h | 2 +- src/overlays/actors/ovl_En_Fr/z_en_fr.c | 4 +- src/overlays/actors/ovl_En_Fr/z_en_fr.h | 2 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 10 ++-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +-- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 10 ++-- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 4 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 2 +- .../actors/ovl_En_Hit_Tag/z_en_hit_tag.c | 2 +- .../actors/ovl_En_Hit_Tag/z_en_hit_tag.h | 2 +- .../z_en_invisible_ruppe.c | 12 ++--- .../z_en_invisible_ruppe.h | 4 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +-- src/overlays/actors/ovl_En_Ishi/z_en_ishi.h | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 8 +-- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 2 +- src/overlays/actors/ovl_En_Light/z_en_light.c | 6 +-- src/overlays/actors/ovl_En_Light/z_en_light.h | 2 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 24 ++++----- .../ovl_En_Okarina_Tag/z_en_okarina_tag.h | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 8 +-- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 4 +- src/overlays/actors/ovl_En_Owl/z_en_owl.h | 2 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 4 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.h | 2 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 16 +++--- .../actors/ovl_En_Recepgirl/z_en_recepgirl.h | 2 + .../actors/ovl_En_S_Goro/z_en_s_goro.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.h | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +-- src/overlays/actors/ovl_En_St/z_en_st.h | 3 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.h | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.h | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 6 +-- src/overlays/actors/ovl_En_Tk/z_en_tk.h | 4 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 16 +++--- src/overlays/actors/ovl_En_Toto/z_en_toto.h | 4 ++ .../ovl_En_Water_Effect/z_en_water_effect.c | 3 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 6 +-- src/overlays/actors/ovl_En_Zot/z_en_zot.h | 1 + src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c | 4 +- src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h | 2 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 4 +- .../actors/ovl_Obj_Armos/z_obj_armos.h | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 34 ++++++------ src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h | 4 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 6 +-- .../ovl_Obj_Bigicicle/z_obj_bigicicle.h | 2 + .../ovl_Obj_Blockstop/z_obj_blockstop.c | 4 +- .../ovl_Obj_Blockstop/z_obj_blockstop.h | 2 + .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 4 +- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h | 2 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 6 +-- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h | 2 + src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c | 11 ++-- src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h | 5 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 4 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.h | 2 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 22 ++++---- .../ovl_Obj_Fireshield/z_obj_fireshield.h | 4 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 2 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h | 2 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.c | 4 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.h | 2 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.c | 4 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.h | 2 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.c | 4 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.h | 2 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 10 ++-- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 47 +++++++++-------- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.h | 4 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 10 ++-- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h | 6 +-- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h | 2 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c | 4 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 4 +- .../ovl_Obj_Lightblock/z_obj_lightblock.h | 2 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 8 +-- .../ovl_Obj_Lightswitch/z_obj_lightswitch.h | 2 +- .../ovl_Obj_Makekinsuta/z_obj_makekinsuta.c | 6 +-- .../ovl_Obj_Makekinsuta/z_obj_makekinsuta.h | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c | 8 +-- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h | 4 +- .../actors/ovl_Obj_Mure3/z_obj_mure3.c | 4 +- .../actors/ovl_Obj_Mure3/z_obj_mure3.h | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 20 +++---- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.h | 4 +- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 20 ++++--- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 4 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 6 +-- .../actors/ovl_Obj_Raillift/z_obj_raillift.h | 2 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.c | 2 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.h | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 6 +-- .../actors/ovl_Obj_Snowball/z_obj_snowball.h | 2 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 4 +- .../ovl_Obj_Spidertent/z_obj_spidertent.h | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 8 +-- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 4 +- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h | 2 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 6 +-- .../actors/ovl_Obj_Wturn/z_obj_wturn.h | 2 + .../ovl_Obj_Y2shutter/z_obj_y2shutter.c | 10 ++-- .../ovl_Obj_Y2shutter/z_obj_y2shutter.h | 2 +- 203 files changed, 616 insertions(+), 581 deletions(-) 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 0391925ae..da688a81b 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 @@ -103,7 +103,7 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) { 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))) { + if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); return; } @@ -163,7 +163,7 @@ void func_80C0A378(BgAstrBombwall* this) { void func_80C0A38C(BgAstrBombwall* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; - Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); func_80C0A400(this, play); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h index 224d94d7a..698ccfda1 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h @@ -5,7 +5,7 @@ struct BgAstrBombwall; -#define BGASTRBOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*BgAstrBombwallActionFunc)(struct BgAstrBombwall*, PlayState*); typedef struct BgAstrBombwall { diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index dae692c89..45a29260f 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -191,8 +191,8 @@ s32 func_808B74D8(BgBreakwall* this, PlayState* play) { s32 func_808B751C(BgBreakwall* this, PlayState* play) { Actor_SetScale(&this->dyna.actor, 0.1f); - if ((BGBREAKWALL_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - !Flags_GetSwitch(play, BGBREAKWALL_SWITCHFLAG(&this->dyna.actor))) { + if ((BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + !Flags_GetSwitch(play, BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor))) { return false; } @@ -220,7 +220,7 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) { } BgBreakwall_SetupAction(this, func_808B76CC); - this->switchFlag = BGBREAKWALL_SWITCHFLAG(&this->dyna.actor); + this->switchFlag = BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor); } void BgBreakwall_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h index c332fe82c..5baa97232 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h @@ -10,7 +10,7 @@ typedef s32 (*BgBreakwallUnkFunc)(struct BgBreakwall*, PlayState*); typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*); #define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF) -#define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) +#define BGBREAKWALL_SWITCH_FLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) typedef enum { /* 7 */ BGBREAKWALL_F_7 = 7, 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 5d0ac3bc5..52c0f046f 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 @@ -198,7 +198,7 @@ void func_80B8264C(BgDblueBalance* this) { f32 temp_f0; s16 phi_s2; - if (this->unk_170 != 0) { + if (this->isSwitchFlagSet) { if (this->unk_183 < 8) { this->unk_183 = 0; } else { @@ -247,7 +247,7 @@ void func_80B8264C(BgDblueBalance* this) { } void func_80B828E4(BgDblueBalance* this, PlayState* play) { - if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)) && (this->unk_17D <= 0)) { + if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)) && (this->unk_17D <= 0)) { if (this->unk_183 >= 252) { this->unk_183 = 255; } else { @@ -306,7 +306,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { BgDblueBalance* this = THIS; s32 sp2C = BGDBLUEBALANCE_GET_300(&this->dyna.actor); s32 pad2; - s32 sp24 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)); + s32 isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_ProcessInitChain(&this->dyna.actor, sInitChain); @@ -326,7 +326,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { } if (sp2C == 0) { - if (sp24 != 0) { + if (isSwitchFlagSet) { this->dyna.actor.shape.rot.z = -0x1C72; this->unk_174 = -0x1C72; } else { @@ -337,9 +337,9 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { func_80B8259C(this, play); func_80B82DC4(this); } else if (sp2C == 3) { - this->unk_16C = sp24; - this->unk_170 = sp24; - if (sp24 != 0) { + this->isSwitchFlagSet2 = isSwitchFlagSet; + this->isSwitchFlagSet = isSwitchFlagSet; + if (isSwitchFlagSet) { func_80B83344(this); } else { this->unk_178 = 0x1F4; @@ -396,7 +396,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) { BgDblueBalance* sp3C; Vec3f sp30; - if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) { if (this->unk_17D > 0) { this->unk_17D--; } else { @@ -555,7 +555,7 @@ void func_80B83344(BgDblueBalance* this) { } void func_80B8335C(BgDblueBalance* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_178 = -0x14; func_80B833A8(this); } @@ -573,8 +573,8 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { s16 sp26; s16 sp24; - if (this->unk_170 != 0) { - if ((this->unk_16C == 0) && (this->unk_17F == 0)) { + if (this->isSwitchFlagSet) { + if (!this->isSwitchFlagSet2 && (this->unk_17F == 0)) { this->unk_17F = 1; } @@ -590,9 +590,11 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { sp26 = this->dyna.actor.shape.rot.x; this->dyna.actor.shape.rot.x += this->unk_178; sp24 = this->dyna.actor.shape.rot.x; + + //! FAKE: if (sp24) {} - if (this->unk_170 != 0) { + if (this->isSwitchFlagSet) { if (this->unk_186 != 0) { if (func_80B82B00(sp26, sp24, this->unk_184)) { sp28 = true; @@ -619,7 +621,7 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { void func_80B83518(Actor* thisx, PlayState* play) { BgDblueBalance* this = THIS; - this->unk_170 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)); + this->isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)); this->actionFunc(this, play); @@ -638,7 +640,7 @@ void func_80B83518(Actor* thisx, PlayState* play) { CutsceneManager_Queue(this->dyna.actor.csId); } } - this->unk_16C = this->unk_170; + this->isSwitchFlagSet2 = this->isSwitchFlagSet; } void BgDblueBalance_Draw(Actor* thisx, PlayState* play) { 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 5d72ea3db..4c16a1cb8 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 @@ -7,7 +7,7 @@ struct BgDblueBalance; typedef void (*BgDblueBalanceActionFunc)(struct BgDblueBalance*, PlayState*); -#define BGDBLUEBALANCE_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGDBLUEBALANCE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGDBLUEBALANCE_GET_300(thisx) (((thisx)->params >> 8) & 3) typedef struct { @@ -23,8 +23,8 @@ typedef struct BgDblueBalance { /* 0x160 */ struct BgDblueBalance* unk_160; /* 0x164 */ struct BgDblueBalance* unk_164; /* 0x168 */ BgDblueBalanceActionFunc actionFunc; - /* 0x16C */ s32 unk_16C; - /* 0x170 */ s32 unk_170; + /* 0x16C */ s32 isSwitchFlagSet2; + /* 0x170 */ s32 isSwitchFlagSet; /* 0x174 */ s16 unk_174; /* 0x176 */ s16 unk_176; /* 0x178 */ s16 unk_178; 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 6562c4738..be3623f2d 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 @@ -108,22 +108,22 @@ static InitChainEntry sInitChain[] = { Vec3f D_80A2B988 = { 1785.0f, 0.0f, 220.0f }; -s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) { +s32 func_80A29A80(PlayState* play, s32 switchFlagBase, s32 arg2) { s32 sp2C = 1; - s32 val; + s32 switchFlagOffset; s32 val2; if (arg2 < 14) { - val = D_80A2B870[arg2][0]; + switchFlagOffset = D_80A2B870[arg2][0]; val2 = D_80A2B870[arg2][1]; - while (val--) { - if ((1 << val) & val2) { - if (!Flags_GetSwitch(play, arg1 + val)) { + while (switchFlagOffset--) { + if ((1 << switchFlagOffset) & val2) { + if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } - } else if (Flags_GetSwitch(play, arg1 + val)) { + } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } @@ -132,20 +132,20 @@ s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) { sp2C = 0; switch (arg2) { case 14: - if (!Flags_GetSwitch(play, arg1)) { + if (!Flags_GetSwitch(play, switchFlagBase)) { sp2C = 1; } - if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3)) { + if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3)) { sp2C += 2; } break; case 15: - if (!Flags_GetSwitch(play, arg1) || - (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3))) { + if (!Flags_GetSwitch(play, switchFlagBase) || + (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3))) { sp2C = 1; } break; @@ -162,7 +162,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_160 = BGDBLUEMOVEBG_GET_F(thisx); this->unk_1BC = BGDBLUEMOVEBG_GET_F000(thisx); - this->unk_1C0 = BGDBLUEMOVEBG_GET_FF0(thisx); + this->switchFlag = BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 == 9) || (this->unk_160 == 8)) { @@ -214,7 +214,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { } this->unk_17E = 0; this->unk_184 = 0.0f; - if (Flags_GetSwitch(play, this->unk_1C0)) { + if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_18C = 0x384; } else { this->unk_18C = 0; @@ -224,7 +224,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { break; case 6: - this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC); this->unk_1CC = D_80A2B96C[this->unk_178]; this->unk_1CE = this->unk_1CC; this->actionFunc = func_80A2A1E0; @@ -237,7 +237,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.x = 0; this->dyna.actor.world.rot.z = 0; this->dyna.actor.shape.rot.z = 0; - if (Flags_GetSwitch(play, this->unk_1C0)) { + if (Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->dyna.actor); break; } @@ -257,7 +257,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sCsIdList); i++) { sCsIdList[i] = this->csIdList[i]; } - this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC); this->unk_1CC = D_80A2B96C[this->unk_178]; this->unk_1CE = this->unk_1CC; Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW); @@ -275,7 +275,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { break; case 11: - this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)]; + this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)]; D_80A2BBF0 = this; this->dyna.actor.flags |= ACTOR_FLAG_20; this->dyna.actor.update = Actor_Noop; @@ -314,7 +314,7 @@ void func_80A2A128(BgDblueMovebg* this, PlayState* play) { } void func_80A2A1E0(BgDblueMovebg* this, PlayState* play) { - s32 temp_v0 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + s32 temp_v0 = func_80A29A80(play, this->switchFlag, this->unk_1BC); if (temp_v0 != this->unk_178) { switch (temp_v0) { @@ -422,7 +422,7 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) { if (sp20) { player->stateFlags2 &= ~PLAYER_STATE2_10; this->dyna.pushForce = 0.0f; - Flags_SetSwitch(play, this->unk_1C0); + Flags_SetSwitch(play, this->switchFlag); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); if (func_80A29A80(play, this->unk_1C8, this->unk_1C4)) { @@ -510,9 +510,9 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) { temp = (this->unk_18C + sp26 + 3600) % 3600; if ((temp == 900) || (temp == 2700)) { - Flags_SetSwitch(play, this->unk_1C0); + Flags_SetSwitch(play, this->switchFlag); } else { - Flags_UnsetSwitch(play, this->unk_1C0); + Flags_UnsetSwitch(play, this->switchFlag); } player->stateFlags1 |= PLAYER_STATE1_20; @@ -637,7 +637,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) { } } - temp_v0_3 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + temp_v0_3 = func_80A29A80(play, this->switchFlag, this->unk_1BC); if (temp_v0_3 != this->unk_178) { switch (temp_v0_3) { case 1: @@ -704,7 +704,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) { } void func_80A2B1A0(BgDblueMovebg* this, PlayState* play) { - switch (func_80A29A80(play, this->unk_1C0, this->unk_1BC)) { + switch (func_80A29A80(play, this->switchFlag, this->unk_1BC)) { case 1: this->dyna.actor.shape.rot.z = this->dyna.actor.home.rot.z; break; @@ -736,7 +736,7 @@ void func_80A2B274(Actor* thisx, PlayState* play) { return; } - temp_v1 = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)]; + temp_v1 = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)]; if (temp_v1 != 0) { if (temp_v1 > 0) { Audio_PlaySfx_WaterWheel(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG); diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h index 6e81c24c1..c9a4e2f7e 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h @@ -8,7 +8,7 @@ struct BgDblueMovebg; typedef void (*BgDblueMovebgActionFunc)(struct BgDblueMovebg*, PlayState*); #define BGDBLUEMOVEBG_GET_F(thisx) ((thisx)->params & 0xF) -#define BGDBLUEMOVEBG_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF) +#define BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0xFF) #define BGDBLUEMOVEBG_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) #define BGDBLUEMOVEBG_F_8 8 @@ -39,7 +39,7 @@ typedef struct BgDblueMovebg { /* 0x1B4 */ UNK_TYPE1 unk1B4[2]; /* 0x1B6 */ s16 csIdList[2]; /* 0x1BC */ s32 unk_1BC; - /* 0x1C0 */ s32 unk_1C0; + /* 0x1C0 */ s32 switchFlag; /* 0x1C4 */ s32 unk_1C4; /* 0x1C8 */ s32 unk_1C8; /* 0x1CC */ s16 unk_1CC; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c index 44acf9343..211aac6fd 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c @@ -80,7 +80,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) { s32 phi_v1; s32 sp18 = BGDBLUEWATERFALL_GET_100(&this->actor); - if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) { phi_v1 = true; } else { phi_v1 = false; @@ -91,7 +91,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) { s32 func_80B83D58(Actor* thisx, PlayState* play) { BgDblueWaterfall* this = THIS; - if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) { return false; } return true; @@ -99,11 +99,11 @@ s32 func_80B83D58(Actor* thisx, PlayState* play) { void func_80B83D94(BgDblueWaterfall* this, PlayState* play) { s32 pad; - s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor); + s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor); s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor); s32 phi_v0; - if (Flags_GetSwitch(play, sp20)) { + if (Flags_GetSwitch(play, switchFlag)) { phi_v0 = true; } else { phi_v0 = false; @@ -111,20 +111,20 @@ void func_80B83D94(BgDblueWaterfall* this, PlayState* play) { if (phi_v0 != sp1C) { if (phi_v0) { - Flags_UnsetSwitch(play, sp20); + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } } } void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) { s32 pad; - s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor); + s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor); s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor); s32 phi_v0; - if (Flags_GetSwitch(play, sp20)) { + if (Flags_GetSwitch(play, switchFlag)) { phi_v0 = true; } else { phi_v0 = false; @@ -132,9 +132,9 @@ void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) { if (phi_v0 == sp1C) { if (phi_v0) { - Flags_UnsetSwitch(play, sp20); + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } } } diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h index fae5cca6a..6e373084e 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h @@ -7,7 +7,7 @@ struct BgDblueWaterfall; typedef void (*BgDblueWaterfallActionFunc)(struct BgDblueWaterfall*, PlayState*); -#define BGDBLUEWATERFALL_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGDBLUEWATERFALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGDBLUEWATERFALL_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgDblueWaterfall { 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 344fcce84..7f0312f0c 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 @@ -120,15 +120,16 @@ void BgDkjailIvy_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); - } else { - DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - this->alpha = 255; - BgDkjailIvy_SetupWaitForCut(this); + return; } + + DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol); + Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); + Collider_UpdateCylinder(&this->dyna.actor, &this->collider); + this->alpha = 255; + BgDkjailIvy_SetupWaitForCut(this); } void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play) { @@ -162,7 +163,7 @@ void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->fadeOutTimer = 50; DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor)); + Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(&this->dyna.actor)); BgDkjailIvy_IvyCutEffects(this, play); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN); BgDkjailIvy_SetupFadeOut(this); diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h index 4835b7a0b..e7ce39a64 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h @@ -3,7 +3,7 @@ #include "global.h" -#define BG_DKJAIL_GET_SWITCH(thisx) ((thisx)->params & 0x7F) +#define BG_DKJAIL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgDkjailIvy; 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 6a4c44b65..db4a1105a 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 @@ -238,7 +238,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { } if (this->path != NULL) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC4530; this->dyna.actor.speed = 40.0f; func_80BC3A2C(this, play); @@ -261,7 +261,7 @@ void BgF40Block_Destroy(Actor* thisx, PlayState* play) { void func_80BC41AC(BgF40Block* this, PlayState* play) { if (func_80BC3D08(this, play, 1)) { - if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80BC4038(this); this->actionFunc = func_80BC44F4; } @@ -314,14 +314,14 @@ void func_80BC4344(BgF40Block* this, PlayState* play) { } void func_80BC4380(BgF40Block* this, PlayState* play) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC4344; } } void func_80BC43CC(BgF40Block* this, PlayState* play) { if (func_80BC3D08(this, play, 1)) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80BC4038(this); this->actionFunc = func_80BC4344; } @@ -356,7 +356,7 @@ void func_80BC44F4(BgF40Block* this, PlayState* play) { } void func_80BC4530(BgF40Block* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC44F4; } } diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h index 228fb6bfd..f74dc754a 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h @@ -8,7 +8,7 @@ struct BgF40Block; typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*); #define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2) -#define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40BLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) #define BGF40BLOCK_PATH_INDEX_NONE 0x3F 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 be3c9cb47..9e4f9a590 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 @@ -73,7 +73,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { actorAsSwitch->isPressed = isPressed; } if (actorAsSwitch->isPressed) { - switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor); + switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(&actorAsSwitch->dyna.actor); if ((switchFlag >= 0) && (switchFlag < 0x80)) { pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F); if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) && @@ -87,7 +87,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) { if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && (actor->update != NULL)) { - switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor); + switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(actor); if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && !(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) { Flags_UnsetSwitch(play, switchFlag); @@ -160,13 +160,13 @@ void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play) { if (!this->isInitiator || (this->dyna.actor.csId == CS_ID_NONE)) { this->actionFunc = BgF40Switch_Press; if (this->isInitiator) { - Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->actionFunc = BgF40Switch_Press; if (this->isInitiator) { - Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } } else { CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h index cfa8c5462..2d9fc589b 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h @@ -5,7 +5,7 @@ struct BgF40Switch; -#define BGF40SWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40SWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef void (*BgF40SwitchActionFunc)(struct BgF40Switch*, PlayState*); diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c index 039d20f3c..9b210c1b8 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c @@ -51,7 +51,7 @@ void BgF40Swlift_Init(Actor* thisx, PlayState* play) { } sHeights[index] = this->dyna.actor.world.pos.y; - sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx); + sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx); if (index != 0) { Actor_Kill(&this->dyna.actor); return; diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h index e377b73e0..e2931698e 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h @@ -1,7 +1,7 @@ #ifndef Z_BG_F40_SWLIFT_H #define Z_BG_F40_SWLIFT_H -#define BG_F40_SWLIFT_GET_SWITCHFLAG(thisx) ((thisx)->params & 0xFF) +#define BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF) #define BG_F40_SWLIFT_GET_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) #include "global.h" 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 fc209773b..a9e70027c 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 @@ -160,14 +160,15 @@ void BgHakaBombwall_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_7F(thisx))) { + if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); - } else { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - func_80BD6260(this); + return; } + + DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148); + Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); + Collider_UpdateCylinder(&this->dyna.actor, &this->collider); + func_80BD6260(this); } void BgHakaBombwall_Destroy(Actor* thisx, PlayState* play) { @@ -200,7 +201,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_80BD5E6C(this, play); this->dyna.actor.draw = NULL; - Flags_SetSwitch(play, BGHAKABOMBWALL_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 0x3C, NA_SE_EV_WALL_BROKEN); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); BgHakaBombwall_SetupEndCutscene(this); diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h index 9e5bd1c43..cb2ce7d02 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGHAKABOMBWALL_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgHakaBombwall; 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 a1d1ebd48..3f043bcc2 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 @@ -316,7 +316,7 @@ void BgHakuginBombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -400,7 +400,7 @@ void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) { ptr->unk_24(this, play); this->dyna.actor.draw = NULL; this->unk_1AC = 20; - Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor)); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80ABCE60; } else { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h index 24b04139e..78b7bf9a8 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h @@ -9,7 +9,7 @@ typedef void (*BgHakuginBombwallActionFunc)(struct BgHakuginBombwall*, PlayState typedef s32 (*BgHakuginBombwallUnkFunc)(struct BgHakuginBombwall*, PlayState*); typedef void (*BgHakuginBombwallUnkFunc2)(struct BgHakuginBombwall*, PlayState*); -#define BGHAKUGIN_BOMBWALL_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGHAKUGIN_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGHAKUGIN_BOMBWALL_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgHakuginBombwall { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c index b4c653b99..35e03c438 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c @@ -42,8 +42,8 @@ void BgHakuginElvpole_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); this->unk_15C = 0; this->unk_160 = false; - if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) { + if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_15E = 0x64; } else { this->unk_15E = -1; @@ -81,12 +81,12 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) { sp28 = true; } else { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 320.0f; - Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor)); this->unk_15E = -1; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); } - } else if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) { + } else if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_15E = 0x64; this->unk_160 = true; } diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h index ace71e7b3..575a0d8cb 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h @@ -5,7 +5,7 @@ struct BgHakuginElvpole; -#define BGHAKUGINELVPOLE_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGHAKUGINELVPOLE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*BgHakuginElvpoleActionFunc)(struct BgHakuginElvpole*, PlayState*); 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 2a79bfd08..dc20a1fd3 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 @@ -155,9 +155,9 @@ void func_80A9AFB4(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* unkStruct->unk_0000[i].unk_00 = BGHAKUGINPOST_GET_7(&this->dyna.actor); Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_08, &this->dyna.actor.world.pos); Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_14, &this->dyna.actor.world.pos); - unkStruct->unk_0000[i].unk_2E = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); + unkStruct->unk_0000[i].switchFlag = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04) { - if (Flags_GetSwitch(play, unkStruct->unk_0000[i].unk_2E)) { + if (Flags_GetSwitch(play, unkStruct->unk_0000[i].switchFlag)) { unkStruct->unk_0000[i].unk_34 = 5; } else { unkStruct->unk_0000[i].unk_34 = 1; @@ -184,7 +184,7 @@ void func_80A9B160(BgHakuginPostUnkStruct* unkStruct, PlayState* play) { unkStruct->unk_0000[i].unk_24 = 0.0f; unkStruct->unk_0000[i].unk_34 = 1; if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04 != 0) { - Flags_UnsetSwitch(play, unkStruct->unk_0000[i].unk_2E); + Flags_UnsetSwitch(play, unkStruct->unk_0000[i].switchFlag); } } } @@ -240,25 +240,25 @@ void func_80A9B384(Vec3f* arg0) { void func_80A9B3BC(BgHakuginPost* this, PlayState* play) { s32 pad; - s32 sp28 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); - s32 sp24 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1; + s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1; s32 sp20; s32 sp1C; - if (Flags_GetSwitch(play, sp28)) { + if (Flags_GetSwitch(play, switchFlag1)) { sp20 = true; } else { sp20 = false; } - if (Flags_GetSwitch(play, sp24)) { + if (Flags_GetSwitch(play, switchFlag2)) { sp1C = true; } else { sp1C = false; } if (!(sp20 | sp1C)) { - Flags_SetSwitch(play, sp28); + Flags_SetSwitch(play, switchFlag1); this->unk_170 = true; } else { this->unk_170 = sp20; @@ -269,27 +269,27 @@ void func_80A9B3BC(BgHakuginPost* this, PlayState* play) { void func_80A9B46C(BgHakuginPost* this, PlayState* play) { s32 pad; - s32 sp30 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); - s32 sp2C = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1; + s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1; s32 sp28; s32 sp24; - if (Flags_GetSwitch(play, sp30)) { + if (Flags_GetSwitch(play, switchFlag1)) { sp28 = true; } else { sp28 = false; } - if (Flags_GetSwitch(play, sp2C)) { + if (Flags_GetSwitch(play, switchFlag2)) { sp24 = true; } else { sp24 = false; } if (!this->unk_170 && (sp28 == 1)) { - Flags_UnsetSwitch(play, sp2C); + Flags_UnsetSwitch(play, switchFlag2); } else if (!this->unk_174 && (sp24 == 1)) { - Flags_UnsetSwitch(play, sp30); + Flags_UnsetSwitch(play, switchFlag1); } this->unk_170 = sp28; @@ -668,7 +668,7 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { ColliderCylinder* collider = D_80A9E028.unk_0000[i].collider; - if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].unk_2E)) { + if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].switchFlag)) { sp28 = false; break; } @@ -681,9 +681,9 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) { } if (sp38) { - Flags_SetSwitch(play, this->dyna.actor.home.rot.x & 0x7F); + Flags_SetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor)); } else { - Flags_UnsetSwitch(play, this->dyna.actor.home.rot.x & 0x7F); + Flags_UnsetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor)); } } @@ -841,7 +841,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { D_80A9E028.unk_0000[i].unk_34 = 2; Player_PlaySfx(player, NA_SE_IT_HAMMER_HIT); Audio_PlaySfx_2(NA_SE_EV_SLIDE_DOOR_OPEN); - Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E); + Flags_SetSwitch(play, D_80A9E028.unk_0000[i].switchFlag); this->unk_178 = 20; func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, D_80A9E028.unk_0000[i].csId, D_80A9E028.unk_0000[i].additionalCsId); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h index 4797a684a..897228bb9 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h @@ -9,7 +9,8 @@ typedef void (*BgHakuginPostActionFunc)(struct BgHakuginPost*, PlayState*); typedef void (*BgHakuginPostFunc)(struct BgHakuginPost*); #define BGHAKUGINPOST_GET_7(thisx) ((thisx)->params & 7) -#define BGHAKUGINPOST_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINPOST_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINPOST_GET_SWITCH_FLAG_2(thisx) (((thisx)->home.rot.x) & 0x7F) typedef struct { /* 0x00 */ s32 unk_00; @@ -21,7 +22,7 @@ typedef struct { /* 0x28 */ s16 unk_28; /* 0x2A */ s16 csId; /* 0x2C */ s16 additionalCsId; - /* 0x2E */ u8 unk_2E; + /* 0x2E */ u8 switchFlag; /* 0x2F */ u8 unk_2F; /* 0x30 */ s8 unk_30; /* 0x34 */ s32 unk_34; 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 583384c7d..4ecce9c3a 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 @@ -121,7 +121,7 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) { s32 pad2; s32 sp28; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp30 = true; } else { sp30 = false; @@ -228,7 +228,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { s32 sp24; s32 sp20; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp2C = 1; } else { sp2C = 0; @@ -274,9 +274,9 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { if (sp24) { if (sp20 == 1) { - Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } else if (sp20 == 0) { - Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } D_80B16AF0 = play->gameplayFrames; @@ -329,7 +329,7 @@ void func_80B15F88(BgHakuginSwitch* this, PlayState* play) { BgHakuginSwitchStruct* sp18 = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)]; s32 phi_v1; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { phi_a0 = true; } else { phi_a0 = false; @@ -384,9 +384,9 @@ void func_80B161A0(BgHakuginSwitch* this, PlayState* play) { if (CutsceneManager_IsNext(this->curCsId)) { CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor); if (this->unk_1BE != 0) { - Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } else { - Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } this->unk_1BF = 50; this->unk_1B4(this, play); @@ -421,7 +421,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) { } if (sp30 == 1) { - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp24 = true; } } @@ -465,7 +465,7 @@ void func_80B16494(BgHakuginSwitch* this, PlayState* play) { } void func_80B16520(BgHakuginSwitch* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { if (BGHAKUGINSWITCH_GET_7(&this->dyna.actor) == BGHAKUGINSWITCH_GET_7_1) { func_80B16180(this, func_80B165A0, 0, this->additionalCsId); } else { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h index caf3c2f65..f8a27429d 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h @@ -10,7 +10,7 @@ typedef void (*BgHakuginSwitchUnkFunc)(struct BgHakuginSwitch*, PlayState*); #define BGHAKUGINSWITCH_GET_7(thisx) ((thisx)->params & 7) #define BGHAKUGINSWITCH_GET_10(thisx) (((thisx)->params >> 4) & 1) -#define BGHAKUGINSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGHAKUGINSWITCH_GET_7_1 1 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 edcda4b37..e06b788c4 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 @@ -242,7 +242,7 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -333,7 +333,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) { } this->dyna.actor.draw = NULL; SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); - Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h index e9ff850ad..393e1d9e6 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h @@ -7,7 +7,7 @@ struct BgIkanaBombwall; typedef void (*BgIkanaBombwallActionFunc)(struct BgIkanaBombwall*, PlayState*); -#define BGIKANABOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGIKANABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGIKANABOMBWALL_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgIkanaBombwall { 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 4646b8d45..a0062a62b 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 @@ -153,7 +153,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { if (wasHit && (sFirstHitBgIkanaDharma == NULL)) { sFirstHitBgIkanaDharma = this2; - Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCH_FLAG(&this->dyna.actor)); tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000); tempAngle2 = (BINANG_SUB(player->actor.shape.rot.y, tempAngle1) >> 1); this->dyna.actor.world.rot.y = tempAngle1 + tempAngle2 + 0xF000; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h index ac1bcadf0..a8c08e364 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGIKANADHARMA_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGIKANADHARMA_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGIKANADHARMA_IS_CHILD(thisx) (((thisx)->params >> 5) & 1) #define BGIKANADHARMA_NUM_SEGMENTS(thisx) ((thisx)->params & 0xF) #define BGIKANADHARMA_PARAMS(switchFlag, isChild, numSegments) (((switchFlag & 0x7F) << 8) | ((isChild & 1) << 5) | (numSegments & 0xF)) 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 23e707d7b..8850d8852 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 @@ -169,7 +169,7 @@ void func_80B80440(BgIkanaRotaryroom* this, PlayState* play) { Matrix_Push(); Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) { Matrix_Translate(D_80B82178.x, D_80B82178.y, D_80B82178.z, MTXMODE_APPLY); } else { Matrix_Translate(D_80B8216C.x, D_80B8216C.y, D_80B8216C.z, MTXMODE_APPLY); @@ -195,7 +195,7 @@ void func_80B80550(BgIkanaRotaryroom* this, PlayState* play) { MtxF sp68; Vec3s sp60; - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { spC4 = 1; } else { spC4 = 0; @@ -494,10 +494,10 @@ s32 func_80B80F08(BgIkanaRotaryroom* this, PlayState* play) { Matrix_Pop(); if (Math3D_Vec3fDistSq(&sp34, &sp28) < 3.0f) { - if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) { sp24 = true; } - Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor)); } } return sp24; @@ -708,7 +708,7 @@ void BgIkanaRotaryroom_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { this->dyna.actor.shape.rot.x = -0x8000; } else { this->dyna.actor.shape.rot.x = 0; @@ -753,15 +753,15 @@ void func_80B818B4(BgIkanaRotaryroom* this) { void func_80B818C8(Actor* thisx, PlayState* play) { BgIkanaRotaryroom* this = THIS; - s32 sp20; + s32 switchFlag; if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; - sp20 = BGIKANAROTARYROOM_GET_FE(&this->dyna.actor); - if (Flags_GetSwitch(play, sp20)) { - Flags_UnsetSwitch(play, sp20); + switchFlag = BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor); + if (Flags_GetSwitch(play, switchFlag)) { + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } func_80B81978(this); } else { @@ -866,7 +866,7 @@ void func_80B81BA0(Actor* thisx, PlayState* play) { Quake_SetDuration(quakeIndex, 15); } - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { if (this->dyna.actor.shape.rot.x < 0) { this->dyna.actor.shape.rot.x = -0x8000; sp30 = 1; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h index 4184220e0..e2737e0c2 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h @@ -10,8 +10,8 @@ typedef void (*BgIkanaRotaryroomUnkFunc)(Actor*, PlayState*); typedef void (*BgIkanaRotaryroomUnkFunc2)(struct BgIkanaRotaryroom*, PlayState*); #define BGIKANAROTARYROOM_GET_1(thisx) ((thisx)->params & 1) -#define BGIKANAROTARYROOM_GET_FE(thisx) (((thisx)->params >> 1) & 0x7F) -#define BGIKANAROTARYROOM_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(thisx) (((thisx)->params >> 1) & 0x7F) +#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct { /* 0x00 */ Actor* unk_00; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c index 4a0abb472..6891956db 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c @@ -56,10 +56,10 @@ static InitChainEntry sInitChain[] = { }; s32 BgIkanaShutter_AllSwitchesPressed(BgIkanaShutter* this, PlayState* play) { - return Flags_GetSwitch(play, this->dyna.actor.params & 0x7F) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 1) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 2) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 3); + return Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 1) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 2) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 3); } void BgIkanaShutter_Init(Actor* thisx, PlayState* play) { @@ -68,7 +68,7 @@ void BgIkanaShutter_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); DynaPolyActor_LoadMesh(play, &this->dyna, &object_ikana_obj_Colheader_000F28); - if (!((this->dyna.actor.params >> 8) & 1)) { + if (!BGIKANASHUTTER_GET_100(&this->dyna.actor)) { if (BgIkanaShutter_AllSwitchesPressed(this, play)) { func_80BD599C(this); return; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h index 094334600..c1ad76b7d 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h @@ -7,6 +7,9 @@ struct BgIkanaShutter; typedef void (*BgIkanaShutterActionFunc)(struct BgIkanaShutter*, PlayState*); +#define BGIKANASHUTTER_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) +#define BGIKANASHUTTER_GET_100(thisx) (((thisx)->params >> 8) & 1) + typedef struct BgIkanaShutter { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ BgIkanaShutterActionFunc actionFunc; 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 18d670830..f7c0e5710 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 @@ -159,7 +159,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) { this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y; if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) { BgIkninSusceil_RequestQuakeAndRumble(this, play, 4, 14, 1); - Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); func_80C0AC74(this); } else { @@ -173,7 +173,7 @@ void func_80C0AC74(BgIkninSusceil* this) { } void func_80C0AC90(BgIkninSusceil* this, PlayState* play) { - if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80C0ACD4(this); } } diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h index 2fa153ac0..faf29a022 100644 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h +++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h @@ -3,7 +3,7 @@ #include "global.h" -#define SUSCEIL_GET_SWITCHFLAG(thisx) (((thisx)->params) & 0x7F) +#define SUSCEIL_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) struct BgIkninSusceil; 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 07968e801..ecf34c2ae 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -64,7 +64,7 @@ void BgIkninside_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); } } @@ -118,7 +118,7 @@ void func_80C072D0(BgIkninside* this, PlayState* play) { EffectSsHahen_Spawn(play, &pos, &velocity, &D_80C076D4, 0, 30, OBJECT_IKNINSIDE_OBJ, 25, D_80C076A0[i & 1]); } - Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH(&this->dyna.actor)); + Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(&this->dyna.actor)); this->actionFunc = func_80C07230; this->dyna.actor.draw = NULL; DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h index 84a66a88d..6cddba2f0 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h @@ -5,7 +5,7 @@ struct BgIkninside; -#define DMIKNINSIDE_GET_SWITCH(thisx) (((thisx)->params & 0xFE00) >> 9) +#define DMIKNINSIDE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef void (*BgIkninsideActionFunc)(struct BgIkninside*, PlayState*); diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c index ff0227f70..6cc7f7684 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c +++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c @@ -40,7 +40,7 @@ void BgKeikokuSaku_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_keikoku_obj_Colheader_002300, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - this->switchFlag = BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx); + this->switchFlag = BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx); if (Flags_GetSwitch(play, this->switchFlag)) { this->dyna.actor.world.pos.z = 2659.0f; } else { diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h index 6a3bad9c8..6db094693 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h +++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgKeikokuSaku; 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 a868b355c..5a8192bc4 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 @@ -145,7 +145,7 @@ void BgKin2Bombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); bombwallCollider = &this->collider; Collider_InitCylinder(play, bombwallCollider); - if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -185,7 +185,7 @@ void BgKin2Bombwall_SetupPlayCutscene(BgKin2Bombwall* this) { void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h index 17370427a..553cd05b9 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h @@ -1,7 +1,7 @@ #ifndef Z_BG_KIN2_BOMBWALL_H #define Z_BG_KIN2_BOMBWALL_H -#define BG_KIN2_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #include "global.h" 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 37ac6c2ac..3f68cad8d 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 @@ -161,7 +161,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) { Collider_UpdateSpheres(i, &this->collider); } - if (Flags_GetSwitch(play, this->dyna.actor.params & 0x7F)) { + if (Flags_GetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor))) { BgKin2Fence_SetupDoNothing(this); return; } @@ -219,7 +219,7 @@ void BgKin2Fence_SetupPlayOpenCutscene(BgKin2Fence* this) { void BgKin2Fence_PlayOpenCutscene(BgKin2Fence* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, this->dyna.actor.params & 0x7F); + Flags_SetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor)); BgKin2Fence_SetupWaitBeforeOpen(this); return; } diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h index 98bb51243..7c864d3ae 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h +++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h @@ -7,6 +7,8 @@ struct BgKin2Fence; typedef void (*BgKin2FenceActionFunc)(struct BgKin2Fence*, PlayState*); +#define BG_KIN2_FENCE_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) + typedef struct BgKin2Fence { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ColliderJntSph collider; 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 63e7b5974..12cd5d334 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -49,7 +49,7 @@ void BgLadder_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - this->switchFlag = BGLADDER_GET_SWITCHFLAG(thisx); + this->switchFlag = BGLADDER_GET_SWITCH_FLAG(thisx); thisx->params = BGLADDER_GET_SIZE(thisx); DynaPolyActor_Init(&this->dyna, 0); size = thisx->params; diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h index f920c18eb..4b06a32e8 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h @@ -4,7 +4,7 @@ #include "global.h" #define BGLADDER_GET_SIZE(thisx) ((thisx)->params & 0xFF) -#define BGLADDER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF) +#define BGLADDER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) struct BgLadder; 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 a09c0fb02..b74fdbd6d 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 @@ -152,7 +152,7 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) { 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))) { + if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -227,7 +227,7 @@ void func_80C187E4(BgLastBwall* this) { void func_80C187F8(BgLastBwall* this, PlayState* play) { if (this->colliderTris.base.acFlags & AC_HIT) { this->colliderTris.base.acFlags &= ~AC_HIT; - Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor)); + Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); func_80C1886C(this, play); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base); diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h index cae36be27..0e6568611 100644 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h +++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h @@ -8,7 +8,7 @@ struct BgLastBwall; typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*); -#define BGLASTBWALL_GET_SWITCHFLAGS(thisx) ((thisx)->params & 0x7F) +#define BGLASTBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { 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 9f5a9c42d..ec3961fd7 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -148,7 +148,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_161 = 0; - this->switchFlag = BGSPDWEB_GET_SWITCHFLAG(&this->dyna.actor); + this->switchFlag = BGSPDWEB_GET_SWITCH_FLAG(&this->dyna.actor); thisx->params &= 0xFF; DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h index c57353ce0..7737fc684 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h @@ -7,7 +7,7 @@ struct BgSpdweb; typedef void (*BgSpdwebActionFunc)(struct BgSpdweb*, PlayState*); -#define BGSPDWEB_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGSPDWEB_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGSPDWEB_FF_0 0 #define BGSPDWEB_FF_1 1 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 b9b53a081..5d49a16e7 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -181,7 +181,7 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { return true; } } else if ((doorType == 2) || (doorType == 7)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); this->unk_168 = 1.0f; return true; @@ -243,7 +243,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->unk_163 = sp24; if ((this->doorType == 4) || (this->doorType == 5)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { this->unk_166 = 10; } } @@ -346,7 +346,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { DoorShutter_SetupAction(this, func_808A1684); this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (this->unk_166 != 0) { - Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); + Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); @@ -474,7 +474,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { void func_808A1548(DoorShutter* this, PlayState* play) { if (func_808A1478(this, play, 1.0f)) { - if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { this->csId = this->slidingDoor.dyna.actor.csId; if (CutsceneManager_IsNext(this->csId)) { CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); @@ -495,7 +495,8 @@ void func_808A1548(DoorShutter* this, PlayState* play) { } void func_808A1618(DoorShutter* this, PlayState* play) { - if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if ((this->slidingDoor.unk_15C == 0) && + !Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); } else { func_808A1090(this, play); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h index abdf0ce84..5b42db50a 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -9,7 +9,7 @@ struct DoorShutter; typedef void (*DoorShutterActionFunc)(struct DoorShutter*, PlayState*); #define DOORSHUTTER_GET_1F(thisx) ((thisx)->params & 0x1F) -#define DOORSHUTTER_GET_7F(thisx) ((thisx)->params & 0x7F) +#define DOORSHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define DOORSHUTTER_GET_380(thisx) (((thisx)->params >> 7) & 7) typedef struct DoorShutter { diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c index c88835373..f2089ca03 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c @@ -43,25 +43,25 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -136,8 +136,8 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) { if (func_8092DF9C(this, play) == 0) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (ELFMSG_GET_SWITCHFLAG(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(thisx)); + if (ELFMSG_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h index 51a3ddda3..b512af2de 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h @@ -4,7 +4,7 @@ #include "global.h" #define ELFMSG_GET_FF(thisx) ((thisx)->params & 0xFF) -#define ELFMSG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG_GET_8000(thisx) ((thisx)->params & 0x8000) struct ElfMsg; diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index ea443472f..552478ace 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -43,8 +43,8 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; @@ -53,17 +53,17 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) { if (Flags_GetClear(play, this->actor.room)) { (void)"共倒れ2"; // "Collapse 2" - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -108,8 +108,8 @@ void func_8096EE64(ElfMsg2* this, PlayState* play) { if (this->actor.home.rot.z != 1) { Actor_Kill(&this->actor); - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } return; } diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h index 4d9583d20..aa717800b 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG2_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define ELFMSG2_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define ELFMSG2_GET_FF(thisx) ((thisx)->params & 0xFF) struct ElfMsg2; diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c index e3e8b7bc5..b7b349dfe 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c @@ -42,25 +42,25 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor)); + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor)); + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG3_GET_SWITCH(&this->actor) == 0x7F) { + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -134,8 +134,8 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play) { if (!func_80A2CD1C(this, play)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (ELFMSG3_GET_SWITCH(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(thisx)); + if (ELFMSG3_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h index 615cde1eb..6b1c24671 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG3_GET_SWITCH(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG3_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG3_GET_FF(thisx) ((thisx)->params & 0xFF) #define ELFMSG3_GET_8000(thisx) ((thisx)->params & 0x8000) diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c index c85db8ef0..423f8c351 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c @@ -43,25 +43,25 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -161,8 +161,8 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) { } if ((bgActor != NULL) && Actor_ProcessTalkRequest(bgActor, &play->state)) { - if (ELFMSG4_GET_SWITCHFLAG(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(thisx)); + if (ELFMSG4_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h index e9ccbc906..1e4b78f29 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG4_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG4_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG4_GET_8000(thisx) ((thisx)->params & 0x8000) #define ELFMSG4_GET_TEXT(thisx) ((thisx)->params & 0xFF) diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c index db97a0f74..c44ab8e0a 100644 --- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c +++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c @@ -38,8 +38,8 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // Collapse together - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; @@ -47,17 +47,17 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) { if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { (void)"共倒れ2"; // Collapse 2 - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // Collapse together Actor_Kill(&this->actor); return true; diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h index 36daecca1..e1e54ca64 100644 --- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h +++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG5_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define ELFMSG5_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define ELFMSG5_GET_FF(thisx) ((thisx)->params & 0xFF) struct ElfMsg5; 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 6b2b37a41..4c565fdf8 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -154,8 +154,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { case 1: this->actionFunc = func_80BA1F80; - if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && - Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) { + if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && + Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)))) { Actor_Kill(&this->actor); return; } @@ -200,8 +200,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { break; case 3: - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && - Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && + Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); @@ -338,7 +338,7 @@ void func_80BA1F80(ElfMsg6* this, PlayState* play) { if (func_80BA1C00(this)) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, NULL); - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } @@ -355,14 +355,14 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) { EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor; sp20->unk_264 |= 0x20; - if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return; } - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); @@ -390,14 +390,14 @@ void func_80BA21C4(ElfMsg6* this, PlayState* play) { EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor; sp20->unk_264 |= 0x20; - if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return; } - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h index 8e9a5d0ed..640c35987 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h @@ -9,7 +9,7 @@ typedef void (*ElfMsg6ActionFunc)(struct ElfMsg6*, PlayState*); #define ELFMSG6_GET_F(thisx) ((thisx)->params & 0xF) #define ELFMSG6_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4) -#define ELFMSG6_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ELFMSG6_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct ElfMsg6 { /* 0x000 */ Actor actor; 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 d1de1bb0d..e57ec81cc 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -136,7 +136,7 @@ void EnBat_Init(Actor* thisx, PlayState* play) { this->animationFrame = Rand_ZeroOne() * 9.0f; this->paramFlags = BAD_BAT_GET_PARAMFLAGS(thisx); - this->switchFlag = BAD_BAT_GET_SWITCHFLAG(thisx); + this->switchFlag = BAD_BAT_GET_SWITCH_FLAG(thisx); thisx->params = BAD_BAT_GET_TYPE(thisx); thisx->depthInWater = BGCHECK_Y_MIN; diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.h b/src/overlays/actors/ovl_En_Bat/z_en_bat.h index 927dfbef8..5b552d2c1 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.h +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.h @@ -5,7 +5,7 @@ #define BAD_BAT_GET_TYPE(thisx) (((thisx)->params >> 0) & 0x1F) #define BAD_BAT_GET_PARAMFLAGS(thisx) (((thisx)->params >> 5) & 7) -#define BAD_BAT_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF) +#define BAD_BAT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) #define BAD_BAT_PARAMS(switchFlag, paramflags, type) ((type) | ((paramflags) << 5) | ((switchFlag) << 8)) //! PARAMFLAGS diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index c7c3e0fad..0f505820d 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -104,7 +104,8 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) { this->csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) || - ((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) { + ((EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) && + Flags_GetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor)))) { Actor_Kill(&this->picto.actor); } else { this->picto.actor.world.pos.y -= 99.0f; @@ -445,8 +446,8 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { &D_80AC45B8, Rand_S16Offset(150, 50), 25, false); } - if (this->picto.actor.params != 0xFF) { - Flags_SetSwitch(play, this->picto.actor.params); + if (EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) { + Flags_SetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor)); } CutsceneManager_Stop(this->csId); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h index 1fdad749b..5e30eab95 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h @@ -9,6 +9,8 @@ struct EnBigokuta; typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*); +#define EN_BIGOKUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef enum BigokutaBodyPart { /* 0 */ BIGOKUTA_BODYPART_0, /* 1 */ BIGOKUTA_BODYPART_1, 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 cced08a09..900aed401 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -188,10 +188,10 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); - this->switchFlags = BIG_POE_GET_SWITCHFLAGS(thisx); + this->switchFlag = BIG_POE_GET_SWITCH_FLAG(thisx); thisx->params &= 0xFF; if (thisx->params == BIG_POE_TYPE_POSSIBLE_FIRE) { - if (Flags_GetSwitch(play, this->switchFlags)) { + if (Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -222,7 +222,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { this->mainColor.b = 210; this->mainColor.a = 0; // fully invisible - if ((this->switchFlags != 0xFF) && (Flags_GetSwitch(play, this->switchFlags))) { + if ((this->switchFlag != 0xFF) && (Flags_GetSwitch(play, this->switchFlag))) { Actor_Kill(&this->actor); } @@ -756,8 +756,8 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) { void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND || this->actor.floorHeight == BGCHECK_Y_MIN) { - if (this->switchFlags != 0xFF) { - Flags_SetSwitch(play, this->switchFlags); + if (this->switchFlag != 0xFF) { + Flags_SetSwitch(play, this->switchFlag); } EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10, @@ -1051,7 +1051,8 @@ void EnBigpo_FlameCircleCutscene(EnBigpo* this, PlayState* play) { this->idleTimer--; if (this->idleTimer == 0) { EnBigpo* parentPoh = (EnBigpo*)this->actor.parent; - Flags_SetSwitch(play, this->switchFlags); + + Flags_SetSwitch(play, this->switchFlag); Math_Vec3f_Copy(&parentPoh->fires[this->unk20C].pos, &this->actor.world.pos); Actor_Kill(&this->actor); if (this->unk20C == 0) { diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index 12b230614..d5bdaf1e8 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -47,7 +47,7 @@ typedef struct EnBigpo { /* 0x20A */ s16 rotVelocity; /* 0x20C */ s16 unk20C; // is this counting the number of frames the player is ztargeting them? /* 0x20E */ s16 subCamId; - /* 0x210 */ s16 switchFlags; + /* 0x210 */ s16 switchFlag; /* 0x212 */ s16 hoverHeightCycleTimer; // sin wave up and down bobbing /* 0x214 */ f32 fireRadius; // distance from center during conjunction cutscene /* 0x218 */ f32 savedHeight; // actual height while flying moves as part of bobbing @@ -75,6 +75,6 @@ typedef enum EnBigpoType { /* 5 */ BIG_POE_TYPE_UNK5 } EnBigpoType; -#define BIG_POE_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) +#define BIG_POE_GET_SWITCH_FLAG(thisx) (u8)((thisx)->params >> 0x8) #endif // Z_EN_BIGPO_H 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 31e904bcf..01b701ce1 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -86,7 +86,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_DAIKU_LIMB_MAX); this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->unk_278 = ENDAIKU2_GET_7F(&this->actor); + this->switchFlag = ENDAIKU2_GET_SWITCH_FLAG(&this->actor); this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor); this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU2_PATH_INDEX_NONE); this->unk_280 = ENDAIKU2_GET_8000(&this->actor); @@ -97,9 +97,9 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { return; } - if (this->unk_278 == ENDAIKU2_GET_7F_127) { - this->unk_278 = ENDAIKU2_GET_7F_MINUS1; - } else if (Flags_GetSwitch(play, this->unk_278)) { + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; + } else if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_25C = this->path->count - 1; func_80BE61D0(this); Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268); @@ -185,7 +185,7 @@ s32 func_80BE64C0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); bomb = (EnBom*)Actor_FindNearby(play, &this->actor, -1, ACTORCAT_EXPLOSIVES, BREG(7) + 240.0f); Math_Vec3f_Copy(&this->actor.world.pos, &sp30); - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && !Flags_GetSwitch(play, this->unk_278) && (bomb != NULL) && + if ((this->switchFlag >= 0) && !Flags_GetSwitch(play, this->switchFlag) && (bomb != NULL) && (bomb->actor.id == ACTOR_EN_BOM)) { if (!bomb->isPowderKeg) { this->actor.textId = 0x32D3; @@ -228,7 +228,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { } this->unk_264 = 1.0f; - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -251,7 +251,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0); if (sp98 != 2) { - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -323,7 +323,7 @@ void func_80BE6B40(EnDaiku2* this, PlayState* play) { s32 day = gSaveContext.save.day; this->unk_288 = 1; - if ((day != 3) && Flags_GetSwitch(play, this->unk_278)) { + if ((day != 3) && Flags_GetSwitch(play, this->switchFlag)) { this->actionFunc = func_80BE6BC0; } else { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5); @@ -433,7 +433,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3); } - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index 51cd23124..c047b6577 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -8,18 +8,12 @@ struct EnDaiku2; typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); -#define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F) +#define ENDAIKU2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F) #define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1) #define ENDAIKU2_PATH_INDEX_NONE 0x3F -typedef enum { - /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, - /* 0 */ ENDAIKU2_GET_7F_0, - /* 127 */ ENDAIKU2_GET_7F_127 = 127 -} EnDaiku2Param; - typedef struct EnDaiku2Effect { /* 0x00 */ u8 isEnabled; /* 0x04 */ Vec3f unk_04; @@ -45,7 +39,7 @@ typedef struct EnDaiku2 { /* 0x268 */ Vec3f unk_268; /* 0x274 */ s16 unk_274; /* 0x276 */ s16 animIndex; - /* 0x278 */ s16 unk_278; + /* 0x278 */ s16 switchFlag; /* 0x27A */ s16 pathIndex; /* 0x27C */ UNK_TYPE1 unk_27C[0x4]; /* 0x280 */ s32 unk_280; 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 a63766b70..124dee6f7 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -425,7 +425,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { this->doorType = ENDOOR_GET_TYPE(thisx); - this->switchFlag = ENDOOR_GET_PARAM_7F(thisx); + this->switchFlag = ENDOOR_GET_SWITCH_FLAG(thisx); if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { DynaPolyActor_Init(&this->knobDoor.dyna, 0); DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h index 03dc31ab6..5ea0b7df3 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -10,7 +10,7 @@ struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); #define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) -#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F) +#define ENDOOR_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) typedef enum EnDoorType { /* 0 */ ENDOOR_TYPE_0, diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index fe09aa1fe..b771d09fe 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -193,8 +193,8 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) { } } if ((this->knobDoor.dyna.actor.textId == 0x239B) && - Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor))) { - Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor)); + Flags_GetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor))) { + Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor)); this->actionFunc = func_80AC2154; this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!" this->unk_1F4 |= 1; diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h index 9cd63248f..c0bbdf98b 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h @@ -6,7 +6,7 @@ struct EnDoorEtc; -#define ENDOORETC_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENDOORETC_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*); 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 89ee2e5fd..775a14eb5 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -481,7 +481,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[4], 300, 200, 0, 25, 1.0f); EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[5], 2100, -300, 0, 37, 1.0f); - this->switchFlag = EYEGORE_GET_SWITCH(&this->actor); + this->switchFlag = EYEGORE_GET_SWITCH_FLAG(&this->actor); if (this->switchFlag == 0x7F) { this->switchFlag = -1; } diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index 35d232d51..0861ce580 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -9,7 +9,7 @@ struct EnEgol; typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); #define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) -#define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F) +#define EYEGORE_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) #define EYEGORE_PATH_INDEX_NONE 0x3F diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index 9b34bf410..c9d86e4f6 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -56,7 +56,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { EnElfbub* this = THIS; Actor* childActor; - if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -76,7 +76,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { childActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, this->actor.world.pos.y + 12.0f, this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), + STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCH_FLAG(&this->actor), STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_BUBBLE)); if (childActor != NULL) { childActor->parent = &this->actor; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h index 50c6bd672..d115ab91c 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h @@ -3,7 +3,7 @@ #include "global.h" -#define ENELFBUB_GET_SWITCHFLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9) +#define ENELFBUB_GET_SWITCH_FLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9) struct EnElfbub; 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 937c6bc8c..3eb2e357b 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -480,7 +480,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A274; - Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor)); if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); @@ -524,7 +524,7 @@ void func_80A3A520(EnElfgrp* this, PlayState* play) { } else if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A4AC; - Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + Flags_SetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor)); if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h index d9767fb2f..90f73a8a6 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -9,7 +9,7 @@ struct EnElfgrp; typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); #define ENELFGRP_GET_TYPE(thisx) ((thisx)->params & 0xF) //!< Same type as Great Fairies -#define ENELFGRP_GET_SWITCHFLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_SWITCH_FLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) #define ENELFGRP_GET_SWITCHFLAG_ROT(thisx) ((thisx)->home.rot.z) typedef enum ElfgrpType { 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 27dc844e7..3dc3cd7bc 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -87,7 +87,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { break; case STRAY_FAIRY_TYPE_COLLECTIBLE: - if (Flags_GetCollectible(play, STRAY_FAIRY_FLAG(thisx))) { + if (Flags_GetCollectible(play, STRAY_FAIRY_GET_FLAG(thisx))) { Actor_Kill(thisx); return; } @@ -100,7 +100,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { break; default: - if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) { + if (Flags_GetSwitch(play, STRAY_FAIRY_GET_FLAG(thisx))) { Actor_Kill(thisx); return; } @@ -475,15 +475,15 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { switch (STRAY_FAIRY_TYPE(&this->actor)) { case STRAY_FAIRY_TYPE_COLLECTIBLE: - Flags_SetCollectible(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetCollectible(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; case STRAY_FAIRY_TYPE_CHEST: - Flags_SetTreasure(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetTreasure(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; default: - Flags_SetSwitch(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetSwitch(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; } diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h index 7bb8672b1..f4da3cd5e 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h @@ -7,7 +7,7 @@ #define STRAY_FAIRY_TYPE(thisx) ((thisx)->params & 0xF) #define STRAY_FAIRY_GET_NON_DUNGEON_AREA(thisx) (((thisx)->params & 0x1C0) >> 6) -#define STRAY_FAIRY_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define STRAY_FAIRY_GET_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) #define STRAY_FAIRY_SPARKLE_COUNT(thisx) ((thisx)->home.rot.x) //! @note `nonDungeonArea` does not always use the enum diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c index 0b645b302..07e4d60b9 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c @@ -29,7 +29,7 @@ ActorInit En_Fr_InitVars = { void EnFr_Init(Actor* thisx, PlayState* play) { EnFr* this = THIS; - if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -43,7 +43,7 @@ void EnFr_Destroy(Actor* thisx, PlayState* play) { void EnFr_Update(Actor* thisx, PlayState* play) { EnFr* this = THIS; - if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.h b/src/overlays/actors/ovl_En_Fr/z_en_fr.h index 27682ce40..0227608fb 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.h +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.h @@ -5,7 +5,7 @@ struct EnFr; -#define ENFR_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENFR_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENFR_GET_TARGETMODE(thisx) (((thisx)->params >> 7) & 0xF) typedef struct EnFr { 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 b9ef1fe88..272915c71 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -681,7 +681,7 @@ void func_80B10A48(EnGb2* this, PlayState* play) { case ENGB2_7_2: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); if (this->unk_26E == 0x14FB) { - Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); + Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } @@ -752,7 +752,7 @@ void func_80B10DAC(EnGb2* this, PlayState* play) { if (this->csIdIndex != 2) { this->actionFunc = func_80B10E98; } else { - Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); + Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80B10868; } } else { @@ -776,7 +776,7 @@ void func_80B10E98(EnGb2* this, PlayState* play) { if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->actionFunc = func_80B10B5C; - } else if (Flags_GetSwitch(play, ENGB2_GET_7F8(&this->actor))) { + } else if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor))) { this->actionFunc = func_80B10A48; } else { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); @@ -936,7 +936,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { return; } - if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) { + if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); return; } @@ -950,7 +950,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { case ENGB2_7_2: this->csIdIndex = 0; this->csIdList[0] = this->actor.csId; - if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) { + if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h index fa500f15c..e59eecee0 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -9,7 +9,7 @@ struct EnGb2; typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*); #define ENGB2_GET_7(thisx) ((thisx)->params & 7) -#define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3) +#define ENGB2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F8) >> 3) typedef enum { /* 0 */ ENGB2_7_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 900664e4c..c631b24e3 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -296,7 +296,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { - Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); + Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor)); this->animIndex = ENGK_ANIM_3; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_3); this->actionFunc = func_80B521E8; @@ -612,7 +612,7 @@ void func_80B51510(EnGk* this, PlayState* play) { break; case 7: - Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); + Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor)); break; default: @@ -673,7 +673,7 @@ void func_80B51760(EnGk* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { - if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { + if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) { SET_WEEKEVENTREG(WEEKEVENTREG_40_40); this->actionFunc = func_80B51D9C; return; @@ -1070,7 +1070,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->animIndex = ENGK_ANIM_5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_5); if (play->sceneId == SCENE_17SETUGEN2) { - if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { + if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index 6bd28ad94..b9d237cd5 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -10,7 +10,7 @@ typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_GET_F(thisx) ((thisx)->params & 0xF) #define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) -#define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8) +#define ENGK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F00) >> 8) #define ENGK_PATH_INDEX_NONE 0xF 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 6cc8af5a5..88798dd2f 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -143,7 +143,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) { this->unk_204 = 1; this->unk_198 = this->actor.world.rot.z; this->unk_195 = ENGS_GET_1F(thisx); - this->unk_196 = ENGS_GET_FE0(thisx); + this->switchFlag = ENGS_GET_SWITCH_FLAG(thisx); this->actor.params = ENGS_GET_F000(thisx); this->actor.world.rot.z = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -287,22 +287,22 @@ void func_8099807C(EnGs* this, PlayState* play) { switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_HEALING: case OCARINA_SONG_EPONAS: - if (!Flags_GetSwitch(play, this->unk_196)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); - Flags_SetSwitch(play, this->unk_196); + Flags_SetSwitch(play, this->switchFlag); } break; case OCARINA_SONG_STORMS: - if (!Flags_GetSwitch(play, this->unk_196)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_7, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); - Flags_SetSwitch(play, this->unk_196); + Flags_SetSwitch(play, this->switchFlag); } break; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.h b/src/overlays/actors/ovl_En_Gs/z_en_gs.h index b7af0c582..ffeb3083e 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -8,7 +8,7 @@ struct EnGs; typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*); #define ENGS_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F) +#define ENGS_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 5) & 0x7F) #define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { @@ -24,7 +24,7 @@ typedef struct EnGs { /* 0x190 */ EnGsActionFunc actionFunc; /* 0x194 */ s8 unk_194; /* 0x195 */ u8 unk_195; - /* 0x196 */ u8 unk_196; + /* 0x196 */ u8 switchFlag; /* 0x197 */ s8 unk_197; /* 0x198 */ s16 unk_198; /* 0x19A */ s16 unk_19A; 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 b10793a56..48f75aa68 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 @@ -113,7 +113,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor); - this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor); + this->switchFlag = ENHIDDENNUTS_GET_SWITCH_FLAG(&this->actor); if (this->switchFlag == 0x7F) { this->switchFlag = -1; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index df8275aa4..7df4b5f01 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -8,7 +8,7 @@ struct EnHiddenNuts; typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); -#define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENHIDDENNUTS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) #define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c index 95cc793ac..208708c58 100644 --- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c +++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c @@ -56,7 +56,7 @@ void EnHitTag_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnHitTag_WaitForHit; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collider); - if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCHFLAG(thisx))) { + if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h index e2effa078..645c95465 100644 --- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h +++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h @@ -7,7 +7,7 @@ struct EnHitTag; typedef void (*EnHitTagActionFunc)(struct EnHitTag*, PlayState*); -#define ENHITTAG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENHITTAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct EnHitTag { /* 0x000 */ Actor actor; 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 3a6c54983..dcecdac43 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 @@ -80,8 +80,8 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { break; } - if (this->unk_190 >= 0) { - Flags_SetSwitch(play, this->unk_190); + if (this->switchFlag >= 0) { + Flags_SetSwitch(play, this->switchFlag); } this->actionFunc = func_80C259E8; @@ -96,13 +96,13 @@ void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) { s32 pad; EnInvisibleRuppe* this = THIS; - this->unk_190 = INVISIBLERUPPE_GET_1FC(&this->actor); + this->switchFlag = INVISIBLERUPPE_GET_SWITCH_FLAG(&this->actor); - if (this->unk_190 == 0x7F) { - this->unk_190 = -1; + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; } - if ((this->unk_190 >= 0) && Flags_GetSwitch(play, this->unk_190)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h index d703a3511..2257a649a 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h @@ -8,12 +8,12 @@ struct EnInvisibleRuppe; typedef void (*EnInvisibleRuppeActionFunc)(struct EnInvisibleRuppe*, PlayState*); #define INVISIBLERUPPE_GET_3(thisx) ((thisx)->params & 3) -#define INVISIBLERUPPE_GET_1FC(thisx) (((thisx)->params & 0x1FC) >> 2) +#define INVISIBLERUPPE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x1FC) >> 2) typedef struct EnInvisibleRuppe { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ s16 unk_190; + /* 0x190 */ s16 switchFlag; /* 0x192 */ s16 unk_192; /* 0x194 */ EnInvisibleRuppeActionFunc actionFunc; } EnInvisibleRuppe; // size = 0x198 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 10dc7bcdf..2e3e2fc39 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -310,7 +310,7 @@ void func_8095DFF0(EnIshi* this, PlayState* play) { s16 temp_v1_2; if (temp >= 0) { - sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FE00(&this->actor) << 8)); + sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FLAG(&this->actor) << 8)); if (sp3C != NULL) { Matrix_Push(); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); @@ -399,7 +399,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, D_8095F6B8[sp34]); func_8095D6E0(&this->actor, play); - if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FE00(&this->actor))) { + if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -537,7 +537,7 @@ void func_8095E95C(EnIshi* this, PlayState* play) { if (Actor_HasNoParent(&this->actor, play)) { this->actor.room = play->roomCtx.curRoom.num; if (ENISHI_GET_1(&this->actor) == 1) { - Flags_SetSwitch(play, ENISHI_GET_FE00(&this->actor)); + Flags_SetSwitch(play, ENISHI_GET_FLAG(&this->actor)); } func_8095EA70(this); func_8095E14C(this); diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h index 65381f638..81fc78368 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h @@ -16,7 +16,7 @@ typedef void (*EnIshiUnkFunc2)(Actor*, PlayState*); #define ENISHI_GET_70(thisx) (((thisx)->params >> 4) & 7) #define ENISHI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) #define ENISHI_GET_100(thisx) (((thisx)->params >> 8) & 1) -#define ENISHI_GET_FE00(thisx) (((thisx)->params >> 9) & 0x7F) +#define ENISHI_GET_FLAG(thisx) (((thisx)->params >> 9) & 0x7F) typedef struct EnIshi { /* 0x000 */ Actor actor; 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 d629c57b9..abba3efac 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -259,7 +259,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { this->unk_2CA = this->picto.actor.world.rot.z; this->picto.actor.colChkInfo.health = 8; this->exitIndex = KAIZOKU_GET_EXIT_INDEX(&this->picto.actor); - this->switchFlag = KAIZOKU_GET_SWITCHFLAG(&this->picto.actor); + this->switchFlag = KAIZOKU_GET_SWITCH_FLAG(&this->picto.actor); if (this->unk_2CA >= 2) { this->unk_2CA = 0; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index a119777a9..423819eb3 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -6,7 +6,7 @@ #include "objects/object_kz/object_kz.h" #define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F) -#define KAIZOKU_GET_SWITCHFLAG(thisx) (((thisx)->params >> 6) & 0x7F) +#define KAIZOKU_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) struct EnKaizoku; 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 62d4a1f62..5f180a285 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -71,10 +71,10 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->animIndex2 = ENKGY_ANIM_NONE; this->zubora = EnKgy_FindZubora(play); this->iceBlock = EnKgy_FindIceBlock(play); - Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); - if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || + Flags_UnsetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1); + if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { - Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); + Flags_SetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1); play->envCtx.lightSettingOverride = 1; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); if (!func_80B40D64(play)) { @@ -1111,7 +1111,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); } else { - if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor))) { + if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0xC30; this->actionFunc = func_80B4296C; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h index 9a037ba9e..9cd6f6848 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -11,7 +11,7 @@ struct EnKgy; typedef void (*EnKgyActionFunc)(struct EnKgy*, PlayState*); #define ENKGY_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENKGY_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENKGY_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct EnKgy { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c index f3c3f4705..065a58cf5 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -70,7 +70,7 @@ void EnLight_Init(Actor* thisx, PlayState* play) { if (ENLIGHT_GET_800(&this->actor)) { this->actor.update = func_80865F38; - if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { Actor_SetScale(&this->actor, 0.0f); } } else if (ENLIGHT_GET_2000(&this->actor)) { @@ -124,7 +124,7 @@ void func_80865F38(Actor* thisx, PlayState* play) { s32 sp2C = false; if (ENLIGHT_GET_1000(&this->actor)) { - if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { Math_StepToF(&sp30, 1.0f, 0.05f); sp2C = true; } else { @@ -134,7 +134,7 @@ void func_80865F38(Actor* thisx, PlayState* play) { } Math_StepToF(&sp30, 0.0f, 0.05f); } - } else if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + } else if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { if (sp30 < 0.1f) { Actor_SetScale(&this->actor, 0.0f); sp30 = 0.0f; diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.h b/src/overlays/actors/ovl_En_Light/z_en_light.h index 17762d7fa..25e1b5851 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.h +++ b/src/overlays/actors/ovl_En_Light/z_en_light.h @@ -8,7 +8,7 @@ struct EnLight; #define ENLIGHT_GET_1(thisx) ((thisx)->params & 1) #define ENLIGHT_GET_F(thisx) ((thisx)->params & 0xF) #define ENLIGHT_GET_800(thisx) ((thisx)->params & 0x800) -#define ENLIGHT_SWITCHFLAG(thisx) (((thisx)->params & 0x7F0) >> 4) +#define ENLIGHT_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4) #define ENLIGHT_GET_1000(thisx) ((thisx)->params & 0x1000) #define ENLIGHT_GET_2000(thisx) ((thisx)->params & 0x2000) #define ENLIGHT_GET_4000(thisx) ((thisx)->params & 0x4000) 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 b07a5d58c..9119e0609 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 @@ -40,7 +40,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk148 = ENOKARINATAG_GET_F800(thisx); this->unk14A = ENOKARINATAG_GET_780(thisx); - this->switchFlags = ENOKARINATAG_GET_SWITCHFLAGS(thisx); + this->switchFlag = ENOKARINATAG_GET_SWITCH_FLAG(thisx); if (this->actor.world.rot.z > 0) { zRot = this->actor.world.rot.z; while (zRot > 10.0f) { @@ -50,8 +50,8 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { } this->unk154 = zRot * 50.0f; this->unk158 = i * 50.0f; - if (this->switchFlags == 0x7F) { - this->switchFlags = -1; + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; } if (this->unk14A == 0xF) { this->unk14A = -1; @@ -66,14 +66,14 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { s16 yDiff; u16 var_v1; - if (this->switchFlags >= 0) { + if (this->switchFlag >= 0) { if (this->unk148 == 0) { - if (Flags_GetSwitch(play, this->switchFlags)) { + if (Flags_GetSwitch(play, this->switchFlag)) { return; } } if (this->unk148 == 1) { - if (!Flags_GetSwitch(play, this->switchFlags)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { return; } } @@ -122,19 +122,19 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) { - if (this->switchFlags >= 0) { + if (this->switchFlag >= 0) { switch (this->unk148) { case 0: - Flags_SetSwitch(play, this->switchFlags); + Flags_SetSwitch(play, this->switchFlag); break; case 1: - Flags_UnsetSwitch(play, this->switchFlags); + Flags_UnsetSwitch(play, this->switchFlag); break; case 2: - if (Flags_GetSwitch(play, this->switchFlags)) { - Flags_UnsetSwitch(play, this->switchFlags); + if (Flags_GetSwitch(play, this->switchFlag)) { + Flags_UnsetSwitch(play, this->switchFlag); } else { - Flags_SetSwitch(play, this->switchFlags); + Flags_SetSwitch(play, this->switchFlag); } break; } diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h index 0dd15c1c9..4c968b362 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h @@ -7,7 +7,7 @@ struct EnOkarinaTag; typedef void (*EnOkarinaTagActionFunc)(struct EnOkarinaTag*, PlayState*); -#define ENOKARINATAG_GET_SWITCHFLAGS(thisx) (((thisx)->params & 0x7F)) +#define ENOKARINATAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F)) #define ENOKARINATAG_GET_780(thisx) (((thisx)->params >> 0x7) & 0xF) #define ENOKARINATAG_GET_F800(thisx) (((thisx)->params >> 0xB) & 0x1F) @@ -16,7 +16,7 @@ typedef struct EnOkarinaTag { /* 0x144 */ EnOkarinaTagActionFunc actionFunc; /* 0x148 */ s16 unk148; /* 0x14A */ s16 unk14A; - /* 0x14C */ s32 switchFlags; + /* 0x14C */ s32 switchFlag; /* 0x150 */ s8 unk150; /* 0x154 */ f32 unk154; /* 0x158 */ f32 unk158; 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 eb0936ef9..29361e80f 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -705,12 +705,12 @@ void EnOsn_InitCutscene(EnOsn* this) { } void EnOsn_ChooseAction(EnOsn* this, PlayState* play) { - u32 isFlagSet = Flags_GetSwitch(play, 0); + u32 isSwitchFlagSet = Flags_GetSwitch(play, 0); this->csId = this->actor.csId; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE); - if (!isFlagSet) { + if (!isSwitchFlagSet) { this->actionFunc = EnOsn_HandleCsAction; } else { this->actionFunc = EnOsn_Idle; @@ -968,14 +968,14 @@ void EnOsn_Destroy(Actor* thisx, PlayState* play) { void EnOsn_Update(Actor* thisx, PlayState* play) { s32 pad; EnOsn* this = THIS; - u32 isFlagSet = Flags_GetSwitch(play, 0); + u32 isSwitchFlagSet = Flags_GetSwitch(play, 0); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); SkelAnime_Update(&this->skelAnime); if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) { - if (isFlagSet) { + if (isSwitchFlagSet) { this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnOsn_UpdateCollider(this, play); this->actor.draw = EnOsn_Draw; 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 011738668..db4d9386b 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -146,7 +146,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { this->unk_40C = 4; this->csIdIndex = -1; owlType = ENOWL_GET_TYPE(&this->actor); - switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor); + switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor); switch (owlType) { case ENOWL_GET_TYPE_1: @@ -258,7 +258,7 @@ void func_8095AA70(EnOwl* this) { } void func_8095AAD0(EnOwl* this, PlayState* play) { - s32 switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor); + s32 switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor); if (switchFlag < 0x7F) { Flags_SetSwitch(play, switchFlag); diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.h b/src/overlays/actors/ovl_En_Owl/z_en_owl.h index 095434fa0..3dfadc7d7 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -10,7 +10,7 @@ typedef void (*EnOwlFunc)(struct EnOwl*); #define ENOWL_GET_F000(thisx) (((thisx)->params & 0xF000) >> 0xC) #define ENOWL_GET_TYPE(thisx) (((thisx)->params & 0xF80) >> 7) -#define ENOWL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENOWL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef enum { /* 0x001 */ ENOWL_GET_TYPE_1 = 1, 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 e6d37cfe4..b6bd9a2d2 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 @@ -247,7 +247,7 @@ void func_80B70D24(EnRailSkb* this, PlayState* play) { while (actor != NULL) { if ((actor->id == ACTOR_OBJ_HAKAISI) && func_80B70B04(this, actor->world.pos)) { - if (Flags_GetSwitch(play, (actor->params & 0xFF00) >> 8)) { + if (Flags_GetSwitch(play, OBJHAKAISI_GET_SWITCH_FLAG(actor))) { Actor_Kill(&this->actor); return; } @@ -276,7 +276,7 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) { Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if (Flags_GetSwitch(play, ENRAILSKB_GET_FF(&this->actor))) { + if (Flags_GetSwitch(play, ENRAILSKB_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h index 593279931..8feff7d5d 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h @@ -10,7 +10,7 @@ typedef void (*EnRailSkbActionFunc)(struct EnRailSkb*, PlayState*); typedef void (*EnRailSkbUnkFunc)(struct EnRailSkb*); #define ENRAILSKB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -#define ENRAILSKB_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENRAILSKB_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF) typedef enum EnRailSkbBodyPart { /* 0 */ ENRAILSKB_BODYPART_0, diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 6ac728a31..b9ea1f142 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -61,7 +61,7 @@ void EnRecepgirl_Init(Actor* thisx, PlayState* play) { this->eyeTexIndex = 2; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0x2ADC; // hear directions again? } else { this->actor.textId = 0x2AD9; // "Welcome..." @@ -105,11 +105,11 @@ void EnRecepgirl_Wait(EnRecepgirl* this, PlayState* play) { } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { - this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?" - } else if (Flags_GetSwitch(play, this->actor.params)) { + this->actor.textId = 0x2367; + } else if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0x2ADC; // hear directions again? } else { - this->actor.textId = 0x2AD9; // "Welcome..." + this->actor.textId = 0x2AD9; } } } @@ -145,8 +145,8 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) { this->actor.textId = 0x2ADC; // hear directions again? EnRecepgirl_SetupWait(this); } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - if (this->actor.textId == 0x2AD9) { // "Welcome..." - Flags_SetSwitch(play, this->actor.params); + if (this->actor.textId == 0x2AD9) { + Flags_SetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor)); Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80)) { @@ -156,11 +156,11 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) { } } else if (this->actor.textId == 0x2ADC) { // hear directions again? Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); - this->actor.textId = 0x2ADD; // "So..." + this->actor.textId = 0x2ADD; } else { Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 10.0f); - if (this->actor.textId == 0x2ADD) { // "So..." + if (this->actor.textId == 0x2ADD) { this->actor.textId = 0x2ADE; // Mayor's office is on the left, drawing room on the right } else if (this->actor.textId == 0x2ADA) { // Mayor's office is on the left (meeting ongoing) this->actor.textId = 0x2ADB; // drawing room on the right diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h index a0fba9fdc..96ad7522a 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h @@ -7,6 +7,8 @@ struct EnRecepgirl; typedef void (*EnRecepgirlActionFunc)(struct EnRecepgirl*, PlayState*); +#define ENRECEPGIRL_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct EnRecepgirl { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; 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 33f79d4f2..2f429b975 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 @@ -264,7 +264,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { } } else { // Scene flag - Checks whether the chandelier has been lit - if (!Flags_GetSwitch(play, EN_S_GORO_SCENEFLAG_INDEX(&this->actor))) { + if (!Flags_GetSwitch(play, EN_S_GORO_GET_SWITCH_FLAG(&this->actor))) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_08)) { if (this->textId == 0xD02) { diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h index 5777af17b..9e0cd7792 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h @@ -5,7 +5,7 @@ #include "objects/object_oF1d_map/object_oF1d_map.h" #define EN_S_GORO_GET_MAIN_TYPE(thisx) ((thisx)->params & 0xF) -#define EN_S_GORO_SCENEFLAG_INDEX(thisx) (((thisx)->params & 0x7F0) >> 4) +#define EN_S_GORO_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4) struct EnSGoro; 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 e4240de0a..2c2e20e6a 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -617,8 +617,8 @@ s32 func_808A6580(EnSt* this, PlayState* play) { break; } } else { - if (ENST_GET_3F(&this->actor) != ENST_3F_63) { - Flags_SetSwitch(play, ENST_GET_3F(&this->actor)); + if (ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) { + Flags_SetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor)); } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); @@ -843,7 +843,7 @@ void EnSt_Init(Actor* thisx, PlayState* play) { EnSt* this = THIS; this->unk_2C0 = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); - if (((ENST_GET_3F(&this->actor) != ENST_3F_63) && Flags_GetSwitch(play, ENST_GET_3F(&this->actor))) || + if (((ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) && Flags_GetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor))) || (this->unk_2C0 < 0)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.h b/src/overlays/actors/ovl_En_St/z_en_st.h index 0dcfb3d00..aab1204aa 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.h +++ b/src/overlays/actors/ovl_En_St/z_en_st.h @@ -7,10 +7,9 @@ struct EnSt; typedef void (*EnStActionFunc)(struct EnSt*, PlayState*); -#define ENST_GET_3F(thisx) (((thisx)->params & 0x3F) & 0xFF) +#define ENST_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F) & 0xFF) #define ENST_GET_1C0(thisx) ((((thisx)->params & 0x1C0) >> 6) & 0xFF) -#define ENST_3F_63 63 #define ENST_1C0_1 1 typedef enum EnStBodyPart { 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 15b7507e1..34ebe1d80 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 @@ -248,7 +248,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->isTalking = false; this->type = EN_TALK_GIBUD_TYPE_GIBDO; this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx); - this->switchFlag = EN_TALK_GIBUD_SWITCH_FLAG(thisx); + this->switchFlag = EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx); this->drawDmgEffAlpha = 0.0f; this->drawDmgEffScale = 0.0f; diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index 0819cd893..06ccd3914 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -5,7 +5,7 @@ #include "objects/object_rd/object_rd.h" #define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF) -#define EN_TALK_GIBUD_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4) +#define EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4) struct EnTalkGibud; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index a76d9ed47..d99ee0bce 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -161,7 +161,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) { this->actionFunc = EnTimeTag_SoaringEngraving_SubsequentInteraction; } } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && - (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) || + (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCH_FLAG(&this->actor)) || CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) { this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_OfferTalk(&this->actor, play, 110.0f); diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h index c022ca122..33f6d414e 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h @@ -14,7 +14,7 @@ typedef void (*EnTimeTagActionFunc)(struct EnTimeTag*, PlayState*); #define TIMETAG_KICKOUT_HOUR(thisx) ((thisx)->home.rot.x) #define TIMETAG_KICKOUT_MINUTE(thisx) ((thisx)->home.rot.y) -#define TIMETAG_SOARING_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define TIMETAG_SOARING_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define TIMETAG_DIARY_GET_TYPE(thisx) ((thisx)->params & 0x7F) #define TIMETAG_DIARY_TIMER(thisx) ((thisx)->home.rot.x) 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 8afe73e5e..64a62f84a 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -204,10 +204,10 @@ void EnTk_Init(Actor* thisx, PlayState* play) { EnTk* this = THIS; this->unk_2B0 = ENTK_GET_F(&this->actor); - this->unk_2B1 = ENTK_GET_7F0(&this->actor); + this->switchFlag = ENTK_GET_SWITCH_FLAG(&this->actor); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, this->unk_2B1)) { + if (Flags_GetSwitch(play, this->switchFlag)) { if (this->unk_2B0 == 0) { Actor_Kill(&this->actor); return; @@ -562,7 +562,7 @@ void func_80AED610(EnTk* this, PlayState* play) { Message_StartTextbox(play, 0x13FD, &this->actor); } else if (CURRENT_DAY != 2) { func_80AED544(this, play); - } else if (!Flags_GetSwitch(play, ENTK_GET_7F0(&this->actor))) { + } else if (!Flags_GetSwitch(play, ENTK_GET_SWITCH_FLAG(&this->actor))) { Message_StartTextbox(play, 0x1403, &this->actor); } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_02)) { func_80AED544(this, play); diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.h b/src/overlays/actors/ovl_En_Tk/z_en_tk.h index aa15c6fc6..46e9b0b96 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h @@ -9,7 +9,7 @@ typedef void (*EnTkActionFunc)(struct EnTk*, PlayState*); typedef void (*EnTkUnkFunc)(struct EnTk*, PlayState*); #define ENTK_GET_F(thisx) ((thisx)->params & 0xF) -#define ENTK_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F) +#define ENTK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0x7F) #define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F) typedef struct EnTk { @@ -20,7 +20,7 @@ typedef struct EnTk { /* 0x1D8 */ Vec3s jointTable[18]; /* 0x244 */ Vec3s morphTable[18]; /* 0x2B0 */ s8 unk_2B0; - /* 0x2B1 */ s8 unk_2B1; + /* 0x2B1 */ s8 switchFlag; /* 0x2B4 */ Vec3f unk_2B4; /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index ce02cd835..12aaa808f 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -248,9 +248,9 @@ void func_80BA39C8(EnToto* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80BA36C0(this, play, 1); if (play->sceneId != SCENE_SONCHONOIE) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor)); } else if (player->transformation == PLAYER_FORM_DEKU) { - Flags_SetSwitch(play, this->actor.home.rot.x); + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor)); } this->unk2B6 = 0; return; @@ -268,7 +268,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) { Actor_OfferTalk(&this->actor, play, 50.0f); if (play->sceneId == SCENE_SONCHONOIE) { if (player->transformation == PLAYER_FORM_DEKU) { - if (!Flags_GetSwitch(play, this->actor.home.rot.x)) { + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor))) { this->text = D_80BA5068; } else { this->text = D_80BA5074; @@ -278,7 +278,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) { } } else if (ENTOTO_WEEK_EVENT_FLAGS) { this->text = D_80BA502C; - } else if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) { + } else if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) { this->text = D_80BA5034; } else { this->text = D_80BA5038; @@ -646,15 +646,15 @@ s32 func_80BA4B24(EnToto* this, PlayState* play) { player = GET_PLAYER(play); Animation_MorphToPlayOnce(&this->skelAnime, &object_zm_Anim_0028B8, -4.0f); if (player->transformation == PLAYER_FORM_ZORA) { - if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) { + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor)); return 1; } else { return 3; } } else { - if (!Flags_GetSwitch(play, (this->actor.params >> 7) & 0x7F)) { - Flags_SetSwitch(play, (this->actor.params >> 7) & 0x7F); + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor))) { + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor)); return 4; } else { return 7; diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.h b/src/overlays/actors/ovl_En_Toto/z_en_toto.h index dc2b0947e..7a742d84a 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h @@ -8,6 +8,10 @@ struct EnToto; typedef void (*EnTotoActionFunc)(struct EnToto*, PlayState*); typedef s32 (*EnTotoUnkFunc)(struct EnToto*, PlayState*); +#define ENTOTO_GET_SWITCH_FLAG_1(thisx) ((thisx)->params & 0x7F) +#define ENTOTO_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 7) & 0x7F) +#define ENTOTO_GET_SWITCH_FLAG_3(thisx) ((thisx)->home.rot.x) + typedef struct EnTotoText { /* 0x0 */ u8 unk0; /* 0x1 */ u8 unk1; 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 6901fbffd..bc960b96b 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 @@ -13,6 +13,7 @@ */ #include "z_en_water_effect.h" +#include "overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h" #include "objects/object_water_effect/object_water_effect.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -414,7 +415,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { this->unk_DC6--; } - if ((rotaryRoom != NULL) && Flags_GetSwitch(play, (rotaryRoom->params >> 1) & 0x7F)) { + if ((rotaryRoom != NULL) && Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(rotaryRoom))) { this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f; } else if (!Play_InCsMode(play)) { this->unk_DC4++; 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 226382f8d..8ae7b0de4 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -336,7 +336,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetJntSph(play, &this->ghostColliders, &this->actor, &sJntSphInit, this->ghostColliderElements); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->staffFlameScroll = Rand_S16Offset(0, 7); - this->switchFlag = EN_WIZ_GET_SWITCHFLAG(&this->actor); + this->switchFlag = EN_WIZ_GET_SWITCH_FLAG(&this->actor); this->type = EN_WIZ_GET_TYPE(&this->actor); if (this->switchFlag == 0x7F) { diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index c0f1c7cfb..fa7156fc5 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -4,7 +4,7 @@ #include "global.h" #include "objects/object_wiz/object_wiz.h" -#define EN_WIZ_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define EN_WIZ_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define EN_WIZ_GET_TYPE(thisx) (((thisx)->params >> 8) & 0xFF) typedef enum { 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 e17f6dc94..57689ebd8 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -864,7 +864,7 @@ void func_80B98178(EnZot* this, PlayState* play) { textId = 0x12A6; SET_WEEKEVENTREG(WEEKEVENTREG_39_04); } - } else if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + } else if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { textId = 0x12A0; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_02)) { textId = 0x12A5; @@ -1173,7 +1173,7 @@ void func_80B98E10(EnZot* this, PlayState* play) { u16 textId; if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { - if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) { textId = 0x12C5; } else { @@ -1187,7 +1187,7 @@ void func_80B98E10(EnZot* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_40_02); } } else { - if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { if (this->unk_2F2 & 0x10) { textId = 0x12BF; } else { diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.h b/src/overlays/actors/ovl_En_Zot/z_en_zot.h index e2c43baa3..b6b67abb4 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h @@ -9,6 +9,7 @@ typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*); #define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENZOT_GET_SWITCH_FLAG(thisx) (((thisx)->home.rot.z) & 0x7F) #define ENZOT_PATH_INDEX_NONE 0x3F 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 c4e861ff6..d475a263e 100644 --- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c +++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c @@ -92,7 +92,7 @@ void MirRay2_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; if (MIRRAY2_GET_F(thisx) != 1) { - if ((MIRRAY2_GET_SWITCH_FLAGS(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) { + if ((MIRRAY2_GET_SWITCH_FLAG(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) { this->unk1A4 |= 1; } } @@ -109,7 +109,7 @@ void MirRay2_Update(Actor* thisx, PlayState* play) { MirRay2* this = THIS; if (this->unk1A4 & 1) { - if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) { this->unk1A4 &= ~1; } } else { diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h index 4bb40d40d..7325ba2cf 100644 --- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h +++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h @@ -6,7 +6,7 @@ struct MirRay2; #define MIRRAY2_GET_F(thisx) ((thisx)->params & 0xF) -#define MIRRAY2_GET_SWITCH_FLAGS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define MIRRAY2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct MirRay2 { /* 0x000 */ Actor actor; 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 cec65a32c..d713c9d04 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -198,7 +198,7 @@ void ObjArmos_Init(Actor* thisx, PlayState* play) { if (sp40 == 0) { func_809A57D8(this); - } else if (Flags_GetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor))) { if (sp44 == OBJARMOS_ROT_7_0) { this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp40 * 60); func_809A57D8(this); @@ -285,7 +285,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) { } } else { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); - Flags_SetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor)); sp20 = true; } 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 4ac83cc9d..af3b31338 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h @@ -8,7 +8,7 @@ struct ObjArmos; typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*); -#define OBJARMOS_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJARMOS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7) #define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF) 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 0ad12d3f3..9e6531ef1 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -275,14 +275,14 @@ s32 func_80937468(ObjBean* this, PlayState* play) { ObjBean* func_809374F8(ObjBean* this, PlayState* play) { Actor* bgActor = play->actorCtx.actorLists[ACTORCAT_BG].first; - s32 params = OBJBEAN_GET_3F80(&this->dyna.actor, 0); + s32 switchFlag = OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0); while (bgActor != NULL) { if (bgActor->id == ACTOR_OBJ_BEAN) { s32 params2 = OBJBEAN_GET_C000(bgActor); if (!params2 && (bgActor->room == this->dyna.actor.room) && !OBJBEAN_GET_80(bgActor) && - (params == OBJBEAN_GET_7F(bgActor, 0)) && + (switchFlag == OBJBEAN_GET_SWITCH_FLAG_1(bgActor, 0)) && (Math3D_Vec3fDistSq(&bgActor->world.pos, &this->dyna.actor.world.pos) < SQ(10.0f))) { break; } @@ -406,12 +406,14 @@ void ObjBean_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 8.8f); func_80936CF0(this, play); - if (!OBJBEAN_GET_80(&this->dyna.actor) && Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0)) && - !Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1)) && func_800FE9B4(play)) { - Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1)); + if (!OBJBEAN_GET_80(&this->dyna.actor) && + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0)) && + !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1)) && func_800FE9B4(play)) { + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1)); } - if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1))) { + if (OBJBEAN_GET_80(&this->dyna.actor) || + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1))) { func_80938804(this); } else { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); @@ -504,12 +506,12 @@ void func_80937DEC(ObjBean* this, PlayState* play) { this->unk_1FF = false; } - if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)) && - Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)) && func_800FE9B4(play)) { - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)); + if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)) && + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0)) && func_800FE9B4(play)) { + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)); } - if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1))) { + if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1))) { Actor_Kill(&this->dyna.actor); return; } @@ -520,7 +522,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) { this->dyna.actor.draw = func_80938E00; } - if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0))) { + if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0))) { this->unk_1FE |= 5; func_80937C30(this); } else { @@ -528,7 +530,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) { func_80937C10(this); } - if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) { + if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) { this->unk_1E4 = 5; } else { this->unk_1E4 = 0; @@ -548,10 +550,10 @@ void func_80937FC8(ObjBean* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { if (Player_GetExchangeItemAction(play) == PLAYER_IA_MAGIC_BEANS) { func_809383B4(this); - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0)); } - if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) { + if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) { this->unk_1E4 = 5; } else { s32 pad; @@ -566,7 +568,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) { ((this->unk_1FF != 0) && (this->unk_1FE & 4) && (this->dyna.actor.xzDistToPlayer < 300.0f) && func_800FE9B4(play))) { func_809375C8(this, play); - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)); this->unk_1E4 = 6; func_80938670(this); } else if (this->unk_1FF != 0) { @@ -614,7 +616,7 @@ void func_80938298(ObjBean* this, PlayState* play) { if (this->unk_1E0 >= 3) { this->unk_1E4 = 3; - Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0)); this->unk_1E4 = 5; func_8093833C(this); } else if (this->unk_1E4 == 4) { diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h index 1a22de390..f21610891 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h @@ -8,10 +8,10 @@ struct ObjBean; typedef void (*ObjBeanActionFunc)(struct ObjBean*, PlayState*); typedef void (*ObjBeanUnkFunc)(struct ObjBean*); -#define OBJBEAN_GET_7F(thisx, x) (((thisx)->params + (x)) & 0x7F) +#define OBJBEAN_GET_SWITCH_FLAG_1(thisx, offset) (((thisx)->params + (offset)) & 0x7F) #define OBJBEAN_GET_80(thisx) (((thisx)->params >> 7) & 1) #define OBJBEAN_GET_3F00(thisx) (((thisx)->params >> 8) & 0x3F) -#define OBJBEAN_GET_3F80(thisx, x) ((((thisx)->params >> 7) + (x)) & 0x7F) +#define OBJBEAN_GET_SWITCH_FLAG_2(thisx, offset) ((((thisx)->params >> 7) + (offset)) & 0x7F) #define OBJBEAN_GET_C000(thisx) (((thisx)->params >> 0xE) & 3) #define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3) 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 61805fd49..afcf7aaa0 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -111,7 +111,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) { } Actor_SetScale(&this->actor, sp28 * 0.001f); - this->actor.params &= 0xFF; + this->actor.params = OBJBIGICLE_GET_SWITCH_FLAG_MASK(&this->actor); this->actor.colChkInfo.mass = MASS_IMMOVABLE; sp30 = sp28 * (1.0f / 60.0f); @@ -125,7 +125,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) { this->collider2.dim.height = this->collider2.dim.height * sp30; this->collider2.dim.yShift = this->collider2.dim.yShift * sp30; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -248,7 +248,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) { temp_f0 = this->actor.world.pos.y - icePoly->actor.world.pos.y; if ((temp_f0 < icePoly->colliders1[0].dim.height) && (temp_f0 > 0.0f) && (Actor_WorldDistXZToActor(&this->actor, &icePoly->actor) < icePoly->colliders1[0].dim.radius)) { - Flags_SetSwitch(play, this->actor.params); + Flags_SetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80AE939C; return; } diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h index 2eb5a00bd..fc506e62b 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h @@ -7,6 +7,8 @@ struct ObjBigicicle; typedef void (*ObjBigicicleActionFunc)(struct ObjBigicicle*, PlayState*); +#define OBJBIGICLE_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF) +#define OBJBIGICLE_GET_SWITCH_FLAG(thisx) ((thisx)->params) #define OBJBIGICLE_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) typedef struct ObjBigicicle { diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c index a4f44973f..f21ebff2b 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c @@ -32,7 +32,7 @@ ActorInit Obj_Blockstop_InitVars = { void ObjBlockstop_Init(Actor* thisx, PlayState* play) { ObjBlockstop* this = THIS; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } this->actionFunc = ObjBlockstop_CheckForBlock; @@ -58,7 +58,7 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) { void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { - Flags_SetSwitch(play, this->actor.params); + Flags_SetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor)); if (CutsceneManager_GetLength(this->actor.csId) != -1) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h index 15d45a90b..e6ad9f696 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h @@ -7,6 +7,8 @@ struct ObjBlockstop; typedef void (*ObjBlockstopActionFunc)(struct ObjBlockstop*, PlayState*); +#define OBJBLOCKSTOP_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjBlockstop { /* 0x000 */ Actor actor; /* 0x144 */ ObjBlockstopActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c index a2ecc448e..95ff47db2 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -182,7 +182,7 @@ void ObjBombiwa_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -342,7 +342,7 @@ void func_80939EF4(ObjBombiwa* this, PlayState* play) { } if (sp28->unk_0C(&this->actor)) { - Flags_SetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor)); + Flags_SetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN); if (OBJBOMBIWA_GET_8000(&this->actor)) { Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h index b49a89323..911d804fc 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h @@ -7,7 +7,7 @@ struct ObjBombiwa; typedef void (*ObjBombiwaActionFunc)(struct ObjBombiwa*, PlayState*); -#define OBJBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1) #define OBJBOMBIWA_GET_8000(thisx) (((thisx)->params >> 0xF) & 1) 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 fde4fa4b3..8f326af48 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -191,7 +191,7 @@ void ObjChan_InitChandelier(ObjChan* this, PlayState* play) { } } - if (Flags_GetSwitch(play, thisx->params & 0x7F)) { + if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) { this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->stateFlags |= OBJCHAN_STATE_ON_FIRE; @@ -261,9 +261,9 @@ void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) { } } if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) { - Flags_SetSwitch(play, thisx->params & 0x7F); + Flags_SetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx)); } - if (Flags_GetSwitch(play, thisx->params & 0x7F)) { + if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) { if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) { this->rotationSpeed = 0; this->flameSize = 0.0f; diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h index 0e6fbca86..f97ecccda 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h @@ -5,6 +5,8 @@ struct ObjChan; +#define OBJCHAN_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + #define OBJCHAN_SUBTYPE(thisx) (((thisx)->params >> 12) & 0xF) #define OBJCHAN_SUBTYPE_CHANDELIER 0 #define OBJCHAN_SUBTYPE_POT 1 diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c index ee76dd9d4..a809da57a 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -32,8 +32,8 @@ ActorInit Obj_Demo_InitVars = { void ObjDemo_Init(Actor* thisx, PlayState* play) { ObjDemo* this = THIS; - thisx->params = OBJDEMO_GET_FF(thisx); - if ((thisx->params != OBJDEMO_FF_FF) && (Flags_GetSwitch(play, thisx->params))) { + thisx->params = OBJDEMO_GET_SWITCH_FLAG_MASK(thisx); + if ((OBJDEMO_GET_SWITCH_FLAG(thisx) != 0xFF) && (Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(thisx)))) { Actor_Kill(&this->actor); return; } @@ -93,8 +93,8 @@ void func_80983704(ObjDemo* this, PlayState* play) { } this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); if (this->actor.csId == CS_ID_NONE) { - if (this->actor.params != 0xFF) { - Flags_SetSwitch(play, this->actor.params); + if (OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) { + Flags_SetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); } @@ -108,7 +108,8 @@ void func_80983704(ObjDemo* this, PlayState* play) { void ObjDemo_Update(Actor* thisx, PlayState* play) { ObjDemo* this = THIS; - if ((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params)) { + if ((OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) && + Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h index 065a21fe9..6b9d39db3 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h @@ -3,12 +3,13 @@ #include "global.h" -#define OBJDEMO_GET_FF(thisx) ((thisx)->params & 0xFF) -#define OBJDEMO_FF_FF 0xFF struct ObjDemo; typedef void (*ObjDemoActionFunc)(struct ObjDemo*, PlayState*); +#define OBJDEMO_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF) +#define OBJDEMO_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjDemo { /* 0x000 */ Actor actor; /* 0x144 */ ObjDemoActionFunc actionFunc; 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 c1b46fce7..ac31cbc64 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -131,7 +131,7 @@ void ObjDhouse_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->dyna.actor.draw = func_80B13E40; func_80B13908(this); } else { @@ -434,7 +434,7 @@ void func_80B13940(ObjDhouse* this, PlayState* play2) { PlayState* play = play2; s32 sp20 = false; - if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) { sp20 = true; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EXPLSION_LONG); } diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h index c03dbed7d..46f1af83b 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h @@ -7,7 +7,7 @@ struct ObjDhouse; typedef void (*ObjDhouseActionFunc)(struct ObjDhouse*, PlayState*); -#define OBJDHOUSE_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJDHOUSE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct { /* 0x00 */ Vec3f unk_00; diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index 771833c58..9933b36f2 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -88,7 +88,7 @@ void func_80A4CABC(ObjFireshield* this) { s32 pad; if (CutsceneManager_IsNext(this->actor.csId)) { - s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_a0 = (sp18 & ~0x1F) >> 5; CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); @@ -103,7 +103,7 @@ void func_80A4CABC(ObjFireshield* this) { void func_80A4CB7C(ObjFireshield* this) { s32 pad; - s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor); if (this->unk_194 > 0) { if (this->unk_194 == 20) { @@ -119,7 +119,7 @@ void func_80A4CB7C(ObjFireshield* this) { } void func_80A4CC54(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_v1 = 1 << (temp_v0 & 0x1F); this->actionFunc = func_80A4CCBC; @@ -128,7 +128,7 @@ void func_80A4CC54(ObjFireshield* this) { } void func_80A4CCBC(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); this->actionFunc = func_80A4CD28; D_80A4D884[(temp_v0 & ~0x1F) >> 5] &= ~(1 << (temp_v0 & 0x1F)); @@ -141,7 +141,7 @@ void func_80A4CD28(ObjFireshield* this) { void func_80A4CD34(Actor* thisx, PlayState* play) { s32 pad; ObjFireshield* this = THIS; - s32 sp24 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_7F(&this->actor)); + s32 isSwitchFlagSet = Flags_GetSwitch(play, OBJFIRESHIELD_GET_FLAGS(&this->actor)); s32 phi_v1; s32 phi_a0; @@ -154,13 +154,13 @@ void func_80A4CD34(Actor* thisx, PlayState* play) { phi_a0 = false; } } else { - phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor)); + phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor)); phi_v1 = false; } if (phi_v1 || phi_a0) { this->unk_19C = 0; - } else if (sp24) { + } else if (isSwitchFlagSet) { this->unk_19C = 0; } else { this->unk_19C = 1; @@ -175,7 +175,7 @@ void func_80A4CD34(Actor* thisx, PlayState* play) { void func_80A4CE28(ObjFireshield* this, PlayState* play) { s32 pad; - s32 sp30 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp30 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 pad2[2]; s32 sp24; s32 sp20; @@ -189,7 +189,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) { sp20 = false; } } else { - sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor)); + sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor)); sp24 = false; } @@ -251,7 +251,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) { } void func_80A4D174(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_v1 = 1 << (temp_v0 & 0x1F); if (!(D_80A4D864[(temp_v0 & ~0x1F) >> 5] & temp_v1)) { @@ -318,7 +318,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { s32 pad; ObjFireshield* this = THIS; s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor); - s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp40 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_a0; s32 temp_v1; diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h index ffe1d7a35..772f839bb 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h @@ -7,10 +7,10 @@ struct ObjFireshield; typedef void (*ObjFireshieldActionFunc)(struct ObjFireshield*); -#define OBJFIRESHIELD_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJFIRESHIELD_GET_FLAGS(thisx) ((thisx)->params & 0x7F) #define OBJFIRESHIELD_GET_1F00(thisx) (((thisx)->params >> 8) & 0x1F) #define OBJFIRESHIELD_GET_2000(thisx) (((thisx)->params >> 0xD) & 1) -#define OBJFIRESHIELD_GET_3F80(thisx) (((thisx)->params >> 7) & 0x7F) +#define OBJFIRESHIELD_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 7) & 0x7F) #define OBJFIRESHIELD_GET_C000(thisx) (((thisx)->params >> 0xE) & 3) #define OBJFIRESHIELD_GET_ROTX(thisx) ((thisx)->home.rot.x & 1) 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 6db03e1ca..8802a257d 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -112,7 +112,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp7C); this->unk_19A = 0; this->unk_198 = 0; - this->switchFlag = OBJHAKAISI_GET_SWITCHFLAG(thisx); + this->switchFlag = OBJHAKAISI_GET_SWITCH_FLAG(thisx); this->csId = this->dyna.actor.csId; if (this->switchFlag == 0xFF) { diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h index 1454181dd..7ee84768a 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h @@ -8,7 +8,7 @@ struct ObjHakaisi; typedef void (*ObjHakaisiActionFunc)(struct ObjHakaisi*, PlayState*); #define OBJHAKAISI_GET_FF(thisx) ((thisx)->params & 0xFF) -#define OBJHAKAISI_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFF00) >> 8) +#define OBJHAKAISI_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF00) >> 8) typedef struct ObjHakaisi { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c index f9d1f0252..5ccbf3d50 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -180,7 +180,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) { func_809A13A0(this, play); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 2.3f); - if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -232,7 +232,7 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) { } else { func_809A10F4(this, play); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_WALL_BROKEN); - Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h index 962a59612..48ea889d5 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h @@ -5,7 +5,7 @@ struct ObjHamishi; -#define OBJHAMISHI_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJHAMISHI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct ObjHamishi { /* 0x000 */ Actor actor; 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 5c63e0561..3dde506b9 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c @@ -44,7 +44,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); + this->switchFlag = OBJHSSTUMP_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_hsstump_Colheader_0011B0); switch (this->isHidden) { @@ -71,7 +71,7 @@ void ObjHsStump_SetupIdle(ObjHsStump* this, PlayState* play) { } void ObjHsStump_Idle(ObjHsStump* this, PlayState* play) { - if (this->isHidden == true && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->isHidden == true) && Flags_GetSwitch(play, this->switchFlag)) { ObjHsStump_SetupAppear(this, play); } } diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h index 0f06fdfaf..479e17207 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJHSSTUMP_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJHSSTUMP_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJHSSTUMP_GET_ISHIDDEN(thisx) (((thisx)->params >> 12) & 0xF) struct ObjHsStump; diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c index 40e8b9323..5cced7f48 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c @@ -78,7 +78,7 @@ void ObjHsblock_Init(Actor* thisx, PlayState* play) { func_8093E03C(this); break; case 1: - if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(thisx))) { func_8093E03C(this); } else { func_8093E05C(this); @@ -106,7 +106,7 @@ void func_8093E05C(ObjHsblock* this) { } void func_8093E0A0(ObjHsblock* this, PlayState* play) { - if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_8093E0E8(this); } } diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h index f91926409..ca2d81c63 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJHSBLOCK_GET_SWITCH(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJHSBLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJHSBLOCK_GET_3(thisx) ((thisx)->params & 3) #define OBJHSBLOCK_GET_5(thisx) (((thisx)->params >> 5) & 1) #define OBJHSBLOCK_GET_6(thisx) (((thisx)->params >> 6) & 3) diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c index b04dff8a0..a2b376a28 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -340,7 +340,7 @@ void ObjHugebombiwa_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -409,19 +409,19 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); - Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor)); - if (!(ENHUGEBOMBIWA_GET_100(&this->actor)) && + Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor)); + if (!ENHUGEBOMBIWA_GET_100(&this->actor) && ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) { SET_WEEKEVENTREG(WEEKEVENTREG_19_02); } - if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) { + if (!ENHUGEBOMBIWA_GET_100(&this->actor)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN); } else { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_SNOWBALL_BROKEN); } - if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) { + if (!ENHUGEBOMBIWA_GET_100(&this->actor)) { func_80A53BE0(play, &this->actor.world.pos); func_80A54E10(this); } else { diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h index 932a61c3d..bb34c5013 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h @@ -7,7 +7,7 @@ struct ObjHugebombiwa; typedef void (*ObjHugebombiwaActionFunc)(struct ObjHugebombiwa*, PlayState*); -#define ENHUGEBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F) +#define ENHUGEBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENHUGEBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct { 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 f44033861..8ee8520ed 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -65,20 +65,20 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP), }; -s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) { +s32 func_80B9C450(PlayState* play, s32 switchFlagBase, s32 arg2) { s32 sp2C = 1; if (arg2 < ARRAY_COUNT(D_80B9DC70)) { - s32 val = D_80B9DC70[arg2].unk_00; + s32 switchFlagOffset = D_80B9DC70[arg2].unk_00; s32 val3 = D_80B9DC70[arg2].unk_01; - while (val--) { - if ((1 << val) & val3) { - if (!Flags_GetSwitch(play, arg1 + val)) { + while (switchFlagOffset--) { + if ((1 << switchFlagOffset) & val3) { + if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } - } else if (Flags_GetSwitch(play, arg1 + val)) { + } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } @@ -87,23 +87,26 @@ s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) { sp2C = 0; switch (arg2) { case 14: - if (!Flags_GetSwitch(play, arg1)) { + if (!Flags_GetSwitch(play, switchFlagBase)) { sp2C = 1; } - if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3)) { + if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3)) { sp2C += 2; } break; case 15: - if (!Flags_GetSwitch(play, arg1) || - (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3))) { + if (!Flags_GetSwitch(play, switchFlagBase) || + (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3))) { sp2C = 1; } break; + + default: + break; } } return sp2C; @@ -204,7 +207,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_160 = OBJHUNSUI_GET_F000(thisx); this->unk_164 = OBJHUNSUI_GET_F80(thisx); - this->unk_168 = OBJHUNSUI_GET_7F(thisx); + this->switchFlag = OBJHUNSUI_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 != OBJHUNSUI_F000_5) && (this->unk_160 != OBJHUNSUI_F000_6)) { @@ -279,7 +282,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { case OBJHUNSUI_F000_1: this->dyna.actor.draw = func_80B9DA60; - if ((this->unk_172 & 1) && func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) && func_80B9C450(play, this->switchFlag, this->unk_164)) { this->unk_174 = 240.0f; this->unk_172 |= 4; this->unk_184 = 0xFF0; @@ -289,7 +292,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { this->unk_184 = 0; } this->unk_178 = this->unk_174; - this->unk_180 = func_80B9C450(play, this->unk_168, this->unk_164); + this->unk_180 = func_80B9C450(play, this->switchFlag, this->unk_164); this->actionFunc = func_80B9CE64; break; @@ -304,7 +307,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { func_80B9D2BC(this, play); this->unk_178 = this->unk_174; } else { - if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) { func_80B9D4D0(this, play); } else { func_80B9D0FC(this, play); @@ -351,7 +354,7 @@ void func_80B9CE64(ObjHunsui* this, PlayState* play) { this->unk_18A += 0x71C; Math_SmoothStepToF(&this->unk_190, this->unk_194, 1.0f, 0.2f, 0.01f); - sp2C = func_80B9C450(play, this->unk_168, this->unk_164); + sp2C = func_80B9C450(play, this->switchFlag, this->unk_164); if (!(this->unk_172 & 1)) { if (sp2C != this->unk_180) { @@ -446,7 +449,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) { this->unk_172 |= 2; } - if (func_80B9C450(play, this->unk_168, this->unk_164)) { + if (func_80B9C450(play, this->switchFlag, this->unk_164)) { this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D4D0(this, play); @@ -463,7 +466,7 @@ s32 func_80B9D288(PlayState* play, Actor* thisx, Actor* iter, void* verifyData) } void func_80B9D2BC(ObjHunsui* this, PlayState* play) { - if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) { func_80B9D4D0(this, play); } else { this->unk_172 |= 2; @@ -559,7 +562,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) { this->unk_1B0 += -8.0f + (0.9f * (this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y)); } - if (!(this->unk_172 & 1) && !func_80B9C450(play, this->unk_168, this->unk_164)) { + if (!(this->unk_172 & 1) && !func_80B9C450(play, this->switchFlag, this->unk_164)) { this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D0FC(this, play); @@ -576,7 +579,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { (this->unk_16D != play->roomCtx.curRoom.num) && (this->unk_16D != play->roomCtx.prevRoom.num)) { Actor_Kill(&this->dyna.actor); } else { - if (Flags_GetSwitch(play, this->unk_168)) { + if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_172 &= ~2; this->unk_172 |= 0x10; csId = this->dyna.actor.csId; @@ -600,7 +603,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 800.0f, 0.1f, 8.0f, 1.0f) < 0.5f) { if (DECR(this->unk_16E) == 0) { - Flags_UnsetSwitch(play, this->unk_168); + Flags_UnsetSwitch(play, this->switchFlag); } } this->dyna.actor.velocity.y = this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y; diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h index 1f0450b28..a0b42a648 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h @@ -8,7 +8,7 @@ struct ObjHunsui; typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*); -#define OBJHUNSUI_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJHUNSUI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) @@ -27,7 +27,7 @@ typedef struct ObjHunsui { /* 0x15C */ ObjHunsuiActionFunc actionFunc; /* 0x160 */ s16 unk_160; /* 0x164 */ s32 unk_164; - /* 0x168 */ s32 unk_168; + /* 0x168 */ s32 switchFlag; /* 0x16C */ s8 unk_16C; /* 0x16D */ s8 unk_16D; /* 0x16E */ s8 unk_16E; diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index 9b3a08bda..8df527f37 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -81,7 +81,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { ObjIcePoly* this = THIS; s32 i; - this->unk_149 = OBJICEPOLY_GET_FF00(thisx); + this->switchFlag = OBJICEPOLY_GET_SWITCH_FLAG(thisx); thisx->params &= 0xFF; thisx->uncullZoneForward = 5600.0f; @@ -115,7 +115,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { thisx->shape.rot.x = 0x500; thisx->shape.rot.z = -0x500; - if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) || + if (((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) || ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { Actor_Kill(thisx); return; @@ -219,7 +219,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { } } while (actor != NULL); } - } else if ((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) { + } else if ((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) { CutsceneManager_Queue(this->actor.csId); this->unk_14A = 1; this->actionFunc = func_80931E58; @@ -328,8 +328,8 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) { if (this->unk_14A == 0) { CutsceneManager_Stop(this->actor.csId); - if (this->unk_149 != OBJICEPOLY_FF_FF) { - Flags_SetSwitch(play, this->unk_149); + if (this->switchFlag != 0xFF) { + Flags_SetSwitch(play, this->switchFlag); } Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h index b081a7250..3e59cd92e 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h @@ -7,15 +7,13 @@ struct ObjIcePoly; typedef void (*ObjIcePolyActionFunc)(struct ObjIcePoly*, PlayState*); -#define OBJICEPOLY_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) - -#define OBJICEPOLY_FF_FF 0xFF +#define OBJICEPOLY_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) typedef struct ObjIcePoly { /* 0x000 */ Actor actor; /* 0x144 */ ObjIcePolyActionFunc actionFunc; /* 0x148 */ u8 unk_148; - /* 0x149 */ u8 unk_149; + /* 0x149 */ u8 switchFlag; /* 0x14A */ s16 unk_14A; /* 0x14C */ ColliderCylinder colliders1[2]; /* 0x1E4 */ ColliderCylinder colliders2[2]; 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 1ca298f79..00f5e9957 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -46,7 +46,7 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col); - this->switchFlag = KZSAKU_GET_SWITCHFLAG(thisx); + this->switchFlag = KZSAKU_GET_SWITCH_FLAG(thisx); this->raisedAmount = 0.0f; if (Flags_GetSwitch(play, this->switchFlag)) { diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h index 0a6f00187..2af2db8ab 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h @@ -3,7 +3,7 @@ #include "global.h" -#define KZSAKU_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define KZSAKU_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) struct ObjKzsaku; 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 88d04b780..9e92dcb11 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -101,7 +101,7 @@ void ObjLift_Init(Actor* thisx, PlayState* play) { 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, DYNA_TRANSFORM_POS); - if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)))) { + if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { Actor_Kill(&this->dyna.actor); return; } @@ -196,7 +196,7 @@ void func_8093DA48(ObjLift* this, PlayState* play) { func_8093DB70(this); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - Flags_SetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h index b7f2af050..ae973ecbf 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h @@ -5,7 +5,7 @@ #define OBJLIFT_GET_1(thisx) ((thisx)->params & 1) #define OBJLIFT_GET_7(thisx) (((thisx)->params >> 8) & 7) -#define OBJLIFT_GET_7F(thisx) (((thisx)->params >> 1) & 0x7F) +#define OBJLIFT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 1) & 0x7F) struct ObjLift; 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 f8ee482df..90feb9634 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -93,7 +93,7 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->dyna.actor, typeVars->scale); DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor))) { + if (Flags_GetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -152,7 +152,7 @@ void ObjLightblock_SetupPlayCutscene(ObjLightblock* this) { void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor)); + Flags_SetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor)); ObjLightblock_SpawnEffect(this, play); ObjLightblock_SetupFadeAway(this); } else { diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h index 63a106dac..c1c1bcbb7 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h @@ -4,7 +4,7 @@ #include "global.h" #define LIGHTBLOCK_TYPE(thisx) ((thisx)->params & 1) -#define LIGHTBLOCK_DESTROYED(thisx) (((thisx)->params >> 8) & 0x7F) +#define LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) struct ObjLightblock; diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c index 39cb3abd2..1acb015ea 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -100,9 +100,9 @@ void ObjLightswitch_UpdateSwitchFlags(ObjLightswitch* this, PlayState* play, s32 if (this) {} if (set) { - Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); } else { - Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); } } @@ -150,7 +150,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) { u32 isSwitchActivated; s32 isTriggered; - isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); isTriggered = false; Actor_ProcessInitChain(&this->actor, sInitChain); Actor_SetFocus(&this->actor, 0.0f); @@ -264,7 +264,7 @@ void ObjLightSwitch_Enabled(ObjLightswitch* this, PlayState* play) { if (actorType == LIGHTSWITCH_TYPE_REGULAR) { // switch can be disabled outside of this actor by flag - if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor))) { + if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor))) { ObjLightSwitch_SetupDisabled(this); } } else if (actorType == LIGHTSWITCH_TYPE_FLIP) { diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h index c26dab262..c81a87057 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h @@ -40,6 +40,6 @@ typedef struct ObjLightswitch { #define LIGHTSWITCH_GET_TYPE(thisx) (((thisx)->params >> 4) & 0x3) #define LIGHTSWITCH_GET_INVISIBLE(thisx) (((thisx)->params >> 3) & 1) -#define LIGHTSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define LIGHTSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #endif // Z_OBJ_LIGHTSWITCH_H diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c index da16d938f..c7605c825 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c @@ -53,7 +53,7 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) { if (!func_8099FA40(this, play)) { this->unk144 = -1; } - if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); } } @@ -62,7 +62,7 @@ void ObjMakekinsuta_Destroy(Actor* thisx, PlayState* play) { ObjMakekinsuta* this = THIS; if (func_8099FA40(this, play)) { - Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx)); + Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx)); } } @@ -107,7 +107,7 @@ void func_8099FB64(Actor* thisx, PlayState* play) { void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) { ObjMakekinsuta* this = THIS; - if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) { this->actor.update = func_8099FD7C; CutsceneManager_Queue(this->actor.csId); } else { diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h index 17c9220e2..6afe50e1a 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h @@ -8,7 +8,7 @@ struct ObjMakekinsuta; #define OBJMAKEKINSUTA_GET_1F(thisx) (((thisx)->params >> 8) & 0x1F) #define OBJMAKEKINSUTA_GETS_3(params) ((params & 3) & 0xFF) #define OBJMAKEKINSUTA_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF) -#define OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx) ((thisx)->params & 0x7F) +#define OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct ObjMakekinsuta { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c index bcef92843..76ccba1b1 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -27,8 +27,8 @@ ActorInit Obj_Makeoshihiki_InitVars = { s32 ObjMakeoshihiki_GetChildSpawnPointIndex(ObjMakeoshihiki* this, PlayState* play) { s32 pad; - s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor)) ? 1 : 0; - s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor)) ? 2 : 0; + s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor)) ? 1 : 0; + s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor)) ? 2 : 0; return pathIndexOffset1 + pathIndexOffset2; } @@ -39,8 +39,8 @@ void ObjMakeoshihiki_SetSwitchFlags(ObjMakeoshihiki* this, PlayState* play, s32 s32 switchFlag1; s32 switchFlag2; - switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor); - switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor); + switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor); + switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor); if (pathIndex & 2) { Flags_SetSwitch(play, switchFlag2); diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h index fbe8c1283..c9ae90921 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h @@ -6,8 +6,8 @@ struct ObjMakeoshihiki; #define OBJMAKEOSHIHIKI_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x7F) -#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(thisx) ((thisx)->home.rot.z & 0x7F) -#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(thisx) ((thisx)->params & 0x7F) +#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(thisx) ((thisx)->home.rot.z & 0x7F) +#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(thisx) ((thisx)->params & 0x7F) typedef struct ObjMakeoshihiki { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c index 10f12c64a..d894c64a6 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -134,7 +134,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { if ((*collectible != NULL) && !((this->unk164 >> i) & 1)) { if ((*collectible)->unk1A4 != 0) { - Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&this->actor)); + Flags_SetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor)); } if ((*collectible)->actor.update == NULL) { this->unk164 |= (1 << i); @@ -147,7 +147,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { void ObjMure3_Init(Actor* thisx, PlayState* play) { ObjMure3* this = THIS; - if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h index 336a092b4..fb79e3440 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F) +#define OBJMURE3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) struct ObjMure3; 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 770f2131d..fdedd55a1 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -174,7 +174,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) { play->actorCtx.flags |= ACTORCTX_FLAG_7; } - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { return; } } @@ -209,10 +209,10 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) { Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 200.0f, this->dyna.actor.velocity.y); if (OBJNOZOKI_GET_200(&this->dyna.actor)) { - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { return; } - } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { s32 csId = this->dyna.actor.csId; if (csId == this->csId) { @@ -252,20 +252,20 @@ void func_80BA2AB4(ObjNozoki* this, PlayState* play) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_5)) { if (!(OBJNOZOKI_GET_200(&this->dyna.actor)) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { func_80BA2790(this); } } } -void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 arg3) { +void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 switchFlag) { this->unk_15D = arg2; this->unk_15E = 80; - Flags_UnsetSwitch(play, arg3); + Flags_UnsetSwitch(play, switchFlag); } void func_80BA2BA4(ObjNozoki* this, PlayState* play) { - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { this->dyna.actor.shape.rot.x = -0x1F40; this->unk_15E = 80; } else if (DECR(this->unk_15E) == 0) { @@ -331,7 +331,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) { Actor_Kill(&this->dyna.actor); } } else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) && (GET_PLAYER(play)->actor.id == ACTOR_PLAYER) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) { static Vec3f D_80BA34F0 = { 0.0f, 0.0f, 50.0f }; play->actorCtx.flags |= ACTORCTX_FLAG_6; @@ -374,7 +374,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) { this->unk_15E = 20; Math_Vec3f_Copy(&this->dyna.actor.world.pos, sp1C); } else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { sp1C = &this->dyna.actor.home.pos; } } else if (DECR(this->unk_15E) == 0) { @@ -386,7 +386,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) { void func_80BA311C(ObjNozoki* this, PlayState* play) { if (this->unk_15D == 0) { - if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { this->unk_15D = 1; this->unk_15E = 70; } diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h index 8bfc9818e..33c97db69 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h @@ -7,11 +7,11 @@ struct ObjNozoki; typedef void (*ObjNozokiActionFunc)(struct ObjNozoki*, PlayState*); -#define OBJNOZOKI_GET_SWITCHFLAG1(thisx) ((thisx)->params & 0x7F) +#define OBJNOZOKI_GET_SWITCH_FLAG1(thisx) ((thisx)->params & 0x7F) #define OBJNOZOKI_GET_180(thisx) (((thisx)->params >> 7) & 3) #define OBJNOZOKI_GET_200(thisx) ((thisx)->params & 0x200) #define OBJNOZOKI_GET_400(thisx) ((thisx)->params & 0x400) -#define OBJNOZOKI_GET_SWITCHFLAG2(thisx) (((thisx)->params >> 9) & 0x7F) +#define OBJNOZOKI_GET_SWITCH_FLAG2(thisx) (((thisx)->params >> 9) & 0x7F) #define OBJNOZOKI_400 0x400 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 736d80d10..9d49067fe 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -134,26 +134,26 @@ void ObjOshihiki_UpdateInitPos(ObjOshihiki* this) { } s32 ObjOshihiki_NoSwitchPress(ObjOshihiki* this, DynaPolyActor* dyna, PlayState* play) { - s16 dynaSwitchFlag; + s16 switchFlag; if (dyna == NULL) { return true; } if (dyna->actor.id == ACTOR_OBJ_SWITCH) { - dynaSwitchFlag = OBJSWITCH_GET_7F00(&dyna->actor); + switchFlag = OBJSWITCH_GET_7F00(&dyna->actor); switch (OBJSWITCH_GET_33(&dyna->actor)) { case OBJSWITCH_NORMAL_BLUE: - if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) && - Flags_GetSwitch(play, dynaSwitchFlag)) { + if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) && + Flags_GetSwitch(play, switchFlag)) { return false; } break; case OBJSWITCH_INVERSE_BLUE: - if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) && - !Flags_GetSwitch(play, dynaSwitchFlag)) { + if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) && + !Flags_GetSwitch(play, switchFlag)) { return false; } break; @@ -200,13 +200,16 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) { if ((OBJOSHIHIKI_GET_FF00(&this->dyna.actor) >= OBJOSHIHIKI_FF00_0) && (OBJOSHIHIKI_GET_FF00(&this->dyna.actor) < OBJOSHIHIKI_FF00_80)) { - if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor))) { switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) { case OBJOSHIHIKI_F_0: case OBJOSHIHIKI_F_1: case OBJOSHIHIKI_F_2: Actor_Kill(&this->dyna.actor); return; + + default: + break; } } else { switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) { @@ -215,6 +218,9 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) { case OBJOSHIHIKI_F_5: Actor_Kill(&this->dyna.actor); return; + + default: + break; } } } diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h index 4740b907a..6a400f2dc 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h @@ -9,7 +9,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*); #define OBJOSHIHIKI_GET_F(thisx) ((thisx)->params & 0xF) #define OBJOSHIHIKI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -#define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJOSHIHIKI_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) typedef enum { 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 9a0c9d1c3..e89b6cd7f 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -211,7 +211,7 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) { if (sp28 == 0) { func_809A3D1C(this); - } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { if (sp2C == 0) { this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp28 * 60); func_809A3D1C(this); @@ -295,7 +295,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) { } } else { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); - Flags_SetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor)); sp20 = 1; } 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 5cf67efcc..a6c205fb3 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h @@ -7,7 +7,7 @@ struct ObjPzlblock; typedef void (*ObjPzlblockActionFunc)(struct ObjPzlblock*, PlayState*); -#define OBJPZLBLOCK_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJPZLBLOCK_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJPZLBLOCK_GET_700(thisx) (((thisx)->params >> 8) & 7) #define OBJPZLBLOCK_GET_1000(thisx) (((thisx)->params >> 0xC) & 1) #define OBJPZLBLOCK_GET_ROTZ(thisx) ((thisx)->home.rot.z & 7) 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 93845b55e..dc5e9e315 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -92,7 +92,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) { this->direction = 1; this->points = Lib_SegmentedToVirtual(path->points); ObjRaillift_UpdatePosition(this, this->curPoint); - if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) { + if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) { this->actionFunc = ObjRaillift_Idle; } else { this->actionFunc = ObjRaillift_Move; @@ -120,7 +120,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) { Vec3s* endPoint; if (OBJRAILLIFT_HAS_FLAG(thisx)) { - if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) { + if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) { this->actionFunc = ObjRaillift_Idle; return; } @@ -196,7 +196,7 @@ void ObjRaillift_Wait(ObjRaillift* this, PlayState* play) { } void ObjRaillift_Idle(ObjRaillift* this, PlayState* play) { - if (Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(&this->dyna.actor))) { this->dyna.actor.speed = 0.0f; CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = ObjRaillift_StartCutscene; 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 dc197432f..64aa01130 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h @@ -9,7 +9,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*); #define OBJRAILLIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1) #define OBJRAILLIFT_HAS_FLAG(thisx) (((thisx)->params >> 0xD) & 1) -#define OBJRAILLIFT_GET_FLAG(thisx) ((thisx)->home.rot.x & 0x7F) +#define OBJRAILLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->home.rot.x & 0x7F) #define OBJRAILLIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c index 158d8f874..1fe208ba8 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -33,7 +33,7 @@ ActorInit Obj_Roomtimer_InitVars = { void ObjRoomtimer_Init(Actor* thisx, PlayState* play) { ObjRoomtimer* this = THIS; - this->switchFlag = ROOMTIMER_GET_SWITCHFLAG(thisx); + this->switchFlag = ROOMTIMER_GET_SWITCH_FLAG(thisx); this->actor.params &= 0x1FF; if (this->actor.params != 0x1FF) { diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h index 5ce7d13d4..d976de5e3 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h @@ -3,7 +3,7 @@ #include "global.h" -#define ROOMTIMER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 9) & 0x7F) +#define ROOMTIMER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 9) & 0x7F) struct ObjRoomtimer; diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index edc780007..06de02581 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -110,7 +110,7 @@ void func_80B02CD0(ObjSnowball* this, PlayState* play) { } void func_80B02D58(ObjSnowball* this, PlayState* play) { - s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_3F(&this->actor)); + s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor)); if (temp_v0 >= 0) { Item_DropCollectible(play, &this->actor.home.pos, (OBJSNOWBALL_GET_7F00(&this->actor) << 8) | temp_v0); @@ -443,7 +443,7 @@ void func_80B03FF8(ObjSnowball* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN); if (rotY == 5) { - Flags_SetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor)); + Flags_SetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor)); } } @@ -509,7 +509,7 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) { func_80B04338(this, play); - if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor))) { + if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h index 804c2596c..16ce58f91 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h @@ -7,7 +7,7 @@ struct ObjSnowball; typedef void (*ObjSnowballActionFunc)(struct ObjSnowball*, PlayState*); -#define OBJSNOWBALL_GET_3F(thisx) ((thisx)->params & 0x3F) +#define OBJSNOWBALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x3F) #define OBJSNOWBALL_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct { 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 ff308a478..785a3ea5a 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -564,7 +564,7 @@ void ObjSpidertent_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitTris(play, &this->collider); - if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -681,7 +681,7 @@ void func_80B30A4C(ObjSpidertent* this, PlayState* play) { if (this->dyna.actor.csId >= 0) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } - Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor)); + Flags_SetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor)); func_80B30AD4(this); } else { CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h index 881a816a7..880921535 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h @@ -8,7 +8,7 @@ struct ObjSpidertent; typedef void (*ObjSpidertentActionFunc)(struct ObjSpidertent*, PlayState*); #define OBJSPIDERTENT_GET_1(thisx) ((thisx)->params & 1) -#define OBJSPIDERTENT_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJSPIDERTENT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct ObjSpidertent { /* 0x000 */ DynaPolyActor dyna; 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 295181b8d..52652c8bb 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -250,13 +250,13 @@ Actor* ObjSwitch_SpawnIce(ObjSwitch* this, PlayState* play) { void ObjSwitch_SetSwitchFlagState(ObjSwitch* this, PlayState* play, s32 setFlag) { if (setFlag) { - s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); - Flags_SetSwitch(play, flag); + Flags_SetSwitch(play, switchFlag); } else { - s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); - Flags_UnsetSwitch(play, flag); + Flags_UnsetSwitch(play, switchFlag); } } 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 6eac0ddbc..e8389e91f 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -203,7 +203,7 @@ void ObjTaru_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); if (OBJ_TARU_GET_80(thisx)) { - if (Flags_GetSwitch(play, OBJ_TARU_GET_7F(thisx))) { + if (Flags_GetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); } else { DynaPolyActor_LoadMesh(play, &this->dyna, &object_taru_Colheader_001CB0); @@ -298,7 +298,7 @@ void func_80B9C174(ObjTaru* this, PlayState* play) { void func_80B9C1A0(ObjTaru* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, OBJ_TARU_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h index 629bc57a5..e7620f458 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h @@ -6,7 +6,7 @@ #define OBJ_TARU_GET_100(thisx) ((thisx)->params & 0x100) #define OBJ_TARU_GET_1F(thisx) ((thisx)->params & 0x1F) #define OBJ_TARU_GET_3F(thisx) ((thisx)->params & 0x3F) -#define OBJ_TARU_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJ_TARU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJ_TARU_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJ_TARU_GET_80(thisx) ((thisx)->params & 0x80) #define OBJ_TARU_GET_8000(thisx) (((thisx)->params >> 0xF) & 1) diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c index 00b4e9acf..a44f2cbb1 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -41,13 +41,13 @@ void func_808A7954(ObjWturn* this) { void func_808A7968(ObjWturn* this, PlayState* play) { if ((play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE)) { - Flags_UnsetSwitch(play, this->actor.params); + Flags_UnsetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } - if ((Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F40)) || - (!Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F41))) { + if ((Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F40)) || + (!Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F41))) { func_808A7A24(this); } } diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h index 2e2963d0e..9aee7e2ad 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h @@ -7,6 +7,8 @@ struct ObjWturn; typedef void (*ObjWturnActionFunc)(struct ObjWturn*, PlayState*); +#define OBJWTURN_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjWturn { /* 0x000 */ Actor actor; /* 0x144 */ ObjWturnActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c index f2085694a..d1b39bb24 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c @@ -96,15 +96,15 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { DREG(87) = 0; } - if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) { - Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) { + Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } else { - Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } } if (this->settleTimer == 0) { - if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) { s16 csId = this->dyna.actor.csId; if (this->openTimer == 0) { @@ -125,7 +125,7 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { targetVelocityY = info->openVelocity; accelY = info->openAccel; if (this->openTimer < 2) { - Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } else { this->openTimer--; } diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h index a1b32bbe9..8ff346f74 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h @@ -18,6 +18,6 @@ typedef enum { } ShutterType; #define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1) -#define OBJY2SHUTTER_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJY2SHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #endif // Z_OBJ_Y2SHUTTER_H From 03d1a794e1fe3995ae3f4ca99e244e4b14310092 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 4 Oct 2023 22:08:08 -0700 Subject: [PATCH 120/121] z_kankyo pt 1 (#1377) * z64environment.h * remove todo * Cleanup * data + bss + 2 functions * Bring over simple functions * Remove lerp comment * code functions csv * Remove docs changes * ZBufValToFixedPoint * Remove leading 0's * SEGMENT macros * eventDayCount * format * z64bombers_notebook.h * fix merge * Comments --------- Co-authored-by: angie --- include/functions.h | 85 +- include/gfx.h | 4 +- include/segment_symbols.h | 5 + include/variables.h | 67 -- include/z64.h | 67 +- include/z64environment.h | 327 ++++++ include/z64light.h | 22 +- include/z64save.h | 2 +- spec | 2 - src/code/graph.c | 1 + src/code/sys_cfb.c | 1 + src/code/z_common_data.c | 2 +- src/code/z_demo.c | 43 +- src/code/z_game_over.c | 8 +- src/code/z_kankyo.c | 955 ++++++++++++++++-- src/code/z_lib.c | 2 +- src/code/z_lights.c | 14 +- src/code/z_parameter.c | 2 +- src/code/z_play.c | 50 +- src/code/z_room.c | 8 +- src/code/z_scene.c | 10 +- src/code/z_sram_NES.c | 6 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 12 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 4 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 20 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 8 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 22 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 4 +- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c | 11 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 12 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 21 +- .../actors/ovl_Eff_Change/z_eff_change.c | 4 +- .../z_eff_kamejima_wave.c | 4 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 8 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 32 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 32 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 6 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 6 +- .../actors/ovl_En_Encount3/z_en_encount3.c | 8 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 30 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 36 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 2 +- src/overlays/actors/ovl_En_Hata/z_en_hata.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../z_en_invadepoh_demo.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- .../z_en_okarina_effect.c | 18 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 44 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 30 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 3 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- .../actors/ovl_En_Viewer/z_en_viewer.c | 10 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 86 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 77 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 2 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 71 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_player_actor/z_player.c | 47 +- .../z_eff_ss_lightning.c | 2 +- .../gamestates/ovl_daytelop/z_daytelop.c | 2 +- .../ovl_file_choose/z_file_choose_NES.c | 4 +- src/overlays/gamestates/ovl_select/z_select.c | 2 +- tools/disasm/functions.txt | 106 +- tools/disasm/variables.txt | 93 +- tools/namefixer.py | 77 +- tools/sizes/code_functions.csv | 104 +- 73 files changed, 1895 insertions(+), 884 deletions(-) create mode 100644 include/z64environment.h diff --git a/include/functions.h b/include/functions.h index 9f4aea656..634ce16d9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -527,89 +527,6 @@ void Font_LoadChar(PlayState* play, u16 codePointIndex, s32 offset); void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset); void Font_LoadMessageBoxEndIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); -// void func_800F5090(void); -s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); -void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2); -u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5); -f32 Environment_LerpWeight(u16 max, u16 min, u16 val); -// void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxContext* skyboxCtx); -void func_800F6834(PlayState* play, s32 waterLightsIndex); -void func_800F694C(PlayState* play); -// void func_800F6A04(void); -// void func_800F6A40(void); -// void func_800F6AB8(void); -void func_800F6B44(PlayState* play, EnvironmentContext* envCtx, s32 iParm3, s32 iParm4, s16* param_5); -// void func_800F6CEC(void); -// void func_800F6EA4(void); -// UNK_TYPE4 Kankyo_IsSceneUpsideDown(PlayState* play); -void func_800F6FF8(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx); -// void func_800F8554(void); -// void func_800F88C4(void); -// void func_800F8970(void); -// void func_800F8A9C(void); -void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx, - PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx, - GraphicsContext* gfxCtx); -// void func_800F8D84(void); -void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f pos); -void func_800F9824(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f vec, f32 arg5, f32 arg6, s8 arg7, s8 arg8); -// void func_800FA39C(void); -// void func_800FA3C4(void); -void Environment_DrawRain(PlayState* play, View* view, GraphicsContext* gfxCtx); -void func_800FAAB4(PlayState* play, u8 arg1); -// void func_800FAC20(void); -// void func_800FAF74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5); -// void func_800FB010(void); -void Environment_AddLightningBolts(PlayState* play, u8 num); -// void func_800FB388(void); -void func_800FB758(PlayState* play); -// void func_800FB9B4(void); -void Environment_DrawCustomLensFlare(PlayState* play); -void Kankyo_InitGameOverLights(PlayState* play); -void Kankyo_FadeInGameOverLights(PlayState* play); -void Kankyo_FadeOutGameOverLights(PlayState* play); -// void func_800FC3DC(void); -void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags); -void Environment_DrawSandstorm(PlayState* play, u8 sandstormState); -s32 func_800FD2B4(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4); -void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4); -void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 zFarTarget, f32 lerp); -// u32 get_days_elapsed(void); -// void reset_days_elapsed(void); -// u32 get_current_day(void); -void func_800FD750(u16 seqId); -s32 func_800FD768(void); -void func_800FD78C(PlayState* play); -void func_800FD858(PlayState* play); -void func_800FD928(s32 param_1); -// void func_800FD980(void); -// void func_800FDAF8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_800FDC94(void); -void func_800FE390(PlayState* play); -void func_800FE3E0(PlayState* play); -void Environment_StopTime(void); -void Environment_StartTime(void); -u8 Environment_IsTimeStopped(void); -u32 func_800FE4B8(PlayState* play); -s32 func_800FE590(PlayState* play); -// void func_800FE5D0(void); -// UNK_TYPE4 func_800FE610(void); -u32 func_800FE620(PlayState* play); -void func_800FE658(f32 arg0); -// UNK_TYPE4 func_800FE6F8(UNK_TYPE4 param_1, s16 param_2, s16 param_3); -// void func_800FE778(void); -// void func_800FE788(void); -// void func_800FE798(void); -void func_800FE7A8(Color_RGBA8* inColor, Color_RGBA8* outColor); -s32 func_800FE9B4(PlayState* play); -void func_800FEA50(PlayState* play); -void func_800FEAB0(void); -// void func_800FEAC0(void); -void func_800FEAF4(EnvironmentContext* envCtx); void* Lib_MemCpy(void* dest, void* src, size_t size); void* Lib_MemSet(void* buffer, s32 value, size_t size); @@ -620,7 +537,7 @@ void Lib_PlaySfx(u16 sfxId); void Lib_PlaySfx_2(u16 sfxId); void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId); void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst); -void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); +void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); void Lib_Nop801004FC(void); void* Lib_SegmentedToVirtual(void* ptr); void* Lib_SegmentedToVirtualNull(void* ptr); diff --git a/include/gfx.h b/include/gfx.h index 790279368..63b3eadfc 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -146,8 +146,8 @@ typedef struct GraphicsContext { /* 0x2D8 */ char unk_2D8[0x2]; /* 0x2DA */ u8 updateViMode; /* 0x2DB */ u8 framebufferIndex; - /* 0x2DC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2E0 */ u32 callbackArg; + /* 0x2DC */ void (*callback)(struct GraphicsContext*, void*); + /* 0x2E0 */ void* callbackArg; /* 0x2E4 */ f32 xScale; /* 0x2E8 */ f32 yScale; /* 0x2EC */ GfxMasterList* masterList; diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 6bf163379..f2f40820a 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -32,6 +32,11 @@ #define SEGMENT_BSS_END(segment) (_ ## segment ## SegmentBssEnd) #define SEGMENT_BSS_SIZE(segment) ((uintptr_t)SEGMENT_BSS_END(segment) - (uintptr_t)SEGMENT_BSS_START(segment)) +#define ROM_FILE(name) \ + { (uintptr_t)SEGMENT_ROM_START(name), (uintptr_t)SEGMENT_ROM_END(name) } +#define ROM_FILE_UNSET \ + { 0 } + DECLARE_SEGMENT(boot) DECLARE_ROM_SEGMENT(boot) diff --git a/include/variables.h b/include/variables.h index 8a2e66960..df924135a 100644 --- a/include/variables.h +++ b/include/variables.h @@ -99,36 +99,6 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; // extern UNK_TYPE4 D_801BDAF8; extern u8 kanfontOrdering[92]; -// extern UNK_TYPE4 D_801BDB90; -// extern UNK_TYPE4 D_801BDB94; -// extern UNK_TYPE4 D_801BDB98; -// extern UNK_TYPE2 D_801BDB9C; -// extern UNK_TYPE1 D_801BDBA0; -// extern UNK_TYPE1 D_801BDBA4; -// extern UNK_TYPE1 D_801BDBA8; -extern u8 gWeatherMode; -// extern UNK_TYPE1 D_801BDBB4; -// extern UNK_TYPE1 D_801BDBB8; -// extern UNK_TYPE1 D_801BDBBC; -// extern UNK_TYPE1 D_801BDBC0; -// extern UNK_TYPE1 D_801BDBC4; -extern u8 D_801BDBC8; -// extern UNK_TYPE1 D_801BDBCC; -// extern UNK_TYPE1 D_801BDCF4; -// extern UNK_TYPE1 D_801BE38E; -// extern UNK_TYPE1 D_801BE38F; -// extern UNK_TYPE1 D_801BE390; -// extern UNK_TYPE1 D_801BE4D4; -// extern UNK_TYPE1 D_801BE4F4; -// extern UNK_TYPE1 D_801BE534; -// extern UNK_TYPE1 D_801BE6D4; -// extern UNK_TYPE1 D_801BE874; -// extern UNK_TYPE4 D_801BE894; -// extern UNK_TYPE4 D_801BE8BC; -// extern UNK_TYPE4 D_801BE8E4; -// extern UNK_TYPE1 D_801BE90C; -// extern UNK_TYPE1 D_801BE92C; -// extern UNK_TYPE1 D_801BE944; // extern actor_init_var_func sInitChainHandlers[11]; // extern UNK_TYPE4 D_801BEAD4; // extern UNK_TYPE4 D_801BEAD8; @@ -1683,43 +1653,6 @@ extern TriNorm D_801EF638; extern SaveContext gSaveContext; // extern UNK_TYPE1 D_801F4E20; -extern u8 D_801F4E30; -// extern UNK_TYPE1 D_801F4E31; -extern s8 D_801F4E32; -extern Vec3f D_801F4E38; -extern f32 D_801F4E44; -extern f32 D_801F4E48; -extern s16 D_801F4E4C; -extern s8 D_801F4E4E; -extern Vec3f D_801F4E50; -extern f32 D_801F4E5C; -extern f32 D_801F4E60; -extern s16 D_801F4E64; -extern u8 D_801F4E68; -extern f32 D_801F4E70; -// extern UNK_TYPE1 D_801F4E74; -extern u16 D_801F4E78; -extern s16 D_801F4E7A; -// extern UNK_TYPE1 D_801F4E80; -// extern UNK_TYPE1 D_801F4EE0; -// extern UNK_TYPE1 D_801F4EE8; -// extern UNK_TYPE1 D_801F4EF8; -// extern UNK_TYPE1 D_801F4F00; -// extern UNK_TYPE1 D_801F4F10; -// extern UNK_TYPE1 D_801F4F14; -// extern UNK_TYPE1 D_801F4F18; -// extern UNK_TYPE1 D_801F4F1C; -// extern UNK_TYPE1 D_801F4F20; -// extern UNK_TYPE1 D_801F4F24; -// extern UNK_TYPE1 D_801F4F28; -// extern UNK_TYPE1 D_801F4F2C; -// extern UNK_TYPE1 D_801F4F2E; -// extern UNK_TYPE1 D_801F4F30; -// extern UNK_TYPE1 D_801F4F31; -// extern UNK_TYPE1 D_801F4F32; -// extern UNK_TYPE1 D_801F4F33; -// extern UNK_TYPE1 D_801F4F34; -// extern UNK_TYPE1 D_801F4F38; // extern UNK_TYPE1 sBeatingHeartsDDPrim; // extern UNK_TYPE1 sBeatingHeartsDDEnv; // extern UNK_TYPE1 sHeartsDDPrim; diff --git a/include/z64.h b/include/z64.h index 63aec32ef..57c25047e 100644 --- a/include/z64.h +++ b/include/z64.h @@ -40,6 +40,7 @@ #include "z64dma.h" #include "z64eff_footmark.h" #include "z64effect.h" +#include "z64environment.h" #include "z64frameadvance.h" #include "z64game_over.h" #include "z64game.h" @@ -60,11 +61,13 @@ #include "z64skybox.h" #include "z64sound_source.h" #include "z64subs.h" +#include "z64rumble.h" #include "z64transition.h" #include "z64view.h" #include "regs.h" -typedef struct { + +typedef struct PauseContext { /* 0x000 */ View view; /* 0x168 */ u8* iconItemSegment; /* 0x16C */ u8* iconItem24Segment; @@ -163,68 +166,6 @@ typedef enum { /* 0x02 */ KALEID_OVL_MAX } KaleidoMgrOverlayType; -typedef struct { - /* 0x00 */ u16 unk_0; - /* 0x02 */ u16 sceneTimeSpeed; - /* 0x04 */ Vec3f sunPos; - /* 0x10 */ u8 skybox1Index; - /* 0x11 */ u8 skybox2Index; - /* 0x12 */ u8 unk_12; - /* 0x13 */ u8 skyboxBlend; - /* 0x14 */ u8 unk_14; - /* 0x15 */ u8 skyboxDisabled; - /* 0x16 */ u8 sunMoonDisabled; - /* 0x17 */ u8 skyboxConfig; - /* 0x18 */ u8 changeSkyboxNextConfig; - /* 0x19 */ u8 changeSkyboxState; - /* 0x1A */ u16 changeSkyboxTimer; - /* 0x1C */ u16 unk_1C; - /* 0x1E */ u8 lightMode; - /* 0x1F */ u8 lightConfig; - /* 0x20 */ u8 changeLightNextConfig; - /* 0x21 */ u8 changeLightEnabled; - /* 0x22 */ u16 changeLightTimer; - /* 0x24 */ u16 changeDuration; - /* 0x26 */ u8 unk_26; - /* 0x28 */ LightInfo dirLight1; // sun 1 - /* 0x36 */ LightInfo unk_36; // sun 2 - /* 0x44 */ s8 skyboxDmaState; - /* 0x48 */ DmaRequest dmaRequest; - /* 0x68 */ OSMesgQueue loadQueue; - /* 0x80 */ OSMesg loadMsg; - /* 0x84 */ f32 glareAlpha; - /* 0x88 */ f32 lensFlareAlphaScale; - /* 0x8C */ EnvLightSettings lightSettings; - /* 0xA8 */ f32 unk_A8; - /* 0xAC */ Vec3s windDir; - /* 0xB4 */ f32 windSpeed; - /* 0xB8 */ u8 numLightSettings; - /* 0xBC */ LightSettings* lightSettingsList; - /* 0xC0 */ u8 lightBlendEnabled; - /* 0xC1 */ u8 lightSetting; - /* 0xC2 */ u8 prevLightSetting; - /* 0xC3 */ u8 lightSettingOverride; - /* 0xC4 */ LightSettings unk_C4; - /* 0xDA */ u16 lightBlendRateOverride; - /* 0xDC */ f32 lightBlend; - /* 0xE0 */ u8 unk_E0; - /* 0xE1 */ u8 unk_E1; - /* 0xE2 */ s8 unk_E2; - /* 0xE3 */ u8 unk_E3; // modified by unused func in EnWeatherTag - /* 0xE4 */ u8 unk_E4; - /* 0xE5 */ u8 fillScreen; - /* 0xE6 */ u8 screenFillColor[4]; - /* 0xEA */ u8 sandstormState; - /* 0xEB */ u8 sandstormPrimA; - /* 0xEC */ u8 sandstormEnvA; - /* 0xED */ u8 unk_ED; - /* 0xEE */ u8 unk_EE[4]; - /* 0xF2 */ u8 unk_F2[8]; // [3] is used by both DemoKankyo and ObjectKankyo effect count - /* 0xFA */ u8 unk_FA[4]; -} EnvironmentContext; // size = 0x100 - -struct PlayState; - typedef struct { /* 0x0 */ u8 seqId; /* 0x1 */ u8 ambienceId; diff --git a/include/z64environment.h b/include/z64environment.h new file mode 100644 index 000000000..18e1fbf70 --- /dev/null +++ b/include/z64environment.h @@ -0,0 +1,327 @@ +#ifndef Z64ENVIRONMENT_H +#define Z64ENVIRONMENT_H + +#include "PR/ultratypes.h" +#include "PR/os_message.h" +#include "z64math.h" +#include "z64dma.h" +#include "unk.h" + +struct GameOverContext; +struct GraphicsContext; +struct LightContext; +struct MessageContext; +struct PauseContext; +struct PlayState; +struct SkyboxContext; +struct View; + +#define FILL_SCREEN_OPA (1 << 0) +#define FILL_SCREEN_XLU (1 << 1) + +#define NEXT_TIME_NONE 0xFFFF +#define NEXT_TIME_DAY CLOCK_TIME(12, 0) +#define NEXT_TIME_NIGHT CLOCK_TIME(0, 0) +#define NEXT_TIME_DAY_SET 0xFFFE +#define NEXT_TIME_NIGHT_SET 0xFFFD + +#define LIGHT_SETTING_MAX 31 +#define LIGHT_SETTING_OVERRIDE_NONE 0xFF + +// This mode disables the updating of lights in both light modes. +// With this mode enabled, the only way lights can change is via the adjustment arrays. +// This mode is not used in the original game. +#define LIGHT_SETTING_OVERRIDE_FULL_CONTROL 0xFE + +#define LIGHT_BLENDRATE_OVERRIDE_NONE 0xFFFF +#define LIGHT_BLEND_OVERRIDE_NONE 0 +#define LIGHT_BLEND_OVERRIDE_ON 1 + +// This mode disables the light system's automatic blending between +// light settings for `LIGHT_MODE_SETTINGS` (or using a light setting override). +// This is a bit of a hack used only by bosses in the original game. +#define LIGHT_BLEND_OVERRIDE_FULL_CONTROL 2 + +typedef enum { + /* 0 */ LIGHT_MODE_TIME, // environment lights use `lightConfig` and change based on time of day + /* 1 */ LIGHT_MODE_SETTINGS // environment lights use `lightSetting` +} LightMode; + +typedef enum { + /* 0 */ LIGHTNING_OFF, // no lightning + /* 1 */ LIGHTNING_ON, // request ligtning strikes at random intervals + /* 2 */ LIGHTNING_LAST // request one lightning strike before turning off +} LightningState; + +typedef enum { + /* 0 */ LIGHTNING_STRIKE_WAIT, // wait between lightning strikes. request bolts when timer hits 0 + /* 1 */ LIGHTNING_STRIKE_START, // fade in the flash. note: bolts are requested in the previous state + /* 2 */ LIGHTNING_STRIKE_END // fade out the flash and go back to wait +} LightningStrikeState; + +typedef enum { + /* 0 */ WEATHER_MODE_CLEAR, + /* 1 */ WEATHER_MODE_1, // rain? + /* 2 */ WEATHER_MODE_2, + /* 3 */ WEATHER_MODE_SNOW +} WeatherMode; + +typedef enum { + /* 0 */ CHANGE_SKYBOX_INACTIVE, + /* 1 */ CHANGE_SKYBOX_REQUESTED, + /* 2 */ CHANGE_SKYBOX_WAIT, + /* 3 */ CHANGE_SKYBOX_ACTIVE +} ChangeSkyboxState; + +typedef enum { + /* 0 */ SKYBOX_DMA_INACTIVE, + /* 1 */ SKYBOX_DMA_TEXTURE1_START, + /* 11 */ SKYBOX_DMA_TEXTURE2_START = 11 +} SkyboxDmaState; + +//! @TODO: Verify from OoT (may not be the same) +typedef enum { + /* 0 */ PRECIP_RAIN_MAX, // max number of raindrops that can draw; uses this or SOS_MAX, whichever is larger + /* 1 */ PRECIP_RAIN_CUR, // current number of rain drops being drawn on screen + /* 2 */ PRECIP_SNOW_CUR, // current number of snowflakes being drawn on screen + /* 3 */ PRECIP_SNOW_MAX, // max number of snowflakes that can draw + /* 4 */ PRECIP_SOS_MAX, // max number of rain drops requested from song of storms specifically + /* 5 */ PRECIP_MAX +} PrecipitationData; + +typedef enum { + /* 0 */ STORM_REQUEST_NONE, + /* 1 */ STORM_REQUEST_START, + /* 2 */ STORM_REQUEST_STOP +} StormRequest; + +typedef enum { + /* 0 */ STORM_STATE_OFF, + /* 1 */ STORM_STATE_ON +} StormState; + +typedef enum { + /* 0x00 */ TIMESEQ_DAY_BGM, + /* 0x01 */ TIMESEQ_FADE_DAY_BGM, + /* 0x02 */ TIMESEQ_NIGHT_BEGIN_SFX, + /* 0x03 */ TIMESEQ_EARLY_NIGHT_CRITTERS, + /* 0x04 */ TIMESEQ_NIGHT_DELAY, + /* 0x05 */ TIMESEQ_NIGHT_CRITTERS, + /* 0x06 */ TIMESEQ_DAY_BEGIN_SFX, + /* 0x07 */ TIMESEQ_MORNING_CRITTERS, + /* 0x08 */ TIMESEQ_DAY_DELAY, + /* 0xFE */ TIMESEQ_REQUEST = 0xFE, + /* 0xFF */ TIMESEQ_DISABLED +} TimeBasedSeqState; + +#define SCENESEQ_DEFAULT 0 +#define SCENESEQ_MORNING 0xFE + +typedef enum { + /* 0x0 */ SANDSTORM_OFF, + /* 0x1 */ SANDSTORM_FILL, + /* 0x2 */ SANDSTORM_UNFILL, + /* 0x3 */ SANDSTORM_ACTIVE, + /* 0x4 */ SANDSTORM_DISSIPATE, + /* 0x5 */ SANDSTORM_5, + /* 0x6 */ SANDSTORM_6, + /* 0x7 */ SANDSTORM_7, + /* 0x8 */ SANDSTORM_8, + /* 0x9 */ SANDSTORM_9, + /* 0xA */ SANDSTORM_A, + /* 0xB */ SANDSTORM_B, + /* 0xC */ SANDSTORM_C, + /* 0xD */ SANDSTORM_D +} SandstormState; + +typedef struct LightningStrike { + /* 0x00 */ u8 state; + /* 0x01 */ u8 flashRed; + /* 0x02 */ u8 flashGreen; + /* 0x03 */ u8 flashBlue; + /* 0x04 */ u8 flashAlphaTarget; + /* 0x08 */ f32 delayTimer; +} LightningStrike; // size = 0xC + +typedef struct { + /* 0x0 */ u16 startTime; + /* 0x2 */ u16 endTime; + /* 0x4 */ u8 skybox1Index; + /* 0x5 */ u8 skybox2Index; + /* 0x6 */ u8 color1Index; + /* 0x7 */ u8 color2Index; +} TimeBasedSkyboxEntry; // size = 0x8 + +#define ENV_FOGNEAR_MAX 996 +#define ENV_ZFAR_MAX 15000 + +typedef struct { + /* 0x00 */ u8 ambientColor[3]; + /* 0x03 */ s8 light1Dir[3]; + /* 0x06 */ u8 light1Color[3]; + /* 0x09 */ s8 light2Dir[3]; + /* 0x0C */ u8 light2Color[3]; + /* 0x0F */ u8 fogColor[3]; + /* 0x12 */ s16 fogNear; // ranges from 0-1000 (0: starts immediately, 1000: no fog), but is clamped to ENV_FOGNEAR_MAX + /* 0x14 */ s16 zFar; // Max depth (render distance) of the view as a whole. fogFar will always match zFar +} CurrentEnvLightSettings; // size = 0x16 + +// `EnvLightSettings` is very similar to `CurrentEnvLightSettings` with one key difference. +// The light settings data in the scene packs blend rate information with the fog near value. +// The blendRate determines how fast the current light settings fade to the next one +// (under LIGHT_MODE_SETTINGS, otherwise unused). + +// Get blend rate from `EnvLightSettings.blendRateAndFogNear` in 0-255 range +#define ENV_LIGHT_SETTINGS_BLEND_RATE_U8(blendRateAndFogNear) (((blendRateAndFogNear) >> 10) * 4) +#define ENV_LIGHT_SETTINGS_FOG_NEAR(blendRateAndFogNear) ((blendRateAndFogNear) & 0x3FF) + +typedef struct { + /* 0x00 */ u8 ambientColor[3]; + /* 0x03 */ s8 light1Dir[3]; + /* 0x06 */ u8 light1Color[3]; + /* 0x09 */ s8 light2Dir[3]; + /* 0x0C */ u8 light2Color[3]; + /* 0x0F */ u8 fogColor[3]; + /* 0x12 */ s16 blendRateAndFogNear; + /* 0x14 */ s16 zFar; +} EnvLightSettings; // size = 0x16 + +// ZAPD compatibility typedefs +// TODO: Remove when ZAPD adds support for them +typedef CurrentEnvLightSettings LightSettings; + +typedef struct EnvironmentContext { + /* 0x00 */ u16 unk_0; + /* 0x02 */ u16 sceneTimeSpeed; + /* 0x04 */ Vec3f sunPos; + /* 0x10 */ u8 skybox1Index; + /* 0x11 */ u8 skybox2Index; + /* 0x12 */ u8 unk_12; + /* 0x13 */ u8 skyboxBlend; + /* 0x14 */ u8 unk_14; + /* 0x15 */ u8 skyboxDisabled; + /* 0x16 */ u8 sunDisabled; + /* 0x17 */ u8 skyboxConfig; + /* 0x18 */ u8 changeSkyboxNextConfig; + /* 0x19 */ u8 changeSkyboxState; + /* 0x1A */ u16 changeSkyboxTimer; + /* 0x1C */ u16 unk_1C; + /* 0x1E */ u8 lightMode; + /* 0x1F */ u8 lightConfig; + /* 0x20 */ u8 changeLightNextConfig; + /* 0x21 */ u8 changeLightEnabled; + /* 0x22 */ u16 changeLightTimer; + /* 0x24 */ u16 changeDuration; + /* 0x26 */ u8 unk_26; + /* 0x28 */ LightInfo dirLight1; // sun 1 + /* 0x36 */ LightInfo dirLight2; // sun 2 + /* 0x44 */ s8 skyboxDmaState; + /* 0x48 */ DmaRequest dmaRequest; + /* 0x68 */ OSMesgQueue loadQueue; + /* 0x80 */ OSMesg loadMsg[1]; + /* 0x84 */ f32 glareAlpha; + /* 0x88 */ f32 lensFlareAlphaScale; + /* 0x8C */ AdjLightSettings adjLightSettings; + /* 0xA8 */ f32 unk_A8; + /* 0xAC */ Vec3s windDirection; + /* 0xB4 */ f32 windSpeed; + /* 0xB8 */ u8 numLightSettings; + /* 0xBC */ EnvLightSettings* lightSettingsList; // list of light settings from the scene file + /* 0xC0 */ u8 lightBlendEnabled; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xC1 */ u8 lightSetting; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xC2 */ u8 prevLightSetting; + /* 0xC3 */ u8 lightSettingOverride; + /* 0xC4 */ CurrentEnvLightSettings lightSettings; // settings for the currently "live" lights + /* 0xDA */ u16 lightBlendRateOverride; + /* 0xDC */ f32 lightBlend; + /* 0xE0 */ u8 lightBlendOverride; + /* 0xE1 */ u8 stormRequest; + /* 0xE2 */ u8 stormState; + /* 0xE3 */ u8 lightningState; // modified by unused func in EnWeatherTag + /* 0xE4 */ u8 timeSeqState; + /* 0xE5 */ u8 fillScreen; + /* 0xE6 */ u8 screenFillColor[4]; + /* 0xEA */ u8 sandstormState; + /* 0xEB */ u8 sandstormPrimA; + /* 0xEC */ u8 sandstormEnvA; + /* 0xED */ u8 customSkyboxFilter; + /* 0xEE */ u8 skyboxFilterColor[4]; + /* 0xF2 */ u8 precipitation[PRECIP_MAX]; + /* 0xF7 */ UNK_TYPE1 unk_FA[9]; +} EnvironmentContext; // size = 0x100 + +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); +void Environment_Init(struct PlayState* play2, EnvironmentContext* envCtx, s32 arg2); +u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep); +f32 Environment_LerpWeight(u16 max, u16 min, u16 val); +f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration); +void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, struct SkyboxContext* skyboxCtx); +void Environment_EnableUnderwaterLights(struct PlayState* play, s32 waterLightsIndex); +void Environment_DisableUnderwaterLights(struct PlayState* play); +void Environment_Update(struct PlayState* play, EnvironmentContext* envCtx, struct LightContext* lightCtx, + struct PauseContext* pauseCtx, struct MessageContext* msgCtx, struct GameOverContext* gameOverCtx, + struct GraphicsContext* gfxCtx); +void Environment_DrawSunLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f vec); +void Environment_DrawLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f pos, f32 scale, f32 colorIntensity, s16 glareStrength, u8 isSun); +void Environment_DrawRain(struct PlayState* play, struct View* view, struct GraphicsContext* gfxCtx); +void Environment_ChangeLightSetting(struct PlayState* play, u8 lightSetting); +void Environment_AddLightningBolts(struct PlayState* play, u8 num); +void Environment_PlaySceneSequence(struct PlayState* play); +void Environment_DrawCustomLensFlare(struct PlayState* play); +void Environment_InitGameOverLights(struct PlayState* play); +void Environment_FadeInGameOverLights(struct PlayState* play); +void Environment_FadeOutGameOverLights(struct PlayState* play); +void Environment_FillScreen(struct GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags); +void Environment_DrawSandstorm(struct PlayState* play, u8 sandstormState); +s32 Environment_AdjustLights(struct PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4); +void Environment_LerpAmbientColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpDiffuseColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpFogColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpFog(struct PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp); +void Environment_ForcePlaySequence(u16 seqId); +s32 Environment_IsForcedSequenceDisabled(void); +void Environment_PlayStormNatureAmbience(struct PlayState* play); +void Environment_StopStormNatureAmbience(struct PlayState* play); +void Environment_Draw(struct PlayState* play); +void Environment_DrawSkyboxStars(struct PlayState* play); +void Environment_StopTime(void); +void Environment_StartTime(void); +u8 Environment_IsTimeStopped(void); +u32 Environment_GetStormState(struct PlayState* play); +u8 Environment_IsFinalHours(struct PlayState* play); +u16 Environment_GetTimeSpeed(struct PlayState* play); +void Environment_SetTimeJump(f32 minutes); +u8 func_800FE6F8(struct PlayState* play, s16 timeAdvanceScaling, s16 nextTimeLimit); +void Environment_LerpSandstormColors(Color_RGBA8* colorSrc, Color_RGBA8* colorDst); +u8 func_800FE9B4(struct PlayState* play); +void func_800FEA50(struct PlayState* play); +void func_800FEAB0(void); +void func_800FEAF4(EnvironmentContext* envCtx); + +// Data +extern u8 gWeatherMode; +extern u8 gLightConfigAfterUnderwater; +extern u8 gInterruptSongOfStorms; +extern u8 gSceneSeqState; + +// Bss +extern u8 D_801F4E30; + +extern u8 gCustomLensFlare1On; +extern Vec3f gCustomLensFlare1Pos; +extern f32 D_801F4E44; +extern f32 D_801F4E48; +extern s16 D_801F4E4C; + +extern u8 gCustomLensFlare2On; +extern Vec3f gCustomLensFlare2Pos; +extern f32 D_801F4E5C; +extern f32 D_801F4E60; +extern s16 D_801F4E64; + +extern struct LightningStrike gLightningStrike; +extern f32 D_801F4E74; +extern u16 D_801F4E78; +extern u16 gSkyboxNumStars; + +#endif diff --git a/include/z64light.h b/include/z64light.h index 706df2f4d..21b1920c3 100644 --- a/include/z64light.h +++ b/include/z64light.h @@ -8,26 +8,14 @@ struct PlayState; - -typedef struct { - /* 0x00 */ u8 ambientColor[3]; - /* 0x03 */ s8 diffuseDir1[3]; - /* 0x06 */ u8 diffuseColor1[3]; - /* 0x09 */ s8 diffusePos2[3]; - /* 0x0C */ u8 diffuseColor[3]; - /* 0x0F */ u8 fogColor[3]; - /* 0x12 */ s16 fogNear; - /* 0x14 */ s16 zFar; -} LightSettings; // size = 0x16 - typedef struct { /* 0x00 */ s16 ambientColor[3]; - /* 0x06 */ s16 diffuseColor1[3]; - /* 0x0C */ s16 diffuseColor2[3]; + /* 0x06 */ s16 light1Color[3]; + /* 0x0C */ s16 light2Color[3]; /* 0x12 */ s16 fogColor[3]; /* 0x18 */ s16 fogNear; /* 0x1A */ s16 zFar; -} EnvLightSettings; // size = 0x1C +} AdjLightSettings; // size = 0x1C typedef struct { /* 0x0 */ s16 x; @@ -77,8 +65,8 @@ typedef struct LightsBuffer { typedef struct LightContext { /* 0x0 */ LightNode* listHead; - /* 0x4 */ Color_RGB8 ambient; - /* 0x7 */ Color_RGB8 fogColor; + /* 0x4 */ u8 ambientColor[3]; + /* 0x7 */ u8 fogColor[3]; /* 0xA */ s16 fogNear; // how close until fog starts taking effect. range 0 - 996 /* 0xC */ s16 zFar; // draw distance. range 0 - 12800 } LightContext; // size = 0x10 diff --git a/include/z64save.h b/include/z64save.h index e22b2c58f..333953a76 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -327,7 +327,7 @@ typedef struct Save { /* 0x10 */ s32 isNight; // "asahiru_fg" /* 0x14 */ s32 timeSpeedOffset; // "change_zelda_time" /* 0x18 */ s32 day; // "totalday" - /* 0x1C */ s32 daysElapsed; // "eventday" + /* 0x1C */ s32 eventDayCount; // "eventday" /* 0x20 */ u8 playerForm; // "player_character" /* 0x21 */ u8 snowheadCleared; // "spring_flag" /* 0x22 */ u8 hasTatl; // "bell_flag" diff --git a/spec b/spec index dcd055a6f..339a701c8 100644 --- a/spec +++ b/spec @@ -476,8 +476,6 @@ beginseg include "build/src/code/z_kaleido_setup.o" include "build/src/code/z_kanfont.o" include "build/src/code/z_kankyo.o" - include "build/data/code/z_kankyo.data.o" - include "build/data/code/z_kankyo.bss.o" include "build/src/code/z_lib.o" include "build/src/code/z_lifemeter.o" include "build/src/code/z_lights.o" diff --git a/src/code/graph.c b/src/code/graph.c index ad4ad0286..3a178d2b8 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 383a35cc9..32600643a 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 976b0fd4d..f0805c46b 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -12,7 +12,7 @@ void SaveContext_Init(void) { gSaveContext.nextCutsceneIndex = 0xFFEF; gSaveContext.cutsceneTrigger = 0; gSaveContext.chamberCutsceneNum = 0; - gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.nextDayTime = NEXT_TIME_NONE; gSaveContext.skyboxTime = 0; gSaveContext.dogIsLost = true; gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 11d614fc1..300a3c20f 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,6 +1,4 @@ #include "PR/ultratypes.h" -#include "prevent_bss_reordering.h" -#include "prevent_bss_reordering2.h" // Variables are put before most headers as a hacky way to bypass bss reordering struct CutsceneCamera; @@ -13,6 +11,15 @@ static s16 sBssPad; u8 gDisablePlayerCsModeStartPos; s16 gDungeonBossWarpSceneId; +#include "prevent_bss_reordering.h" +#include "prevent_bss_reordering2.h" +// clang-format off +// Partial structs taken from "prevent_bss_reordering.h" +struct Dummy200 { int x; }; +struct Dummy201 { int x; }; +struct Dummy202 { int x; }; +// clang-format on + #include "global.h" #include "z64quake.h" #include "z64rumble.h" @@ -154,8 +161,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { switch (cmd->type) { case CS_MISC_RAIN: if (isFirstFrame) { - func_800FD78C(play); - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; } break; @@ -163,19 +170,19 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { if (isFirstFrame) { Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0); Environment_AddLightningBolts(play, 3); - D_801F4E68 = 1; + gLightningStrike.state = LIGHTNING_STRIKE_START; } break; case CS_MISC_LIFT_FOG: - if (play->envCtx.lightSettings.zFar < 12800) { - play->envCtx.lightSettings.zFar += 35; + if (play->envCtx.adjLightSettings.zFar < 12800) { + play->envCtx.adjLightSettings.zFar += 35; } break; case CS_MISC_CLOUDY_SKY: if (isFirstFrame) { - play->envCtx.changeSkyboxState = 1; + play->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED; play->envCtx.skyboxConfig = 1; play->envCtx.changeSkyboxNextConfig = 0; play->envCtx.changeSkyboxTimer = 60; @@ -238,16 +245,16 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_RED_PULSATING_LIGHTS: if (play->state.frames & 8) { - if (play->envCtx.lightSettings.ambientColor[0] < 40) { - play->envCtx.lightSettings.ambientColor[0] += 2; - play->envCtx.lightSettings.diffuseColor1[1] -= 3; - play->envCtx.lightSettings.diffuseColor1[2] -= 3; + if (play->envCtx.adjLightSettings.ambientColor[0] < 40) { + play->envCtx.adjLightSettings.ambientColor[0] += 2; + play->envCtx.adjLightSettings.light1Color[1] -= 3; + play->envCtx.adjLightSettings.light1Color[2] -= 3; } } else { - if (play->envCtx.lightSettings.ambientColor[0] > 2) { - play->envCtx.lightSettings.ambientColor[0] -= 2; - play->envCtx.lightSettings.diffuseColor1[1] += 3; - play->envCtx.lightSettings.diffuseColor1[2] += 3; + if (play->envCtx.adjLightSettings.ambientColor[0] > 2) { + play->envCtx.adjLightSettings.ambientColor[0] -= 2; + play->envCtx.adjLightSettings.light1Color[1] += 3; + play->envCtx.adjLightSettings.light1Color[2] += 3; } } break; @@ -262,7 +269,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_SANDSTORM_FILL: if (isFirstFrame) { - play->envCtx.sandstormState = 1; + play->envCtx.sandstormState = SANDSTORM_FILL; } Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG); break; @@ -409,7 +416,7 @@ void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdL play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1; play->envCtx.lightBlend = 1.0f; } else { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } } } diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index c3c6819be..003f5dd7b 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -15,7 +15,7 @@ void GameOver_FadeLights(PlayState* play) { if ((gameOverCtx->state >= GAMEOVER_DEATH_WAIT_GROUND && gameOverCtx->state < GAMEOVER_REVIVE_START) || (gameOverCtx->state >= GAMEOVER_REVIVE_RUMBLE && gameOverCtx->state < GAMEOVER_REVIVE_FADE_OUT)) { - Kankyo_FadeInGameOverLights(play); + Environment_FadeInGameOverLights(play); } } @@ -66,7 +66,7 @@ void GameOver_Update(PlayState* play) { gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; gSaveContext.hudVisibilityTimer = 0; - Kankyo_InitGameOverLights(play); + Environment_InitGameOverLights(play); sGameOverTimer = 20; Rumble_Request(0.0f, 126, 124, 63); gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND; @@ -92,7 +92,7 @@ void GameOver_Update(PlayState* play) { case GAMEOVER_REVIVE_START: gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE sGameOverTimer = 0; - Kankyo_InitGameOverLights(play); + Environment_InitGameOverLights(play); ShrinkWindow_Letterbox_SetSizeTarget(32); break; @@ -119,7 +119,7 @@ void GameOver_Update(PlayState* play) { break; case GAMEOVER_REVIVE_FADE_OUT: - Kankyo_FadeOutGameOverLights(play); + Environment_FadeOutGameOverLights(play); sGameOverTimer--; if (sGameOverTimer == 0) { gameOverCtx->state = GAMEOVER_INACTIVE; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 9346af59a..30ea04e16 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -1,156 +1,980 @@ +#include "ultra64.h" +#include "z64light.h" +#include "z64math.h" + +typedef struct { + /* 0x00 */ u8 state; + /* 0x04 */ Vec3f offset; + /* 0x10 */ Vec3f pos; + /* 0x1C */ s8 pitch; + /* 0x1D */ s8 roll; + /* 0x1E */ u8 textureIndex; + /* 0x1F */ u8 delayTimer; +} LightningBolt; // size = 0x20 + +// Variables are put before most headers as a hacky way to bypass bss reordering +struct LightningStrike; + +u8 D_801F4E30; +u8 D_801F4E31; +u8 gCustomLensFlare1On; +Vec3f gCustomLensFlare1Pos; +f32 D_801F4E44; +f32 D_801F4E48; +s16 D_801F4E4C; +u8 gCustomLensFlare2On; +Vec3f gCustomLensFlare2Pos; +f32 D_801F4E5C; +f32 D_801F4E60; +s16 D_801F4E64; +struct LightningStrike gLightningStrike; +f32 D_801F4E74; +u16 D_801F4E78; +u16 gSkyboxNumStars; +LightningBolt sLightningBolts[3]; +LightNode* sNGameOverLightNode; +LightInfo sNGameOverLightInfo; +LightNode* sSGameOverLightNode; +LightInfo sSGameOverLightInfo; +f32 sSunEnvAlpha; +f32 sSunColor; +f32 sSunScale; +f32 sSunPrimAlpha; +s32 sSunDepthTestX; +s32 sSunDepthTestY; +f32 D_801F4F28; +s16 sLightningFlashAlpha; +u16 sSandstormScroll; +u8 D_801F4F30; +u8 D_801F4F31; +u8 sEnvIsTimeStopped; +u8 D_801F4F33; +u8 sGameOverLightsIntensity; +Gfx* sSkyboxStarsDList; + +#include "z64environment.h" #include "global.h" +#include "sys_cfb.h" +#include "objects/gameplay_keep/gameplay_keep.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s") +// Data +f32 sSandstormLerpScale = 0.0f; +s32 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0); +s32 sEnvSkyboxNumStars = 0; +u16 sTimeJump = 0; +u8 sSandstormColorIndex = 0; +u8 sNextSandstormColorIndex = 0; +u8 D_801BDBA8 = 0; +u8 D_801BDBAC = 0; +u8 gWeatherMode = WEATHER_MODE_CLEAR; +u8 gLightConfigAfterUnderwater = 0; +u8 gInterruptSongOfStorms = false; +u8 sSkyboxIsChanging = false; +u8 D_801BDBC0 = 0; +u8 D_801BDBC4 = 0; +u8 gSceneSeqState = SCENESEQ_DEFAULT; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s") +typedef struct { + /* 0x0 */ u16 startTime; + /* 0x2 */ u16 endTime; + /* 0x4 */ u8 lightSetting; + /* 0x5 */ u8 nextLightSetting; +} TimeBasedLightEntry; // size = 0x6 + +TimeBasedLightEntry sTimeBasedLightConfigs[][7] = { + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 3, 3 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 3, 12 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 2 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 2, 3 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 3, 3 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 7, 7 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 7, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 4, 5 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 5, 5 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 5, 6 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 6, 7 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 7, 7 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 11, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 8, 9 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 9, 9 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 9, 10 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 10, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 15, 15 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 15, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 12, 13 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 13, 13 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 13, 14 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 14, 15 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 15, 15 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 19, 19 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 19, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 16, 17 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 17, 17 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 17, 18 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 18, 19 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 19, 19 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 23, 23 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 23, 20 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 20, 21 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 21, 21 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 21, 22 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 22, 23 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 23, 23 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 27, 27 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 27, 24 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 24, 25 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 25, 25 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 25, 26 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 26, 27 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 27, 27 }, + }, +}; + +TimeBasedSkyboxEntry sTimeBasedSkyboxConfigs[][9] = { + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 3, 3 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 3, 4 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 4, 4 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 0, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 2 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 2, 2 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 2, 3 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 3, 3 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 7, 7 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 7, 8 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 8, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 4, 5 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 5, 5 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 5, 6 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 6, 6 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 6, 7 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 7, 7 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 11, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 8, 9 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 9, 9 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 9, 10 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 10, 10 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 10, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 15, 15 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 15, 16 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 16, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 12, 13 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 13, 13 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 13, 14 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 14, 14 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 14, 15 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 15, 15 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 19, 19 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 19, 20 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 20, 20 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 16, 17 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 17, 17 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 17, 18 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 18, 18 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 18, 19 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 19, 19 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 23, 23 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 23, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 20, 21 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 21, 21 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 21, 22 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 22, 22 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 22, 23 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 23, 23 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 27, 27 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 27, 28 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 28, 28 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 24, 25 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 25, 25 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 25, 26 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 26, 26 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 26, 27 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 27, 27 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 31, 31 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 31, 32 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 32, 32 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 28, 29 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 29, 29 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 29, 30 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 30, 30 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 30, 31 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 31, 31 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 35, 35 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 35, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 32, 33 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 33, 33 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 33, 34 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 34, 34 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 34, 35 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 35, 35 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 39, 39 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 39, 40 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 40, 40 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 36, 37 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 37, 37 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 37, 38 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 38, 38 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 38, 39 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 39, 39 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 43, 43 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 43, 44 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 44, 44 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 40, 41 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 41, 41 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 41, 42 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 42, 42 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 42, 43 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 43, 43 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 47, 47 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 47, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 44, 45 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 45, 45 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 45, 46 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 46, 46 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 46, 47 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 47, 47 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 51, 51 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 51, 48 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 48, 49 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 49, 49 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 49, 49 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 49, 50 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 50, 50 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 50, 51 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 51, 51 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 55, 55 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 55, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 52, 53 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 53, 53 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 53, 54 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 54, 54 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 54, 54 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 55, 55 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 59, 59 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 59, 56 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 56, 56 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 56, 57 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 57, 57 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 57, 58 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 58, 58 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 58, 58 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 59, 59 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 63, 63 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 63, 60 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 60, 60 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 60, 61 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 61, 61 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 61, 62 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 62, 62 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 62, 62 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 63, 63 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 67, 67 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 67, 64 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 64, 64 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 64, 65 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 65, 65 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 65, 66 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 66, 66 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 66, 66 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 67, 67 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 1, 1 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 71, 71 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 71, 72 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 72, 72 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 68, 69 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 69, 69 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 69, 70 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 70, 70 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 70, 71 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 71, 71 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 75, 75 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 75, 76 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 76, 76 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 72, 73 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 73, 73 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 73, 74 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 74, 74 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 74, 75 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 75, 75 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 79, 79 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 79, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 76, 77 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 77, 77 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 77, 78 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 78, 78 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 78, 79 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 79, 79 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 83, 83 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 83, 84 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 84, 84 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 80, 81 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 81, 81 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 81, 82 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 82, 82 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 82, 83 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 83, 83 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 87, 87 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 87, 88 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 88, 88 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 84, 85 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 85, 85 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 85, 86 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 86, 86 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 86, 87 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 87, 87 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 91, 91 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 91, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 88, 89 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 89, 89 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 89, 90 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 90, 90 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 90, 91 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 91, 91 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 95, 95 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 95, 96 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 96, 96 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 92, 93 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 93, 93 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 93, 94 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 94, 94 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 94, 95 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 95, 95 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 99, 99 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 99, 100 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 100, 100 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 96, 97 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 97, 97 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 97, 98 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 98, 98 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 98, 99 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 99, 99 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 103, 103 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 103, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 100, 101 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 101, 101 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 101, 102 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 102, 102 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 102, 103 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 103, 103 }, + }, +}; + +typedef struct { + /* 0x0 */ RomFile file; + /* 0x8 */ RomFile palette; +} SkyboxFile; // size = 0x10 + +SkyboxFile sNormalSkyFiles[] = { + { + ROM_FILE(d2_fine_static), + ROM_FILE_UNSET, + }, + { + ROM_FILE(d2_cloud_static), + ROM_FILE_UNSET, + }, +}; + +void Environment_GraphCallback(GraphicsContext* gfxCtx, void* arg) { + PlayState* play = (PlayState*)arg; + + sSunScreenDepth = SysCfb_GetZBufferPixel(sSunDepthTestX, sSunDepthTestY); + Lights_GlowCheck(play); +} + +typedef struct { + /* 0x0 */ s32 mantissaShift; // shift applied to the mantissa of the z buffer value + /* 0x4 */ s32 base; // 15.3 fixed-point base value for the exponent +} ZBufValConversionEntry; // size = 0x8 + +ZBufValConversionEntry sZBufValConversionTable[1 << 3] = { + { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 }, + { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 }, +}; + +#define ZBUFVAL_EXPONENT(v) (((v) >> 15) & 7) +#define ZBUFVAL_MANTISSA(v) (((v) >> 4) & 0x7FF) + +/** + * Convert an 18-bits Z buffer value to a fixed point 15.3 value + * + * zBufferVal is 18 bits: + * 3: Exponent of z value + * 11: Mantissa of z value + * 4: dz value (unused) + */ +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal) { + // base[exp] + mantissa << shift[exp] + s32 ret = (ZBUFVAL_MANTISSA(zBufferVal) << sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].mantissaShift) + + sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].base; + + return ret; +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s") +u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep) { + s16 stepSize = 0; + s16 diff = target - *pvalue; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s") + if (target != *pvalue) { + stepSize = diff / scale; + if ((stepSize >= (s16)minStep) || ((s16)-minStep >= stepSize)) { + if ((s16)step < stepSize) { + stepSize = step; + } + if ((s16)-step > stepSize) { + stepSize = -step; + } + *pvalue += (u8)stepSize; + } else { + if (stepSize < (s16)minStep) { + stepSize = minStep; + *pvalue += (u8)stepSize; + if (target < *pvalue) { + *pvalue = target; + } + } + if ((s16)-minStep < stepSize) { + stepSize = -minStep; + *pvalue += (u8)stepSize; + if (*pvalue < target) { + *pvalue = target; + } + } + } + } + return diff; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s") +f32 Environment_LerpWeight(u16 max, u16 min, u16 val) { + f32 diff = max - min; + + if (diff != 0.0f) { + f32 ret = 1.0f - (max - val) / diff; + + if (!(ret >= 1.0f)) { + return ret; + } + } + + return 1.0f; +} + +f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration) { + f32 endFrameF; + f32 startFrameF; + f32 curFrameF; + f32 accelDurationF; + f32 decelDurationF; + f32 totalFrames; + f32 temp; + f32 framesElapsed; + f32 ret; + + if (curFrame <= startFrame) { + return 0.0f; + } + + if (curFrame >= endFrame) { + return 1.0f; + } + + endFrameF = (s32)endFrame; + startFrameF = (s32)startFrame; + curFrameF = (s32)curFrame; + totalFrames = endFrameF - startFrameF; + framesElapsed = curFrameF - startFrameF; + accelDurationF = (s32)accelDuration; + decelDurationF = (s32)decelDuration; + + if ((startFrameF >= endFrameF) || (accelDurationF + decelDurationF > totalFrames)) { + return 0.0f; + } + + temp = 1.0f / ((totalFrames * 2.0f) - accelDurationF - decelDurationF); + + if (accelDurationF != 0.0f) { + if (framesElapsed <= accelDurationF) { + return temp * framesElapsed * framesElapsed / accelDurationF; + } + ret = temp * accelDurationF; + } else { + ret = 0.0f; + } + + if (framesElapsed <= totalFrames - decelDurationF) { + ret += 2.0f * temp * (framesElapsed - accelDurationF); + return ret; + } + + ret += 2.0f * temp * (totalFrames - accelDurationF - decelDurationF); + + if (decelDurationF != 0.0f) { + ret += temp * decelDurationF; + if (framesElapsed < totalFrames) { + ret -= temp * (totalFrames - framesElapsed) * (totalFrames - framesElapsed) / decelDurationF; + } + } + + return ret; +} + +Color_RGBA8 sSkyboxPrimColors[] = { + { 181, 100, 72, 0 }, { 255, 255, 255, 0 }, { 255, 164, 63, 0 }, { 70, 90, 100, 0 }, { 180, 110, 70, 0 }, + { 140, 120, 90, 0 }, { 186, 107, 70, 0 }, { 50, 90, 120, 0 }, { 160, 104, 125, 0 }, { 225, 234, 150, 0 }, + { 243, 84, 33, 0 }, { 112, 37, 55, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, + { 10, 40, 90, 0 }, { 180, 120, 100, 0 }, { 140, 120, 110, 0 }, { 186, 107, 70, 0 }, { 0, 50, 60, 0 }, + { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 25, 45, 0 }, { 181, 100, 27, 0 }, + { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 10, 10, 50, 0 }, { 165, 110, 63, 0 }, { 150, 120, 90, 0 }, + { 166, 112, 65, 0 }, { 10, 40, 60, 0 }, { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, + { 100, 20, 40, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 0, 50, 70, 0 }, + { 180, 126, 70, 0 }, { 150, 140, 120, 0 }, { 225, 164, 63, 0 }, { 0, 70, 80, 0 }, { 160, 104, 215, 0 }, + { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 40, 65, 0 }, { 105, 72, 57, 0 }, { 150, 120, 90, 0 }, + { 80, 56, 21, 0 }, { 60, 46, 40, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, + { 210, 120, 180, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, + { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 25, 53, 235, 0 }, + { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, + { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 199, 126, 78, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, + { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, + { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 209, 135, 100, 0 }, + { 180, 177, 158, 0 }, { 196, 127, 79, 0 }, { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, + { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, { 198, 121, 88, 0 }, { 235, 250, 235, 0 }, { 255, 164, 70, 0 }, + { 55, 53, 91, 0 }, { 205, 140, 110, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, { 50, 90, 120, 0 }, + { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, +}; + +Color_RGBA8 sSkyboxEnvColors[] = { + { 102, 135, 99, 0 }, { 0, 15, 69, 0 }, { 110, 55, 110, 0 }, { 0, 0, 100, 0 }, { 70, 10, 10, 0 }, + { 40, 0, 10, 0 }, { 40, 40, 40, 0 }, { 20, 20, 30, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, + { 20, 25, 90, 0 }, { 0, 5, 25, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, + { 0, 0, 0, 0 }, { 70, 10, 10, 0 }, { 20, 0, 30, 0 }, { 40, 40, 40, 0 }, { 0, 0, 20, 0 }, + { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 30, 0 }, { 102, 135, 99, 0 }, + { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 20, 0 }, { 66, 10, 10, 0 }, { 46, 5, 2, 0 }, + { 66, 10, 10, 0 }, { 0, 20, 50, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, + { 0, 0, 20, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 40, 0 }, + { 90, 90, 100, 0 }, { 60, 20, 30, 0 }, { 110, 55, 110, 0 }, { 0, 0, 50, 0 }, { 60, 0, 10, 0 }, + { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 25, 0 }, { 10, 0, 0, 0 }, { 46, 5, 2, 0 }, + { 34, 14, 10, 0 }, { 21, 5, 13, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, + { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 177, 82, 93, 0 }, + { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, + { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 9, 6, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, + { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, + { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 12, 16, 0 }, + { 51, 10, 15, 0 }, { 50, 15, 58, 0 }, { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, + { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, + { 26, 7, 0, 0 }, { 70, 20, 45, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, { 0, 2, 28, 0 }, + { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, +}; #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F694C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A04.s") +void Environment_WipeRumbleRequests(void) { + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) { + Rumble_StateWipeRequests(); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A40.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6AB8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6B44.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6CEC.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6EA4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s") +s32 Environment_IsSceneUpsideDown(PlayState* play) { + s32 ret = false; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6FF8.s") + if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) { + ret = true; + } + return ret; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8554.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSun.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s") +typedef enum { + /* 0 */ LENS_FLARE_CIRCLE0, + /* 1 */ LENS_FLARE_CIRCLE1, + /* 2 */ LENS_FLARE_RING +} LensFlareType; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA39C.s") +static Color_RGB8 sLensFlareColors[] = { + { 155, 205, 255 }, // blue + { 255, 255, 205 }, // yellow + { 255, 255, 205 }, // yellow + { 255, 255, 205 }, // yellow + { 155, 255, 205 }, // green + { 205, 255, 255 }, // light blue + { 155, 155, 255 }, // dark blue + { 205, 175, 255 }, // purple + { 175, 255, 205 }, // light green + { 255, 155, 235 }, // pink +}; +static f32 sLensFlareScales[] = { + 23.0f, 12.0f, 7.0f, 5.0f, 3.0f, 10.0f, 6.0f, 2.0f, 3.0f, 1.0f, +}; +static u32 sLensFlareAlphas[] = { + 50, 10, 25, 40, 70, 30, 50, 70, 50, 40, +}; +static u32 sLensFlareTypes[] = { + LENS_FLARE_RING, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, + LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_RandCentered.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAC20.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAF74.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB010.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB388.s") +static TexturePtr sLightningTextures[] = { + gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex, + gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB758.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s") +u8 sSandstormPrimColors[] = { + 255, 255, 255, // + 255, 255, 255, // + 255, 255, 255, // + 255, 255, 255, // + 210, 156, 85, // + 255, 200, 100, // + 225, 160, 50, // + 105, 90, 40, // +}; + +u8 sSandstormEnvColors[] = { + 100, 100, 100, // + 100, 100, 100, // + 100, 100, 100, // + 100, 100, 100, // + 155, 106, 35, // + 200, 150, 50, // + 170, 110, 0, // + 50, 40, 0, // +}; + #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s") +void Environment_LerpRGB8(u8* from, Color_RGB8* to, f32 lerp, s16* dst) { + Color_RGB8 result; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s") + Color_RGB8_Lerp((Color_RGB8*)from, to, lerp, &result); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s") + dst[0] = result.r - from[0]; + dst[1] = result.g - from[1]; + dst[2] = result.b - from[2]; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s") +void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.ambientColor, to, lerp, play->envCtx.adjLightSettings.ambientColor); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s") +void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.light1Color, to, lerp, play->envCtx.adjLightSettings.light1Color); + Environment_LerpRGB8(play->envCtx.lightSettings.light2Color, to, lerp, play->envCtx.adjLightSettings.light2Color); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s") +void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.fogColor, to, lerp, play->envCtx.adjLightSettings.fogColor); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/reset_days_elapsed.s") +void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp) { + play->envCtx.adjLightSettings.fogNear = (fogNearTarget - play->envCtx.lightSettings.fogNear) * lerp; + play->envCtx.adjLightSettings.zFar = (fogFarTarget - play->envCtx.lightSettings.zFar) * lerp; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_current_day.s") +// Repurposed from OoT to be more general +u32 Environment_GetEventDayCount(void) { + return gSaveContext.save.eventDayCount; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD750.s") +// Repurposed from OoT to be more general +void Environment_ClearEventDayCount(void) { + gSaveContext.save.eventDayCount = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD768.s") +// Repurposed from OoT to be more general +u32 Environment_GetTotalDays(void) { + return gSaveContext.save.day; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD78C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD858.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD928.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD980.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDAF8.s") +void Environment_WarpSongLeave(PlayState* play) { + gWeatherMode = WEATHER_MODE_CLEAR; + gSaveContext.save.cutsceneIndex = 0; + gSaveContext.respawnFlag = -3; + play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDC94.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE390.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Draw.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s") +void Environment_StopTime(void) { + sEnvIsTimeStopped = true; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s") +void Environment_StartTime(void) { + sEnvIsTimeStopped = false; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE590.s") +u8 Environment_IsTimeStopped(void) { + return sEnvIsTimeStopped; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE5D0.s") +u32 Environment_GetStormState(PlayState* play) { + u32 stormState = play->envCtx.stormState; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE610.s") + if ((play->sceneId == SCENE_OMOYA) && (play->roomCtx.curRoom.num == 0)) { + stormState = ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) + ? STORM_STATE_ON + : STORM_STATE_OFF; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE620.s") + switch (play->sceneId) { + case SCENE_13HUBUKINOMITI: + case SCENE_11GORONNOSATO: + case SCENE_10YUKIYAMANOMURA: + case SCENE_14YUKIDAMANOMITI: + case SCENE_12HAKUGINMAE: + case SCENE_17SETUGEN: + case SCENE_GORONRACE: + if (gSaveContext.sceneLayer == 0) { + stormState = STORM_STATE_OFF; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE658.s") + case SCENE_10YUKIYAMANOMURA2: + if (gSaveContext.sceneLayer == 1) { + stormState = STORM_STATE_OFF; + } + break; + + default: + break; + } + + return stormState; +} + +u8 Environment_IsFinalHours(PlayState* play) { + u8 ret = false; + + if ((gSaveContext.save.day == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { + ret = true; + } + + return ret; +} + +u8 func_800FE5D0(PlayState* play) { + u8 ret = false; + + if (Entrance_GetSceneId(((void)0, gSaveContext.save.entrance)) < 0) { + ret = true; + } + + return ret; +} + +u32 func_800FE610(PlayState* play) { + return 0; +} + +u16 Environment_GetTimeSpeed(PlayState* play) { + u16 timeSpeed = 0; + + if (R_TIME_SPEED != 0) { + timeSpeed = R_TIME_SPEED + (u16)((void)0, gSaveContext.save.timeSpeedOffset); + } + + return timeSpeed; +} + +void Environment_SetTimeJump(f32 minutes) { + sTimeJump = CLOCK_TIME_F(0, minutes); +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE6F8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE778.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE788.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE798.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE7A8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE9B4.s") @@ -158,6 +982,11 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAB0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAC0.s") +void Environment_JumpForwardInTime(void) { + if (sTimeJump != 0) { + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + sTimeJump; + sTimeJump = 0; + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAF4.s") diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 634f0a47f..a68d7c882 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -663,7 +663,7 @@ void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, dst->z = translation->z + (src->z * cos - src->x * sin); } -void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) { +void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) { f32 aF; aF = a->r; diff --git a/src/code/z_lights.c b/src/code/z_lights.c index ef1af66f5..e5b34f387 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -257,15 +257,15 @@ void LightContext_Init(PlayState* play, LightContext* lightCtx) { } void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) { - lightCtx->ambient.r = r; - lightCtx->ambient.g = g; - lightCtx->ambient.b = b; + lightCtx->ambientColor[0] = r; + lightCtx->ambientColor[1] = g; + lightCtx->ambientColor[2] = b; } void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) { - lightCtx->fogColor.r = r; - lightCtx->fogColor.g = g; - lightCtx->fogColor.b = b; + lightCtx->fogColor[0] = r; + lightCtx->fogColor[1] = g; + lightCtx->fogColor[2] = b; lightCtx->fogNear = near; lightCtx->zFar = far; } @@ -274,7 +274,7 @@ void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 * Allocate a new Lights group and initilize the ambient color with that provided by LightContext */ Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx) { - return Lights_New(gfxCtx, lightCtx->ambient.r, lightCtx->ambient.g, lightCtx->ambient.b); + return Lights_New(gfxCtx, lightCtx->ambientColor[0], lightCtx->ambientColor[1], lightCtx->ambientColor[2]); } void LightContext_InitList(PlayState* play, LightContext* lightCtx) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 956bda896..cbfcd0481 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -5432,7 +5432,7 @@ void Interface_StartMoonCrash(PlayState* play) { } gSaveContext.save.day = 4; - gSaveContext.save.daysElapsed = 4; + gSaveContext.save.eventDayCount = 4; gSaveContext.save.time = CLOCK_TIME(6, 0) + 10; play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12); gSaveContext.nextCutsceneIndex = 0; diff --git a/src/code/z_play.c b/src/code/z_play.c index f71cf0c0d..5d9b2c048 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" @@ -360,8 +361,8 @@ void Play_ClearTransition(PlayState* this) { Gfx* Play_SetFog(PlayState* this, Gfx* gfx) { s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f); - return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0, - this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar)); + return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], this->lightCtx.fogColor[2], + 0, this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar)); } void Play_Destroy(GameState* thisx) { @@ -524,7 +525,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { } func_801A3EC0(0x20); - func_800F6834(this, lightIndex); + Environment_EnableUnderwaterLights(this, lightIndex); if ((sQuakeIndex == -1) || (Quake_GetTimeLeft(sQuakeIndex) == 10)) { s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_5); @@ -553,7 +554,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { if (sQuakeIndex != 0) { Quake_RemoveRequest(sQuakeIndex); } - func_800F694C(this); + Environment_DisableUnderwaterLights(this); func_801A3EC0(0); } } @@ -585,20 +586,20 @@ void Play_UpdateTransition(PlayState* this) { !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) || ((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE))) && - (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) || + (!Environment_IsFinalHours(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) || (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) { func_801A4058(20); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } - if (func_800FD768()) { + if (Environment_IsForcedSequenceDisabled()) { func_801A4058(20); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } - if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) && + if (Environment_IsFinalHours(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) && (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) { func_801A41C8(20); } @@ -824,10 +825,10 @@ void Play_UpdateTransition(PlayState* this) { case TRANS_MODE_SANDSTORM_INIT: if (this->transitionTrigger != TRANS_TRIGGER_END) { - this->envCtx.sandstormState = 1; + this->envCtx.sandstormState = SANDSTORM_FILL; this->transitionMode = TRANS_MODE_SANDSTORM; } else { - this->envCtx.sandstormState = 2; + this->envCtx.sandstormState = SANDSTORM_UNFILL; this->envCtx.sandstormPrimA = 255; this->envCtx.sandstormEnvA = 255; this->transitionMode = TRANS_MODE_SANDSTORM; @@ -856,7 +857,7 @@ void Play_UpdateTransition(PlayState* this) { case TRANS_MODE_SANDSTORM_END_INIT: if (this->transitionTrigger == TRANS_TRIGGER_END) { - this->envCtx.sandstormState = 4; + this->envCtx.sandstormState = SANDSTORM_DISSIPATE; this->envCtx.sandstormPrimA = 255; this->envCtx.sandstormEnvA = 255; @@ -1144,8 +1145,8 @@ void Play_DrawMain(PlayState* this) { if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.roomShape->base.type == ROOM_SHAPE_TYPE_IMAGE)) { func_8012CF0C(gfxCtx, false, true, 0, 0, 0); } else { - func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, - this->lightCtx.fogColor.b); + func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], + this->lightCtx.fogColor[2]); } } else { func_8012CF0C(gfxCtx, false, false, 0, 0, 0); @@ -1292,7 +1293,7 @@ void Play_DrawMain(PlayState* this) { } } - func_800FE390(this); + Environment_Draw(this); } sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx); @@ -1324,8 +1325,7 @@ void Play_DrawMain(PlayState* this) { } } - // envCtx.precipitation[PRECIP_RAIN_CUR] - if (this->envCtx.unk_F2[1] != 0) { + if (this->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) { Environment_DrawRain(this, &this->view, gfxCtx); } } @@ -1339,7 +1339,7 @@ void Play_DrawMain(PlayState* this) { } if (1) { - if (!this->envCtx.sunMoonDisabled) { + if (!this->envCtx.sunDisabled) { sp25C.x = this->view.eye.x + this->envCtx.sunPos.x; sp25C.y = this->view.eye.y + this->envCtx.sunPos.y; sp25C.z = this->view.eye.z + this->envCtx.sunPos.z; @@ -1367,7 +1367,7 @@ void Play_DrawMain(PlayState* this) { } if (1) { - if (this->envCtx.sandstormState != 0) { + if (this->envCtx.sandstormState != SANDSTORM_OFF) { Environment_DrawSandstorm(this, this->envCtx.sandstormState); } } @@ -1440,7 +1440,7 @@ SkipPostWorldDraw: } if (!sp25B) { - func_800FE3E0(this); + Environment_DrawSkyboxStars(this); } CLOSE_DISPS(gfxCtx); @@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) { gSaveContext.save.cutsceneIndex = 0; } - if (gSaveContext.nextDayTime != 0xFFFF) { + if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { gSaveContext.save.time = gSaveContext.nextDayTime; gSaveContext.skyboxTime = gSaveContext.nextDayTime; } @@ -2250,14 +2250,14 @@ void Play_Init(GameState* thisx) { KaleidoScopeCall_Init(this); Interface_Init(this); - if (gSaveContext.nextDayTime != 0xFFFF) { - if (gSaveContext.nextDayTime == 0x8000) { + if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { + if (gSaveContext.nextDayTime == NEXT_TIME_DAY) { gSaveContext.save.day++; - gSaveContext.save.daysElapsed++; + gSaveContext.save.eventDayCount++; gSaveContext.dogIsLost = true; - gSaveContext.nextDayTime = -2; + gSaveContext.nextDayTime = NEXT_TIME_DAY_SET; } else { - gSaveContext.nextDayTime = -3; + gSaveContext.nextDayTime = NEXT_TIME_NIGHT_SET; } } @@ -2348,7 +2348,7 @@ void Play_Init(GameState* thisx) { CutsceneManager_StoreCamera(&this->mainCamera); Interface_SetSceneRestrictions(this); - func_800FB758(this); + Environment_PlaySceneSequence(this); gSaveContext.seqId = this->sequenceCtx.seqId; gSaveContext.ambienceId = this->sequenceCtx.ambienceId; AnimationContext_Update(this, &this->animationCtx); diff --git a/src/code/z_room.c b/src/code/z_room.c index d06739d87..428dd5c13 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -581,12 +581,12 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) { Actor_SpawnTransitionActors(play, &play->actorCtx); if (((play->sceneId != SCENE_IKANA) || (roomCtx->curRoom.num != 1)) && (play->sceneId != SCENE_IKNINSIDE)) { - play->envCtx.lightSettingOverride = 0xFF; - play->envCtx.unk_E0 = 0; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE; } func_800FEAB0(); - if (!func_800FE4B8(play)) { - func_800FD858(play); + if (Environment_GetStormState(play) == STORM_STATE_OFF) { + Environment_StopStormNatureAmbience(play); } } else { return 0; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index d26156d58..483db001e 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -255,7 +255,7 @@ void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd) { play->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1; play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1; play->roomCtx.curRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1; - play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1; + play->envCtx.stormState = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1; } // SceneTableEntry Header Command 0x0A: Mesh Header @@ -386,7 +386,7 @@ void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x12: Skybox Disables void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) { play->envCtx.skyboxDisabled = cmd->skyboxDisables.unk4; - play->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk5; + play->envCtx.sunDisabled = cmd->skyboxDisables.unk5; } // SceneTableEntry Header Command 0x10: Time Settings @@ -436,9 +436,9 @@ void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) { s8 temp2 = cmd->windSettings.vertical; s8 temp3 = cmd->windSettings.south; - play->envCtx.windDir.x = temp1; - play->envCtx.windDir.y = temp2; - play->envCtx.windDir.z = temp3; + play->envCtx.windDirection.x = temp1; + play->envCtx.windDirection.y = temp2; + play->envCtx.windDirection.z = temp3; play->envCtx.windSpeed = cmd->windSettings.clothIntensity; } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 059596909..01a493cc0 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -430,7 +430,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { u8 item; gSaveContext.save.timeSpeedOffset = 0; - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; @@ -650,7 +650,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { void Sram_IncrementDay(void) { if (CURRENT_DAY <= 3) { gSaveContext.save.day++; - gSaveContext.save.daysElapsed++; + gSaveContext.save.eventDayCount++; } gSaveContext.save.saveInfo.bombersCaughtNum = 0; @@ -918,7 +918,7 @@ u16 sSaveDefaultChecksum = 0; */ void Sram_InitNewSave(void) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; Sram_ResetSave(); diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index 45a29260f..01a74402c 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -338,8 +338,8 @@ void func_808B7A90(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_800FE7A8(D_808B82F0, &sp2C); - func_800FE7A8(D_808B8300, &sp28); + Environment_LerpSandstormColors(D_808B82F0, &sp2C); + Environment_LerpSandstormColors(D_808B8300, &sp28); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255); @@ -358,15 +358,15 @@ void func_808B7B54(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_800FE7A8(D_808B8310, &sp50); - func_800FE7A8(D_808B8330, &sp4C); + Environment_LerpSandstormColors(D_808B8310, &sp50); + Environment_LerpSandstormColors(D_808B8330, &sp4C); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255); gSPDisplayList(POLY_XLU_DISP++, object_posthouse_obj_DL_000A50); - func_800FE7A8(D_808B8320, &sp50); - func_800FE7A8(D_808B8340, &sp4C); + Environment_LerpSandstormColors(D_808B8320, &sp50); + Environment_LerpSandstormColors(D_808B8340, &sp4C); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255); 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 bf3aa576d..f96c2864f 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -1320,7 +1320,7 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) { Boss02* this = THIS; this->giantModeScaleFactor = sGiantModeScaleFactor; - play->envCtx.sandstormState = 0xD; + play->envCtx.sandstormState = SANDSTORM_D; if (sBlueWarp != NULL) { this->fogNear = KREG(23) + -15.0f; @@ -1828,7 +1828,7 @@ void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) { Actor_SetScale(&player->actor, this->playerScale); } - play->envCtx.lightSettings.fogNear = this->fogNear; + play->envCtx.adjLightSettings.fogNear = this->fogNear; // Switches from the "normal" variation of the arena to the "giant" variation (or vice versa) // at the appropriate point in the Giant's Mask cutscene. diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index 38ca4f799..6dc94e0e3 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -431,26 +431,26 @@ void Boss06_Update(Actor* thisx, PlayState* play) { if (this->unk_1E4 > 0.0f) { if (ENBOSS06_GET_PARAMS(&this->actor) == 0) { - D_801F4E32 = 1; - D_801F4E38.x = this->actor.world.pos.x + this->unk_1B0; - D_801F4E38.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; - D_801F4E38.z = this->actor.world.pos.z; + gCustomLensFlare1On = true; + gCustomLensFlare1Pos.x = this->actor.world.pos.x + this->unk_1B0; + gCustomLensFlare1Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; + gCustomLensFlare1Pos.z = this->actor.world.pos.z; D_801F4E44 = this->unk_1E4; D_801F4E48 = 10.0f; D_801F4E4C = 0; } else { - D_801F4E4E = 1; - D_801F4E50.x = this->actor.world.pos.x + this->unk_1B0; - D_801F4E50.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; - D_801F4E50.z = this->actor.world.pos.z; + gCustomLensFlare2On = true; + gCustomLensFlare2Pos.x = this->actor.world.pos.x + this->unk_1B0; + gCustomLensFlare2Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; + gCustomLensFlare2Pos.z = this->actor.world.pos.z; D_801F4E5C = this->unk_1E4; D_801F4E60 = 10.0f; D_801F4E64 = 0; } } else if (ENBOSS06_GET_PARAMS(&this->actor) == 0) { - D_801F4E32 = 0; + gCustomLensFlare1On = false; } else { - D_801F4E4E = 0; + gCustomLensFlare2On = false; } if ((this->unk_1C8 != 0) && (this->unk_1C8 != 0)) { diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index 8f3b401da..2b0669f39 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -335,10 +335,10 @@ void DemoEffect_DrawLight(Actor* thisx, PlayState* play2) { CLOSE_DISPS(play->state.gfxCtx); - D_801F4E32 = 1; - D_801F4E38.x = thisx->world.pos.x; - D_801F4E38.y = thisx->world.pos.y; - D_801F4E38.z = thisx->world.pos.z; + gCustomLensFlare1On = true; + gCustomLensFlare1Pos.x = thisx->world.pos.x; + gCustomLensFlare1Pos.y = thisx->world.pos.y; + gCustomLensFlare1Pos.z = thisx->world.pos.z; D_801F4E44 = thisx->scale.x * 60.0f; D_801F4E48 = thisx->scale.x * 50.0f; 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 badd4bc12..945e09fee 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -56,21 +56,21 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) { Player* player = GET_PLAYER(play); if (play->roomCtx.unk7A[1] != 0) { - if (play->envCtx.unk_F2[3] != 0) { - play->envCtx.unk_F2[3]--; + if (play->envCtx.precipitation[PRECIP_SNOW_MAX] != 0) { + play->envCtx.precipitation[PRECIP_SNOW_MAX]--; } else { Actor_Kill(&this->actor); } - } else if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) { - play->envCtx.unk_F2[3] += 16; + } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) { + play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; } // note: DemoKankyo can crash if placed in an area that snows (ObjectKankyo) - // because they both use unk_F2 as an effect counter, + // because they both use PRECIP_SNOW_MAX precipitation as an effect counter, // causing DemoKankyo to write beyond its efffect array boundry // this crash can occur if the two actors are in different scenes connected by an exit // e.g. if you add DemoKankyo to GoronShrine, you will crash entering/leaving through door - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { repositionLimit = 130.0f; eyeToAt.x = play->view.at.x - play->view.eye.x; @@ -304,8 +304,8 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) { s32 pad1; Vec3f worldPos; - if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) { - play->envCtx.unk_F2[3] += 16; + if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) { + play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; } eyeToAt.x = play->view.at.x - play->view.eye.x; @@ -318,7 +318,7 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) { halfScreenHeight = SCREEN_HEIGHT / 2; - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { switch (this->effects[i].state) { case DEMO_KANKYO_STATE_INIT: this->effects[i].posBase.x = play->view.eye.x + (eyeToAtNormX * halfScreenHeight); @@ -511,7 +511,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y; worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z; @@ -601,7 +601,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { Gfx_SetupDL25_Xlu(gfxCtx); - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y; worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c index 2341b3a64..09f4fe1c1 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -499,8 +499,8 @@ void func_80C17468(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_800FE7A8(D_80C17824, &sp2C); - func_800FE7A8(D_80C17834, &sp28); + Environment_LerpSandstormColors(D_80C17824, &sp2C); + Environment_LerpSandstormColors(D_80C17834, &sp28); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255); diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c index 22bc9544b..b28a44d1b 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c @@ -110,12 +110,13 @@ void func_80A1F75C(DmHina* this, PlayState* play) { Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f); this->unk17F = this->unk14C * 255.0f; this->unk150 = Math_SinS(play->state.frames * 0x1F40); - for (i = 0; i < 3; i++) { - play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.fogColor[i] = - play->envCtx.lightSettings.diffuseColor1[i] = -255.0f * this->unk14C; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = -255.0f * this->unk14C; } - play->envCtx.lightSettings.fogNear = -500.0f * this->unk14C; - if (play->envCtx.lightSettings.fogNear < -300) { + + play->envCtx.adjLightSettings.fogNear = -500.0f * this->unk14C; + if (play->envCtx.adjLightSettings.fogNear < -300) { play->roomCtx.curRoom.segment = NULL; } break; 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 cf8ed15e1..c9aaa48cb 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1073,9 +1073,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->deflectCount = 0; this->maskType = SK_MASK_TYPE_NORMAL; this->animIndex = SK_ANIM_IDLE; - this->fogR = play->lightCtx.fogColor.r; - this->fogG = play->lightCtx.fogColor.g; - this->fogB = play->lightCtx.fogColor.b; + this->fogR = play->lightCtx.fogColor[0]; + this->fogG = play->lightCtx.fogColor[1]; + this->fogB = play->lightCtx.fogColor[2]; if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) { this->alpha = 0; @@ -1643,9 +1643,9 @@ void DmStk_HandleCutscene(DmStk* this, PlayState* play) { this->fadeInState++; } - this->fogR = play->lightCtx.fogColor.r * this->fogScale; - this->fogG = play->lightCtx.fogColor.g * this->fogScale; - this->fogB = play->lightCtx.fogColor.b * this->fogScale; + this->fogR = play->lightCtx.fogColor[0] * this->fogScale; + this->fogG = play->lightCtx.fogColor[1] * this->fogScale; + this->fogB = play->lightCtx.fogColor[2] * this->fogScale; } else if (this->fadeInState == SK_FADE_IN_STATE_INCREASE_FOG) { if (this->fogN < 996) { this->fogN += 10; 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 32a7ba7f0..ec1480a67 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -178,10 +178,9 @@ void DoorWarp1_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->unk_1DC); LightContext_RemoveLight(play, &play->lightCtx, this->unk_1F0); - for (i = 0; i < ARRAY_COUNT(play->envCtx.lightSettings.diffuseColor1); i++) { - play->envCtx.lightSettings.diffuseColor1[i] = 0; - play->envCtx.lightSettings.fogColor[i] = play->envCtx.lightSettings.diffuseColor1[i]; - play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.diffuseColor1[i]; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = 0; } if (this->unk_1D3 != 0) { @@ -781,7 +780,6 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { Player* player2 = GET_PLAYER(play); Player* player = GET_PLAYER(play); s16 i; - s32 temp_f16; f32 temp_f0; f32 temp_f2; s32 temp; @@ -869,16 +867,13 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { if (1) {} temp_f0 = 1.0f - ((f32)(D_808BC000 - this->unk_1D0) / ((D_808BC000 - tempS) + 100)); if (temp_f0 > 0.0f) { - temp_f16 = -255.0f * temp_f0; - - for (i = 0; i < 3; i++) { - play->envCtx.lightSettings.diffuseColor1[i] = temp_f16; - play->envCtx.lightSettings.fogColor[i] = temp_f16; - play->envCtx.lightSettings.ambientColor[i] = temp_f16; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = -255.0f * temp_f0; } - play->envCtx.lightSettings.fogNear = -500.0f * temp_f0; - if (play->envCtx.lightSettings.fogNear < -300) { + play->envCtx.adjLightSettings.fogNear = -500.0f * temp_f0; + if (play->envCtx.adjLightSettings.fogNear < -300) { play->roomCtx.curRoom.segment = NULL; } } diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c index bc95d4312..470f9b89d 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -81,7 +81,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { if (func_80183DE0(&this->skeletonInfo)) { Actor_Kill(&this->actor); CutsceneManager_Stop(CS_ID_GLOBAL_ELEGY); - func_800FD2B4(play, 0.0f, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, 0.0f, 850.0f, 0.2f, 0.0f); return; } @@ -108,7 +108,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { } else if (phi_fv0 < 0.0f) { phi_fv0 = 0.0f; } - func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, phi_fv0, 850.0f, 0.2f, 0.0f); if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_ELEGY) { if (CutsceneManager_IsNext(CS_ID_GLOBAL_ELEGY)) { CutsceneManager_Start(CS_ID_GLOBAL_ELEGY, &this->actor); diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c index 9b5290907..ee493fe24 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c @@ -153,8 +153,8 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) { Color_RGBA8 primColor; Color_RGBA8 envColor; - func_800FE7A8(sPrimColors, &primColor); - func_800FE7A8(sEnvColors, &envColor); + Environment_LerpSandstormColors(sPrimColors, &primColor); + Environment_LerpSandstormColors(sEnvColors, &envColor); EffKamejimaWave_SetVtxAlpha(sVtxAlpha); OPEN_DISPS(play->state.gfxCtx); 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 eea47caa5..783f157b1 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 @@ -475,7 +475,7 @@ void EnAob01_BeforeRace_StartRace(EnAob01* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); this->stateFlags |= ENAOB01_FLAG_STARTED_RACE; - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_64; 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 17c9dbc50..218de2cb5 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1526,7 +1526,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = MSGMODE_PAUSED; - func_800FD750(NA_BGM_TIMED_MINI_GAME); + Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME); func_80A94AB8(this, play, 1); func_80A979DC(this, play); } else { @@ -1571,7 +1571,7 @@ void func_80A97C4C(EnAz* this, PlayState* play) { func_80A97410(this, play); if ((this->unk_2FA == 1) || (this->unk_2FA == 3) || (this->unk_2FA == 6) || (this->unk_2FA == 8)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); - func_800FD750(NA_BGM_TIMED_MINI_GAME); + Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME); play->nextEntrance = Entrance_CreateFromSpawn(1); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; 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 a7287b67e..e8ce29da2 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -1009,7 +1009,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { EnBigslime_UpdateCameraIntroCs(this, play, 25); Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS); EnBigslime_InitFallMinislime(this); - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; this->callTimer = 35; func_800B7298(play, &this->actor, PLAYER_CSMODE_4); } @@ -1989,7 +1989,7 @@ void EnBigslime_Melt(EnBigslime* this, PlayState* play) { if (this->meltCounter == 100) { EnBigslime_SetTargetVtxFromPreFrozen(this); } else if (this->meltCounter == 50) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } } @@ -2777,7 +2777,7 @@ void EnBigslime_UpdateBigslime(Actor* thisx, PlayState* play) { Vec3f vtxMin; if (play->envCtx.lightSettingOverride == 3) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } Audio_SetSfxUnderwaterReverb(true); @@ -2822,7 +2822,7 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) { s32 pad; if (play->envCtx.lightSettingOverride == 3) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } Audio_SetSfxUnderwaterReverb(false); 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 c55c5bb3a..2f76201c5 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -356,28 +356,28 @@ void EnBom_Explode(EnBom* this, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base); } - if (play->envCtx.lightSettings.diffuseColor1[0] != 0) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] != 0) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[1] != 0) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] != 0) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[2] != 0) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] != 0) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; } - if (play->envCtx.lightSettings.ambientColor[0] != 0) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] != 0) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; } - if (play->envCtx.lightSettings.ambientColor[1] != 0) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] != 0) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; } - if (play->envCtx.lightSettings.ambientColor[2] != 0) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] != 0) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; } if (this->timer == 0) { @@ -550,10 +550,10 @@ void EnBom_Update(Actor* thisx, PlayState* play) { CLEAR_TAG_PARAMS(this->isPowderKeg)); Actor_RequestQuakeAndRumble(thisx, play, sQuakeY[this->isPowderKeg], sQuakeDurations[this->isPowderKeg]); - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = 250; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] = - play->envCtx.lightSettings.ambientColor[2] = 250; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = 250; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] = + play->envCtx.adjLightSettings.ambientColor[2] = 250; Camera_AddQuake(&play->mainCamera, 2, 11, 8); thisx->params = BOMB_TYPE_EXPLOSION; this->timer = 10; 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 bf9ba05a9..92dfe8418 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -273,28 +273,28 @@ void func_808AEFD4(EnBombf* this, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderJntSph.base); } - if (play->envCtx.lightSettings.diffuseColor1[0] != 0) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] != 0) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[1] != 0) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] != 0) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[2] != 0) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] != 0) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; } - if (play->envCtx.lightSettings.ambientColor[0] != 0) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] != 0) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; } - if (play->envCtx.lightSettings.ambientColor[1] != 0) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] != 0) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; } - if (play->envCtx.lightSettings.ambientColor[2] != 0) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] != 0) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; } if (this->timer == 0) { @@ -414,10 +414,10 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = 250; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] = - play->envCtx.lightSettings.ambientColor[2] = 250; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = 250; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] = + play->envCtx.adjLightSettings.ambientColor[2] = 250; Camera_AddQuake(&play->mainCamera, 2, 11, 8); 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 a66b176c3..22c247c1f 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -563,7 +563,7 @@ void func_8089B580(EnDinofos* this, PlayState* play) { } if ((play->sceneId == SCENE_MITURIN) && Animation_OnFrame(&this->skelAnime, 55.0f)) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } if (SkelAnime_Update(&this->skelAnime)) { @@ -1118,7 +1118,7 @@ void func_8089CF00(EnDinofos* this, PlayState* play) { Animation_PlayOnce(&this->skelAnime, &gDinolfosFireEndAnim); this->colliderJntSph.base.atFlags &= ~AT_ON; if (play->sceneId == SCENE_MITURIN) { - play->envCtx.lightSettingOverride = 255; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } this->actionFunc = func_8089CF70; } @@ -1289,7 +1289,7 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) { func_8089ACEC(this, play); func_8089AD70(this); if (play->sceneId == SCENE_MITURIN) { - play->envCtx.lightSettingOverride = 255; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } this->colliderQuad.base.atFlags &= ~(AT_ON | AT_BOUNCED); 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 f1526d66b..53864ab9c 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1323,7 +1323,7 @@ void func_8088FC34(EnElf* this, PlayState* play) { } else { Math_StepToF(&this->unk_240, 1.0f, 0.05f); } - func_800FD2B4(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f); + Environment_AdjustLights(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f); } } @@ -1521,8 +1521,8 @@ void func_8089010C(Actor* thisx, PlayState* play) { this->elfMsg = NULL; this->timer++; - if ((this->unk_240 >= 0.0f) && - func_800FD2B4(play, SQ(this->unk_240) * this->unk_240, player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) { + if ((this->unk_240 >= 0.0f) && Environment_AdjustLights(play, SQ(this->unk_240) * this->unk_240, + player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) { Math_StepToF(&this->unk_240, -0.05f, 0.05f); } diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index 15d495e49..931e8c6d4 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -169,10 +169,10 @@ void EnEncount3_Update(Actor* thisx, PlayState* play2) { this->unk164 = this->unk160 / 60.0f; if (this->unk164 != 0.0f) { - play->envCtx.lightSettings.fogNear = (960 - play->envCtx.unk_C4.fogNear) * this->unk164; - play->envCtx.lightSettings.fogColor[0] = (40.0f - play->envCtx.unk_C4.fogColor[0]) * this->unk164; - play->envCtx.lightSettings.fogColor[1] = (10.0f - play->envCtx.unk_C4.fogColor[1]) * this->unk164; - play->envCtx.lightSettings.fogColor[2] = (0.0f - play->envCtx.unk_C4.fogColor[2]) * this->unk164; + play->envCtx.adjLightSettings.fogNear = (960 - play->envCtx.lightSettings.fogNear) * this->unk164; + play->envCtx.adjLightSettings.fogColor[0] = (40.0f - play->envCtx.lightSettings.fogColor[0]) * this->unk164; + play->envCtx.adjLightSettings.fogColor[1] = (10.0f - play->envCtx.lightSettings.fogColor[1]) * this->unk164; + play->envCtx.adjLightSettings.fogColor[2] = (0.0f - play->envCtx.lightSettings.fogColor[2]) * this->unk164; } } 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 b2a9b75d8..9e442b637 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -5314,8 +5314,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Cutscene_StopManual(play, &play->csCtx); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; player->unk_B28 = -5; D_80917200 = 5; break; @@ -5356,8 +5356,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; D_8090CD50 = 30; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } break; @@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { D_80917200 = 5; D_8090CD54 = 0; D_809171F6 = 20; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } } } @@ -5476,15 +5476,15 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Math_ApproachF(&sSubCamVelFactor, 1.0f, 1.0f, 0.02f); if (sSubCamEye.y <= (WATER_SURFACE_Y(play) + 1.0f)) { - func_800F6834(play, 1); + Environment_EnableUnderwaterLights(play, 1); if (D_809171CA != 0) { - play->envCtx.lightSettings.fogNear = -0xB2; + play->envCtx.adjLightSettings.fogNear = -178; } else { - play->envCtx.lightSettings.fogNear = -0x2E; + play->envCtx.adjLightSettings.fogNear = -46; } } else { - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } } @@ -5534,10 +5534,10 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { if (Rand_ZeroOne() < 0.5f) { D_8090CCD4 = Rand_ZeroFloat(10.0f) + 5.0f; - play->envCtx.unk_E1 = 1; + play->envCtx.stormRequest = STORM_REQUEST_START; } else { D_8090CCD4 = 0; - play->envCtx.unk_E1 = 2; + play->envCtx.stormRequest = STORM_REQUEST_STOP; } } @@ -5568,8 +5568,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Math_ApproachZeroF(&D_8090CCD8, 1.0f, 2.0f); } - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = D_8090CCD8; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = D_8090CCD8; if ((u8)D_8090CCD0 > 0) { s32 pad; 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 b0a5200e2..6a68f283a 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -996,46 +996,46 @@ s32 func_80963810(PlayState* play, Vec3f pos) { s32 func_809638F8(PlayState* play) { s32 ret = true; - if (play->envCtx.lightSettings.diffuseColor1[0] > 25) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] > 25) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[0] = 0; + play->envCtx.adjLightSettings.light1Color[0] = 0; } - if (play->envCtx.lightSettings.diffuseColor1[1] > 25) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] > 25) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[1] = 0; + play->envCtx.adjLightSettings.light1Color[1] = 0; } - if (play->envCtx.lightSettings.diffuseColor1[2] > 25) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] > 25) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[2] = 0; + play->envCtx.adjLightSettings.light1Color[2] = 0; } - if (play->envCtx.lightSettings.ambientColor[0] > 25) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] > 25) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[0] = 0; + play->envCtx.adjLightSettings.ambientColor[0] = 0; } - if (play->envCtx.lightSettings.ambientColor[1] > 25) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] > 25) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[1] = 0; + play->envCtx.adjLightSettings.ambientColor[1] = 0; } - if (play->envCtx.lightSettings.ambientColor[2] > 25) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] > 25) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[2] = 0; + play->envCtx.adjLightSettings.ambientColor[2] = 0; } return ret; } 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 272915c71..e7d8e9032 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -364,7 +364,7 @@ void func_80B0FD8C(EnGb2* this, PlayState* play) { } void func_80B0FE18(PlayState* play) { - func_800FD750(NA_BGM_MINI_BOSS); + Environment_ForcePlaySequence(NA_BGM_MINI_BOSS); play->nextEntrance = ENTRANCE(GHOST_HUT, 1); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_64; 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 88798dd2f..17f8cbb1d 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -1066,7 +1066,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) { Math_StepToF(&this->unk_200, 1.0f, 0.02f); } func_80997AFC(this->unk_194, &this->unk_1F7); - Lib_LerpRGB(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA); + Color_RGB8_Lerp(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA); if (this->unk_200 >= 1.0f) { this->unk_1F4 = this->unk_1FA; } diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c index e9cfb258e..b22949cb0 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -62,10 +62,10 @@ void EnHata_Update(Actor* thisx, PlayState* play2) { this->skelAnime.playSpeed = 2.75f * phi_fv0; this->skelAnime.playSpeed += 1.0f + Rand_ZeroFloat(1.25f); - sp34.x = play->envCtx.windDir.x; - sp34.y = play->envCtx.windDir.y + ((1.0f - phi_fv0) * 240.0f); + sp34.x = play->envCtx.windDirection.x; + sp34.y = play->envCtx.windDirection.y + ((1.0f - phi_fv0) * 240.0f); sp34.y = CLAMP(sp34.y, -118.0f, 118.0f); - sp34.z = play->envCtx.windDir.z; + sp34.z = play->envCtx.windDirection.z; phi_fv0 = CLAMP(phi_fv0, 0.1f, 0.4f); Math_ApproachF(&this->unk_2A4.x, sp34.x, phi_fv0, 1000.0f); 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 19fbd436e..54b21b7ba 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -879,7 +879,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; @@ -1176,7 +1176,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 801ad428c..77b4ce909 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -750,7 +750,7 @@ void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); if (EnInvadepohDemo_Ufo_ShouldDrawLensFlare(play, &flashPos)) { - func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); + Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); } } 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 b09f8f54d..89b9fcfff 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 @@ -203,7 +203,7 @@ void EnMThunder_Destroy(Actor* thisx, PlayState* play) { } void EnMThunder_AdjustLights(PlayState* play, f32 arg1) { - func_800FD2B4(play, arg1, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, arg1, 850.0f, 0.2f, 0.0f); } void EnMThunder_Spin_AttackNoMagic(EnMThunder* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index 49d10a518..016f779e9 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -318,7 +318,7 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) { Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_RACE | SEQ_FLAG_ASYNC); - play->envCtx.unk_E4 = 0xFE; + play->envCtx.timeSeqState = TIMESEQ_REQUEST; player->stateFlags1 &= ~PLAYER_STATE1_20; } else if ((this->timer < 60) && (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO)) { this->timer = 0; diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 1720954a2..7ac6a3b58 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -366,7 +366,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { gSaveContext.save.time = CLOCK_TIME(8, 0); Sram_IncrementDay(); } else { - func_800FE658(120.0f); + Environment_SetTimeJump(120.0f); } this->behaviour++; diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c index df778f1a7..780e3b300 100644 --- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c +++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c @@ -41,7 +41,7 @@ void EnOkarinaEffect_Destroy(Actor* thisx, PlayState* play) { void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) { EnOkarinaEffect* this = THIS; - if (play->envCtx.unk_F2[1]) { + if (play->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) { Actor_Kill(&this->actor); } EnOkarinaEffect_SetupAction(this, func_8096B104); @@ -49,10 +49,10 @@ void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) { void func_8096B104(EnOkarinaEffect* this, PlayState* play) { this->unk144 = 0x50; - play->envCtx.unk_F2[4] = 0x3C; - D_801F4E70 = 501.0f; - play->envCtx.unk_E3 = 2; - func_800FD78C(play); + play->envCtx.precipitation[PRECIP_SOS_MAX] = 60; + gLightningStrike.delayTimer = 501.0f; + play->envCtx.lightningState = LIGHTNING_LAST; + Environment_PlayStormNatureAmbience(play); EnOkarinaEffect_SetupAction(this, func_8096B174); } @@ -65,11 +65,11 @@ void func_8096B174(EnOkarinaEffect* this, PlayState* play) { } void func_8096B1FC(EnOkarinaEffect* this, PlayState* play) { - if (play->envCtx.unk_F2[4]) { + if (play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) { if ((play->state.frames & 3) == 0) { - play->envCtx.unk_F2[4]--; - if (play->envCtx.unk_F2[4] == 8) { - func_800FD858(play); + play->envCtx.precipitation[PRECIP_SOS_MAX]--; + if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 8) { + Environment_StopStormNatureAmbience(play); } } } else { 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 b8967e329..fa7e72acc 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -459,8 +459,8 @@ void func_80B5C3D8(EnOt* this, PlayState* play) { this->unk_360->actor.shape.rot.y = BINANG_ROT180(temp); if (this->unk_740 < 1.0f) { - Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744); - Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744); + Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744); + Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744); Math_StepToF(&this->unk_740, 1.0f, 0.05f); } 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 062f76230..90ea18d05 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -782,7 +782,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { CutsceneManager_SetReturnCamera(CAM_ID_MAIN); Environment_StartTime(); if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) { - func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); + Environment_SetTimeJump(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); } if (play->actorCtx.flags & ACTORCTX_FLAG_6) { SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT); 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 e726408a5..8816ceb64 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -60,8 +60,8 @@ void func_80A41D70(EnTest4* this, PlayState* play) { } Interface_NewDay(play, CURRENT_DAY); - D_801BDBC8 = 0xFE; - func_800FB758(play); + gSceneSeqState = SCENESEQ_MORNING; + Environment_PlaySceneSequence(play); func_800FEAF4(&play->envCtx); this->actionFunc = func_80A42AB8; } @@ -97,8 +97,8 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { gSaveContext.save.time = CLOCK_TIME(6, 0); Interface_NewDay(play, CURRENT_DAY); Message_DisplaySceneTitleCard(play, sDayMessages2[CURRENT_DAY - 1]); - D_801BDBC8 = 0xFE; - func_800FB758(play); + gSceneSeqState = SCENESEQ_MORNING; + Environment_PlaySceneSequence(play); func_800FEAF4(&play->envCtx); this->actionFunc = func_80A42AB8; } @@ -324,7 +324,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { } else { gSaveContext.save.day = 1; dayTemp = gSaveContext.save.day; - gSaveContext.save.daysElapsed = dayTemp; + gSaveContext.save.eventDayCount = dayTemp; this->csIdIndex = 1; this->unk_146 = gSaveContext.save.time; this->actionFunc = func_80A42AB8; @@ -517,38 +517,38 @@ void func_80A42F20(EnTest4* this, PlayState* play) { void func_80A430C8(EnTest4* this, PlayState* play) { if ((CURRENT_DAY == 2) && (gSaveContext.save.time >= CLOCK_TIME(7, 0)) && - (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.unk_F2[2] == 0)) { + (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) { // rain? - gWeatherMode = 1; - func_800FD78C(play); - play->envCtx.unk_E3 = 1; - play->envCtx.unk_F2[0] = 0x3C; + gWeatherMode = WEATHER_MODE_1; + Environment_PlayStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_ON; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; } else { - if (play->envCtx.unk_F2[0] != 0) { + if (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0) { if ((play->state.frames % 4) == 0) { - play->envCtx.unk_F2[0]--; - if ((play->envCtx.unk_F2[0]) == 8) { - func_800FD858(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX]--; + if ((play->envCtx.precipitation[PRECIP_RAIN_MAX]) == 8) { + Environment_StopStormNatureAmbience(play); } } } } - if (gWeatherMode == 1) { + if (gWeatherMode == WEATHER_MODE_1) { this->state = TEST4_STATE_1; } } void func_80A431C8(EnTest4* this, PlayState* play) { if (((gSaveContext.save.time >= CLOCK_TIME(17, 30)) && (gSaveContext.save.time < CLOCK_TIME(23, 0)) && - (play->envCtx.unk_F2[0] != 0)) || - (play->envCtx.unk_F2[2] != 0)) { - gWeatherMode = 0; - play->envCtx.unk_E3 = 2; + (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0)) || + (play->envCtx.precipitation[PRECIP_SNOW_CUR] != 0)) { + gWeatherMode = WEATHER_MODE_CLEAR; + play->envCtx.lightningState = LIGHTNING_LAST; } - if (gWeatherMode == 0) { + if (gWeatherMode == WEATHER_MODE_CLEAR) { this->state = TEST4_STATE_0; } } @@ -557,7 +557,7 @@ void func_80A4323C(EnTest4* this, PlayState* play) { s32 temp_v0 = (this->actor.params >> 0xA) * 0x64; if (temp_v0 > 0) { - D_801F4E7A = temp_v0; + gSkyboxNumStars = temp_v0; } } @@ -568,7 +568,7 @@ void EnTest4_Update(Actor* thisx, PlayState* play) { if (!(player->stateFlags1 & PLAYER_STATE1_2)) { this->actionFunc(this, play); - if (func_800FE4B8(play) != 0) { + if (Environment_GetStormState(play) != STORM_STATE_OFF) { switch (this->state) { case TEST4_STATE_0: func_80A430C8(this, play); diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index bee7c94e7..9657f1b1e 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -375,24 +375,24 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) { EnTest6* this = THIS; s32 i; - play->envCtx.lightSettings.ambientColor[0] = 0; - play->envCtx.lightSettings.ambientColor[1] = 0; - play->envCtx.lightSettings.ambientColor[2] = 0; + play->envCtx.adjLightSettings.ambientColor[0] = 0; + play->envCtx.adjLightSettings.ambientColor[1] = 0; + play->envCtx.adjLightSettings.ambientColor[2] = 0; - play->envCtx.lightSettings.diffuseColor1[0] = 0; - play->envCtx.lightSettings.diffuseColor1[1] = 0; - play->envCtx.lightSettings.diffuseColor1[2] = 0; + play->envCtx.adjLightSettings.light1Color[0] = 0; + play->envCtx.adjLightSettings.light1Color[1] = 0; + play->envCtx.adjLightSettings.light1Color[2] = 0; - play->envCtx.lightSettings.diffuseColor2[0] = 0; - play->envCtx.lightSettings.diffuseColor2[1] = 0; - play->envCtx.lightSettings.diffuseColor2[2] = 0; + play->envCtx.adjLightSettings.light2Color[0] = 0; + play->envCtx.adjLightSettings.light2Color[1] = 0; + play->envCtx.adjLightSettings.light2Color[2] = 0; - play->envCtx.lightSettings.fogColor[0] = 0; - play->envCtx.lightSettings.fogColor[1] = 0; - play->envCtx.lightSettings.fogColor[2] = 0; + play->envCtx.adjLightSettings.fogColor[0] = 0; + play->envCtx.adjLightSettings.fogColor[1] = 0; + play->envCtx.adjLightSettings.fogColor[2] = 0; - play->envCtx.lightSettings.fogNear = 0; - play->envCtx.lightSettings.zFar = 0; + play->envCtx.adjLightSettings.fogNear = 0; + play->envCtx.adjLightSettings.zFar = 0; play->envCtx.fillScreen = false; @@ -425,7 +425,7 @@ void EnTest6_StartCutscene(EnTest6* this, PlayState* play) { break; default: - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; EnTest6_SetupAction(this, EnTest6_SharedSoTCutscene); diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index df0e829d4..417176d96 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -987,6 +987,7 @@ void EnTest7_Draw(Actor* thisx, PlayState* play) { func_80AF14FC(play, this->unk_15C); if (this->unk_144 & 4) { - func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f, 5.0f, 0, 0); + Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f, + 5.0f, 0, 0); } } 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 64a62f84a..7b88159f1 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -324,7 +324,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { } if (R_TIME_SPEED != 0.0f) { - this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED; + this->skelAnime.playSpeed = (f32)Environment_GetTimeSpeed(play) / R_TIME_SPEED; } else { this->skelAnime.playSpeed = 0.0f; } diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c index 551d7d774..3221878e3 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -77,7 +77,7 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) { arg2 = 0.0f; } play->envCtx.lightSettingOverride = 0; - play->envCtx.unk_E0 = 2; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL; play->envCtx.lightSetting = this->actor.world.rot.x; play->envCtx.prevLightSetting = this->actor.world.rot.z; play->envCtx.lightBlend = arg2; @@ -87,11 +87,11 @@ void func_8089F0A0(EnViewer* this, PlayState* play) { Player* player = GET_PLAYER(play); D_8089F3E4++; - if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != 255)) { - play->envCtx.lightSettingOverride = 255; - play->envCtx.unk_E0 = 0; + if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE)) { + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE; play->envCtx.lightBlend = 1.0f; - func_800FAAB4( + Environment_ChangeLightSetting( play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)); play->envCtx.lightBlend = 1.0f; play->envCtx.prevLightSetting = play->envCtx.lightSetting; diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index fb34c3b64..3aa4360f9 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -47,12 +47,6 @@ ActorInit En_Weather_Tag_InitVars = { (ActorFunc)EnWeatherTag_Draw, }; -extern f32 D_801F4E74; -extern u8 D_801BDBB8; -extern u8 D_801BDBB4; -extern u8 D_801F4E30; -extern s16 D_801F4E7A; - void EnWeatherTag_SetupAction(EnWeatherTag* this, EnWeatherTagActionFunc func) { this->actionFunc = func; } @@ -131,17 +125,17 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) { if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { - D_801BDBB8 = 1; - if (!(play->envCtx.lightMode == 0) || + gInterruptSongOfStorms = true; + if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) || ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { - D_801BDBB8 = 0; + gInterruptSongOfStorms = false; if (gWeatherMode != weatherMode) { gWeatherMode = weatherMode; play->envCtx.changeLightEnabled = true; play->envCtx.lightConfig = lightConfig; play->envCtx.changeLightNextConfig = changeLightNextConfig; - D_801BDBB4 = changeLightNextConfig; + gLightConfigAfterUnderwater = changeLightNextConfig; play->envCtx.changeDuration = changeDuration; play->envCtx.changeLightTimer = play->envCtx.changeDuration; } @@ -161,16 +155,16 @@ u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) { if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { - D_801BDBB8 = 1; - if (!(play->envCtx.lightMode == 0) || + gInterruptSongOfStorms = true; + if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) || ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { - D_801BDBB8 = 0; - gWeatherMode = 0; + gInterruptSongOfStorms = false; + gWeatherMode = WEATHER_MODE_CLEAR; play->envCtx.changeLightEnabled = true; play->envCtx.lightConfig = lightConfig; play->envCtx.changeLightNextConfig = changeLightNextConfig; - D_801BDBB4 = changeLightNextConfig; + gLightConfigAfterUnderwater = changeLightNextConfig; play->envCtx.changeDuration = changeDuration; play->envCtx.changeLightTimer = play->envCtx.changeDuration; returnVal = 1; @@ -201,11 +195,11 @@ void func_8096689C(EnWeatherTag* this, PlayState* play) { play->envCtx.windSpeed = (this->actor.world.rot.z * partialResult) + 30.0f; if (partialResult > 0.01f) { - play->envCtx.sandstormState = 8; + play->envCtx.sandstormState = SANDSTORM_8; D_801F4E30 = 0x9B; - } else if (play->envCtx.sandstormState == 8) { + } else if (play->envCtx.sandstormState == SANDSTORM_8) { D_801F4E30 = 0; - play->envCtx.sandstormState = 9; + play->envCtx.sandstormState = SANDSTORM_9; } } @@ -243,7 +237,7 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) { // poisoned swamp: placed behind the water fall from ikana // this tag stops spawning after STT cleared? void func_80966B08(EnWeatherTag* this, PlayState* play) { - if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) { + if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == WEATHER_MODE_2)) { play->skyboxId = SKYBOX_3; EnWeatherTag_SetupAction(this, func_80966D20); } else if (D_801F4E74 <= 0.01f) { @@ -315,7 +309,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { EnWeatherTag_SetupAction(this, func_80966B08); } - if (gWeatherMode != 2) { + if (gWeatherMode != WEATHER_MODE_2) { EnWeatherTag_SetupAction(this, func_80966B08); } } @@ -325,7 +319,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { // path to goron village winter, winter mountain village void func_80966E0C(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 2, 60, 3)) { - play->envCtx.unk_F2[3] = 0x80; + play->envCtx.precipitation[PRECIP_SNOW_MAX] = 128; EnWeatherTag_SetupAction(this, func_80966E84); } } @@ -333,7 +327,7 @@ void func_80966E0C(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_WINTERFOG 2 void func_80966E84(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 2, 0, 60)) { - play->envCtx.unk_F2[3] = 0; + play->envCtx.precipitation[PRECIP_SNOW_MAX] = 0; EnWeatherTag_SetupAction(this, func_80966E0C); } } @@ -343,8 +337,8 @@ void func_80966E84(EnWeatherTag* this, PlayState* play) { // wait if you enter the scene through a room instead of fog you get a flash rain shower void func_80966EF0(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 2, 100, 4)) { - func_800FD78C(play); - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; EnWeatherTag_SetupAction(this, func_80966F74); } } @@ -352,8 +346,8 @@ void func_80966EF0(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_UNK3 2 void func_80966F74(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 2, 0, 100)) { - func_800FD858(play); - play->envCtx.unk_F2[0] = 0; + Environment_StopStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0; EnWeatherTag_SetupAction(this, func_80966EF0); } } @@ -365,7 +359,7 @@ void func_80966FEC(EnWeatherTag* this, PlayState* play) { // weirdly, not the same as the other param lookup used in the rest of the file, which is float s32 distance = WEATHER_TAG_RANGE100INT(&this->actor); if (distance > 0) { - D_801F4E7A = distance; + gSkyboxNumStars = distance; } if ((play->sceneId == SCENE_KAIZOKU) && (play->actorCtx.flags & ACTORCTX_FLAG_1)) { @@ -410,9 +404,9 @@ void EnWeatherTag_DoNothing(EnWeatherTag* this, PlayState* play) { // these two are isolated, they call themselves but nothing calls them? void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 4, 100, 5)) { - func_800FD78C(play); - play->envCtx.unk_E3 = 1; - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_ON; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_80967250); } } @@ -420,9 +414,9 @@ void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) { // these two are isolated, they call themselves but nothing calls them void EnWeatherTag_Unused_80967250(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 4, 0, 100)) { - func_800FD858(play); - play->envCtx.unk_E3 = 2; - play->envCtx.unk_F2[0] = 0; + Environment_StopStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_LAST; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0; EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_809671B8); } } @@ -442,20 +436,20 @@ void func_809672DC(EnWeatherTag* this, PlayState* play) { range = WEATHER_TAG_RANGE100(&this->actor); if (distance < range) { - play->envCtx.sandstormState = 6; + play->envCtx.sandstormState = SANDSTORM_6; strength = 1.0f - (distance / range); if (0.8f < strength) { strength = 1.0f; } D_801F4E30 = (200.0f * strength); } else { - if (play->envCtx.sandstormState == 6) { + if (play->envCtx.sandstormState == SANDSTORM_6) { D_801F4E30 = 0; - play->envCtx.sandstormState = 7; + play->envCtx.sandstormState = SANDSTORM_7; } } - Math_SmoothStepToS(&play->envCtx.lightSettings.fogNear, (s16)(-40.0f * strength), 1, 1, 1); + Math_SmoothStepToS(&play->envCtx.adjLightSettings.fogNear, -40.0f * strength, 1, 1, 1); } // WEATHERTAG_TYPE_LOCALDAY2RAIN: rain proximity as approaching rainy scene @@ -466,19 +460,19 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) { if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(&this->actor)) { if (CURRENT_DAY == 2) { if ((gSaveContext.save.time >= CLOCK_TIME(7, 0)) && (gSaveContext.save.time < CLOCK_TIME(17, 30)) && - (play->envCtx.unk_F2[2] == 0)) { + (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) { - gWeatherMode = 1; - func_800FD78C(play); - play->envCtx.unk_F2[4] = 0x20; + gWeatherMode = WEATHER_MODE_1; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_SOS_MAX] = 32; EnWeatherTag_SetupAction(this, func_80967608); } } } else { - if ((play->envCtx.unk_F2[4] != 0) && !(play->state.frames & 3)) { - play->envCtx.unk_F2[4]--; - if ((play->envCtx.unk_F2[4]) == 8) { - func_800FD858(play); + if ((play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) && !(play->state.frames & 3)) { + play->envCtx.precipitation[PRECIP_SOS_MAX]--; + if ((play->envCtx.precipitation[PRECIP_SOS_MAX]) == 8) { + Environment_StopStormNatureAmbience(play); } } } @@ -488,7 +482,7 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) { void func_80967608(EnWeatherTag* this, PlayState* play) { if ((WEATHER_TAG_RANGE100(&this->actor) + 10.0f) < Actor_WorldDistXZToActor(&GET_PLAYER(play)->actor, &this->actor)) { - gWeatherMode = 0; + gWeatherMode = WEATHER_MODE_CLEAR; EnWeatherTag_SetupAction(this, func_809674C8); } } 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 a708038f5..a3df9a7a2 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 @@ -119,19 +119,19 @@ void EnWizFire_Destroy(Actor* thisx, PlayState* play) { EnWizFire* this = THIS; if (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) { - play->envCtx.lightSettings.fogColor[2] = 0; - play->envCtx.lightSettings.fogColor[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.fogColor[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.fogNear = play->envCtx.lightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogColor[2] = 0; + play->envCtx.adjLightSettings.fogColor[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogColor[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogNear = play->envCtx.adjLightSettings.fogColor[2]; } Collider_DestroyCylinder(play, &this->collider); @@ -518,38 +518,39 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { fogNear = 968.0f; } - play->envCtx.lightSettings.fogNear = (fogNear - (s16)play->envCtx.unk_C4.fogNear) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogNear = + (fogNear - (s16)play->envCtx.lightSettings.fogNear) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.ambientColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.ambientColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.ambientColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.ambientColor[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.ambientColor[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.ambientColor[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.diffuseColor1[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor1[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor1[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor1[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor1[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor1[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light1Color[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light1Color[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light1Color[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.diffuseColor2[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor2[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor2[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light2Color[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light2Color[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light2Color[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.fogColor[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.fogColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.fogColor[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.fogColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.fogColor[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.fogColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.fogColor[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.fogColor[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.fogColor[2]) * this->blendScaleFrac; } } 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 3846ecfd0..069c4b89b 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -328,7 +328,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) { if (floorBgId == BGCHECK_SCENE) { floorPoly = this->dyna.actor.floorPoly; if ((floorPoly != NULL) && (this->burrowFlag & 1)) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); + Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); } } diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index 2661b9cc5..dbefd93b9 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -55,11 +55,11 @@ void func_808DBEB0(ObjectKankyo* this, PlayState* play) { D_808DE5B0 = 0.0f; this->unk_144 = Rand_ZeroOne() * 360.0f; this->unk_148 = Rand_ZeroOne() * 360.0f; - if (play->envCtx.unk_F2[2] == 128) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 128) { D_808DE5B0 = 1.0f; this->unk_114E = 1; - for (i = 0; i < play->envCtx.unk_F2[2]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) { this->unk_14C[i].unk_10 = Rand_ZeroOne() * -200.0f; } } else { @@ -107,7 +107,7 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) { break; case 2: - play->envCtx.unk_F2[2] = 0x80; + play->envCtx.precipitation[PRECIP_SNOW_CUR] = 128; func_808DBFB0(this, play); break; @@ -180,16 +180,16 @@ void func_808DC18C(ObjectKankyo* this, PlayState* play) { magnitude = play->envCtx.windSpeed / 60.0f; magnitude = CLAMP(magnitude, 0.0f, 1.0f); - sp30.x = play->envCtx.windDir.x * magnitude; - sp30.y = play->envCtx.windDir.y + 100.0f; - sp30.z = play->envCtx.windDir.z * magnitude; + sp30.x = play->envCtx.windDirection.x * magnitude; + sp30.y = play->envCtx.windDirection.y + 100.0f; + sp30.z = play->envCtx.windDirection.z * magnitude; this->unk_14C[2].unk_00 = 0x4000 - Math_Vec3f_Pitch(&gZeroVec3f, &sp30); this->unk_14C[2].unk_04 = Math_Vec3f_Yaw(&gZeroVec3f, &sp30) + 0x8000; } void func_808DC454(ObjectKankyo* this, PlayState* play) { s16 i; - u32 tempI; + s32 pad1; f32 phi_f20; f32 spD0; f32 spCC; @@ -214,7 +214,7 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { spCC = y / magnitude; spC8 = z / magnitude; - for (i = 0; i < play->envCtx.unk_F2[2]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) { switch (this->unk_14C[i].unk_1C) { case 0: this->unk_14C[i].unk_00 = play->view.eye.x + (spD0 * 120.0f); @@ -231,14 +231,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { this->unk_14C[i].unk_10 = temp_f22; } else { this->unk_14C[i].unk_10 += temp_f22; - tempI = i; - if (play->envCtx.unk_F2[2] == (tempI + 1)) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == ((u32)i + 1)) { this->unk_114E = 0; } } this->unk_14C[i].unk_14 = (Rand_ZeroOne() - 0.5f) * (2.0f * temp_120); - if (play->envCtx.unk_F2[4] == 0) { + if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) { this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 1.0f; } else { this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 8.0f; @@ -251,14 +250,14 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { temp_f28 = play->view.eye.y + (spCC * 120.0f); temp_f30 = play->view.eye.z + (spC8 * 120.0f); - magnitude = - sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z)); + magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) + + SQ(play->envCtx.windDirection.z)); if (magnitude == 0.0f) { magnitude = 0.001f; } - spC4 = -play->envCtx.windDir.x / magnitude; - spC0 = -play->envCtx.windDir.y / magnitude; - spBC = -play->envCtx.windDir.z / magnitude; + spC4 = -play->envCtx.windDirection.x / magnitude; + spC0 = -play->envCtx.windDirection.y / magnitude; + spBC = -play->envCtx.windDirection.z / magnitude; if (i == 0) { this->unk_144 += 0.049999997f * Rand_ZeroOne(); @@ -318,13 +317,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { } void func_808DCB7C(ObjectKankyo* this, PlayState* play) { - if (play->envCtx.unk_F2[2] < play->envCtx.unk_F2[3]) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] < play->envCtx.precipitation[PRECIP_SNOW_MAX]) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] += 2; + play->envCtx.precipitation[PRECIP_SNOW_CUR] += 2; } - } else if (play->envCtx.unk_F2[3] < play->envCtx.unk_F2[2]) { + } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < play->envCtx.precipitation[PRECIP_SNOW_CUR]) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] -= 2; + play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 2; } } func_808DC454(this, play); @@ -333,24 +332,24 @@ void func_808DCB7C(ObjectKankyo* this, PlayState* play) { void func_808DCBF8(ObjectKankyo* this, PlayState* play) { f32 temp_f0; - if ((play->envCtx.unk_F2[2] > 0) && (this->unk_114C == 0)) { + if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] > 0) && (this->unk_114C == 0)) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] -= 9; - if ((s8)play->envCtx.unk_F2[2] < 0) { - play->envCtx.unk_F2[2] = 0; + play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 9; + if ((s8)play->envCtx.precipitation[PRECIP_SNOW_CUR] < 0) { + play->envCtx.precipitation[PRECIP_SNOW_CUR] = 0; } } } - temp_f0 = (f32)play->envCtx.unk_F2[2] / 128; + temp_f0 = (f32)play->envCtx.precipitation[PRECIP_SNOW_CUR] / 128; temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f); if (temp_f0 > 0.01f) { D_801F4E30 = 155.0f * temp_f0; - play->envCtx.sandstormState = 10; + play->envCtx.sandstormState = SANDSTORM_A; } else { D_801F4E30 = 0; - play->envCtx.sandstormState = 10; + play->envCtx.sandstormState = SANDSTORM_A; } func_808DC454(this, play); } @@ -413,14 +412,14 @@ void func_808DCDB4(ObjectKankyo* this, PlayState* play) { temp_f28 = play->view.eye.y + (spA8 * 120.0f); temp_f18 = play->view.eye.z + (spA4 * 120.0f); - magnitude = - sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z)); + magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) + + SQ(play->envCtx.windDirection.z)); if (magnitude == 0.0f) { magnitude = 0.001f; } - spA0 = -play->envCtx.windDir.x / magnitude; - sp9C = -play->envCtx.windDir.z / magnitude; + spA0 = -play->envCtx.windDirection.x / magnitude; + sp9C = -play->envCtx.windDirection.z / magnitude; if (i == 0) { this->unk_144 += 0.049999997f * Rand_ZeroOne(); @@ -512,7 +511,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { f32 temp_f2; f32 tempf; - if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.unk_E2 == 0)) { + if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.stormState == 0)) { return; } @@ -525,14 +524,14 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f); Math_SmoothStepToF(&D_808DE5B0, temp_f0, 0.2f, 0.1f, 0.001f); - sp68 = play->envCtx.unk_F2[2]; + sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR]; sp68 *= D_808DE5B0; - if ((play->envCtx.unk_F2[2] >= 32) && (sp68 < 32)) { + if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] >= 32) && (sp68 < 32)) { sp68 = 32; } } else { - sp68 = play->envCtx.unk_F2[2]; + sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR]; } for (i = 0; i < sp68; i++) { @@ -654,7 +653,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); s32 i; u8 phi_s5; - u16 end = play->envCtx.unk_F2[1]; + u16 end = play->envCtx.precipitation[PRECIP_RAIN_CUR]; f32 temp_f12; f32 temp_f20; f32 temp_f22; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index be5374519..2dbfecfdf 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -144,7 +144,7 @@ void OceffSpot_Update(Actor* thisx, PlayState* play) { temp = (2.0f - this->unk16C) * this->unk16C; - func_800FD2B4(play, temp * 0.5f, 880.0f, 0.2f, 0.9f); + Environment_AdjustLights(play, temp * 0.5f, 880.0f, 0.2f, 0.9f); Lights_PointNoGlowSetInfo(&this->lightInfo1, this->actor.world.pos.x, this->actor.world.pos.y + 55.0f, this->actor.world.pos.z, (s32)(255.0f * temp), (s32)(255.0f * temp), (s32)(200.0f * temp), diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index d04907e50..083b8c05f 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -522,7 +522,7 @@ FloorEffect sPlayerFloorEffect; Input* sPlayerControlInput; s32 sPlayerUseHeldItem; // When true, the current held item is used. Is reset to false every frame. s32 sPlayerHeldItemButtonIsHeldDown; // Indicates if the button for the current held item is held down. -EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings +AdjLightSettings D_80862B50; // backup of lay->envCtx.adjLightSettings s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? s32 func_8082DA90(PlayState* play) { @@ -6284,7 +6284,7 @@ s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* o f32 yIntersect = func_80835CD8(play, this, &D_8085D100, &pos, outPoly, outBgId); if ((*outBgId == BGCHECK_SCENE) && (fabsf(this->actor.world.pos.y - yIntersect) < 10.0f)) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId)); + Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId)); return true; } return false; @@ -7323,7 +7323,7 @@ void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerFor gSaveContext.save.playerForm = playerForm; this->stateFlags1 |= PLAYER_STATE1_2; - D_80862B50 = play->envCtx.lightSettings; + D_80862B50 = play->envCtx.adjLightSettings; this->actor.velocity.y = 0.0f; Actor_DeactivateLens(play); } @@ -11243,7 +11243,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId)); if (this->actor.floorBgId == BGCHECK_SCENE) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); + Environment_ChangeLightSetting( + play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); } else { DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId); } @@ -11838,9 +11839,9 @@ void func_80844784(PlayState* play, Player* this) { } if (play->envCtx.windSpeed >= 50.0f) { - temp_fa0 = play->envCtx.windDir.x; - temp_fa1 = play->envCtx.windDir.y; - temp_ft4 = play->envCtx.windDir.z; + temp_fa0 = play->envCtx.windDirection.x; + temp_fa1 = play->envCtx.windDirection.y; + temp_ft4 = play->envCtx.windDirection.z; temp_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4)); if (temp_fv0_2 != 0.0f) { @@ -12617,7 +12618,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { CLAMP_MIN(spB8, spB4) * this->actor.scale.z * 1.15f, MTXMODE_APPLY); Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); Scene_SetRenderModeXlu(play, 0, 1); - Lib_LerpRGB(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC); + Color_RGB8_Lerp(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC); gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255); @@ -17838,14 +17839,14 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { u8* new_var; s32 pad[4]; - new_var = play->envCtx.unk_C4.diffuseColor1; - sp70.fogNear = play->envCtx.unk_C4.fogNear; - sp70.fogColor[0] = play->envCtx.unk_C4.fogColor[0]; - sp70.fogColor[1] = play->envCtx.unk_C4.fogColor[1]; - sp70.fogColor[2] = play->envCtx.unk_C4.fogColor[2]; - sp70.ambientColor[0] = play->envCtx.unk_C4.ambientColor[0]; - sp70.ambientColor[1] = play->envCtx.unk_C4.ambientColor[1]; - sp70.ambientColor[2] = play->envCtx.unk_C4.ambientColor[2]; + new_var = play->envCtx.lightSettings.light1Color; + sp70.fogNear = play->envCtx.lightSettings.fogNear; + sp70.fogColor[0] = play->envCtx.lightSettings.fogColor[0]; + sp70.fogColor[1] = play->envCtx.lightSettings.fogColor[1]; + sp70.fogColor[2] = play->envCtx.lightSettings.fogColor[2]; + sp70.ambientColor[0] = play->envCtx.lightSettings.ambientColor[0]; + sp70.ambientColor[1] = play->envCtx.lightSettings.ambientColor[1]; + sp70.ambientColor[2] = play->envCtx.lightSettings.ambientColor[2]; if (arg1 <= 1.0f) { arg1 -= 0.0f; @@ -17876,13 +17877,13 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { var_t4 = D_8085D844; } - play->envCtx.lightSettings.fogNear = - ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.fogNear; + play->envCtx.adjLightSettings.fogNear = + ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.lightSettings.fogNear; - func_80854CD0(arg1, play->envCtx.lightSettings.fogColor, var_v1->fogColor, var_t0->fogColor, - play->envCtx.unk_C4.fogColor, play->envCtx.lightSettings.ambientColor, var_v1->ambientColor, - var_t0->ambientColor, play->envCtx.unk_C4.ambientColor, play->envCtx.lightSettings.diffuseColor1, - var_t3, var_t4, new_var); + func_80854CD0(arg1, play->envCtx.adjLightSettings.fogColor, var_v1->fogColor, var_t0->fogColor, + play->envCtx.lightSettings.fogColor, play->envCtx.adjLightSettings.ambientColor, var_v1->ambientColor, + var_t0->ambientColor, play->envCtx.lightSettings.ambientColor, + play->envCtx.adjLightSettings.light1Color, var_t3, var_t4, new_var); } struct_8085D848 D_8085D848[] = { @@ -18107,7 +18108,7 @@ void Player_Action_87(Player* this, PlayState* play) { this->prevMask = this->currentMask; this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]; Player_StopCutscene(this); - play->envCtx.lightSettings = D_80862B50; + play->envCtx.adjLightSettings = D_80862B50; func_8085B384(this, play); return; } diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c index 61eb3aebd..139568f3b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c +++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c @@ -26,7 +26,7 @@ u32 EffectSsLightning_Init(PlayState* play, u32 index, EffectSs* this, void* ini void EffectSsLightning_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this); -TexturePtr sLightningTextures[] = { +static TexturePtr sLightningTextures[] = { gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex, gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex, }; diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 637a20906..2c2e9a6b1 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -84,7 +84,7 @@ void DayTelop_Update(DayTelopState* this, GameState* thisx) { SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); gSaveContext.save.time = CLOCK_TIME(6, 0); - D_801BDBC8 = 0xFE; + gSceneSeqState = SCENESEQ_MORNING; } else if (this->transitionCountdown == 90) { this->fadeInState = DAYTELOP_HOURSTEXT_FADEIN; this->alpha = 0; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index a47b5ed9e..65d26a97e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2197,7 +2197,7 @@ void FileSelect_LoadGame(GameState* thisx) { gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.cutsceneTrigger = 0; gSaveContext.chamberCutsceneNum = 0; - gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.nextDayTime = NEXT_TIME_NONE; gSaveContext.retainWeatherMode = false; gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; @@ -2489,7 +2489,7 @@ void FileSelect_InitContext(GameState* thisx) { Skybox_Init(&this->state, &this->skyboxCtx, 1); R_TIME_SPEED = 10; - envCtx->changeSkyboxState = 0; + envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE; envCtx->changeSkyboxTimer = 0; envCtx->changeLightEnabled = false; envCtx->changeLightTimer = 0; diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 06775bf6e..7a79da010 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -51,7 +51,7 @@ void MapSelect_LoadGame(MapSelectState* this, u32 entrance, s32 spawn) { gSaveContext.respawn[RESPAWN_MODE_ZORA].entrance = 0xFF; gSaveContext.respawn[RESPAWN_MODE_DEKU].entrance = 0xFF; gSaveContext.respawn[RESPAWN_MODE_HUMAN].entrance = 0xFF; - gWeatherMode = 0; + gWeatherMode = WEATHER_MODE_CLEAR; STOP_GAMESTATE(&this->state); SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0d5c950c6..a5bcf5354 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1706,86 +1706,86 @@ 0x800F4F54:("Font_LoadCharNES",), 0x800F4FC0:("Font_LoadMessageBoxEndIcon",), 0x800F5004:("Font_LoadOrderedFont",), - 0x800F5090:("func_800F5090",), + 0x800F5090:("Environment_GraphCallback",), 0x800F50D4:("Environment_ZBufValToFixedPoint",), 0x800F510C:("Environment_Init",), - 0x800F5954:("func_800F5954",), + 0x800F5954:("Environment_SmoothStepToU8",), 0x800F5A8C:("Environment_LerpWeight",), - 0x800F5B10:("func_800F5B10",), + 0x800F5B10:("Environment_LerpWeightAccelDecel",), 0x800F5CD0:("Environment_UpdateSkybox",), - 0x800F6834:("func_800F6834",), - 0x800F694C:("func_800F694C",), - 0x800F6A04:("func_800F6A04",), - 0x800F6A40:("func_800F6A40",), - 0x800F6AB8:("func_800F6AB8",), - 0x800F6B44:("func_800F6B44",), + 0x800F6834:("Environment_EnableUnderwaterLights",), + 0x800F694C:("Environment_DisableUnderwaterLights",), + 0x800F6A04:("Environment_WipeRumbleRequests",), + 0x800F6A40:("Environment_UpdateSkyboxRotY",), + 0x800F6AB8:("Environment_UpdateNextDayTime",), + 0x800F6B44:("Environment_UpdateTime",), 0x800F6CEC:("func_800F6CEC",), 0x800F6EA4:("func_800F6EA4",), - 0x800F6FCC:("Kankyo_IsSceneUpsideDown",), - 0x800F6FF8:("func_800F6FF8",), - 0x800F8554:("func_800F8554",), + 0x800F6FCC:("Environment_IsSceneUpsideDown",), + 0x800F6FF8:("Environment_UpdateLights",), + 0x800F8554:("Environment_UpdateSun",), 0x800F88C4:("func_800F88C4",), 0x800F8970:("func_800F8970",), - 0x800F8A9C:("func_800F8A9C",), + 0x800F8A9C:("Environment_UpdatePostmanEvents",), 0x800F8CD4:("Environment_Update",), - 0x800F8D84:("func_800F8D84",), + 0x800F8D84:("Environment_DrawSun",), 0x800F9728:("Environment_DrawSunLensFlare",), - 0x800F9824:("func_800F9824",), - 0x800FA39C:("func_800FA39C",), - 0x800FA3C4:("func_800FA3C4",), + 0x800F9824:("Environment_DrawLensFlare",), + 0x800FA39C:("Environment_RandCentered",), + 0x800FA3C4:("Environment_DrawRainImpl",), 0x800FA9FC:("Environment_DrawRain",), - 0x800FAAB4:("func_800FAAB4",), - 0x800FAC20:("func_800FAC20",), - 0x800FAF74:("func_800FAF74",), - 0x800FB010:("func_800FB010",), + 0x800FAAB4:("Environment_ChangeLightSetting",), + 0x800FAC20:("Environment_DrawSkyboxFilters",), + 0x800FAF74:("Environment_DrawLightningFlash",), + 0x800FB010:("Environment_UpdateLightningStrike",), 0x800FB320:("Environment_AddLightningBolts",), - 0x800FB388:("func_800FB388",), - 0x800FB758:("func_800FB758",), - 0x800FB9B4:("func_800FB9B4",), + 0x800FB388:("Environment_DrawLightning",), + 0x800FB758:("Environment_PlaySceneSequence",), + 0x800FB9B4:("Environment_UpdateTimeBasedSequence",), 0x800FBCBC:("Environment_DrawCustomLensFlare",), - 0x800FBDEC:("Kankyo_InitGameOverLights",), - 0x800FBF3C:("Kankyo_FadeInGameOverLights",), - 0x800FC158:("Kankyo_FadeOutGameOverLights",), - 0x800FC3DC:("func_800FC3DC",), + 0x800FBDEC:("Environment_InitGameOverLights",), + 0x800FBF3C:("Environment_FadeInGameOverLights",), + 0x800FC158:("Environment_FadeOutGameOverLights",), + 0x800FC3DC:("Environment_UpdateRain",), 0x800FC444:("Environment_FillScreen",), 0x800FC64C:("Environment_DrawSandstorm",), - 0x800FD2B4:("func_800FD2B4",), - 0x800FD538:("func_800FD538",), + 0x800FD2B4:("Environment_AdjustLights",), + 0x800FD538:("Environment_LerpRGB8",), 0x800FD59C:("Environment_LerpAmbientColor",), 0x800FD5E0:("Environment_LerpDiffuseColor",), 0x800FD654:("Environment_LerpFogColor",), 0x800FD698:("Environment_LerpFog",), - 0x800FD720:("get_days_elapsed",), - 0x800FD730:("reset_days_elapsed",), - 0x800FD740:("get_current_day",), - 0x800FD750:("func_800FD750",), - 0x800FD768:("func_800FD768",), - 0x800FD78C:("func_800FD78C",), - 0x800FD858:("func_800FD858",), - 0x800FD928:("func_800FD928",), - 0x800FD980:("func_800FD980",), - 0x800FDAF8:("func_800FDAF8",), - 0x800FDC94:("func_800FDC94",), - 0x800FE390:("func_800FE390",), - 0x800FE3E0:("func_800FE3E0",), + 0x800FD720:("Environment_GetEventDayCount",), + 0x800FD730:("Environment_ClearEventDayCount",), + 0x800FD740:("Environment_GetTotalDays",), + 0x800FD750:("Environment_ForcePlaySequence",), + 0x800FD768:("Environment_IsForcedSequenceDisabled",), + 0x800FD78C:("Environment_PlayStormNatureAmbience",), + 0x800FD858:("Environment_StopStormNatureAmbience",), + 0x800FD928:("Environment_WarpSongLeave",), + 0x800FD980:("Environment_SetupSkyboxStars",), + 0x800FDAF8:("Environment_DrawSkyboxStar",), + 0x800FDC94:("Environment_DrawSkyboxStarsImpl",), + 0x800FE390:("Environment_Draw",), + 0x800FE3E0:("Environment_DrawSkyboxStars",), 0x800FE484:("Environment_StopTime",), 0x800FE498:("Environment_StartTime",), 0x800FE4A8:("Environment_IsTimeStopped",), - 0x800FE4B8:("func_800FE4B8",), - 0x800FE590:("func_800FE590",), + 0x800FE4B8:("Environment_GetStormState",), + 0x800FE590:("Environment_IsFinalHours",), 0x800FE5D0:("func_800FE5D0",), 0x800FE610:("func_800FE610",), - 0x800FE620:("func_800FE620",), - 0x800FE658:("func_800FE658",), + 0x800FE620:("Environment_GetTimeSpeed",), + 0x800FE658:("Environment_SetTimeJump",), 0x800FE6F8:("func_800FE6F8",), - 0x800FE778:("func_800FE778",), - 0x800FE788:("func_800FE788",), - 0x800FE798:("func_800FE798",), - 0x800FE7A8:("func_800FE7A8",), + 0x800FE778:("Environment_GetSandstormColorIndex",), + 0x800FE788:("Environment_GetNextSandstormColorIndex",), + 0x800FE798:("Environment_GetSandstormLerpScale",), + 0x800FE7A8:("Environment_LerpSandstormColors",), 0x800FE9B4:("func_800FE9B4",), 0x800FEA50:("func_800FEA50",), 0x800FEAB0:("func_800FEAB0",), - 0x800FEAC0:("func_800FEAC0",), + 0x800FEAC0:("Environment_JumpForwardInTime",), 0x800FEAF4:("func_800FEAF4",), 0x800FEC90:("Lib_MemCpy",), 0x800FECC0:("Lib_MemSet",), @@ -1849,7 +1849,7 @@ 0x801000CC:("Lib_PlaySfx_2",), 0x801000F4:("Lib_PlaySfx_AtPos",), 0x8010011C:("Lib_Vec3f_TranslateAndRotateY",), - 0x801001B8:("Lib_LerpRGB",), + 0x801001B8:("Color_RGB8_Lerp",), 0x80100448:("Math_Vec3f_StepTo",), 0x801004FC:("Lib_Nop801004FC",), 0x80100504:("Lib_SegmentedToVirtual",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6f243b124..1d3913e65 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -946,36 +946,33 @@ 0x801BDB08:("sKaleidoSetupRightPageEyeX","UNK_TYPE1","",0x1), 0x801BDB18:("sKaleidoSetupRightPageEyeZ","UNK_TYPE1","",0x1), 0x801BDB30:("kanfontOrdering","u8","[92]",0x5c), - 0x801BDB90:("D_801BDB90","f32","",0x4), - 0x801BDB94:("D_801BDB94","UNK_TYPE4","",0x4), - 0x801BDB98:("D_801BDB98","UNK_TYPE4","",0x4), - 0x801BDB9C:("D_801BDB9C","UNK_TYPE2","",0x2), - 0x801BDBA0:("D_801BDBA0","UNK_TYPE1","",0x1), - 0x801BDBA4:("D_801BDBA4","UNK_TYPE1","",0x1), + 0x801BDB90:("sSandstormLerpScale","f32","",0x4), + 0x801BDB94:("sSunScreenDepth","UNK_TYPE4","",0x4), + 0x801BDB98:("sEnvSkyboxNumStars","UNK_TYPE4","",0x4), + 0x801BDB9C:("sTimeJump","UNK_TYPE2","",0x2), + 0x801BDBA0:("sSandstormColorIndex","UNK_TYPE1","",0x1), + 0x801BDBA4:("sNextSandstormColorIndex","UNK_TYPE1","",0x1), 0x801BDBA8:("D_801BDBA8","UNK_TYPE1","",0x1), 0x801BDBB0:("gWeatherMode","u8","",0x1), - 0x801BDBB4:("D_801BDBB4","UNK_TYPE1","",0x1), - 0x801BDBB8:("D_801BDBB8","UNK_TYPE1","",0x1), - 0x801BDBBC:("D_801BDBBC","UNK_TYPE1","",0x1), + 0x801BDBB4:("gLightConfigAfterUnderwater","UNK_TYPE1","",0x1), + 0x801BDBB8:("gInterruptSongOfStorms","UNK_TYPE1","",0x1), + 0x801BDBBC:("sSkyboxIsChanging","UNK_TYPE1","",0x1), 0x801BDBC0:("D_801BDBC0","UNK_TYPE1","",0x1), 0x801BDBC4:("D_801BDBC4","UNK_TYPE1","",0x1), - 0x801BDBC8:("D_801BDBC8","u8","",0x1), - 0x801BDBCC:("D_801BDBCC","UNK_TYPE1","",0x1), - 0x801BDCF4:("D_801BDCF4","UNK_TYPE1","",0x1), - 0x801BE38E:("D_801BE38E","UNK_TYPE1","",0x1), - 0x801BE38F:("D_801BE38F","UNK_TYPE1","",0x1), - 0x801BE390:("D_801BE390","UNK_TYPE1","",0x1), - 0x801BE4D4:("D_801BE4D4","UNK_TYPE1","",0x1), - 0x801BE4F4:("D_801BE4F4","UNK_TYPE1","",0x1), - 0x801BE534:("D_801BE534","UNK_TYPE1","",0x1), - 0x801BE6D4:("D_801BE6D4","UNK_TYPE1","",0x1), - 0x801BE874:("D_801BE874","UNK_TYPE1","",0x1), - 0x801BE894:("D_801BE894","UNK_TYPE4","",0x4), - 0x801BE8BC:("D_801BE8BC","UNK_TYPE4","",0x4), - 0x801BE8E4:("D_801BE8E4","UNK_TYPE4","",0x4), - 0x801BE90C:("D_801BE90C","UNK_TYPE1","",0x1), - 0x801BE92C:("D_801BE92C","UNK_TYPE1","",0x1), - 0x801BE944:("D_801BE944","UNK_TYPE1","",0x1), + 0x801BDBC8:("gSceneSeqState","u8","",0x1), + 0x801BDBCC:("sTimeBasedLightConfigs","UNK_TYPE1","",0x1), + 0x801BDCF4:("sTimeBasedSkyboxConfigs","TimeBasedSkyboxEntry","[28][9]",0x7E0), + 0x801BE4D4:("sNormalSkyFiles","UNK_TYPE1","",0x1), + 0x801BE4F4:("sZBufValConversionTable","UNK_TYPE1","",0x1), + 0x801BE534:("sSkyboxPrimColors","UNK_TYPE1","",0x1), + 0x801BE6D4:("sSkyboxEnvColors","UNK_TYPE1","",0x1), + 0x801BE874:("sLensFlareColors","UNK_TYPE1","",0x1), + 0x801BE894:("sLensFlareScales","UNK_TYPE4","",0x4), + 0x801BE8BC:("sLensFlareAlphas","UNK_TYPE4","",0x4), + 0x801BE8E4:("sLensFlareTypes","UNK_TYPE4","",0x4), + 0x801BE90C:("sLightningTextures","UNK_TYPE1","",0x1), + 0x801BE92C:("sSandstormPrimColors","UNK_TYPE1","",0x1), + 0x801BE944:("sSandstormEnvColors","UNK_TYPE1","",0x1), 0x801BE960:("sInitChainHandlers","actor_init_var_func","[11]",0x2c), 0x801BE990:("sHeartsPrimColors","s16","[3][3]",0x12), 0x801BE9A4:("sHeartsEnvColors","s16","[3][3]",0x12), @@ -3870,45 +3867,45 @@ 0x801F4E20:("D_801F4E20","UNK_TYPE1","",0x1), 0x801F4E30:("D_801F4E30","UNK_TYPE1","",0x1), 0x801F4E31:("D_801F4E31","UNK_TYPE1","",0x1), - 0x801F4E32:("D_801F4E32","UNK_TYPE1","",0x1), - 0x801F4E38:("D_801F4E38","UNK_TYPE1","",0x1), + 0x801F4E32:("gCustomLensFlare1On","UNK_TYPE1","",0x1), + 0x801F4E38:("gCustomLensFlare1Pos","UNK_TYPE1","",0x1), 0x801F4E3C:("D_801F4E3C","UNK_TYPE1","",0x1), 0x801F4E40:("D_801F4E40","UNK_TYPE1","",0x1), 0x801F4E44:("D_801F4E44","UNK_TYPE1","",0x1), 0x801F4E48:("D_801F4E48","UNK_TYPE1","",0x1), 0x801F4E4C:("D_801F4E4C","UNK_TYPE1","",0x1), - 0x801F4E4E:("D_801F4E4E","UNK_TYPE1","",0x1), - 0x801F4E50:("D_801F4E50","UNK_TYPE1","",0x1), + 0x801F4E4E:("gCustomLensFlare2On","UNK_TYPE1","",0x1), + 0x801F4E50:("gCustomLensFlare2Pos","UNK_TYPE1","",0x1), 0x801F4E54:("D_801F4E54","UNK_TYPE1","",0x1), 0x801F4E58:("D_801F4E58","UNK_TYPE1","",0x1), 0x801F4E5C:("D_801F4E5C","UNK_TYPE1","",0x1), 0x801F4E60:("D_801F4E60","UNK_TYPE1","",0x1), 0x801F4E64:("D_801F4E64","UNK_TYPE1","",0x1), - 0x801F4E68:("D_801F4E68","UNK_TYPE1","",0x1), + 0x801F4E68:("gLightningStrike","UNK_TYPE1","",0x1), 0x801F4E70:("D_801F4E70","UNK_TYPE1","",0x1), 0x801F4E74:("D_801F4E74","UNK_TYPE1","",0x1), 0x801F4E78:("D_801F4E78","UNK_TYPE1","",0x1), - 0x801F4E7A:("D_801F4E7A","s16","",0x2), - 0x801F4E80:("D_801F4E80","UNK_TYPE1","",0x1), - 0x801F4EE0:("D_801F4EE0","UNK_TYPE1","",0x1), - 0x801F4EE8:("D_801F4EE8","UNK_TYPE1","",0x1), - 0x801F4EF8:("D_801F4EF8","UNK_TYPE1","",0x1), - 0x801F4F00:("D_801F4F00","UNK_TYPE1","",0x1), - 0x801F4F10:("D_801F4F10","UNK_TYPE1","",0x1), - 0x801F4F14:("D_801F4F14","UNK_TYPE1","",0x1), - 0x801F4F18:("D_801F4F18","UNK_TYPE1","",0x1), - 0x801F4F1C:("D_801F4F1C","UNK_TYPE1","",0x1), - 0x801F4F20:("D_801F4F20","UNK_TYPE1","",0x1), - 0x801F4F24:("D_801F4F24","UNK_TYPE1","",0x1), + 0x801F4E7A:("gSkyboxNumStars","s16","",0x2), + 0x801F4E80:("sLightningBolts","UNK_TYPE1","",0x1), + 0x801F4EE0:("sNGameOverLightNode","UNK_TYPE1","",0x1), + 0x801F4EE8:("sNGameOverLightInfo","UNK_TYPE1","",0x1), + 0x801F4EF8:("sSGameOverLightNode","UNK_TYPE1","",0x1), + 0x801F4F00:("sSGameOverLightInfo","UNK_TYPE1","",0x1), + 0x801F4F10:("sSunEnvAlpha","UNK_TYPE1","",0x1), + 0x801F4F14:("sSunColor","UNK_TYPE1","",0x1), + 0x801F4F18:("sSunScale","UNK_TYPE1","",0x1), + 0x801F4F1C:("sSunPrimAlpha","UNK_TYPE1","",0x1), + 0x801F4F20:("sSunDepthTestX","UNK_TYPE1","",0x1), + 0x801F4F24:("sSunDepthTestY","UNK_TYPE1","",0x1), 0x801F4F28:("D_801F4F28","UNK_TYPE1","",0x1), - 0x801F4F2C:("D_801F4F2C","UNK_TYPE1","",0x1), - 0x801F4F2E:("D_801F4F2E","UNK_TYPE1","",0x1), + 0x801F4F2C:("sLightningFlashAlpha","UNK_TYPE1","",0x1), + 0x801F4F2E:("sSandstormScroll","UNK_TYPE1","",0x1), 0x801F4F30:("D_801F4F30","UNK_TYPE1","",0x1), 0x801F4F31:("D_801F4F31","UNK_TYPE1","",0x1), - 0x801F4F32:("D_801F4F32","UNK_TYPE1","",0x1), + 0x801F4F32:("sEnvIsTimeStopped","UNK_TYPE1","",0x1), 0x801F4F33:("D_801F4F33","UNK_TYPE1","",0x1), - 0x801F4F34:("D_801F4F34","UNK_TYPE1","",0x1), - 0x801F4F38:("D_801F4F38","UNK_TYPE1","",0x1), + 0x801F4F34:("sGameOverLightsIntensity","UNK_TYPE1","",0x1), + 0x801F4F38:("sSkyboxStarsDList","UNK_TYPE1","",0x1), 0x801F4F40:("sBeatingHeartsDDPrim","s32","[3]",0x6), 0x801F4F48:("sBeatingHeartsDDEnv","s32","[3]",0x6), 0x801F4F50:("sHeartsDDPrim","s32","[2][3]",0xC), diff --git a/tools/namefixer.py b/tools/namefixer.py index 1fe4ce07f..12ff471aa 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -649,10 +649,64 @@ wordReplace = { "func_800A81F0": "EffectBlure_AddVertex", "func_800A8514": "EffectBlure_AddSpace", "Effect_GetParams": "Effect_GetByIndex", + "func_800FE484": "Environment_StopTime", "func_800FE498": "Environment_StartTime", "func_800FE4A8": "Environment_IsTimeStopped", "func_800F5A8C": "Environment_LerpWeight", + "func_800FD2B4": "Environment_AdjustLights", + "func_800FAAB4": "Environment_ChangeLightSetting", + "func_800FD78C": "Environment_PlayStormNatureAmbience", + "func_800FD858": "Environment_StopStormNatureAmbience", + "func_800F6834": "Environment_EnableUnderwaterLights", + "func_800F9824": "Environment_DrawLensFlare", + "func_800FE658": "Environment_SetTimeJump", + "func_800FE620": "Environment_GetTimeSpeed", + "func_800FD750": "Environment_ForcePlaySequence", + "func_800FE7A8": "Environment_LerpSandstormColors", + "func_800FB758": "Environment_PlaySceneSequence", + "func_800FE4B8": "Environment_GetStormState", + "Kankyo_FadeInGameOverLights": "Environment_FadeInGameOverLights", + "Kankyo_InitGameOverLights": "Environment_InitGameOverLights", + "Kankyo_FadeOutGameOverLights": "Environment_FadeOutGameOverLights", + "func_800F5090": "Environment_GraphCallback", + "func_800F5954": "Environment_SmoothStepToU8", + "func_800F5B10": "Environment_LerpWeightAccelDecel", + "func_800F694C": "Environment_DisableUnderwaterLights", + "func_800F6A40": "Environment_UpdateSkyboxRotY", + "func_800F6AB8": "Environment_UpdateNextDayTime", + "func_800F6B44": "Environment_UpdateTime", + "Kankyo_IsSceneUpsideDown": "Environment_IsSceneUpsideDown", + "func_800F6FF8": "Environment_UpdateLights", + "func_800F8554": "Environment_UpdateSun", + "func_800F8A9C": "Environment_UpdatePostmanEvents", + "func_800F8D84": "Environment_DrawSun", + "func_800FA39C": "Environment_RandCentered", + "func_800FA3C4": "Environment_DrawRainImpl", + "func_800FAC20": "Environment_DrawSkyboxFilters", + "func_800FAF74": "Environment_DrawLightningFlash", + "func_800FB010": "Environment_UpdateLightningStrike", + "func_800FB388": "Environment_DrawLightning", + "func_800FB9B4": "Environment_UpdateTimeBasedSequence", + "func_800FC3DC": "Environment_UpdateRain", + "func_800FD538": "Environment_LerpRGB8", + "get_days_elapsed": "Environment_GetEventDayCount", + "reset_days_elapsed": "Environment_ClearEventDayCount", + "get_current_day": "Environment_GetTotalDays", + "func_800FD768": "Environment_IsForcedSequenceDisabled", + "func_800FD928": "Environment_WarpSongLeave", + "func_800FD980": "Environment_SetupSkyboxStars", + "func_800FDAF8": "Environment_DrawSkyboxStar", + "func_800FDC94": "Environment_DrawSkyboxStarsImpl", + "func_800FE390": "Environment_Draw", + "func_800FE3E0": "Environment_DrawSkyboxStars", + "func_800FE590": "Environment_IsFinalHours", + "func_800FE778": "Environment_GetSandstormColorIndex", + "func_800FE788": "Environment_GetNextSandstormColorIndex", + "func_800FE798": "Environment_GetSandstormLerpScale", + "func_800FE7A8": "Environment_LerpSandstormColors", + "func_800FEAC0": "Environment_JumpForwardInTime", + "func_801A3F54": "Audio_SetCutsceneFlag", "func_800EA0D4": "Cutscene_StartManual", @@ -1031,6 +1085,8 @@ wordReplace = { "gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData", "gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum", + "gSaveContext.save.daysElapsed": "gSaveContext.save.eventDayCount", + "player->unk_A87": "player->exchangeItemAction", "player->exchangeItemId": "player->exchangeItemAction", "player->leftHandActor": "player->heldActor", @@ -1085,7 +1141,7 @@ wordReplace = { "globalCtx->mf_187FC": "play->billboardMtxF", "globalCtx->projectionMatrix": "play->viewProjectionMtxF", "globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[", - "globalCtx->envCtx.unk_8C": "play->envCtx.lightSettings", + "globalCtx->envCtx.unk_8C": "play->envCtx.adjLightSettings", "globalCtx->envCtx.unk_E5": "play->envCtx.fillScreen", "globalCtx->envCtx.unk_E6": "play->envCtx.screenFillColor", "globalCtx->envCtx.unk_C3": "play->envCtx.lightSettingOverride", @@ -1161,6 +1217,15 @@ wordReplace = { "play->roomCtx.unk31": "play->roomCtx.status", "play->objectCtx.status": "play->objectCtx.slots", + "play->envCtx.unk_E0": "play->envCtx.lightBlendOverride", + "play->envCtx.unk_E1": "play->envCtx.stormRequest", + "play->envCtx.unk_E2": "play->envCtx.stormState", + "play->envCtx.unk_E3": "play->envCtx.lightningState", + "play->envCtx.unk_E4": "play->envCtx.timeSeqState", + "play->envCtx.unk_F2": "play->envCtx.precipitation", + "play->envCtx.windDir": "play->envCtx.windDirection", + "play->envCtx.sunMoonDisabled": "play->envCtx.sunDisabled", + "actorCtx.unkC": "actorCtx.halfDaysBit", "actorCtx.unk1F4": "actorCtx.playerImpact.type", "actorCtx.unk1F5": "actorCtx.playerImpact.timer", @@ -1198,6 +1263,16 @@ wordReplace = { "D_801BDA9C": "gHorseIsMounted", "D_801BDAA4": "gHorsePlayedEponasSong", + "D_801BDBC8": "gSceneSeqState", + "D_801F4E32": "gCustomLensFlare1On", + "D_801F4E38": "gCustomLensFlare1Pos", + "D_801F4E4E": "gCustomLensFlare2On", + "D_801F4E50": "gCustomLensFlare2Pos", + "D_801F4E7A": "gSkyboxNumStars", + "D_801BDBB8": "gInterruptSongOfStorms", + "D_801BDBB4": "gLightConfigAfterUnderwater", + "D_801F4E68": "gLightningStrike", + # Macros "CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE", "CUR_UPG_VALUE_VOID": "GET_CUR_UPG_VALUE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 02e1bf9cd..323a6af9e 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1220,86 +1220,86 @@ asm/non_matchings/code/z_kanfont/Font_LoadChar.s,Font_LoadChar,0x800F4F40,0x5 asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54,0x1B asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11 asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23 -asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11 +asm/non_matchings/code/z_kankyo/Environment_GraphCallback.s,Environment_GraphCallback,0x800F5090,0x11 asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212 -asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E +asm/non_matchings/code/z_kankyo/Environment_SmoothStepToU8.s,Environment_SmoothStepToU8,0x800F5954,0x4E asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 -asm/non_matchings/code/z_kankyo/func_800F5B10.s,func_800F5B10,0x800F5B10,0x70 +asm/non_matchings/code/z_kankyo/Environment_LerpWeightAccelDecel.s,Environment_LerpWeightAccelDecel,0x800F5B10,0x70 asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s,Environment_UpdateSkybox,0x800F5CD0,0x2D9 -asm/non_matchings/code/z_kankyo/func_800F6834.s,func_800F6834,0x800F6834,0x46 -asm/non_matchings/code/z_kankyo/func_800F694C.s,func_800F694C,0x800F694C,0x2E +asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s,Environment_EnableUnderwaterLights,0x800F6834,0x46 +asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s,Environment_DisableUnderwaterLights,0x800F694C,0x2E asm/non_matchings/code/z_kankyo/func_800F6A04.s,func_800F6A04,0x800F6A04,0xF -asm/non_matchings/code/z_kankyo/func_800F6A40.s,func_800F6A40,0x800F6A40,0x1E -asm/non_matchings/code/z_kankyo/func_800F6AB8.s,func_800F6AB8,0x800F6AB8,0x23 -asm/non_matchings/code/z_kankyo/func_800F6B44.s,func_800F6B44,0x800F6B44,0x6A +asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s,Environment_UpdateSkyboxRotY,0x800F6A40,0x1E +asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s,Environment_UpdateNextDayTime,0x800F6AB8,0x23 +asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s,Environment_UpdateTime,0x800F6B44,0x6A asm/non_matchings/code/z_kankyo/func_800F6CEC.s,func_800F6CEC,0x800F6CEC,0x6E asm/non_matchings/code/z_kankyo/func_800F6EA4.s,func_800F6EA4,0x800F6EA4,0x4A -asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s,Kankyo_IsSceneUpsideDown,0x800F6FCC,0xB -asm/non_matchings/code/z_kankyo/func_800F6FF8.s,func_800F6FF8,0x800F6FF8,0x557 -asm/non_matchings/code/z_kankyo/func_800F8554.s,func_800F8554,0x800F8554,0xDC +asm/non_matchings/code/z_kankyo/Environment_IsSceneUpsideDown.s,Environment_IsSceneUpsideDown,0x800F6FCC,0xB +asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s,Environment_UpdateLights,0x800F6FF8,0x557 +asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s,Environment_UpdateSun,0x800F8554,0xDC asm/non_matchings/code/z_kankyo/func_800F88C4.s,func_800F88C4,0x800F88C4,0x2B asm/non_matchings/code/z_kankyo/func_800F8970.s,func_800F8970,0x800F8970,0x4B -asm/non_matchings/code/z_kankyo/func_800F8A9C.s,func_800F8A9C,0x800F8A9C,0x8E +asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s,Environment_UpdatePostmanEvents,0x800F8A9C,0x8E asm/non_matchings/code/z_kankyo/Environment_Update.s,Environment_Update,0x800F8CD4,0x2C -asm/non_matchings/code/z_kankyo/func_800F8D84.s,func_800F8D84,0x800F8D84,0x269 +asm/non_matchings/code/z_kankyo/Environment_DrawSun.s,Environment_DrawSun,0x800F8D84,0x269 asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s,Environment_DrawSunLensFlare,0x800F9728,0x3F -asm/non_matchings/code/z_kankyo/func_800F9824.s,func_800F9824,0x800F9824,0x2DE -asm/non_matchings/code/z_kankyo/func_800FA39C.s,func_800FA39C,0x800FA39C,0xA -asm/non_matchings/code/z_kankyo/func_800FA3C4.s,func_800FA3C4,0x800FA3C4,0x18E +asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s,Environment_DrawLensFlare,0x800F9824,0x2DE +asm/non_matchings/code/z_kankyo/Environment_RandCentered.s,Environment_RandCentered,0x800FA39C,0xA +asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s,Environment_DrawRainImpl,0x800FA3C4,0x18E asm/non_matchings/code/z_kankyo/Environment_DrawRain.s,Environment_DrawRain,0x800FA9FC,0x2E -asm/non_matchings/code/z_kankyo/func_800FAAB4.s,func_800FAAB4,0x800FAAB4,0x5B -asm/non_matchings/code/z_kankyo/func_800FAC20.s,func_800FAC20,0x800FAC20,0xD5 -asm/non_matchings/code/z_kankyo/func_800FAF74.s,func_800FAF74,0x800FAF74,0x27 -asm/non_matchings/code/z_kankyo/func_800FB010.s,func_800FB010,0x800FB010,0xC4 +asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s,Environment_ChangeLightSetting,0x800FAAB4,0x5B +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s,Environment_DrawSkyboxFilters,0x800FAC20,0xD5 +asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s,Environment_DrawLightningFlash,0x800FAF74,0x27 +asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s,Environment_UpdateLightningStrike,0x800FB010,0xC4 asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s,Environment_AddLightningBolts,0x800FB320,0x1A -asm/non_matchings/code/z_kankyo/func_800FB388.s,func_800FB388,0x800FB388,0xF4 -asm/non_matchings/code/z_kankyo/func_800FB758.s,func_800FB758,0x800FB758,0x97 -asm/non_matchings/code/z_kankyo/func_800FB9B4.s,func_800FB9B4,0x800FB9B4,0xC2 +asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s,Environment_DrawLightning,0x800FB388,0xF4 +asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s,Environment_PlaySceneSequence,0x800FB758,0x97 +asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s,Environment_UpdateTimeBasedSequence,0x800FB9B4,0xC2 asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s,Environment_DrawCustomLensFlare,0x800FBCBC,0x4C -asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s,Kankyo_InitGameOverLights,0x800FBDEC,0x54 -asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s,Kankyo_FadeInGameOverLights,0x800FBF3C,0x87 -asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s,Kankyo_FadeOutGameOverLights,0x800FC158,0xA1 -asm/non_matchings/code/z_kankyo/func_800FC3DC.s,func_800FC3DC,0x800FC3DC,0x1A +asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s,Environment_InitGameOverLights,0x800FBDEC,0x54 +asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s,Environment_FadeInGameOverLights,0x800FBF3C,0x87 +asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s,Environment_FadeOutGameOverLights,0x800FC158,0xA1 +asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s,Environment_UpdateRain,0x800FC3DC,0x1A asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,0x800FC444,0x82 asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s,Environment_DrawSandstorm,0x800FC64C,0x31A -asm/non_matchings/code/z_kankyo/func_800FD2B4.s,func_800FD2B4,0x800FD2B4,0xA1 -asm/non_matchings/code/z_kankyo/func_800FD538.s,func_800FD538,0x800FD538,0x19 +asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s,Environment_AdjustLights,0x800FD2B4,0xA1 +asm/non_matchings/code/z_kankyo/Environment_LerpRGB8.s,Environment_LerpRGB8,0x800FD538,0x19 asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s,Environment_LerpAmbientColor,0x800FD59C,0x11 asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s,Environment_LerpDiffuseColor,0x800FD5E0,0x1D asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s,Environment_LerpFogColor,0x800FD654,0x11 asm/non_matchings/code/z_kankyo/Environment_LerpFog.s,Environment_LerpFog,0x800FD698,0x22 -asm/non_matchings/code/z_kankyo/get_days_elapsed.s,get_days_elapsed,0x800FD720,0x4 -asm/non_matchings/code/z_kankyo/reset_days_elapsed.s,reset_days_elapsed,0x800FD730,0x4 -asm/non_matchings/code/z_kankyo/get_current_day.s,get_current_day,0x800FD740,0x4 -asm/non_matchings/code/z_kankyo/func_800FD750.s,func_800FD750,0x800FD750,0x6 -asm/non_matchings/code/z_kankyo/func_800FD768.s,func_800FD768,0x800FD768,0x9 -asm/non_matchings/code/z_kankyo/func_800FD78C.s,func_800FD78C,0x800FD78C,0x33 -asm/non_matchings/code/z_kankyo/func_800FD858.s,func_800FD858,0x800FD858,0x34 -asm/non_matchings/code/z_kankyo/func_800FD928.s,func_800FD928,0x800FD928,0x16 -asm/non_matchings/code/z_kankyo/func_800FD980.s,func_800FD980,0x800FD980,0x5E -asm/non_matchings/code/z_kankyo/func_800FDAF8.s,func_800FDAF8,0x800FDAF8,0x67 -asm/non_matchings/code/z_kankyo/func_800FDC94.s,func_800FDC94,0x800FDC94,0x1BF -asm/non_matchings/code/z_kankyo/func_800FE390.s,func_800FE390,0x800FE390,0x14 -asm/non_matchings/code/z_kankyo/func_800FE3E0.s,func_800FE3E0,0x800FE3E0,0x29 +asm/non_matchings/code/z_kankyo/Environment_GetEventDayCount.s,Environment_GetEventDayCount,0x800FD720,0x4 +asm/non_matchings/code/z_kankyo/Environment_ClearEventDayCount.s,Environment_ClearEventDayCount,0x800FD730,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetTotalDays.s,Environment_GetTotalDays,0x800FD740,0x4 +asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s,Environment_ForcePlaySequence,0x800FD750,0x6 +asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s,Environment_IsForcedSequenceDisabled,0x800FD768,0x9 +asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s,Environment_PlayStormNatureAmbience,0x800FD78C,0x33 +asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s,Environment_StopStormNatureAmbience,0x800FD858,0x34 +asm/non_matchings/code/z_kankyo/Environment_WarpSongLeave.s,Environment_WarpSongLeave,0x800FD928,0x16 +asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s,Environment_SetupSkyboxStars,0x800FD980,0x5E +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s,Environment_DrawSkyboxStar,0x800FDAF8,0x67 +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s,Environment_DrawSkyboxStarsImpl,0x800FDC94,0x1BF +asm/non_matchings/code/z_kankyo/Environment_Draw.s,Environment_Draw,0x800FE390,0x14 +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s,Environment_DrawSkyboxStars,0x800FE3E0,0x29 asm/non_matchings/code/z_kankyo/Environment_StopTime.s,Environment_StopTime,0x800FE484,0x5 asm/non_matchings/code/z_kankyo/Environment_StartTime.s,Environment_StartTime,0x800FE498,0x4 asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s,Environment_IsTimeStopped,0x800FE4A8,0x4 -asm/non_matchings/code/z_kankyo/func_800FE4B8.s,func_800FE4B8,0x800FE4B8,0x36 -asm/non_matchings/code/z_kankyo/func_800FE590.s,func_800FE590,0x800FE590,0x10 +asm/non_matchings/code/z_kankyo/Environment_GetStormState.s,Environment_GetStormState,0x800FE4B8,0x36 +asm/non_matchings/code/z_kankyo/Environment_IsFinalHours.s,Environment_IsFinalHours,0x800FE590,0x10 asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10 asm/non_matchings/code/z_kankyo/func_800FE610.s,func_800FE610,0x800FE610,0x4 -asm/non_matchings/code/z_kankyo/func_800FE620.s,func_800FE620,0x800FE620,0xE -asm/non_matchings/code/z_kankyo/func_800FE658.s,func_800FE658,0x800FE658,0x28 +asm/non_matchings/code/z_kankyo/Environment_GetTimeSpeed.s,Environment_GetTimeSpeed,0x800FE620,0xE +asm/non_matchings/code/z_kankyo/Environment_SetTimeJump.s,Environment_SetTimeJump,0x800FE658,0x28 asm/non_matchings/code/z_kankyo/func_800FE6F8.s,func_800FE6F8,0x800FE6F8,0x20 -asm/non_matchings/code/z_kankyo/func_800FE778.s,func_800FE778,0x800FE778,0x4 -asm/non_matchings/code/z_kankyo/func_800FE788.s,func_800FE788,0x800FE788,0x4 -asm/non_matchings/code/z_kankyo/func_800FE798.s,func_800FE798,0x800FE798,0x4 -asm/non_matchings/code/z_kankyo/func_800FE7A8.s,func_800FE7A8,0x800FE7A8,0x83 +asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s,Environment_GetSandstormColorIndex,0x800FE778,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s,Environment_GetNextSandstormColorIndex,0x800FE788,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s,Environment_GetSandstormLerpScale,0x800FE798,0x4 +asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s,Environment_LerpSandstormColors,0x800FE7A8,0x83 asm/non_matchings/code/z_kankyo/func_800FE9B4.s,func_800FE9B4,0x800FE9B4,0x27 asm/non_matchings/code/z_kankyo/func_800FEA50.s,func_800FEA50,0x800FEA50,0x18 asm/non_matchings/code/z_kankyo/func_800FEAB0.s,func_800FEAB0,0x800FEAB0,0x4 -asm/non_matchings/code/z_kankyo/func_800FEAC0.s,func_800FEAC0,0x800FEAC0,0xD +asm/non_matchings/code/z_kankyo/Environment_JumpForwardInTime.s,Environment_JumpForwardInTime,0x800FEAC0,0xD asm/non_matchings/code/z_kankyo/func_800FEAF4.s,func_800FEAF4,0x800FEAF4,0x67 asm/non_matchings/code/z_lib/Lib_MemCpy.s,Lib_MemCpy,0x800FEC90,0xC asm/non_matchings/code/z_lib/Lib_MemSet.s,Lib_MemSet,0x800FECC0,0x21 @@ -1363,7 +1363,7 @@ asm/non_matchings/code/z_lib/Lib_PlaySfx.s,Lib_PlaySfx,0x801000A4,0xA asm/non_matchings/code/z_lib/Lib_PlaySfx_2.s,Lib_PlaySfx_2,0x801000CC,0xA asm/non_matchings/code/z_lib/Lib_PlaySfx_AtPos.s,Lib_PlaySfx_AtPos,0x801000F4,0xA asm/non_matchings/code/z_lib/Lib_Vec3f_TranslateAndRotateY.s,Lib_Vec3f_TranslateAndRotateY,0x8010011C,0x27 -asm/non_matchings/code/z_lib/Lib_LerpRGB.s,Lib_LerpRGB,0x801001B8,0xA4 +asm/non_matchings/code/z_lib/Color_RGB8_Lerp.s,Color_RGB8_Lerp,0x801001B8,0xA4 asm/non_matchings/code/z_lib/Math_Vec3f_StepTo.s,Math_Vec3f_StepTo,0x80100448,0x2D asm/non_matchings/code/z_lib/Lib_Nop801004FC.s,Lib_Nop801004FC,0x801004FC,0x2 asm/non_matchings/code/z_lib/Lib_SegmentedToVirtual.s,Lib_SegmentedToVirtual,0x80100504,0xE From ac8d49ea6f2a2630f3c23ad28acafa3fc8c9d8ad Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 5 Oct 2023 06:19:30 -0700 Subject: [PATCH 121/121] Skeleton and shin name cleanup (#1413) * Skeleton and shin name cleanup * Use ANI_LIMB_MAX --- assets/xml/objects/object_ani.xml | 10 +++++----- assets/xml/objects/object_bigpo.xml | 2 +- assets/xml/objects/object_ds2n.xml | 10 +++++----- assets/xml/objects/object_famos.xml | 2 +- assets/xml/objects/object_hs.xml | 2 +- assets/xml/objects/object_mnk.xml | 6 +++--- assets/xml/objects/object_niw.xml | 2 +- assets/xml/objects/object_tro.xml | 2 +- assets/xml/objects/object_yb.xml | 10 +++++----- assets/xml/objects/object_zl4.xml | 2 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 2 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 4 ++-- .../actors/ovl_En_Attack_Niw/z_en_attack_niw.c | 2 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 2 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 2 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 2 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 6 +++--- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 2 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 4 ++-- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- 23 files changed, 41 insertions(+), 41 deletions(-) diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml index 2900ff723..8bc8aa5e3 100644 --- a/assets/xml/objects/object_ani.xml +++ b/assets/xml/objects/object_ani.xml @@ -8,10 +8,10 @@ - + - + @@ -21,7 +21,7 @@ - + @@ -30,10 +30,10 @@ - + - + diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml index 858ad4a87..46c79310e 100644 --- a/assets/xml/objects/object_bigpo.xml +++ b/assets/xml/objects/object_bigpo.xml @@ -58,6 +58,6 @@ - + diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml index 52284c224..7c04da8bf 100644 --- a/assets/xml/objects/object_ds2n.xml +++ b/assets/xml/objects/object_ds2n.xml @@ -14,10 +14,10 @@ - + - + @@ -70,10 +70,10 @@ - + - + @@ -86,7 +86,7 @@ - + diff --git a/assets/xml/objects/object_famos.xml b/assets/xml/objects/object_famos.xml index 186e2b59b..f62604424 100644 --- a/assets/xml/objects/object_famos.xml +++ b/assets/xml/objects/object_famos.xml @@ -22,7 +22,7 @@ - + diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml index d4bf08223..c5ac723f8 100644 --- a/assets/xml/objects/object_hs.xml +++ b/assets/xml/objects/object_hs.xml @@ -46,6 +46,6 @@ - + diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml index e80bcfba2..794069ee7 100644 --- a/assets/xml/objects/object_mnk.xml +++ b/assets/xml/objects/object_mnk.xml @@ -23,7 +23,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -126,6 +126,6 @@ - + diff --git a/assets/xml/objects/object_niw.xml b/assets/xml/objects/object_niw.xml index 157d2b302..db47a439f 100644 --- a/assets/xml/objects/object_niw.xml +++ b/assets/xml/objects/object_niw.xml @@ -35,6 +35,6 @@ - + diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml index a794217b4..eb1ba9984 100644 --- a/assets/xml/objects/object_tro.xml +++ b/assets/xml/objects/object_tro.xml @@ -13,6 +13,6 @@ - + diff --git a/assets/xml/objects/object_yb.xml b/assets/xml/objects/object_yb.xml index d00a61170..6c0ae86df 100644 --- a/assets/xml/objects/object_yb.xml +++ b/assets/xml/objects/object_yb.xml @@ -8,10 +8,10 @@ - + - + @@ -39,10 +39,10 @@ - + - + @@ -57,6 +57,6 @@ - + diff --git a/assets/xml/objects/object_zl4.xml b/assets/xml/objects/object_zl4.xml index 73ebb8606..667ca5f21 100644 --- a/assets/xml/objects/object_zl4.xml +++ b/assets/xml/objects/object_zl4.xml @@ -93,7 +93,7 @@ - + diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index a5c678647..88c0f4280 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -119,7 +119,7 @@ void DmZl_Init(Actor* thisx, PlayState* play) { this->actor.targetArrowOffset = 1000.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); // these three set to NULL should mean they are dynamically allocated - SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skeleton, NULL, NULL, NULL, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skel, NULL, NULL, NULL, 0); DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmZl_DoNothing; 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 d8b87a81f..d27a8a93d 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -117,8 +117,8 @@ void EnAni_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, - this->morphTable, ANI_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable, + ANI_LIMB_MAX); Animation_PlayOnce(&this->skelAnime, &gAniStandingNormalAnim); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit); 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 daba8eea6..e8c4c9fa2 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 @@ -43,7 +43,7 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); // probably copy pasted from EnNiw, which has this same code, but AttackNiw has no params 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 900aed401..e754ff5b8 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -201,7 +201,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { return; } - SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkeleton, &gBigPoeFloatAnim, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkel, &gBigPoeFloatAnim, this->jointTable, this->morphTable, BIG_POE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&thisx->colChkInfo, &sDamageTable, &sColChkInfoInit); diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 25a54ec4a..4039386e0 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -136,7 +136,7 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { EnDnh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkel, NULL, this->jointTable, this->morphTable, KOUME_KIOSK_LIMB_MAX); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENDNH_ANIM_HEAD_MOVING); this->actor.shape.yOffset = 1100.0f; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 50db36063..8287c0680 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -71,7 +71,7 @@ void EnDs2n_Init(Actor* thisx, PlayState* play) { EnDs2n* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkeleton, &gDs2nIdleAnim, NULL, NULL, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkel, &gDs2nIdleAnim, NULL, NULL, 0); EnDs2n_SetupIdle(this); } 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 f99f179af..8219a23a3 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -173,7 +173,7 @@ void EnFamos_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawSquare, 30.0f); - SkelAnime_Init(play, &this->skelAnime, &gFamosSkeleton, &gFamosIdleAnim, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gFamosSkel, &gFamosIdleAnim, this->jointTable, this->morphTable, FAMOS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); 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 b665b5d02..ef991495a 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -74,7 +74,7 @@ void EnHs_Init(Actor* thisx, PlayState* play) { EnHs* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkeleton, &gHsIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkel, &gHsIdleAnim, this->jointTable, this->morphTable, OBJECT_HS_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &gHsIdleAnim); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index bf6c611f6..82e25a95d 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -249,7 +249,7 @@ void EnMnk_MonkeyTiedUp_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnMnk_MonkeyTiedUp_Wait; this->picto.actor.flags |= ACTOR_FLAG_2000000; - SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkeleton, &object_mnk_Anim_003584, + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkel, &object_mnk_Anim_003584, this->propJointTable, this->propMorphTable, OBJECT_MNK_1_LIMB_MAX); this->cueId = 4; this->animIndex = MONKEY_TIEDUP_ANIM_NONE; @@ -277,7 +277,7 @@ void EnMnk_MonkeyHanging_Init(Actor* thisx, PlayState* play) { func_800BC154(play, &play->actorCtx, &this->picto.actor, ACTORCAT_PROP); this->actionFunc = EnMnk_MonkeyHanging_StruggleBeforeDunk; this->picto.actor.textId = 0x8E8; - SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkeleton, &gMonkeyHangingStruggleAnim, + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkel, &gMonkeyHangingStruggleAnim, this->propJointTable, this->propMorphTable, OBJECT_MNK_3_LIMB_MAX); EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_STRUGGLE, ANIMMODE_LOOP, 0.0f); this->unk_3E0 = 5; @@ -297,7 +297,7 @@ void EnMnk_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->picto.actor, 0.012f); ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 12.0f); this->actionFunc = EnMnk_DoNothing; - SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkeleton, &object_mnk_Anim_0105DC, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkel, &object_mnk_Anim_0105DC, this->jointTable, this->morphTable, OBJECT_MNK_2_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_0105DC); this->flags = 0; 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 fa93cfb26..fa8771862 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -108,7 +108,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Math_Vec3f_Copy(&this->unk2A4, &this->actor.world.pos); Math_Vec3f_Copy(&this->unk2B0, &this->actor.world.pos); 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 6ee4a5f80..ed8edb377 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -250,7 +250,7 @@ void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectIndex].segment); - SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Animation_Change(&this->niwSkeleton, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, 0.0f); diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 45f2b485c..368052dfc 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1395,8 +1395,8 @@ void EnOssan_CuriosityShopMan_Init(EnOssan* this, PlayState* play) { } void EnOssan_PartTimer_Init(EnOssan* this, PlayState* play) { - SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, - this->morphTable, 16); + SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable, + ANI_LIMB_MAX); this->actor.draw = EnOssan_PartTimer_Draw; } 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 42bc9ffb4..b39a77408 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -88,7 +88,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, EnYb_ActorShadowFunc, 20.0f); // @bug this alignment is because of player animations, but should be using ALIGN16 - SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkeleton, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF, + SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkel, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF, (uintptr_t)this->morphTable & ~0xF, YB_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &object_yb_Anim_000200);